@daikin-oss/design-system-web-components 1.2.0 → 1.3.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 (245) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/dist/cjs/base/dds-element.cjs +1 -1
  3. package/dist/cjs/components/accordion-item/daikin-accordion-item.cjs +1 -0
  4. package/dist/cjs/components/avatar/daikin-avatar.cjs +1 -0
  5. package/dist/cjs/components/calendar/daikin-calendar.cjs +2 -0
  6. package/dist/cjs/components/card-header/daikin-card-header.cjs +1 -1
  7. package/dist/cjs/components/carousel/daikin-carousel.cjs +7 -3
  8. package/dist/cjs/components/carousel-item/daikin-carousel-item.cjs +2 -2
  9. package/dist/cjs/components/chip/daikin-chip.cjs +106 -0
  10. package/dist/cjs/components/chip/daikin-chip.d.cts +36 -0
  11. package/dist/cjs/components/chip/index.cjs +7 -0
  12. package/dist/cjs/components/chip/index.d.cts +1 -0
  13. package/dist/cjs/components/combobox/daikin-combobox.cjs +604 -0
  14. package/dist/cjs/components/combobox/daikin-combobox.d.cts +134 -0
  15. package/dist/cjs/components/combobox/index.cjs +8 -0
  16. package/dist/cjs/components/combobox/index.d.cts +1 -0
  17. package/dist/cjs/components/date-picker/daikin-date-picker.cjs +31 -16
  18. package/dist/cjs/components/date-picker/daikin-date-picker.d.cts +2 -1
  19. package/dist/cjs/components/dropdown/daikin-dropdown.cjs +52 -37
  20. package/dist/cjs/components/dropdown/daikin-dropdown.d.cts +4 -3
  21. package/dist/cjs/components/icon/daikin-icon.cjs +117 -12
  22. package/dist/cjs/components/icon/daikin-icon.d.cts +141 -9
  23. package/dist/cjs/components/icon/icons.json.cjs +5 -1
  24. package/dist/cjs/components/icon-button/daikin-icon-button.cjs +12 -2
  25. package/dist/cjs/components/icon-button/daikin-icon-button.d.cts +8 -0
  26. package/dist/cjs/components/index.cjs +36 -0
  27. package/dist/cjs/components/index.d.cts +5 -0
  28. package/dist/cjs/components/input-group/daikin-input-group.cjs +1 -1
  29. package/dist/cjs/components/input-group/daikin-input-group.d.cts +40 -13
  30. package/dist/cjs/components/list-item/daikin-list-item.cjs +2 -2
  31. package/dist/cjs/components/modal-header/daikin-modal-header.cjs +1 -1
  32. package/dist/cjs/components/progress-bar/daikin-progress-bar.cjs +3 -3
  33. package/dist/cjs/components/select/daikin-select.cjs +6 -1
  34. package/dist/cjs/components/tab/daikin-tab.cjs +1 -0
  35. package/dist/cjs/components/table/daikin-table.cjs +33 -12
  36. package/dist/cjs/components/table/daikin-table.d.cts +67 -34
  37. package/dist/cjs/components/table-header-cell/daikin-table-header-cell.cjs +31 -6
  38. package/dist/cjs/components/table-header-cell/daikin-table-header-cell.d.cts +7 -0
  39. package/dist/cjs/components/text-field/daikin-text-field.cjs +191 -56
  40. package/dist/cjs/components/text-field/daikin-text-field.d.cts +32 -3
  41. package/dist/cjs/components/text-field/number-utils.cjs +61 -0
  42. package/dist/cjs/components/text-field/number-utils.d.cts +26 -0
  43. package/dist/cjs/components/text-masked-field/daikin-text-masked-field.cjs +312 -0
  44. package/dist/cjs/components/text-masked-field/daikin-text-masked-field.d.cts +136 -0
  45. package/dist/cjs/components/text-masked-field/index.cjs +7 -0
  46. package/dist/cjs/components/text-masked-field/index.d.cts +1 -0
  47. package/dist/cjs/components/time-picker/daikin-time-picker.cjs +577 -0
  48. package/dist/cjs/components/time-picker/daikin-time-picker.d.cts +165 -0
  49. package/dist/cjs/components/time-picker/index.cjs +17 -0
  50. package/dist/cjs/components/time-picker/index.d.cts +1 -0
  51. package/dist/cjs/components/toast-notification-manager/daikin-toast-notification-manager.d.cts +1 -1
  52. package/dist/cjs/components/tooltip/daikin-tooltip.cjs +12 -2
  53. package/dist/cjs/components/tooltip/daikin-tooltip.d.cts +8 -1
  54. package/dist/cjs/controllers/floating-ui-auto-update.cjs +22 -4
  55. package/dist/cjs/controllers/floating-ui-auto-update.d.cts +12 -0
  56. package/dist/cjs/icon-registry.cjs +170 -0
  57. package/dist/cjs/icon-registry.d.cts +120 -0
  58. package/dist/cjs/index.cjs +39 -0
  59. package/dist/cjs/index.d.cts +1 -0
  60. package/dist/cjs/tailwind.css.cjs +1 -1
  61. package/dist/cjs/utils/notification-common.d.cts +1 -1
  62. package/dist/cjs-dev/base/dds-element.cjs +1 -1
  63. package/dist/cjs-dev/components/accordion-item/daikin-accordion-item.cjs +1 -0
  64. package/dist/cjs-dev/components/avatar/daikin-avatar.cjs +1 -0
  65. package/dist/cjs-dev/components/calendar/daikin-calendar.cjs +2 -0
  66. package/dist/cjs-dev/components/card-header/daikin-card-header.cjs +1 -1
  67. package/dist/cjs-dev/components/carousel/daikin-carousel.cjs +7 -3
  68. package/dist/cjs-dev/components/carousel-item/daikin-carousel-item.cjs +2 -2
  69. package/dist/cjs-dev/components/chip/daikin-chip.cjs +106 -0
  70. package/dist/cjs-dev/components/chip/daikin-chip.d.cts +36 -0
  71. package/dist/cjs-dev/components/chip/index.cjs +7 -0
  72. package/dist/cjs-dev/components/chip/index.d.cts +1 -0
  73. package/dist/cjs-dev/components/combobox/daikin-combobox.cjs +604 -0
  74. package/dist/cjs-dev/components/combobox/daikin-combobox.d.cts +134 -0
  75. package/dist/cjs-dev/components/combobox/index.cjs +8 -0
  76. package/dist/cjs-dev/components/combobox/index.d.cts +1 -0
  77. package/dist/cjs-dev/components/date-picker/daikin-date-picker.cjs +31 -16
  78. package/dist/cjs-dev/components/date-picker/daikin-date-picker.d.cts +2 -1
  79. package/dist/cjs-dev/components/dropdown/daikin-dropdown.cjs +52 -37
  80. package/dist/cjs-dev/components/dropdown/daikin-dropdown.d.cts +4 -3
  81. package/dist/cjs-dev/components/icon/daikin-icon.cjs +141 -16
  82. package/dist/cjs-dev/components/icon/daikin-icon.d.cts +141 -9
  83. package/dist/cjs-dev/components/icon/icons.json.cjs +5 -1
  84. package/dist/cjs-dev/components/icon-button/daikin-icon-button.cjs +12 -2
  85. package/dist/cjs-dev/components/icon-button/daikin-icon-button.d.cts +8 -0
  86. package/dist/cjs-dev/components/index.cjs +36 -0
  87. package/dist/cjs-dev/components/index.d.cts +5 -0
  88. package/dist/cjs-dev/components/input-group/daikin-input-group.cjs +1 -1
  89. package/dist/cjs-dev/components/input-group/daikin-input-group.d.cts +40 -13
  90. package/dist/cjs-dev/components/list-item/daikin-list-item.cjs +2 -2
  91. package/dist/cjs-dev/components/modal-header/daikin-modal-header.cjs +1 -1
  92. package/dist/cjs-dev/components/progress-bar/daikin-progress-bar.cjs +3 -3
  93. package/dist/cjs-dev/components/select/daikin-select.cjs +6 -1
  94. package/dist/cjs-dev/components/tab/daikin-tab.cjs +1 -0
  95. package/dist/cjs-dev/components/table/daikin-table.cjs +36 -15
  96. package/dist/cjs-dev/components/table/daikin-table.d.cts +67 -34
  97. package/dist/cjs-dev/components/table-header-cell/daikin-table-header-cell.cjs +31 -6
  98. package/dist/cjs-dev/components/table-header-cell/daikin-table-header-cell.d.cts +7 -0
  99. package/dist/cjs-dev/components/text-field/daikin-text-field.cjs +191 -56
  100. package/dist/cjs-dev/components/text-field/daikin-text-field.d.cts +32 -3
  101. package/dist/cjs-dev/components/text-field/number-utils.cjs +64 -0
  102. package/dist/cjs-dev/components/text-field/number-utils.d.cts +26 -0
  103. package/dist/cjs-dev/components/text-masked-field/daikin-text-masked-field.cjs +312 -0
  104. package/dist/cjs-dev/components/text-masked-field/daikin-text-masked-field.d.cts +136 -0
  105. package/dist/cjs-dev/components/text-masked-field/index.cjs +7 -0
  106. package/dist/cjs-dev/components/text-masked-field/index.d.cts +1 -0
  107. package/dist/cjs-dev/components/time-picker/daikin-time-picker.cjs +589 -0
  108. package/dist/cjs-dev/components/time-picker/daikin-time-picker.d.cts +165 -0
  109. package/dist/cjs-dev/components/time-picker/index.cjs +17 -0
  110. package/dist/cjs-dev/components/time-picker/index.d.cts +1 -0
  111. package/dist/cjs-dev/components/toast-notification-manager/daikin-toast-notification-manager.d.cts +1 -1
  112. package/dist/cjs-dev/components/tooltip/daikin-tooltip.cjs +12 -2
  113. package/dist/cjs-dev/components/tooltip/daikin-tooltip.d.cts +8 -1
  114. package/dist/cjs-dev/controllers/floating-ui-auto-update.cjs +22 -4
  115. package/dist/cjs-dev/controllers/floating-ui-auto-update.d.cts +12 -0
  116. package/dist/cjs-dev/icon-registry.cjs +170 -0
  117. package/dist/cjs-dev/icon-registry.d.cts +120 -0
  118. package/dist/cjs-dev/index.cjs +39 -0
  119. package/dist/cjs-dev/index.d.cts +1 -0
  120. package/dist/cjs-dev/tailwind.css.cjs +1 -1
  121. package/dist/cjs-dev/utils/notification-common.d.cts +1 -1
  122. package/dist/es/base/dds-element.js +1 -1
  123. package/dist/es/components/accordion-item/daikin-accordion-item.js +1 -0
  124. package/dist/es/components/avatar/daikin-avatar.js +1 -0
  125. package/dist/es/components/calendar/daikin-calendar.js +2 -0
  126. package/dist/es/components/card-header/daikin-card-header.js +1 -1
  127. package/dist/es/components/carousel/daikin-carousel.js +7 -3
  128. package/dist/es/components/carousel-item/daikin-carousel-item.js +2 -2
  129. package/dist/es/components/chip/daikin-chip.d.ts +36 -0
  130. package/dist/es/components/chip/daikin-chip.js +107 -0
  131. package/dist/es/components/chip/index.d.ts +1 -0
  132. package/dist/es/components/chip/index.js +4 -0
  133. package/dist/es/components/combobox/daikin-combobox.d.ts +134 -0
  134. package/dist/es/components/combobox/daikin-combobox.js +605 -0
  135. package/dist/es/components/combobox/index.d.ts +1 -0
  136. package/dist/es/components/combobox/index.js +5 -0
  137. package/dist/es/components/date-picker/daikin-date-picker.d.ts +2 -1
  138. package/dist/es/components/date-picker/daikin-date-picker.js +32 -17
  139. package/dist/es/components/dropdown/daikin-dropdown.d.ts +4 -3
  140. package/dist/es/components/dropdown/daikin-dropdown.js +52 -37
  141. package/dist/es/components/icon/daikin-icon.d.ts +141 -9
  142. package/dist/es/components/icon/daikin-icon.js +118 -13
  143. package/dist/es/components/icon/icons.json.js +4 -0
  144. package/dist/es/components/icon-button/daikin-icon-button.d.ts +8 -0
  145. package/dist/es/components/icon-button/daikin-icon-button.js +12 -2
  146. package/dist/es/components/index.d.ts +5 -0
  147. package/dist/es/components/index.js +22 -1
  148. package/dist/es/components/input-group/daikin-input-group.d.ts +40 -13
  149. package/dist/es/components/input-group/daikin-input-group.js +1 -1
  150. package/dist/es/components/list-item/daikin-list-item.js +2 -2
  151. package/dist/es/components/modal-header/daikin-modal-header.js +1 -1
  152. package/dist/es/components/progress-bar/daikin-progress-bar.js +3 -3
  153. package/dist/es/components/select/daikin-select.js +6 -1
  154. package/dist/es/components/tab/daikin-tab.js +1 -0
  155. package/dist/es/components/table/daikin-table.d.ts +67 -34
  156. package/dist/es/components/table/daikin-table.js +33 -12
  157. package/dist/es/components/table-header-cell/daikin-table-header-cell.d.ts +7 -0
  158. package/dist/es/components/table-header-cell/daikin-table-header-cell.js +31 -6
  159. package/dist/es/components/text-field/daikin-text-field.d.ts +32 -3
  160. package/dist/es/components/text-field/daikin-text-field.js +191 -56
  161. package/dist/es/components/text-field/number-utils.d.ts +26 -0
  162. package/dist/es/components/text-field/number-utils.js +61 -0
  163. package/dist/es/components/text-masked-field/daikin-text-masked-field.d.ts +136 -0
  164. package/dist/es/components/text-masked-field/daikin-text-masked-field.js +313 -0
  165. package/dist/es/components/text-masked-field/index.d.ts +1 -0
  166. package/dist/es/components/text-masked-field/index.js +4 -0
  167. package/dist/es/components/time-picker/daikin-time-picker.d.ts +165 -0
  168. package/dist/es/components/time-picker/daikin-time-picker.js +578 -0
  169. package/dist/es/components/time-picker/index.d.ts +1 -0
  170. package/dist/es/components/time-picker/index.js +14 -0
  171. package/dist/es/components/toast-notification-manager/daikin-toast-notification-manager.d.ts +1 -1
  172. package/dist/es/components/tooltip/daikin-tooltip.d.ts +8 -1
  173. package/dist/es/components/tooltip/daikin-tooltip.js +12 -2
  174. package/dist/es/controllers/floating-ui-auto-update.d.ts +12 -0
  175. package/dist/es/controllers/floating-ui-auto-update.js +22 -4
  176. package/dist/es/icon-registry.d.ts +120 -0
  177. package/dist/es/icon-registry.js +170 -0
  178. package/dist/es/index.d.ts +1 -0
  179. package/dist/es/index.js +25 -1
  180. package/dist/es/tailwind.css.js +1 -1
  181. package/dist/es/utils/notification-common.d.ts +1 -1
  182. package/dist/es-dev/base/dds-element.js +1 -1
  183. package/dist/es-dev/components/accordion-item/daikin-accordion-item.js +1 -0
  184. package/dist/es-dev/components/avatar/daikin-avatar.js +1 -0
  185. package/dist/es-dev/components/calendar/daikin-calendar.js +2 -0
  186. package/dist/es-dev/components/card-header/daikin-card-header.js +1 -1
  187. package/dist/es-dev/components/carousel/daikin-carousel.js +7 -3
  188. package/dist/es-dev/components/carousel-item/daikin-carousel-item.js +2 -2
  189. package/dist/es-dev/components/chip/daikin-chip.d.ts +36 -0
  190. package/dist/es-dev/components/chip/daikin-chip.js +107 -0
  191. package/dist/es-dev/components/chip/index.d.ts +1 -0
  192. package/dist/es-dev/components/chip/index.js +4 -0
  193. package/dist/es-dev/components/combobox/daikin-combobox.d.ts +134 -0
  194. package/dist/es-dev/components/combobox/daikin-combobox.js +605 -0
  195. package/dist/es-dev/components/combobox/index.d.ts +1 -0
  196. package/dist/es-dev/components/combobox/index.js +5 -0
  197. package/dist/es-dev/components/date-picker/daikin-date-picker.d.ts +2 -1
  198. package/dist/es-dev/components/date-picker/daikin-date-picker.js +32 -17
  199. package/dist/es-dev/components/dropdown/daikin-dropdown.d.ts +4 -3
  200. package/dist/es-dev/components/dropdown/daikin-dropdown.js +52 -37
  201. package/dist/es-dev/components/icon/daikin-icon.d.ts +141 -9
  202. package/dist/es-dev/components/icon/daikin-icon.js +142 -17
  203. package/dist/es-dev/components/icon/icons.json.js +4 -0
  204. package/dist/es-dev/components/icon-button/daikin-icon-button.d.ts +8 -0
  205. package/dist/es-dev/components/icon-button/daikin-icon-button.js +12 -2
  206. package/dist/es-dev/components/index.d.ts +5 -0
  207. package/dist/es-dev/components/index.js +22 -1
  208. package/dist/es-dev/components/input-group/daikin-input-group.d.ts +40 -13
  209. package/dist/es-dev/components/input-group/daikin-input-group.js +1 -1
  210. package/dist/es-dev/components/list-item/daikin-list-item.js +2 -2
  211. package/dist/es-dev/components/modal-header/daikin-modal-header.js +1 -1
  212. package/dist/es-dev/components/progress-bar/daikin-progress-bar.js +3 -3
  213. package/dist/es-dev/components/select/daikin-select.js +6 -1
  214. package/dist/es-dev/components/tab/daikin-tab.js +1 -0
  215. package/dist/es-dev/components/table/daikin-table.d.ts +67 -34
  216. package/dist/es-dev/components/table/daikin-table.js +36 -15
  217. package/dist/es-dev/components/table-header-cell/daikin-table-header-cell.d.ts +7 -0
  218. package/dist/es-dev/components/table-header-cell/daikin-table-header-cell.js +31 -6
  219. package/dist/es-dev/components/text-field/daikin-text-field.d.ts +32 -3
  220. package/dist/es-dev/components/text-field/daikin-text-field.js +191 -56
  221. package/dist/es-dev/components/text-field/number-utils.d.ts +26 -0
  222. package/dist/es-dev/components/text-field/number-utils.js +64 -0
  223. package/dist/es-dev/components/text-masked-field/daikin-text-masked-field.d.ts +136 -0
  224. package/dist/es-dev/components/text-masked-field/daikin-text-masked-field.js +313 -0
  225. package/dist/es-dev/components/text-masked-field/index.d.ts +1 -0
  226. package/dist/es-dev/components/text-masked-field/index.js +4 -0
  227. package/dist/es-dev/components/time-picker/daikin-time-picker.d.ts +165 -0
  228. package/dist/es-dev/components/time-picker/daikin-time-picker.js +590 -0
  229. package/dist/es-dev/components/time-picker/index.d.ts +1 -0
  230. package/dist/es-dev/components/time-picker/index.js +14 -0
  231. package/dist/es-dev/components/toast-notification-manager/daikin-toast-notification-manager.d.ts +1 -1
  232. package/dist/es-dev/components/tooltip/daikin-tooltip.d.ts +8 -1
  233. package/dist/es-dev/components/tooltip/daikin-tooltip.js +12 -2
  234. package/dist/es-dev/controllers/floating-ui-auto-update.d.ts +12 -0
  235. package/dist/es-dev/controllers/floating-ui-auto-update.js +22 -4
  236. package/dist/es-dev/icon-registry.d.ts +120 -0
  237. package/dist/es-dev/icon-registry.js +170 -0
  238. package/dist/es-dev/index.d.ts +1 -0
  239. package/dist/es-dev/index.js +25 -1
  240. package/dist/es-dev/tailwind.css.js +1 -1
  241. package/dist/es-dev/utils/notification-common.d.ts +1 -1
  242. package/icons/number-minus.svg +5 -0
  243. package/icons/number-plus.svg +5 -0
  244. package/package.json +14 -4
  245. package/icons/dropdown-chevron-down.svg +0 -3
@@ -0,0 +1,590 @@
1
+ import { cva } from "class-variance-authority";
2
+ import { unsafeCSS, css, html } from "lit";
3
+ import { property, state, customElement } from "lit/decorators.js";
4
+ import { ifDefined } from "lit/directives/if-defined.js";
5
+ import { createRef, ref } from "lit/directives/ref.js";
6
+ import { DDSFormElement } from "../../base/dds-form-element.js";
7
+ import tailwindStyles from "../../tailwind.css.js";
8
+ import "../dropdown-item/daikin-dropdown-item.js";
9
+ import "../dropdown/daikin-dropdown.js";
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __decorateClass = (decorators, target, key, kind) => {
13
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
14
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
15
+ if (decorator = decorators[i])
16
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
17
+ if (kind && result) __defProp(target, key, result);
18
+ return result;
19
+ };
20
+ const VALUE_TIME_REGEX = /^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/;
21
+ const DEFAULT_MIN_TIME = "00:00";
22
+ const DEFAULT_MAX_TIME = "23:59";
23
+ function to24HourFormat(time, meridiem) {
24
+ const [hourInit, minute] = time.split(":").map(Number);
25
+ let hour = hourInit;
26
+ if (meridiem === "AM") {
27
+ if (hour === 12) hour = 0;
28
+ } else {
29
+ if (hour !== 12) hour += 12;
30
+ }
31
+ return `${hour.toString().padStart(2, "0")}:${minute.toString().padStart(2, "0")}`;
32
+ }
33
+ function from24HourFormat(time) {
34
+ const [hour, minute] = time.split(":").map(Number);
35
+ const meridiem = hour >= 12 ? "PM" : "AM";
36
+ let hour12 = hour % 12;
37
+ if (hour12 === 0) hour12 = 12;
38
+ return {
39
+ time: `${hour12.toString().padStart(2, "0")}:${minute.toString().padStart(2, "0")}`,
40
+ meridiem
41
+ };
42
+ }
43
+ function isValidValueTime(str) {
44
+ return VALUE_TIME_REGEX.test(str);
45
+ }
46
+ function isTimeOutOfRange(time, min, max) {
47
+ const toMinutes = (s) => {
48
+ const [h, m] = s.split(":").map(Number);
49
+ return h * 60 + m;
50
+ };
51
+ const v = toMinutes(time);
52
+ const vMin = toMinutes(min);
53
+ const vMax = toMinutes(max);
54
+ return v < vMin || v > vMax;
55
+ }
56
+ const TIME_ITEMS = [
57
+ {
58
+ type: "hour",
59
+ range: [0, 2]
60
+ // 0-2 exclusive, selects "hh"
61
+ },
62
+ {
63
+ type: "minute",
64
+ range: [3, 5]
65
+ // 3-5 exclusive, selects "mm"
66
+ }
67
+ ];
68
+ const PLACEHOLDER_HOUR = "hh";
69
+ const PLACEHOLDER_MINUTE = "mm";
70
+ const PLACEHOLDER_ALL = formatPartsForUI({
71
+ hour: PLACEHOLDER_HOUR,
72
+ minute: PLACEHOLDER_MINUTE
73
+ });
74
+ function formatPartsForUI({
75
+ hour,
76
+ minute
77
+ }) {
78
+ return `${hour}:${minute}`;
79
+ }
80
+ function parsePartsFromUIValue(value) {
81
+ const [hour, minute] = value.split(":");
82
+ return { hour: hour || "hh", minute: minute || "mm" };
83
+ }
84
+ function tryParseTimeFromUIValue(value) {
85
+ const { hour, minute } = parsePartsFromUIValue(value);
86
+ if (!/^(0\d|1\d|2[0-3])$/.test(hour) || !/^[0-5]\d$/.test(minute)) {
87
+ return null;
88
+ }
89
+ const formattedHour = hour !== "hh" ? hour.padStart(2, "0") : "hh";
90
+ const formattedMinute = minute !== "mm" ? minute.padStart(2, "0") : "mm";
91
+ const timeString = `${formattedHour}:${formattedMinute}`;
92
+ return timeString;
93
+ }
94
+ function formatTimeForUI(timeString) {
95
+ const [hour, minute] = timeString.split(":");
96
+ return formatPartsForUI({
97
+ hour: hour.padStart(2, "0"),
98
+ minute: minute.padStart(2, "0")
99
+ });
100
+ }
101
+ function getTimeItemInSelection(selectionStart, selectionEnd) {
102
+ for (const { type, range } of TIME_ITEMS) {
103
+ if (selectionStart >= range[0] && selectionStart <= range[1] && selectionEnd >= range[0] && selectionEnd <= range[1]) {
104
+ return type;
105
+ }
106
+ }
107
+ return null;
108
+ }
109
+ function calcDigitInput(parts, item, digit, hourDigitIndex) {
110
+ if (!/^\d$/.test(digit)) {
111
+ return null;
112
+ }
113
+ switch (item) {
114
+ case "hour": {
115
+ if (parts.hour === "01" && ["0", "1", "2"].includes(digit)) {
116
+ return {
117
+ parts: { ...parts, hour: `1${digit}` },
118
+ done: true
119
+ };
120
+ }
121
+ if (parts.hour === "00") {
122
+ return {
123
+ parts: { ...parts, hour: `0${digit}` },
124
+ done: hourDigitIndex === 1
125
+ };
126
+ }
127
+ return {
128
+ parts: { ...parts, hour: `0${digit}` },
129
+ done: digit > "1"
130
+ };
131
+ }
132
+ case "minute": {
133
+ if (["01", "02", "03", "04", "05"].includes(parts.minute)) {
134
+ return {
135
+ parts: { ...parts, minute: `${parts.minute[1]}${digit}` },
136
+ done: true
137
+ };
138
+ }
139
+ return {
140
+ parts: { ...parts, minute: `0${digit}` },
141
+ done: digit > "5"
142
+ };
143
+ }
144
+ }
145
+ }
146
+ const cvaField = cva(
147
+ [
148
+ "flex",
149
+ "items-center",
150
+ "size-full",
151
+ "w-[94px]",
152
+ "bg-ddt-color-common-background-default",
153
+ "p-3",
154
+ "rounded",
155
+ "overflow-hidden",
156
+ "outline",
157
+ "outline-[--color-border]",
158
+ "outline-0",
159
+ "-outline-offset-2",
160
+ "placeholder:text-ddt-color-common-text-secondary",
161
+ "define-[--color-state-focus,--color-base]/color-border",
162
+ "border",
163
+ "border-[--color-border]",
164
+ "enabled:text-ddt-color-common-text-primary",
165
+ "enabled:hover:bg-ddt-color-common-surface-hover",
166
+ "enabled:active:bg-ddt-color-common-surface-press",
167
+ "focus-visible:outline-2",
168
+ "disabled:var-color-ddt-color-common-disabled/color-base",
169
+ "disabled:text-ddt-color-common-disabled",
170
+ "disabled:bg-ddt-color-common-background-default",
171
+ "disabled:placeholder:text-ddt-color-common-disabled"
172
+ ],
173
+ {
174
+ variants: {
175
+ error: {
176
+ false: [
177
+ "enabled:var-color-ddt-color-common-neutral-default/color-base",
178
+ "focus-visible:var-color-ddt-color-common-border-focus/color-state-focus"
179
+ ],
180
+ true: ["enabled:var-color-ddt-color-common-danger-default/color-base"]
181
+ }
182
+ }
183
+ }
184
+ );
185
+ let DaikinTimePicker = class extends DDSFormElement {
186
+ constructor() {
187
+ super(...arguments);
188
+ this.placeholder = "hh:mm";
189
+ this.min = DEFAULT_MIN_TIME;
190
+ this.max = DEFAULT_MAX_TIME;
191
+ this.disabled = false;
192
+ this.required = false;
193
+ this.error = false;
194
+ this.minutesStep = "1";
195
+ this._label = null;
196
+ this._inputValue = "";
197
+ this._currentSelection = "hour";
198
+ this._meridiem = "";
199
+ this._timeInputElement = createRef();
200
+ this._hourDigitIndex = 0;
201
+ }
202
+ /**
203
+ * Returns the value to display in the input field (from _inputValue state).
204
+ */
205
+ get _timeValue() {
206
+ return this._inputValue;
207
+ }
208
+ /**
209
+ * Syncs the AM/PM value with the current value (24-hour) if value changes externally.
210
+ */
211
+ _syncMeridiemWithValue() {
212
+ if (this.value) {
213
+ const { meridiem } = from24HourFormat(this.value);
214
+ this._meridiem = meridiem;
215
+ }
216
+ }
217
+ get _min() {
218
+ return this.min || DEFAULT_MIN_TIME;
219
+ }
220
+ get _max() {
221
+ return this.max || DEFAULT_MAX_TIME;
222
+ }
223
+ _convertZeroHourToTwelve() {
224
+ const minutes = this._inputValue.split(":")[1];
225
+ this._inputValue = `12:${minutes}`;
226
+ if (this._timeInputElement.value) {
227
+ this._timeInputElement.value.value = this._inputValue;
228
+ }
229
+ }
230
+ _handleFocusIn(event) {
231
+ const target = event.target;
232
+ this._updateInputSelection(target);
233
+ if (!this._inputValue) {
234
+ this._inputValue = PLACEHOLDER_ALL;
235
+ }
236
+ }
237
+ _handleFocusOut(event) {
238
+ const target = event.target;
239
+ if (target.value === PLACEHOLDER_ALL) {
240
+ this._inputValue = "";
241
+ target.value = "";
242
+ }
243
+ if (target.value.startsWith("00")) {
244
+ this._convertZeroHourToTwelve();
245
+ }
246
+ this._hourDigitIndex = 0;
247
+ }
248
+ _handleChange(event) {
249
+ const target = event.target;
250
+ this._inputValue = target.value;
251
+ this._updateValue(event);
252
+ }
253
+ _handleMouseUp(event) {
254
+ var _a, _b;
255
+ event.preventDefault();
256
+ const selectionStart = ((_a = this._timeInputElement.value) == null ? void 0 : _a.selectionStart) ?? 0;
257
+ const selectionEnd = ((_b = this._timeInputElement.value) == null ? void 0 : _b.selectionEnd) ?? 0;
258
+ const timeItemInSelection = getTimeItemInSelection(
259
+ selectionStart,
260
+ selectionEnd
261
+ );
262
+ if (event.target.value === PLACEHOLDER_ALL && !timeItemInSelection) {
263
+ this._updateSelection("hour");
264
+ return;
265
+ }
266
+ if (timeItemInSelection) {
267
+ this._updateSelection(timeItemInSelection);
268
+ }
269
+ }
270
+ _handleDigitInput(parts, item, digit, hourDigitIndex) {
271
+ if (this._currentSelection === "hour") {
272
+ if (hourDigitIndex === 1) {
273
+ this._hourDigitIndex = 0;
274
+ } else {
275
+ this._hourDigitIndex = 1;
276
+ }
277
+ }
278
+ return calcDigitInput(parts, item, digit, hourDigitIndex);
279
+ }
280
+ _handleKeyDown(event) {
281
+ const target = event.target;
282
+ const key = event.key;
283
+ const parts = parsePartsFromUIValue(target.value);
284
+ if (key === "Backspace") {
285
+ event.preventDefault();
286
+ const itemToRemove = this._currentSelection;
287
+ const placeholder = {
288
+ hour: PLACEHOLDER_HOUR,
289
+ minute: PLACEHOLDER_MINUTE
290
+ }[itemToRemove];
291
+ if (parts[itemToRemove] !== placeholder) {
292
+ const newVal = formatPartsForUI({
293
+ ...parts,
294
+ [itemToRemove]: placeholder
295
+ });
296
+ this._inputValue = newVal;
297
+ target.value = newVal;
298
+ this._updateSelection(itemToRemove);
299
+ }
300
+ this._updateValue(event);
301
+ return;
302
+ }
303
+ if (/^\d$/.test(key)) {
304
+ event.preventDefault();
305
+ const newState = this._handleDigitInput(
306
+ parts,
307
+ this._currentSelection,
308
+ key,
309
+ this._hourDigitIndex
310
+ );
311
+ if (newState) {
312
+ const newVal = formatPartsForUI(newState.parts);
313
+ this._inputValue = newVal;
314
+ target.value = newVal;
315
+ const currentIndex = TIME_ITEMS.findIndex(
316
+ ({ type }) => type === this._currentSelection
317
+ );
318
+ const nextIndex = currentIndex >= 0 ? Math.min(currentIndex + 1, TIME_ITEMS.length - 1) : -1;
319
+ this._updateSelection(
320
+ newState.done && nextIndex >= 0 ? TIME_ITEMS[nextIndex].type : this._currentSelection
321
+ );
322
+ }
323
+ this._updateValue(event);
324
+ return;
325
+ }
326
+ const moveOffset = {
327
+ ArrowLeft: -1,
328
+ ArrowRight: 1
329
+ }[key];
330
+ if (moveOffset) {
331
+ event.preventDefault();
332
+ const currentIndex = TIME_ITEMS.findIndex(
333
+ ({ type }) => type === this._currentSelection
334
+ );
335
+ const newIndex = currentIndex >= 0 ? Math.min(
336
+ Math.max(currentIndex + moveOffset, 0),
337
+ TIME_ITEMS.length - 1
338
+ ) : 0;
339
+ this._updateSelection(TIME_ITEMS[newIndex].type);
340
+ return;
341
+ }
342
+ const countOffset = {
343
+ ArrowUp: 1,
344
+ ArrowDown: -1
345
+ }[key];
346
+ if (countOffset) {
347
+ event.preventDefault();
348
+ this._updateSelection(this._currentSelection);
349
+ this._updateTimeByOffset(countOffset);
350
+ return;
351
+ }
352
+ if (key.length <= 1) {
353
+ event.preventDefault();
354
+ return;
355
+ }
356
+ }
357
+ _updateTimeByOffset(offset) {
358
+ const target = this._timeInputElement.value;
359
+ if (!target) return;
360
+ const currentTime = target.value;
361
+ if (!currentTime) return;
362
+ const [hourStr, minuteStr] = currentTime.split(":");
363
+ let hour = parseInt(hourStr, 10);
364
+ let minute = parseInt(minuteStr, 10);
365
+ if (this._currentSelection === "hour") {
366
+ if (isNaN(hour)) hour = 0;
367
+ hour = (hour + offset + 11) % 12 + 1;
368
+ } else {
369
+ if (isNaN(minute)) minute = 0;
370
+ minute = (minute + offset * Number(this.minutesStep) + 60) % 60;
371
+ }
372
+ const newTime = `${isNaN(hour) ? "hh" : String(hour).padStart(2, "0")}:${isNaN(minute) ? "mm" : String(minute).padStart(2, "0")}`;
373
+ this._inputValue = formatTimeForUI(newTime);
374
+ target.value = this._inputValue;
375
+ this._updateSelection(this._currentSelection);
376
+ this._updateValue();
377
+ }
378
+ _handleBeforeInput(event) {
379
+ event.preventDefault();
380
+ this._updateInputSelection(event.target);
381
+ }
382
+ /**
383
+ * Updates the value in 24-hour format if the input is valid, keeps UI in 12-hour format.
384
+ */
385
+ _updateValue(event) {
386
+ const target = (event == null ? void 0 : event.target) || this._timeInputElement.value;
387
+ if (!target) return;
388
+ this._inputValue = target.value;
389
+ if (target.value === PLACEHOLDER_ALL) {
390
+ this.error = false;
391
+ return;
392
+ }
393
+ if (this._meridiem === "") {
394
+ this.error = true;
395
+ return;
396
+ }
397
+ const newTime = tryParseTimeFromUIValue(target.value);
398
+ const newValue = newTime != null ? to24HourFormat(newTime, this._meridiem) : "";
399
+ this.error = !newValue || isTimeOutOfRange(newValue, this._min, this._max);
400
+ const changed = newValue !== this.value;
401
+ this.value = newValue;
402
+ if (changed) {
403
+ if (newValue) {
404
+ this.dispatchEvent(
405
+ new Event("input", {
406
+ bubbles: true,
407
+ composed: true
408
+ })
409
+ );
410
+ }
411
+ this.dispatchEvent(
412
+ new Event("change", {
413
+ bubbles: true,
414
+ composed: true
415
+ })
416
+ );
417
+ }
418
+ }
419
+ _updateInputSelection(target) {
420
+ var _a;
421
+ if (target.value === "") {
422
+ target.value = PLACEHOLDER_ALL;
423
+ }
424
+ const itemInfo = TIME_ITEMS[0];
425
+ (_a = this._timeInputElement.value) == null ? void 0 : _a.setSelectionRange(
426
+ itemInfo.range[0],
427
+ itemInfo.range[1]
428
+ );
429
+ this._currentSelection = itemInfo.type;
430
+ }
431
+ _updateSelection(timeItem) {
432
+ var _a;
433
+ const selection = window.getSelection();
434
+ if (!selection) {
435
+ return;
436
+ }
437
+ const itemInfo = TIME_ITEMS.find(({ type }) => type === timeItem);
438
+ if (itemInfo) {
439
+ if (itemInfo.type === "minute") {
440
+ if (this._inputValue.startsWith("00")) {
441
+ this._convertZeroHourToTwelve();
442
+ }
443
+ this._hourDigitIndex = 0;
444
+ }
445
+ (_a = this._timeInputElement.value) == null ? void 0 : _a.setSelectionRange(
446
+ itemInfo.range[0],
447
+ itemInfo.range[1]
448
+ );
449
+ this._currentSelection = itemInfo.type;
450
+ }
451
+ }
452
+ _handleDropdownChange(event) {
453
+ const target = event.target;
454
+ this._meridiem = target.value;
455
+ const input = this._timeInputElement.value;
456
+ if (input && input.value && tryParseTimeFromUIValue(input.value)) {
457
+ this._updateValue();
458
+ }
459
+ }
460
+ render() {
461
+ return html`<div
462
+ role="group"
463
+ aria-label=${ifDefined(this._label ?? void 0)}
464
+ class="flex flex-row h-full gap-2 font-daikinSerif"
465
+ >
466
+ <input
467
+ ${ref(this._timeInputElement)}
468
+ class=${cvaField({ error: this.error })}
469
+ type="text"
470
+ placeholder=${ifDefined(this.placeholder ?? void 0)}
471
+ name=${this.name}
472
+ .value=${this._timeValue}
473
+ ?disabled=${this.disabled}
474
+ ?required=${this.required}
475
+ @change=${this._handleChange}
476
+ @focusin=${this._handleFocusIn}
477
+ @focusout=${this._handleFocusOut}
478
+ @keydown=${this._handleKeyDown}
479
+ @beforeinput=${this._handleBeforeInput}
480
+ @mouseup=${this._handleMouseUp}
481
+ />
482
+ <daikin-dropdown
483
+ class="w-[88px]"
484
+ placeholder="--"
485
+ .error=${this.error}
486
+ .value=${this._meridiem}
487
+ ?disabled=${this.disabled}
488
+ @change=${this._handleDropdownChange}
489
+ >
490
+ <daikin-dropdown-item value="AM">AM</daikin-dropdown-item>
491
+ <daikin-dropdown-item value="PM">PM</daikin-dropdown-item>
492
+ </daikin-dropdown>
493
+ </div>`;
494
+ }
495
+ willUpdate(changedProperties) {
496
+ {
497
+ for (const prop of ["value", "min", "max"]) {
498
+ if (changedProperties.has(prop)) {
499
+ const val = this[prop];
500
+ if (val && !isValidValueTime(val)) {
501
+ console.warn(
502
+ `daikin-time-picker: Invalid time "${val}" specified for ${prop}`
503
+ );
504
+ }
505
+ }
506
+ }
507
+ }
508
+ if (changedProperties.has("value")) {
509
+ this._syncMeridiemWithValue();
510
+ if (this.value) {
511
+ const { time } = from24HourFormat(this.value);
512
+ this._inputValue = time;
513
+ }
514
+ }
515
+ }
516
+ updated(changedProperties) {
517
+ if (changedProperties.has("value")) {
518
+ this.setFormValue(this.value);
519
+ }
520
+ }
521
+ /**
522
+ * This method is used by `daikin-input-group` to reflect it's attributes to this component.
523
+ * @private
524
+ */
525
+ reflectInputGroup(inputGroup) {
526
+ const isError = !inputGroup.disabled && !!inputGroup.error;
527
+ this.disabled = !!inputGroup.disabled;
528
+ this.required = !!inputGroup.required;
529
+ this.error = isError;
530
+ this._label = inputGroup.label ?? null;
531
+ }
532
+ };
533
+ DaikinTimePicker.styles = css`
534
+ ${unsafeCSS(tailwindStyles)}
535
+
536
+ :host {
537
+ display: flex;
538
+ align-items: center;
539
+ height: 3rem;
540
+ }
541
+ `;
542
+ __decorateClass([
543
+ property({ type: String, reflect: true })
544
+ ], DaikinTimePicker.prototype, "placeholder", 2);
545
+ __decorateClass([
546
+ property({ type: String, reflect: true })
547
+ ], DaikinTimePicker.prototype, "min", 2);
548
+ __decorateClass([
549
+ property({ type: String, reflect: true })
550
+ ], DaikinTimePicker.prototype, "max", 2);
551
+ __decorateClass([
552
+ property({ type: Boolean, reflect: true })
553
+ ], DaikinTimePicker.prototype, "disabled", 2);
554
+ __decorateClass([
555
+ property({ type: Boolean, reflect: true })
556
+ ], DaikinTimePicker.prototype, "required", 2);
557
+ __decorateClass([
558
+ property({ type: Boolean, reflect: true })
559
+ ], DaikinTimePicker.prototype, "error", 2);
560
+ __decorateClass([
561
+ property({ type: String, reflect: true, attribute: "minutes-step" })
562
+ ], DaikinTimePicker.prototype, "minutesStep", 2);
563
+ __decorateClass([
564
+ state()
565
+ ], DaikinTimePicker.prototype, "_label", 2);
566
+ __decorateClass([
567
+ state()
568
+ ], DaikinTimePicker.prototype, "_inputValue", 2);
569
+ __decorateClass([
570
+ state()
571
+ ], DaikinTimePicker.prototype, "_currentSelection", 2);
572
+ __decorateClass([
573
+ state()
574
+ ], DaikinTimePicker.prototype, "_meridiem", 2);
575
+ DaikinTimePicker = __decorateClass([
576
+ customElement("daikin-time-picker")
577
+ ], DaikinTimePicker);
578
+ export {
579
+ DaikinTimePicker,
580
+ calcDigitInput,
581
+ formatPartsForUI,
582
+ formatTimeForUI,
583
+ from24HourFormat,
584
+ getTimeItemInSelection,
585
+ isTimeOutOfRange,
586
+ isValidValueTime,
587
+ parsePartsFromUIValue,
588
+ to24HourFormat,
589
+ tryParseTimeFromUIValue
590
+ };
@@ -0,0 +1 @@
1
+ export * from "./daikin-time-picker.js";
@@ -0,0 +1,14 @@
1
+ import { DaikinTimePicker, calcDigitInput, formatPartsForUI, formatTimeForUI, from24HourFormat, getTimeItemInSelection, isTimeOutOfRange, isValidValueTime, parsePartsFromUIValue, to24HourFormat, tryParseTimeFromUIValue } from "./daikin-time-picker.js";
2
+ export {
3
+ DaikinTimePicker,
4
+ calcDigitInput,
5
+ formatPartsForUI,
6
+ formatTimeForUI,
7
+ from24HourFormat,
8
+ getTimeItemInSelection,
9
+ isTimeOutOfRange,
10
+ isValidValueTime,
11
+ parsePartsFromUIValue,
12
+ to24HourFormat,
13
+ tryParseTimeFromUIValue
14
+ };
@@ -1,7 +1,7 @@
1
1
  import { DDSElement } from "../../base/index.js";
2
2
  import { MergeVariantProps } from "../../type-utils.js";
3
3
  declare const cvaContainer: (props?: ({
4
- position?: "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right" | null | undefined;
4
+ position?: "bottom" | "top" | "top-left" | "top-right" | "bottom-left" | "bottom-right" | null | undefined;
5
5
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
6
6
  export type ToastPosition = MergeVariantProps<typeof cvaContainer>["position"];
7
7
  /**
@@ -12,7 +12,7 @@ type TooltipVariantProps = MergeVariantProps<typeof cvaTooltip>;
12
12
  * @fires toggle - A event emitted when the tooltip is opened or closed.
13
13
  *
14
14
  * @slot - A slot for the element to which the tooltip is attached (the trigger element).
15
- * @slot description - A slot for the tooltip description content.
15
+ * @slot description - A slot for the tooltip description content. Tooltips don't have a prescribed maximum or minimum width. If you plan to use longer text, please note that you'll need to manually implement line breaks.
16
16
  *
17
17
  * @cssprop [--ddc-tooltip-spacing=20px] - Spacing between the tooltip and the trigger.
18
18
  *
@@ -55,6 +55,7 @@ export declare class DaikinTooltip extends DDSElement {
55
55
  /**
56
56
  * Specifies the content of the tooltip.
57
57
  * Ignored if the `tooltip` slot exists.
58
+ * Tooltips don't have a prescribed maximum or minimum width. If you plan to use longer text, please note that you'll need to manually implement line breaks.
58
59
  */
59
60
  description: string;
60
61
  /**
@@ -70,6 +71,11 @@ export declare class DaikinTooltip extends DDSElement {
70
71
  * - `manual`: The tooltip does not respond to user interaction. Use this to control the tooltip programmatically.
71
72
  */
72
73
  trigger: "hover" | "click" | "manual";
74
+ /**
75
+ * Internal state to track whether the element will be focused by a press interaction.
76
+ * In this case, the tooltip will not be open via focus to prevent it from disappearing immediately afterward.
77
+ */
78
+ private _willBeFocusedByPress;
73
79
  private _autoUpdateController;
74
80
  private _hostStyles;
75
81
  private _handleClick;
@@ -77,6 +83,7 @@ export declare class DaikinTooltip extends DDSElement {
77
83
  private _handleFocusOut;
78
84
  private _handlePointerEnter;
79
85
  private _handlePointerLeave;
86
+ private _handlePointerDown;
80
87
  private _handlePointerUp;
81
88
  private _handleBeforeToggle;
82
89
  private _handleToggle;
@@ -61,6 +61,7 @@ let DaikinTooltip = class extends DDSElement {
61
61
  this.description = "";
62
62
  this.popoverValue = "auto";
63
63
  this.trigger = "hover";
64
+ this._willBeFocusedByPress = false;
64
65
  this._autoUpdateController = new FloatingUIAutoUpdateController(this);
65
66
  this._hostStyles = isClient ? window.getComputedStyle(this) : null;
66
67
  }
@@ -82,10 +83,14 @@ let DaikinTooltip = class extends DDSElement {
82
83
  }
83
84
  }
84
85
  _handleFocusIn() {
85
- this.open = true;
86
+ if (this.trigger !== "manual" && !this._willBeFocusedByPress) {
87
+ this.open = true;
88
+ }
86
89
  }
87
90
  _handleFocusOut() {
88
- this.open = false;
91
+ if (this.trigger !== "manual") {
92
+ this.open = false;
93
+ }
89
94
  }
90
95
  _handlePointerEnter(event) {
91
96
  if (this.trigger === "hover" && event.pointerType === "mouse") {
@@ -97,7 +102,11 @@ let DaikinTooltip = class extends DDSElement {
97
102
  this.open = false;
98
103
  }
99
104
  }
105
+ _handlePointerDown() {
106
+ this._willBeFocusedByPress = this.trigger === "click" && !this.matches(":focus-within");
107
+ }
100
108
  _handlePointerUp(event) {
109
+ this._willBeFocusedByPress = false;
101
110
  if (this.trigger === "hover" && event.pointerType === "touch") {
102
111
  this.open = !this.open;
103
112
  }
@@ -131,6 +140,7 @@ let DaikinTooltip = class extends DDSElement {
131
140
  @focusout=${this._handleFocusOut}
132
141
  @pointerenter=${this._handlePointerEnter}
133
142
  @pointerleave=${this._handlePointerLeave}
143
+ @pointerdown=${this._handlePointerDown}
134
144
  @pointerup=${this._handlePointerUp}
135
145
  ></slot>
136
146
  </div>