@tcn/ui 0.12.2 → 0.12.4

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 (165) hide show
  1. package/dist/actions/index.d.ts +0 -2
  2. package/dist/actions/index.d.ts.map +1 -1
  3. package/dist/actions/index.js +6 -10
  4. package/dist/actions/index.js.map +1 -1
  5. package/dist/group.css +1 -0
  6. package/dist/inputs/color_input/color_input.js +2 -4
  7. package/dist/inputs/color_input/color_input.js.map +1 -1
  8. package/dist/inputs/date_picker/date_picker_header.js +20 -22
  9. package/dist/inputs/date_picker/date_picker_header.js.map +1 -1
  10. package/dist/inputs/date_picker/date_picker_input.js +2 -4
  11. package/dist/inputs/date_picker/date_picker_input.js.map +1 -1
  12. package/dist/inputs/date_picker/date_picker_time_selector.js +9 -11
  13. package/dist/inputs/date_picker/date_picker_time_selector.js.map +1 -1
  14. package/dist/inputs/date_picker/date_picker_year_input.js +5 -7
  15. package/dist/inputs/date_picker/date_picker_year_input.js.map +1 -1
  16. package/dist/inputs/date_picker/date_picker_year_selector.js +2 -4
  17. package/dist/inputs/date_picker/date_picker_year_selector.js.map +1 -1
  18. package/dist/inputs/index.d.ts +2 -0
  19. package/dist/inputs/index.d.ts.map +1 -1
  20. package/dist/inputs/index.js +24 -20
  21. package/dist/inputs/index.js.map +1 -1
  22. package/dist/inputs/multiselect/multiselect_inline_values.js +7 -9
  23. package/dist/inputs/multiselect/multiselect_inline_values.js.map +1 -1
  24. package/dist/inputs/multiselect/multiselect_values.js +2 -4
  25. package/dist/inputs/multiselect/multiselect_values.js.map +1 -1
  26. package/dist/inputs/phone_number_input/phone_number_input_adapter.js +2 -4
  27. package/dist/inputs/phone_number_input/phone_number_input_adapter.js.map +1 -1
  28. package/dist/inputs/phone_number_input/sip_input.js +13 -15
  29. package/dist/inputs/phone_number_input/sip_input.js.map +1 -1
  30. package/dist/inputs/select/select.js +2 -4
  31. package/dist/inputs/select/select.js.map +1 -1
  32. package/dist/{actions/button → inputs}/select_group/select_group.d.ts +1 -1
  33. package/dist/inputs/select_group/select_group.d.ts.map +1 -0
  34. package/dist/{actions/button → inputs}/select_group/select_group.js +3 -3
  35. package/dist/inputs/select_group/select_group.js.map +1 -0
  36. package/dist/inputs/select_group/single_select_group.d.ts.map +1 -0
  37. package/dist/inputs/select_group/single_select_group.js.map +1 -0
  38. package/dist/inputs/suggestions/suggestion_list.js +2 -4
  39. package/dist/inputs/suggestions/suggestion_list.js.map +1 -1
  40. package/dist/layouts/group/group.d.ts +5 -0
  41. package/dist/layouts/group/group.d.ts.map +1 -0
  42. package/dist/layouts/group/group.js +26 -0
  43. package/dist/layouts/group/group.js.map +1 -0
  44. package/dist/layouts/index.d.ts +2 -0
  45. package/dist/layouts/index.d.ts.map +1 -1
  46. package/dist/layouts/index.js +36 -32
  47. package/dist/layouts/index.js.map +1 -1
  48. package/dist/overlay/popper/base/dismissal_decorator.js +6 -6
  49. package/dist/overlay/popper/base/dismissal_decorator.js.map +1 -1
  50. package/dist/overlay/popper/context_popper.d.ts.map +1 -1
  51. package/dist/overlay/popper/context_popper.js +34 -26
  52. package/dist/overlay/popper/context_popper.js.map +1 -1
  53. package/dist/overlay/popper/element_popper.d.ts.map +1 -1
  54. package/dist/overlay/popper/element_popper.js +43 -25
  55. package/dist/overlay/popper/element_popper.js.map +1 -1
  56. package/dist/overlay/tethered/hooks/use_ref_dimensions.d.ts +3 -0
  57. package/dist/overlay/tethered/hooks/use_ref_dimensions.d.ts.map +1 -0
  58. package/dist/overlay/tethered/hooks/use_ref_dimensions.js +26 -0
  59. package/dist/overlay/tethered/hooks/use_ref_dimensions.js.map +1 -0
  60. package/dist/overlay/tethered/hooks/{useTether.d.ts → use_tether.d.ts} +7 -4
  61. package/dist/overlay/tethered/hooks/use_tether.d.ts.map +1 -0
  62. package/dist/overlay/tethered/hooks/{useTether.js → use_tether.js} +19 -15
  63. package/dist/overlay/tethered/hooks/use_tether.js.map +1 -0
  64. package/dist/overlay/tethered/hooks/use_tether_origin.d.ts +10 -0
  65. package/dist/overlay/tethered/hooks/use_tether_origin.d.ts.map +1 -0
  66. package/dist/overlay/tethered/hooks/use_tether_origin.js +22 -0
  67. package/dist/overlay/tethered/hooks/use_tether_origin.js.map +1 -0
  68. package/dist/overlay/tethered/hooks/{calculate_origin.d.ts → utils/calculate_origin.d.ts} +4 -10
  69. package/dist/overlay/tethered/hooks/utils/calculate_origin.d.ts.map +1 -0
  70. package/dist/overlay/tethered/hooks/utils/calculate_origin.js +41 -0
  71. package/dist/overlay/tethered/hooks/utils/calculate_origin.js.map +1 -0
  72. package/dist/overlay/tethered/hooks/{calculate_position.d.ts → utils/calculate_position.d.ts} +2 -2
  73. package/dist/overlay/tethered/hooks/utils/calculate_position.d.ts.map +1 -0
  74. package/dist/overlay/tethered/hooks/utils/calculate_position.js.map +1 -0
  75. package/dist/overlay/tethered/tethered.d.ts.map +1 -1
  76. package/dist/overlay/tethered/tethered.js +63 -62
  77. package/dist/overlay/tethered/tethered.js.map +1 -1
  78. package/dist/select_group.css +1 -1
  79. package/dist/surfaces/alert/alert.d.ts +0 -2
  80. package/dist/surfaces/alert/alert.d.ts.map +1 -1
  81. package/dist/surfaces/alert/alert.js +5 -7
  82. package/dist/surfaces/alert/alert.js.map +1 -1
  83. package/dist/surfaces/confirm/confirm.d.ts +3 -3
  84. package/dist/surfaces/confirm/confirm.d.ts.map +1 -1
  85. package/dist/surfaces/confirm/confirm.js +46 -45
  86. package/dist/surfaces/confirm/confirm.js.map +1 -1
  87. package/dist/surfaces/pop_confirm/pop_confirm.js +11 -9
  88. package/dist/surfaces/pop_confirm/pop_confirm.js.map +1 -1
  89. package/dist/surfaces/tooltip/tooltip.d.ts.map +1 -1
  90. package/dist/surfaces/tooltip/tooltip.js +27 -28
  91. package/dist/surfaces/tooltip/tooltip.js.map +1 -1
  92. package/dist/themes/stories/button_showcase.d.ts.map +1 -1
  93. package/dist/themes/stylesheets/reset.css +1 -1
  94. package/dist/themes/stylesheets/reset.js +3 -3
  95. package/dist/themes/stylesheets/reset.js.map +1 -1
  96. package/dist/themes/themes/ergo/ergo_theme.css +1 -1
  97. package/dist/themes/themes/ergo/ergo_theme.js +128 -12
  98. package/dist/themes/themes/ergo/ergo_theme.js.map +1 -1
  99. package/package.json +3 -2
  100. package/src/actions/index.ts +0 -8
  101. package/src/inputs/index.ts +9 -0
  102. package/src/{actions/button/__stories__ → inputs/select_group}/select_group.stories.tsx +5 -26
  103. package/src/{actions/button → inputs}/select_group/select_group.tsx +3 -3
  104. package/src/layouts/bar/bar.stories.tsx +61 -0
  105. package/src/layouts/group/group.module.css +8 -0
  106. package/src/layouts/group/group.tsx +23 -0
  107. package/src/layouts/index.ts +2 -0
  108. package/src/overlay/popper/__stories__/element_popper.stories.tsx +1 -1
  109. package/src/overlay/popper/base/dismissal_decorator.tsx +1 -1
  110. package/src/overlay/popper/context_popper.tsx +7 -3
  111. package/src/overlay/popper/element_popper.tsx +14 -4
  112. package/src/overlay/tethered/__stories__/shared/base_story_config.ts +1 -1
  113. package/src/overlay/tethered/hooks/use_ref_dimensions.ts +32 -0
  114. package/src/overlay/tethered/hooks/{useTether.ts → use_tether.ts} +7 -2
  115. package/src/overlay/tethered/hooks/use_tether_origin.ts +46 -0
  116. package/src/overlay/tethered/hooks/{calculate_origin.ts → utils/calculate_origin.ts} +12 -12
  117. package/src/overlay/tethered/hooks/{calculate_position.ts → utils/calculate_position.ts} +3 -3
  118. package/src/overlay/tethered/tethered.tsx +22 -26
  119. package/src/surfaces/alert/alert.tsx +0 -2
  120. package/src/surfaces/confirm/confirm.tsx +24 -9
  121. package/src/surfaces/pop_confirm/pop_confirm.stories.tsx +206 -6
  122. package/src/surfaces/pop_confirm/pop_confirm.tsx +1 -1
  123. package/src/surfaces/tooltip/__stories__/tooltip.stories.tsx +136 -0
  124. package/src/surfaces/tooltip/__stories__/tooltip_stories.module.css +14 -0
  125. package/src/surfaces/tooltip/tooltip.tsx +6 -2
  126. package/src/themes/stories/button_showcase.tsx +19 -51
  127. package/src/themes/stylesheets/reset.css +3 -3
  128. package/src/themes/themes/ergo/ergo_theme.css +128 -12
  129. package/dist/actions/button/select_group/select_group.d.ts.map +0 -1
  130. package/dist/actions/button/select_group/select_group.js.map +0 -1
  131. package/dist/actions/button/select_group/single_select_group.d.ts.map +0 -1
  132. package/dist/actions/button/select_group/single_select_group.js.map +0 -1
  133. package/dist/overlay/tethered/hooks/calculate_origin.d.ts.map +0 -1
  134. package/dist/overlay/tethered/hooks/calculate_origin.js +0 -41
  135. package/dist/overlay/tethered/hooks/calculate_origin.js.map +0 -1
  136. package/dist/overlay/tethered/hooks/calculate_position.d.ts.map +0 -1
  137. package/dist/overlay/tethered/hooks/calculate_position.js.map +0 -1
  138. package/dist/overlay/tethered/hooks/useCaretRefDimensions.d.ts +0 -9
  139. package/dist/overlay/tethered/hooks/useCaretRefDimensions.d.ts.map +0 -1
  140. package/dist/overlay/tethered/hooks/useCaretRefDimensions.js +0 -14
  141. package/dist/overlay/tethered/hooks/useCaretRefDimensions.js.map +0 -1
  142. package/dist/overlay/tethered/hooks/useTether.d.ts.map +0 -1
  143. package/dist/overlay/tethered/hooks/useTether.js.map +0 -1
  144. package/dist/overlay/tethered/hooks/useTetherContentRect.d.ts +0 -3
  145. package/dist/overlay/tethered/hooks/useTetherContentRect.d.ts.map +0 -1
  146. package/dist/overlay/tethered/hooks/useTetherContentRect.js +0 -36
  147. package/dist/overlay/tethered/hooks/useTetherContentRect.js.map +0 -1
  148. package/dist/overlay/tethered/hooks/useTetherOrigin.d.ts +0 -14
  149. package/dist/overlay/tethered/hooks/useTetherOrigin.d.ts.map +0 -1
  150. package/dist/overlay/tethered/hooks/useTetherOrigin.js +0 -24
  151. package/dist/overlay/tethered/hooks/useTetherOrigin.js.map +0 -1
  152. package/dist/surfaces/popconfirm/pop_confirm.d.ts +0 -5
  153. package/dist/surfaces/popconfirm/pop_confirm.d.ts.map +0 -1
  154. package/dist/surfaces/popconfirm/pop_confirm.js +0 -13
  155. package/dist/surfaces/popconfirm/pop_confirm.js.map +0 -1
  156. package/src/overlay/tethered/hooks/useCaretRefDimensions.ts +0 -22
  157. package/src/overlay/tethered/hooks/useTetherContentRect.ts +0 -49
  158. package/src/overlay/tethered/hooks/useTetherOrigin.ts +0 -49
  159. package/src/surfaces/popconfirm/pop_confirm.tsx +0 -18
  160. package/src/surfaces/tooltip/tooltip.stories.tsx +0 -54
  161. /package/dist/{actions/button → inputs}/select_group/single_select_group.d.ts +0 -0
  162. /package/dist/{actions/button → inputs}/select_group/single_select_group.js +0 -0
  163. /package/dist/overlay/tethered/hooks/{calculate_position.js → utils/calculate_position.js} +0 -0
  164. /package/src/{actions/button → inputs}/select_group/select_group.module.css +0 -0
  165. /package/src/{actions/button → inputs}/select_group/single_select_group.tsx +0 -0
@@ -2,7 +2,5 @@ export { BaseButton, type BaseButtonProps, } from './button/base_button/base_but
2
2
  export { ButtonGroup, type ButtonGroupProps, } from './button/button_group/button_group.js';
3
3
  export { SlimButton } from './button/slim_button/slim_button.js';
4
4
  export { Button, type ButtonProps } from './button/button/button.js';
5
- export { SelectGroup, type SelectGroupProps, } from './button/select_group/select_group.js';
6
- export { SingleSelectGroup, type SingleSelectGroupProps, } from './button/select_group/single_select_group.js';
7
5
  export { Toggle, type ToggleProps } from './toggle/toggle.js';
8
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,17 +1,13 @@
1
- import { BaseButton as t } from "./button/base_button/base_button.js";
2
- import { ButtonGroup as p } from "./button/button_group/button_group.js";
1
+ import { BaseButton as r } from "./button/base_button/base_button.js";
2
+ import { ButtonGroup as m } from "./button/button_group/button_group.js";
3
3
  import { SlimButton as f } from "./button/slim_button/slim_button.js";
4
4
  import { Button as x } from "./button/button/button.js";
5
- import { SelectGroup as n } from "./button/select_group/select_group.js";
6
- import { SingleSelectGroup as S } from "./button/select_group/single_select_group.js";
7
- import { Toggle as G } from "./toggle/toggle.js";
5
+ import { Toggle as n } from "./toggle/toggle.js";
8
6
  export {
9
- t as BaseButton,
7
+ r as BaseButton,
10
8
  x as Button,
11
- p as ButtonGroup,
12
- n as SelectGroup,
13
- S as SingleSelectGroup,
9
+ m as ButtonGroup,
14
10
  f as SlimButton,
15
- G as Toggle
11
+ n as Toggle
16
12
  };
17
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
package/dist/group.css ADDED
@@ -0,0 +1 @@
1
+ @layer tcn-system{:where(._group_7b9338c){width:auto;height:auto;min-height:0;display:contents}}
@@ -8,15 +8,13 @@ import "../../actions/button/base_button/base_button.js";
8
8
  import "../../actions/button/button_group/button_group.js";
9
9
  import "../../actions/button/slim_button/slim_button.js";
10
10
  import { Button as P } from "../../actions/button/button/button.js";
11
- import "../../actions/button/select_group/select_group.js";
12
- import "../../actions/button/select_group/single_select_group.js";
13
11
  import "../../actions/toggle/toggle.js";
14
12
  import { ColorPicker as _ } from "./color_picker.js";
15
13
  import { Input as B } from "../input/input.js";
16
14
  import { Popper as F } from "../../overlay/popper/legacy/popper.js";
17
15
  import { InputGroup as j } from "../input_group/input_group.js";
18
16
  import '../../color_input.css';const z = "_checker-board_2cc94a9", K = "_color-input-select_abe3066", f = { "checker-board": z, "color-input-select": K };
19
- function or({
17
+ function v({
20
18
  value: c = "#000",
21
19
  onChange: i,
22
20
  onError: O,
@@ -142,6 +140,6 @@ function or({
142
140
  ] });
143
141
  }
144
142
  export {
145
- or as ColorInput
143
+ v as ColorInput
146
144
  };
147
145
  //# sourceMappingURL=color_input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"color_input.js","sources":["../../../src/inputs/color_input/color_input.tsx"],"sourcesContent":["import { Box } from '../../stacks/box/box.js';\nimport { HStack } from '../../stacks/h_stack.js';\nimport { Spacer } from '../../stacks/spacer.js';\nimport { clsx } from 'clsx';\nimport React, { useLayoutEffect, useRef, useState } from 'react';\nimport { HTMLAttributes } from 'react';\nimport { ColorState } from 'react-color';\nimport { Button } from '../../actions/index.js';\nimport { ColorPicker } from './color_picker.js';\nimport { Input } from '../input/input.js';\nimport styles from './color_input.module.css';\n\nimport { Popper } from '../../overlay/popper/legacy/popper.js';\nimport { InputGroup } from '../input_group/input_group.js';\n\nexport interface ColorInputProps\n extends Omit<HTMLAttributes<HTMLButtonElement>, 'onChange' | 'onError'> {\n value?: string;\n disabled?: boolean;\n onChange?: (color: string) => void;\n onError?: (error: string | null) => void;\n width?: string;\n maxWidth?: string;\n minWidth?: string;\n hierarchy?: 'primary' | 'secondary' | 'tertiary';\n}\n\nexport function ColorInput({\n value = '#000',\n onChange,\n onError,\n disabled,\n width = '100%',\n maxWidth,\n minWidth,\n hierarchy = 'secondary',\n ...props\n}: ColorInputProps) {\n const [anchorElement, setAnchorElement] = useState<HTMLButtonElement | null>(null);\n const isOpen = anchorElement != null;\n const pickerRef = useRef<HTMLDivElement | null>(null);\n\n function openPicker(e: React.MouseEvent<HTMLButtonElement>) {\n setAnchorElement(e.currentTarget);\n }\n\n function closePicker() {\n setAnchorElement(null);\n }\n\n useLayoutEffect(() => {\n requestAnimationFrame(() => {\n if (anchorElement != null) {\n pickerRef.current && pickerRef.current.focus();\n }\n });\n }, [anchorElement]);\n\n function processKeyInput(event: React.KeyboardEvent) {\n if (event.key === 'Escape') {\n closePicker();\n }\n }\n\n function updateColor(value: ColorState) {\n const rgb = value.rgb;\n let color = value.hex;\n\n if (rgb.a != null) {\n color = `rgba(${rgb.r},${rgb.g},${rgb.b},${rgb.a})`;\n } else {\n color = `rgb(${rgb.r},${rgb.g},${rgb.b})`;\n }\n\n onChange && onChange(color);\n }\n\n return (\n <>\n <InputGroup\n height=\"auto\"\n width={width}\n minWidth={minWidth}\n maxWidth={maxWidth}\n className=\"tcn-color-input-wrapper\"\n {...props}\n >\n <Input\n width=\"flex\"\n disabled={disabled}\n value={value}\n style={{\n borderEndEndRadius: 0,\n borderStartEndRadius: 0,\n textAlign: 'start',\n paddingInlineEnd: '8px',\n }}\n className=\"tcn-color-input\"\n onChange={onChange}\n />\n\n <Button\n disabled={disabled}\n hierarchy={hierarchy}\n onClick={openPicker}\n width=\"70px\"\n maxWidth=\"70px\"\n className={clsx(\n styles['color-input-select'],\n 'tcn-color-input-select',\n 'tcn-select'\n )}\n style={{\n borderStartStartRadius: 0,\n borderEndStartRadius: 0,\n paddingInlineEnd: 0,\n }}\n >\n <HStack height=\"14px\" gap=\"4px\" hAlign=\"start\">\n <Spacer width=\"4px\" />\n <Box\n width=\"flex\"\n height=\"30px\"\n className={clsx(styles['checker-board'], 'tcn-checker-board')}\n style={{ borderRadius: '2px', overflow: 'hidden' }}\n >\n <Box\n height=\"100%\"\n style={{ backgroundColor: value, borderRadius: '2px' }}\n ></Box>\n </Box>\n <Spacer />\n </HStack>\n <Spacer width=\"4px\" />\n </Button>\n </InputGroup>\n <Popper\n anchorElement={anchorElement}\n onClose={closePicker}\n open={isOpen}\n restoreFocus\n horizontalAnchor=\"end\"\n horizontalOrigin=\"end\"\n >\n <ColorPicker\n color={value}\n onKeyDown={processKeyInput}\n onColorChange={updateColor}\n />\n </Popper>\n </>\n );\n}\n"],"names":["ColorInput","value","onChange","onError","disabled","width","maxWidth","minWidth","hierarchy","props","anchorElement","setAnchorElement","useState","isOpen","pickerRef","useRef","openPicker","e","closePicker","useLayoutEffect","processKeyInput","event","updateColor","rgb","color","jsxs","Fragment","InputGroup","jsx","Input","Button","clsx","styles","HStack","Spacer","Box","Popper","ColorPicker"],"mappings":";;;;;;;;;;;;;;;;;;AA2BO,SAASA,GAAW;AAAA,EACzB,OAAAC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,GAAoB;AAClB,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAmC,IAAI,GAC3EC,IAASH,KAAiB,MAC1BI,IAAYC,EAA8B,IAAI;AAEpD,WAASC,EAAWC,GAAwC;AAC1D,IAAAN,EAAiBM,EAAE,aAAa;AAAA,EAClC;AAEA,WAASC,IAAc;AACrB,IAAAP,EAAiB,IAAI;AAAA,EACvB;AAEA,EAAAQ,EAAgB,MAAM;AACpB,0BAAsB,MAAM;AAC1B,MAAIT,KAAiB,QACnBI,EAAU,WAAWA,EAAU,QAAQ,MAAA;AAAA,IAE3C,CAAC;AAAA,EACH,GAAG,CAACJ,CAAa,CAAC;AAElB,WAASU,EAAgBC,GAA4B;AACnD,IAAIA,EAAM,QAAQ,YAChBH,EAAA;AAAA,EAEJ;AAEA,WAASI,EAAYrB,GAAmB;AACtC,UAAMsB,IAAMtB,EAAM;AAClB,QAAIuB,IAAQvB,EAAM;AAElB,IAAIsB,EAAI,KAAK,OACXC,IAAQ,QAAQD,EAAI,CAAC,IAAIA,EAAI,CAAC,IAAIA,EAAI,CAAC,IAAIA,EAAI,CAAC,MAEhDC,IAAQ,OAAOD,EAAI,CAAC,IAAIA,EAAI,CAAC,IAAIA,EAAI,CAAC,KAGxCrB,KAAYA,EAASsB,CAAK;AAAA,EAC5B;AAEA,SACE,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,QAAO;AAAA,QACP,OAAAtB;AAAA,QACA,UAAAE;AAAA,QACA,UAAAD;AAAA,QACA,WAAU;AAAA,QACT,GAAGG;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAmB;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,OAAM;AAAA,cACN,UAAAzB;AAAA,cACA,OAAAH;AAAA,cACA,OAAO;AAAA,gBACL,oBAAoB;AAAA,gBACpB,sBAAsB;AAAA,gBACtB,WAAW;AAAA,gBACX,kBAAkB;AAAA,cAAA;AAAA,cAEpB,WAAU;AAAA,cACV,UAAAC;AAAA,YAAA;AAAA,UAAA;AAAA,UAGF,gBAAAuB;AAAA,YAACK;AAAA,YAAA;AAAA,cACC,UAAA1B;AAAA,cACA,WAAAI;AAAA,cACA,SAASQ;AAAA,cACT,OAAM;AAAA,cACN,UAAS;AAAA,cACT,WAAWe;AAAA,gBACTC,EAAO,oBAAoB;AAAA,gBAC3B;AAAA,gBACA;AAAA,cAAA;AAAA,cAEF,OAAO;AAAA,gBACL,wBAAwB;AAAA,gBACxB,sBAAsB;AAAA,gBACtB,kBAAkB;AAAA,cAAA;AAAA,cAGpB,UAAA;AAAA,gBAAA,gBAAAP,EAACQ,KAAO,QAAO,QAAO,KAAI,OAAM,QAAO,SACrC,UAAA;AAAA,kBAAA,gBAAAL,EAACM,GAAA,EAAO,OAAM,MAAA,CAAM;AAAA,kBACpB,gBAAAN;AAAA,oBAACO;AAAA,oBAAA;AAAA,sBACC,OAAM;AAAA,sBACN,QAAO;AAAA,sBACP,WAAWJ,EAAKC,EAAO,eAAe,GAAG,mBAAmB;AAAA,sBAC5D,OAAO,EAAE,cAAc,OAAO,UAAU,SAAA;AAAA,sBAExC,UAAA,gBAAAJ;AAAA,wBAACO;AAAA,wBAAA;AAAA,0BACC,QAAO;AAAA,0BACP,OAAO,EAAE,iBAAiBlC,GAAO,cAAc,MAAA;AAAA,wBAAM;AAAA,sBAAA;AAAA,oBACtD;AAAA,kBAAA;AAAA,oCAEFiC,GAAA,CAAA,CAAO;AAAA,gBAAA,GACV;AAAA,gBACA,gBAAAN,EAACM,GAAA,EAAO,OAAM,MAAA,CAAM;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACtB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAN;AAAA,MAACQ;AAAA,MAAA;AAAA,QACC,eAAA1B;AAAA,QACA,SAASQ;AAAA,QACT,MAAML;AAAA,QACN,cAAY;AAAA,QACZ,kBAAiB;AAAA,QACjB,kBAAiB;AAAA,QAEjB,UAAA,gBAAAe;AAAA,UAACS;AAAA,UAAA;AAAA,YACC,OAAOpC;AAAA,YACP,WAAWmB;AAAA,YACX,eAAeE;AAAA,UAAA;AAAA,QAAA;AAAA,MACjB;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;"}
1
+ {"version":3,"file":"color_input.js","sources":["../../../src/inputs/color_input/color_input.tsx"],"sourcesContent":["import { Box } from '../../stacks/box/box.js';\nimport { HStack } from '../../stacks/h_stack.js';\nimport { Spacer } from '../../stacks/spacer.js';\nimport { clsx } from 'clsx';\nimport React, { useLayoutEffect, useRef, useState } from 'react';\nimport { HTMLAttributes } from 'react';\nimport { ColorState } from 'react-color';\nimport { Button } from '../../actions/index.js';\nimport { ColorPicker } from './color_picker.js';\nimport { Input } from '../input/input.js';\nimport styles from './color_input.module.css';\n\nimport { Popper } from '../../overlay/popper/legacy/popper.js';\nimport { InputGroup } from '../input_group/input_group.js';\n\nexport interface ColorInputProps\n extends Omit<HTMLAttributes<HTMLButtonElement>, 'onChange' | 'onError'> {\n value?: string;\n disabled?: boolean;\n onChange?: (color: string) => void;\n onError?: (error: string | null) => void;\n width?: string;\n maxWidth?: string;\n minWidth?: string;\n hierarchy?: 'primary' | 'secondary' | 'tertiary';\n}\n\nexport function ColorInput({\n value = '#000',\n onChange,\n onError,\n disabled,\n width = '100%',\n maxWidth,\n minWidth,\n hierarchy = 'secondary',\n ...props\n}: ColorInputProps) {\n const [anchorElement, setAnchorElement] = useState<HTMLButtonElement | null>(null);\n const isOpen = anchorElement != null;\n const pickerRef = useRef<HTMLDivElement | null>(null);\n\n function openPicker(e: React.MouseEvent<HTMLButtonElement>) {\n setAnchorElement(e.currentTarget);\n }\n\n function closePicker() {\n setAnchorElement(null);\n }\n\n useLayoutEffect(() => {\n requestAnimationFrame(() => {\n if (anchorElement != null) {\n pickerRef.current && pickerRef.current.focus();\n }\n });\n }, [anchorElement]);\n\n function processKeyInput(event: React.KeyboardEvent) {\n if (event.key === 'Escape') {\n closePicker();\n }\n }\n\n function updateColor(value: ColorState) {\n const rgb = value.rgb;\n let color = value.hex;\n\n if (rgb.a != null) {\n color = `rgba(${rgb.r},${rgb.g},${rgb.b},${rgb.a})`;\n } else {\n color = `rgb(${rgb.r},${rgb.g},${rgb.b})`;\n }\n\n onChange && onChange(color);\n }\n\n return (\n <>\n <InputGroup\n height=\"auto\"\n width={width}\n minWidth={minWidth}\n maxWidth={maxWidth}\n className=\"tcn-color-input-wrapper\"\n {...props}\n >\n <Input\n width=\"flex\"\n disabled={disabled}\n value={value}\n style={{\n borderEndEndRadius: 0,\n borderStartEndRadius: 0,\n textAlign: 'start',\n paddingInlineEnd: '8px',\n }}\n className=\"tcn-color-input\"\n onChange={onChange}\n />\n\n <Button\n disabled={disabled}\n hierarchy={hierarchy}\n onClick={openPicker}\n width=\"70px\"\n maxWidth=\"70px\"\n className={clsx(\n styles['color-input-select'],\n 'tcn-color-input-select',\n 'tcn-select'\n )}\n style={{\n borderStartStartRadius: 0,\n borderEndStartRadius: 0,\n paddingInlineEnd: 0,\n }}\n >\n <HStack height=\"14px\" gap=\"4px\" hAlign=\"start\">\n <Spacer width=\"4px\" />\n <Box\n width=\"flex\"\n height=\"30px\"\n className={clsx(styles['checker-board'], 'tcn-checker-board')}\n style={{ borderRadius: '2px', overflow: 'hidden' }}\n >\n <Box\n height=\"100%\"\n style={{ backgroundColor: value, borderRadius: '2px' }}\n ></Box>\n </Box>\n <Spacer />\n </HStack>\n <Spacer width=\"4px\" />\n </Button>\n </InputGroup>\n <Popper\n anchorElement={anchorElement}\n onClose={closePicker}\n open={isOpen}\n restoreFocus\n horizontalAnchor=\"end\"\n horizontalOrigin=\"end\"\n >\n <ColorPicker\n color={value}\n onKeyDown={processKeyInput}\n onColorChange={updateColor}\n />\n </Popper>\n </>\n );\n}\n"],"names":["ColorInput","value","onChange","onError","disabled","width","maxWidth","minWidth","hierarchy","props","anchorElement","setAnchorElement","useState","isOpen","pickerRef","useRef","openPicker","e","closePicker","useLayoutEffect","processKeyInput","event","updateColor","rgb","color","jsxs","Fragment","InputGroup","jsx","Input","Button","clsx","styles","HStack","Spacer","Box","Popper","ColorPicker"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { jsxs as c, jsx as i } from "react/jsx-runtime";
1
+ import { jsxs as c, jsx as e } from "react/jsx-runtime";
2
2
  import { useSignalValue as g, useSignalValueEffect as v } from "@tcn/state";
3
3
  import { HStack as l } from "../../stacks/h_stack.js";
4
4
  import { Spacer as h } from "../../stacks/spacer.js";
@@ -7,10 +7,8 @@ import "../../actions/button/base_button/base_button.js";
7
7
  import "../../actions/button/button_group/button_group.js";
8
8
  import { SlimButton as m } from "../../actions/button/slim_button/slim_button.js";
9
9
  import "../../actions/button/button/button.js";
10
- import "../../actions/button/select_group/select_group.js";
11
- import "../../actions/button/select_group/single_select_group.js";
12
10
  import "../../actions/toggle/toggle.js";
13
- import { getMonthsOfYear as p } from "../../utils/calendar/get_months_of_year.js";
11
+ import { getMonthsOfYear as u } from "../../utils/calendar/get_months_of_year.js";
14
12
  import { Select as k } from "../select/select.js";
15
13
  import { ChevronLeftIcon as S } from "@tcn/icons/chevron_left_icon.js";
16
14
  import { ChevronRightIcon as x } from "@tcn/icons/chevron_right_icon.js";
@@ -19,15 +17,15 @@ import { clsx as O } from "clsx";
19
17
  import { DatePickerYearInput as B } from "./date_picker_year_input.js";
20
18
  import '../../date_picker_header.css';const N = "_date-picker-header_696681a", R = { "date-picker-header": N };
21
19
  function V(t) {
22
- const o = p(t, "short"), e = p(t, "long");
23
- return o.map((n, r) => /* @__PURE__ */ i(y, { value: String(r), label: n, keywords: [n], children: e[r] }, r));
20
+ const o = u(t, "short"), i = u(t, "long");
21
+ return o.map((n, r) => /* @__PURE__ */ e(y, { value: String(r), label: n, keywords: [n], children: i[r] }, r));
24
22
  }
25
- function K({ presenter: t, countryCode: o }) {
26
- const e = g(t.stateBroadcast), n = M(null);
23
+ function G({ presenter: t, countryCode: o }) {
24
+ const i = g(t.stateBroadcast), n = M(null);
27
25
  function r(a) {
28
26
  t.setVisibleMonth(Number(a));
29
27
  }
30
- function u() {
28
+ function p() {
31
29
  return t.setVisibleMonth(t.stateBroadcast.get().visibleMonth - 1);
32
30
  }
33
31
  function d() {
@@ -44,38 +42,38 @@ function K({ presenter: t, countryCode: o }) {
44
42
  minWidth: "35px",
45
43
  width: "100%",
46
44
  children: [
47
- /* @__PURE__ */ i(
45
+ /* @__PURE__ */ e(
48
46
  m,
49
47
  {
50
- disabled: !e.canNavigateToPreviousMonth,
48
+ disabled: !i.canNavigateToPreviousMonth,
51
49
  hierarchy: "tertiary",
52
- onClick: u,
53
- children: /* @__PURE__ */ i(S, { flipOnRtl: !0, size: "md" })
50
+ onClick: p,
51
+ children: /* @__PURE__ */ e(S, { flipOnRtl: !0, size: "md" })
54
52
  }
55
53
  ),
56
- /* @__PURE__ */ i(h, {}),
54
+ /* @__PURE__ */ e(h, {}),
57
55
  /* @__PURE__ */ c(l, { hAlign: "center", gap: "4px", width: "auto", children: [
58
- /* @__PURE__ */ i(
56
+ /* @__PURE__ */ e(
59
57
  k,
60
58
  {
61
59
  hierarchy: "tertiary",
62
60
  width: "auto",
63
61
  maxWidth: "150px",
64
- value: String(e.visibleMonth),
62
+ value: String(i.visibleMonth),
65
63
  onChange: r,
66
64
  children: f
67
65
  }
68
66
  ),
69
- /* @__PURE__ */ i(B, { presenter: t })
67
+ /* @__PURE__ */ e(B, { presenter: t })
70
68
  ] }),
71
- /* @__PURE__ */ i(h, {}),
72
- /* @__PURE__ */ i(
69
+ /* @__PURE__ */ e(h, {}),
70
+ /* @__PURE__ */ e(
73
71
  m,
74
72
  {
75
- disabled: !e.canNavigateToNextMonth,
73
+ disabled: !i.canNavigateToNextMonth,
76
74
  hierarchy: "tertiary",
77
75
  onClick: d,
78
- children: /* @__PURE__ */ i(x, { flipOnRtl: !0, size: "md" })
76
+ children: /* @__PURE__ */ e(x, { flipOnRtl: !0, size: "md" })
79
77
  }
80
78
  )
81
79
  ]
@@ -83,6 +81,6 @@ function K({ presenter: t, countryCode: o }) {
83
81
  );
84
82
  }
85
83
  export {
86
- K as DatePickerHeader
84
+ G as DatePickerHeader
87
85
  };
88
86
  //# sourceMappingURL=date_picker_header.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date_picker_header.js","sources":["../../../src/inputs/date_picker/date_picker_header.tsx"],"sourcesContent":["import { useSignalValue, useSignalValueEffect } from '@tcn/state';\nimport { HStack } from '../../stacks/h_stack.js';\nimport { Spacer } from '../../stacks/spacer.js';\nimport React, { useMemo, useRef } from 'react';\nimport { SlimButton } from '../../actions/index.js';\nimport { getMonthsOfYear } from '../../utils/calendar/get_months_of_year.js';\nimport { DatePickerPresenter } from './date_picker_presenter.js';\nimport { Select } from '../select/select.js';\nimport { ChevronLeftIcon } from '@tcn/icons/chevron_left_icon.js';\nimport { ChevronRightIcon } from '@tcn/icons/chevron_right_icon.js';\nimport { Option, OptionProps } from '../options/option.js';\nimport { DatePickerState } from './date_picker_presenter.js';\nimport styles from './date_picker_header.module.css';\nimport { clsx } from 'clsx';\nimport { DatePickerYearInput } from './date_picker_year_input.js';\n\nfunction makeMonthsOptions(countryCode: string): React.ReactElement<OptionProps>[] {\n const shortMonths = getMonthsOfYear(countryCode, 'short');\n const longMonths = getMonthsOfYear(countryCode, 'long');\n\n return shortMonths.map((m, index) => {\n return (\n <Option key={index} value={String(index)} label={m} keywords={[m]}>\n {longMonths[index]}\n </Option>\n );\n });\n}\n\nexport interface DatePickerHeaderProps {\n presenter: DatePickerPresenter;\n countryCode: string;\n}\n\nexport function DatePickerHeader({ presenter, countryCode }: DatePickerHeaderProps) {\n const state = useSignalValue(presenter.stateBroadcast);\n const yearInputRef = useRef<HTMLInputElement>(null);\n\n function selectMonth(value: string) {\n presenter.setVisibleMonth(Number(value));\n }\n\n function previous() {\n return presenter.setVisibleMonth(presenter.stateBroadcast.get().visibleMonth - 1);\n }\n\n function next() {\n return presenter.setVisibleMonth(presenter.stateBroadcast.get().visibleMonth + 1);\n }\n\n const monthsOptions = useMemo(() => {\n return makeMonthsOptions(countryCode);\n }, [countryCode]);\n\n useSignalValueEffect((state: DatePickerState) => {\n const input = yearInputRef.current;\n if (input && input.value !== String(state.visibleYear)) {\n input.value = String(state.visibleYear);\n }\n }, presenter.stateBroadcast);\n\n return (\n <HStack\n className={clsx(styles['date-picker-header'], 'tcn-date-picker-header')}\n minWidth=\"35px\"\n width=\"100%\"\n >\n <SlimButton\n disabled={!state.canNavigateToPreviousMonth}\n hierarchy=\"tertiary\"\n onClick={previous}\n >\n <ChevronLeftIcon flipOnRtl size=\"md\" />\n </SlimButton>\n <Spacer />\n <HStack hAlign=\"center\" gap=\"4px\" width=\"auto\">\n <Select\n hierarchy=\"tertiary\"\n width=\"auto\"\n maxWidth=\"150px\"\n value={String(state.visibleMonth)}\n onChange={selectMonth}\n >\n {monthsOptions}\n </Select>\n <DatePickerYearInput presenter={presenter} />\n </HStack>\n <Spacer />\n <SlimButton\n disabled={!state.canNavigateToNextMonth}\n hierarchy=\"tertiary\"\n onClick={next}\n >\n <ChevronRightIcon flipOnRtl size=\"md\" />\n </SlimButton>\n </HStack>\n );\n}\n"],"names":["makeMonthsOptions","countryCode","shortMonths","getMonthsOfYear","longMonths","m","index","jsx","Option","DatePickerHeader","presenter","state","useSignalValue","yearInputRef","useRef","selectMonth","value","previous","next","monthsOptions","useMemo","useSignalValueEffect","input","jsxs","HStack","clsx","styles","SlimButton","ChevronLeftIcon","Spacer","Select","DatePickerYearInput","ChevronRightIcon"],"mappings":";;;;;;;;;;;;;;;;;;;;AAgBA,SAASA,EAAkBC,GAAwD;AACjF,QAAMC,IAAcC,EAAgBF,GAAa,OAAO,GAClDG,IAAaD,EAAgBF,GAAa,MAAM;AAEtD,SAAOC,EAAY,IAAI,CAACG,GAAGC,MAEvB,gBAAAC,EAACC,GAAA,EAAmB,OAAO,OAAOF,CAAK,GAAG,OAAOD,GAAG,UAAU,CAACA,CAAC,GAC7D,UAAAD,EAAWE,CAAK,KADNA,CAEb,CAEH;AACH;AAOO,SAASG,EAAiB,EAAE,WAAAC,GAAW,aAAAT,KAAsC;AAClF,QAAMU,IAAQC,EAAeF,EAAU,cAAc,GAC/CG,IAAeC,EAAyB,IAAI;AAElD,WAASC,EAAYC,GAAe;AAClC,IAAAN,EAAU,gBAAgB,OAAOM,CAAK,CAAC;AAAA,EACzC;AAEA,WAASC,IAAW;AAClB,WAAOP,EAAU,gBAAgBA,EAAU,eAAe,IAAA,EAAM,eAAe,CAAC;AAAA,EAClF;AAEA,WAASQ,IAAO;AACd,WAAOR,EAAU,gBAAgBA,EAAU,eAAe,IAAA,EAAM,eAAe,CAAC;AAAA,EAClF;AAEA,QAAMS,IAAgBC,EAAQ,MACrBpB,EAAkBC,CAAW,GACnC,CAACA,CAAW,CAAC;AAEhB,SAAAoB,EAAqB,CAACV,MAA2B;AAC/C,UAAMW,IAAQT,EAAa;AAC3B,IAAIS,KAASA,EAAM,UAAU,OAAOX,EAAM,WAAW,MACnDW,EAAM,QAAQ,OAAOX,EAAM,WAAW;AAAA,EAE1C,GAAGD,EAAU,cAAc,GAGzB,gBAAAa;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAKC,EAAO,oBAAoB,GAAG,wBAAwB;AAAA,MACtE,UAAS;AAAA,MACT,OAAM;AAAA,MAEN,UAAA;AAAA,QAAA,gBAAAnB;AAAA,UAACoB;AAAA,UAAA;AAAA,YACC,UAAU,CAAChB,EAAM;AAAA,YACjB,WAAU;AAAA,YACV,SAASM;AAAA,YAET,UAAA,gBAAAV,EAACqB,GAAA,EAAgB,WAAS,IAAC,MAAK,KAAA,CAAK;AAAA,UAAA;AAAA,QAAA;AAAA,0BAEtCC,GAAA,EAAO;AAAA,0BACPL,GAAA,EAAO,QAAO,UAAS,KAAI,OAAM,OAAM,QACtC,UAAA;AAAA,UAAA,gBAAAjB;AAAA,YAACuB;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAM;AAAA,cACN,UAAS;AAAA,cACT,OAAO,OAAOnB,EAAM,YAAY;AAAA,cAChC,UAAUI;AAAA,cAET,UAAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAEH,gBAAAZ,EAACwB,KAAoB,WAAArB,EAAA,CAAsB;AAAA,QAAA,GAC7C;AAAA,0BACCmB,GAAA,EAAO;AAAA,QACR,gBAAAtB;AAAA,UAACoB;AAAA,UAAA;AAAA,YACC,UAAU,CAAChB,EAAM;AAAA,YACjB,WAAU;AAAA,YACV,SAASO;AAAA,YAET,UAAA,gBAAAX,EAACyB,GAAA,EAAiB,WAAS,IAAC,MAAK,KAAA,CAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MACxC;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"date_picker_header.js","sources":["../../../src/inputs/date_picker/date_picker_header.tsx"],"sourcesContent":["import { useSignalValue, useSignalValueEffect } from '@tcn/state';\nimport { HStack } from '../../stacks/h_stack.js';\nimport { Spacer } from '../../stacks/spacer.js';\nimport React, { useMemo, useRef } from 'react';\nimport { SlimButton } from '../../actions/index.js';\nimport { getMonthsOfYear } from '../../utils/calendar/get_months_of_year.js';\nimport { DatePickerPresenter } from './date_picker_presenter.js';\nimport { Select } from '../select/select.js';\nimport { ChevronLeftIcon } from '@tcn/icons/chevron_left_icon.js';\nimport { ChevronRightIcon } from '@tcn/icons/chevron_right_icon.js';\nimport { Option, OptionProps } from '../options/option.js';\nimport { DatePickerState } from './date_picker_presenter.js';\nimport styles from './date_picker_header.module.css';\nimport { clsx } from 'clsx';\nimport { DatePickerYearInput } from './date_picker_year_input.js';\n\nfunction makeMonthsOptions(countryCode: string): React.ReactElement<OptionProps>[] {\n const shortMonths = getMonthsOfYear(countryCode, 'short');\n const longMonths = getMonthsOfYear(countryCode, 'long');\n\n return shortMonths.map((m, index) => {\n return (\n <Option key={index} value={String(index)} label={m} keywords={[m]}>\n {longMonths[index]}\n </Option>\n );\n });\n}\n\nexport interface DatePickerHeaderProps {\n presenter: DatePickerPresenter;\n countryCode: string;\n}\n\nexport function DatePickerHeader({ presenter, countryCode }: DatePickerHeaderProps) {\n const state = useSignalValue(presenter.stateBroadcast);\n const yearInputRef = useRef<HTMLInputElement>(null);\n\n function selectMonth(value: string) {\n presenter.setVisibleMonth(Number(value));\n }\n\n function previous() {\n return presenter.setVisibleMonth(presenter.stateBroadcast.get().visibleMonth - 1);\n }\n\n function next() {\n return presenter.setVisibleMonth(presenter.stateBroadcast.get().visibleMonth + 1);\n }\n\n const monthsOptions = useMemo(() => {\n return makeMonthsOptions(countryCode);\n }, [countryCode]);\n\n useSignalValueEffect((state: DatePickerState) => {\n const input = yearInputRef.current;\n if (input && input.value !== String(state.visibleYear)) {\n input.value = String(state.visibleYear);\n }\n }, presenter.stateBroadcast);\n\n return (\n <HStack\n className={clsx(styles['date-picker-header'], 'tcn-date-picker-header')}\n minWidth=\"35px\"\n width=\"100%\"\n >\n <SlimButton\n disabled={!state.canNavigateToPreviousMonth}\n hierarchy=\"tertiary\"\n onClick={previous}\n >\n <ChevronLeftIcon flipOnRtl size=\"md\" />\n </SlimButton>\n <Spacer />\n <HStack hAlign=\"center\" gap=\"4px\" width=\"auto\">\n <Select\n hierarchy=\"tertiary\"\n width=\"auto\"\n maxWidth=\"150px\"\n value={String(state.visibleMonth)}\n onChange={selectMonth}\n >\n {monthsOptions}\n </Select>\n <DatePickerYearInput presenter={presenter} />\n </HStack>\n <Spacer />\n <SlimButton\n disabled={!state.canNavigateToNextMonth}\n hierarchy=\"tertiary\"\n onClick={next}\n >\n <ChevronRightIcon flipOnRtl size=\"md\" />\n </SlimButton>\n </HStack>\n );\n}\n"],"names":["makeMonthsOptions","countryCode","shortMonths","getMonthsOfYear","longMonths","m","index","jsx","Option","DatePickerHeader","presenter","state","useSignalValue","yearInputRef","useRef","selectMonth","value","previous","next","monthsOptions","useMemo","useSignalValueEffect","input","jsxs","HStack","clsx","styles","SlimButton","ChevronLeftIcon","Spacer","Select","DatePickerYearInput","ChevronRightIcon"],"mappings":";;;;;;;;;;;;;;;;;;AAgBA,SAASA,EAAkBC,GAAwD;AACjF,QAAMC,IAAcC,EAAgBF,GAAa,OAAO,GAClDG,IAAaD,EAAgBF,GAAa,MAAM;AAEtD,SAAOC,EAAY,IAAI,CAACG,GAAGC,MAEvB,gBAAAC,EAACC,GAAA,EAAmB,OAAO,OAAOF,CAAK,GAAG,OAAOD,GAAG,UAAU,CAACA,CAAC,GAC7D,UAAAD,EAAWE,CAAK,KADNA,CAEb,CAEH;AACH;AAOO,SAASG,EAAiB,EAAE,WAAAC,GAAW,aAAAT,KAAsC;AAClF,QAAMU,IAAQC,EAAeF,EAAU,cAAc,GAC/CG,IAAeC,EAAyB,IAAI;AAElD,WAASC,EAAYC,GAAe;AAClC,IAAAN,EAAU,gBAAgB,OAAOM,CAAK,CAAC;AAAA,EACzC;AAEA,WAASC,IAAW;AAClB,WAAOP,EAAU,gBAAgBA,EAAU,eAAe,IAAA,EAAM,eAAe,CAAC;AAAA,EAClF;AAEA,WAASQ,IAAO;AACd,WAAOR,EAAU,gBAAgBA,EAAU,eAAe,IAAA,EAAM,eAAe,CAAC;AAAA,EAClF;AAEA,QAAMS,IAAgBC,EAAQ,MACrBpB,EAAkBC,CAAW,GACnC,CAACA,CAAW,CAAC;AAEhB,SAAAoB,EAAqB,CAACV,MAA2B;AAC/C,UAAMW,IAAQT,EAAa;AAC3B,IAAIS,KAASA,EAAM,UAAU,OAAOX,EAAM,WAAW,MACnDW,EAAM,QAAQ,OAAOX,EAAM,WAAW;AAAA,EAE1C,GAAGD,EAAU,cAAc,GAGzB,gBAAAa;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAKC,EAAO,oBAAoB,GAAG,wBAAwB;AAAA,MACtE,UAAS;AAAA,MACT,OAAM;AAAA,MAEN,UAAA;AAAA,QAAA,gBAAAnB;AAAA,UAACoB;AAAA,UAAA;AAAA,YACC,UAAU,CAAChB,EAAM;AAAA,YACjB,WAAU;AAAA,YACV,SAASM;AAAA,YAET,UAAA,gBAAAV,EAACqB,GAAA,EAAgB,WAAS,IAAC,MAAK,KAAA,CAAK;AAAA,UAAA;AAAA,QAAA;AAAA,0BAEtCC,GAAA,EAAO;AAAA,0BACPL,GAAA,EAAO,QAAO,UAAS,KAAI,OAAM,OAAM,QACtC,UAAA;AAAA,UAAA,gBAAAjB;AAAA,YAACuB;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAM;AAAA,cACN,UAAS;AAAA,cACT,OAAO,OAAOnB,EAAM,YAAY;AAAA,cAChC,UAAUI;AAAA,cAET,UAAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAEH,gBAAAZ,EAACwB,KAAoB,WAAArB,EAAA,CAAsB;AAAA,QAAA,GAC7C;AAAA,0BACCmB,GAAA,EAAO;AAAA,QACR,gBAAAtB;AAAA,UAACoB;AAAA,UAAA;AAAA,YACC,UAAU,CAAChB,EAAM;AAAA,YACjB,WAAU;AAAA,YACV,SAASO;AAAA,YAET,UAAA,gBAAAX,EAACyB,GAAA,EAAiB,WAAS,IAAC,MAAK,KAAA,CAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MACxC;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -7,8 +7,6 @@ import "../../actions/button/base_button/base_button.js";
7
7
  import "../../actions/button/button_group/button_group.js";
8
8
  import "../../actions/button/slim_button/slim_button.js";
9
9
  import { Button as J } from "../../actions/button/button/button.js";
10
- import "../../actions/button/select_group/select_group.js";
11
- import "../../actions/button/select_group/single_select_group.js";
12
10
  import "../../actions/toggle/toggle.js";
13
11
  import { DatePicker as Q } from "./date_picker.js";
14
12
  import "../../utils/click_away_listener.js";
@@ -17,7 +15,7 @@ import "../../utils/scroll_away_listener.js";
17
15
  import "../../utils/hooks/use_resize_observer.js";
18
16
  import "../../utils/dnd/context.js";
19
17
  import "../../draggable.module-BgelQsuJ.js";
20
- import '../../date_picker_input.css';const U = "_button_f404820", X = "_popover_708f951", f = { button: U, popover: X }, yt = B.forwardRef(
18
+ import '../../date_picker_input.css';const U = "_button_f404820", X = "_popover_708f951", f = { button: U, popover: X }, kt = B.forwardRef(
21
19
  ({
22
20
  value: c = /* @__PURE__ */ new Date(),
23
21
  onChange: d,
@@ -137,6 +135,6 @@ import '../../date_picker_input.css';const U = "_button_f404820", X = "_popover_
137
135
  }
138
136
  );
139
137
  export {
140
- yt as DatePickerInput
138
+ kt as DatePickerInput
141
139
  };
142
140
  //# sourceMappingURL=date_picker_input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date_picker_input.js","sources":["../../../src/inputs/date_picker/date_picker_input.tsx"],"sourcesContent":["import React, { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Hierarchy } from '../../utils/index.js';\nimport { ZStack } from '../../stacks/z_stack.js';\nimport { Popper } from '../../overlay/popper/legacy/popper.js';\nimport { clsx } from 'clsx';\nimport { HTMLAttributes } from 'react';\nimport { Button } from '../../actions/index.js';\nimport { DatePicker } from './date_picker.js';\nimport { DatePickerPresenter } from './date_picker_presenter.js';\nimport { FocusRedirect } from '../../utils/index.js';\nimport styles from './date_picker_input.module.css';\n\nexport interface DatePickerInputProps\n extends Omit<HTMLAttributes<HTMLButtonElement>, 'onChange' | 'onError'> {\n value?: Date | null;\n disabled?: boolean;\n onChange?: (date: Date | null) => void;\n onError?: (error: string | null) => void;\n width?: string;\n maxWidth?: string;\n minWidth?: string;\n showTime?: boolean;\n timeIntervalInMinutes?: number;\n disabledDates?: Date[] | undefined;\n countryCode?: string;\n renderActions?: (datePickerPresenter: DatePickerPresenter) => React.ReactNode;\n min?: Date;\n max?: Date;\n hierarchy?: Hierarchy;\n selectDateMessage?: string;\n onTimeSelected?: (hour: number, minutes: number, seconds: number) => void;\n}\n\nexport const DatePickerInput = React.forwardRef<HTMLButtonElement, DatePickerInputProps>(\n (\n {\n value = new Date(),\n onChange,\n onError,\n min = new Date('01/01/1924'),\n max = new Date('01/01/2124'),\n disabled,\n width = '100%',\n maxWidth,\n minWidth,\n showTime = false,\n timeIntervalInMinutes = 15,\n hierarchy = 'secondary',\n disabledDates,\n selectDateMessage = 'Select Date',\n countryCode,\n renderActions,\n onTimeSelected,\n ...props\n }: DatePickerInputProps,\n ref: React.Ref<HTMLButtonElement>\n ) => {\n const [anchorElement, setAnchorElement] = useState<HTMLButtonElement | null>(null);\n const isOpen = anchorElement != null;\n const pickerRef = useRef<HTMLDivElement | null>(null);\n\n const isException = useCallback((target: HTMLElement) => {\n return target.closest('.tcn-suggestion-list') != null;\n }, []);\n\n const formatter = useMemo(() => {\n const formatOptions: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n };\n\n if (showTime) {\n formatOptions.hour = 'numeric';\n formatOptions.minute = '2-digit';\n formatOptions.hour12 = true;\n }\n\n return new Intl.DateTimeFormat(countryCode, formatOptions);\n }, [countryCode, showTime]);\n\n const formattedDate = value != null ? formatter.format(value) : selectDateMessage;\n\n function openPicker(e: React.MouseEvent<HTMLButtonElement>) {\n setAnchorElement(e.currentTarget);\n }\n\n function closePicker() {\n setAnchorElement(null);\n }\n\n useLayoutEffect(() => {\n requestAnimationFrame(() => {\n if (anchorElement != null) {\n pickerRef.current && pickerRef.current.focus();\n }\n });\n }, [anchorElement]);\n\n function processKeyInput(event: React.KeyboardEvent) {\n if (event.key === 'Escape') {\n closePicker();\n }\n }\n\n function handleRedirect() {\n const picker = pickerRef.current;\n\n if (picker != null) {\n picker.focus();\n }\n }\n\n function dateSelected(date: Date | null) {\n onChange?.(date);\n !showTime && closePicker();\n }\n\n function timeSelected(hour: number, minutes: number, seconds: number) {\n onTimeSelected?.(hour, minutes, seconds);\n closePicker();\n }\n\n return (\n <>\n <Button\n ref={ref}\n className={clsx(styles.button, 'tcn-select')}\n hAlign=\"start\"\n disabled={disabled}\n hierarchy={hierarchy}\n onClick={openPicker}\n width={width}\n maxWidth={maxWidth}\n {...props}\n >\n <span className=\"ellipsis\">{formattedDate}</span>\n </Button>\n <Popper\n anchorElement={anchorElement}\n disableClickAway\n veil\n onVeilClick={closePicker}\n onClose={closePicker}\n verticalAnchor=\"bottom\"\n horizontalAnchor=\"start\"\n verticalOrigin=\"top\"\n horizontalOrigin=\"start\"\n open={isOpen}\n isClickAwayException={isException}\n isScrollAwayException={isException}\n restoreFocus\n >\n <ZStack\n padding=\"8px\"\n className={clsx(styles.popover, 'tcn-date-picker-popover')}\n onKeyDown={processKeyInput}\n >\n <DatePicker\n ref={pickerRef}\n value={value}\n onChange={dateSelected}\n min={min}\n max={max}\n showTime={showTime}\n onError={onError}\n disabled={disabled}\n disabledDates={disabledDates}\n countryCode={countryCode}\n renderActions={renderActions}\n onTimeSelected={timeSelected}\n timeIntervalInMinutes={timeIntervalInMinutes}\n />\n <FocusRedirect onRedirect={handleRedirect} />\n </ZStack>\n </Popper>\n </>\n );\n }\n);\n"],"names":["DatePickerInput","React","value","onChange","onError","min","max","disabled","width","maxWidth","minWidth","showTime","timeIntervalInMinutes","hierarchy","disabledDates","selectDateMessage","countryCode","renderActions","onTimeSelected","props","ref","anchorElement","setAnchorElement","useState","isOpen","pickerRef","useRef","isException","useCallback","target","formatter","useMemo","formatOptions","formattedDate","openPicker","e","closePicker","useLayoutEffect","processKeyInput","event","handleRedirect","picker","dateSelected","date","timeSelected","hour","minutes","seconds","jsxs","Fragment","jsx","Button","clsx","styles","Popper","ZStack","DatePicker","FocusRedirect"],"mappings":"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"}
1
+ {"version":3,"file":"date_picker_input.js","sources":["../../../src/inputs/date_picker/date_picker_input.tsx"],"sourcesContent":["import React, { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Hierarchy } from '../../utils/index.js';\nimport { ZStack } from '../../stacks/z_stack.js';\nimport { Popper } from '../../overlay/popper/legacy/popper.js';\nimport { clsx } from 'clsx';\nimport { HTMLAttributes } from 'react';\nimport { Button } from '../../actions/index.js';\nimport { DatePicker } from './date_picker.js';\nimport { DatePickerPresenter } from './date_picker_presenter.js';\nimport { FocusRedirect } from '../../utils/index.js';\nimport styles from './date_picker_input.module.css';\n\nexport interface DatePickerInputProps\n extends Omit<HTMLAttributes<HTMLButtonElement>, 'onChange' | 'onError'> {\n value?: Date | null;\n disabled?: boolean;\n onChange?: (date: Date | null) => void;\n onError?: (error: string | null) => void;\n width?: string;\n maxWidth?: string;\n minWidth?: string;\n showTime?: boolean;\n timeIntervalInMinutes?: number;\n disabledDates?: Date[] | undefined;\n countryCode?: string;\n renderActions?: (datePickerPresenter: DatePickerPresenter) => React.ReactNode;\n min?: Date;\n max?: Date;\n hierarchy?: Hierarchy;\n selectDateMessage?: string;\n onTimeSelected?: (hour: number, minutes: number, seconds: number) => void;\n}\n\nexport const DatePickerInput = React.forwardRef<HTMLButtonElement, DatePickerInputProps>(\n (\n {\n value = new Date(),\n onChange,\n onError,\n min = new Date('01/01/1924'),\n max = new Date('01/01/2124'),\n disabled,\n width = '100%',\n maxWidth,\n minWidth,\n showTime = false,\n timeIntervalInMinutes = 15,\n hierarchy = 'secondary',\n disabledDates,\n selectDateMessage = 'Select Date',\n countryCode,\n renderActions,\n onTimeSelected,\n ...props\n }: DatePickerInputProps,\n ref: React.Ref<HTMLButtonElement>\n ) => {\n const [anchorElement, setAnchorElement] = useState<HTMLButtonElement | null>(null);\n const isOpen = anchorElement != null;\n const pickerRef = useRef<HTMLDivElement | null>(null);\n\n const isException = useCallback((target: HTMLElement) => {\n return target.closest('.tcn-suggestion-list') != null;\n }, []);\n\n const formatter = useMemo(() => {\n const formatOptions: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n };\n\n if (showTime) {\n formatOptions.hour = 'numeric';\n formatOptions.minute = '2-digit';\n formatOptions.hour12 = true;\n }\n\n return new Intl.DateTimeFormat(countryCode, formatOptions);\n }, [countryCode, showTime]);\n\n const formattedDate = value != null ? formatter.format(value) : selectDateMessage;\n\n function openPicker(e: React.MouseEvent<HTMLButtonElement>) {\n setAnchorElement(e.currentTarget);\n }\n\n function closePicker() {\n setAnchorElement(null);\n }\n\n useLayoutEffect(() => {\n requestAnimationFrame(() => {\n if (anchorElement != null) {\n pickerRef.current && pickerRef.current.focus();\n }\n });\n }, [anchorElement]);\n\n function processKeyInput(event: React.KeyboardEvent) {\n if (event.key === 'Escape') {\n closePicker();\n }\n }\n\n function handleRedirect() {\n const picker = pickerRef.current;\n\n if (picker != null) {\n picker.focus();\n }\n }\n\n function dateSelected(date: Date | null) {\n onChange?.(date);\n !showTime && closePicker();\n }\n\n function timeSelected(hour: number, minutes: number, seconds: number) {\n onTimeSelected?.(hour, minutes, seconds);\n closePicker();\n }\n\n return (\n <>\n <Button\n ref={ref}\n className={clsx(styles.button, 'tcn-select')}\n hAlign=\"start\"\n disabled={disabled}\n hierarchy={hierarchy}\n onClick={openPicker}\n width={width}\n maxWidth={maxWidth}\n {...props}\n >\n <span className=\"ellipsis\">{formattedDate}</span>\n </Button>\n <Popper\n anchorElement={anchorElement}\n disableClickAway\n veil\n onVeilClick={closePicker}\n onClose={closePicker}\n verticalAnchor=\"bottom\"\n horizontalAnchor=\"start\"\n verticalOrigin=\"top\"\n horizontalOrigin=\"start\"\n open={isOpen}\n isClickAwayException={isException}\n isScrollAwayException={isException}\n restoreFocus\n >\n <ZStack\n padding=\"8px\"\n className={clsx(styles.popover, 'tcn-date-picker-popover')}\n onKeyDown={processKeyInput}\n >\n <DatePicker\n ref={pickerRef}\n value={value}\n onChange={dateSelected}\n min={min}\n max={max}\n showTime={showTime}\n onError={onError}\n disabled={disabled}\n disabledDates={disabledDates}\n countryCode={countryCode}\n renderActions={renderActions}\n onTimeSelected={timeSelected}\n timeIntervalInMinutes={timeIntervalInMinutes}\n />\n <FocusRedirect onRedirect={handleRedirect} />\n </ZStack>\n </Popper>\n </>\n );\n }\n);\n"],"names":["DatePickerInput","React","value","onChange","onError","min","max","disabled","width","maxWidth","minWidth","showTime","timeIntervalInMinutes","hierarchy","disabledDates","selectDateMessage","countryCode","renderActions","onTimeSelected","props","ref","anchorElement","setAnchorElement","useState","isOpen","pickerRef","useRef","isException","useCallback","target","formatter","useMemo","formatOptions","formattedDate","openPicker","e","closePicker","useLayoutEffect","processKeyInput","event","handleRedirect","picker","dateSelected","date","timeSelected","hour","minutes","seconds","jsxs","Fragment","jsx","Button","clsx","styles","Popper","ZStack","DatePicker","FocusRedirect"],"mappings":"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"}
@@ -6,8 +6,6 @@ import "../../actions/button/base_button/base_button.js";
6
6
  import "../../actions/button/button_group/button_group.js";
7
7
  import "../../actions/button/slim_button/slim_button.js";
8
8
  import { Button as O } from "../../actions/button/button/button.js";
9
- import "../../actions/button/select_group/select_group.js";
10
- import "../../actions/button/select_group/single_select_group.js";
11
9
  import "../../actions/toggle/toggle.js";
12
10
  import { BodyText as $ } from "../../typography/body_text/body_text.js";
13
11
  import "../../typography/callout/callout.js";
@@ -17,8 +15,8 @@ import "../../typography/headline/headline.js";
17
15
  import "../../typography/subheadline/subheadline.js";
18
16
  import "../../typography/title/title.js";
19
17
  import { ClockIcon as j } from "@tcn/icons/clock_icon.js";
20
- import '../../date_picker_time_selector.css';const z = "_time-box_f3145be", P = "_time-box-title_6cc801b", Z = "_time-box-title-container_22add52", v = "_selected-time_33e3aa3", m = { "time-box": z, "time-box-title": P, "time-box-title-container": Z, "selected-time": v };
21
- function nt({
18
+ import '../../date_picker_time_selector.css';const z = "_time-box_f3145be", P = "_time-box-title_6cc801b", Z = "_time-box-title-container_22add52", v = "_selected-time_33e3aa3", s = { "time-box": z, "time-box-title": P, "time-box-title-container": Z, "selected-time": v };
19
+ function ot({
22
20
  origin: e,
23
21
  intervalInMinutes: f,
24
22
  max: b,
@@ -29,7 +27,7 @@ function nt({
29
27
  disabled: l,
30
28
  height: _
31
29
  }) {
32
- const s = f * 1e3 * 60, w = 24 * 1e3 * 60 * 60 / s, a = new Date(e || /* @__PURE__ */ new Date()), d = [], y = g?.getTime() ?? -1 / 0, M = b?.getTime() ?? 1 / 0;
30
+ const m = f * 1e3 * 60, w = 24 * 1e3 * 60 * 60 / m, a = new Date(e || /* @__PURE__ */ new Date()), d = [], y = g?.getTime() ?? -1 / 0, M = b?.getTime() ?? 1 / 0;
33
31
  a.setHours(0, 0, 0, 0);
34
32
  let p = a.getTime(), c = 0;
35
33
  for (let r = 0; r < w; r++) {
@@ -42,7 +40,7 @@ function nt({
42
40
  {
43
41
  width: "flex",
44
42
  hierarchy: "tertiary",
45
- className: n("tcn-selected-time", B && m["selected-time"]),
43
+ className: n("tcn-selected-time", B && s["selected-time"]),
46
44
  disabled: e == null || l || D,
47
45
  onClick: () => {
48
46
  T(t.getHours(), t.getMinutes(), t.getSeconds());
@@ -51,7 +49,7 @@ function nt({
51
49
  },
52
50
  r
53
51
  );
54
- c >= h && c <= S && d.push(I), p += s, c += s;
52
+ c >= h && c <= S && d.push(I), p += m, c += m;
55
53
  }
56
54
  return /* @__PURE__ */ N(
57
55
  x,
@@ -59,16 +57,16 @@ function nt({
59
57
  width: "auto",
60
58
  height: _,
61
59
  "data-is-disabled": l || e == null,
62
- className: n(m["time-box"], "tcn-time-box"),
60
+ className: n(s["time-box"], "tcn-time-box"),
63
61
  children: [
64
62
  /* @__PURE__ */ o(
65
63
  C,
66
64
  {
67
65
  className: n(
68
- m["time-box-title-container"],
66
+ s["time-box-title-container"],
69
67
  "tcn-time-box-title-container"
70
68
  ),
71
- children: /* @__PURE__ */ o($, { className: n(m["time-box-title"], "tcn-time-box-title"), children: /* @__PURE__ */ o(j, { size: "lg" }) })
69
+ children: /* @__PURE__ */ o($, { className: n(s["time-box-title"], "tcn-time-box-title"), children: /* @__PURE__ */ o(j, { size: "lg" }) })
72
70
  }
73
71
  ),
74
72
  /* @__PURE__ */ o(
@@ -86,6 +84,6 @@ function nt({
86
84
  );
87
85
  }
88
86
  export {
89
- nt as DatePickerTimeSelector
87
+ ot as DatePickerTimeSelector
90
88
  };
91
89
  //# sourceMappingURL=date_picker_time_selector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date_picker_time_selector.js","sources":["../../../src/inputs/date_picker/date_picker_time_selector.tsx"],"sourcesContent":["import { VStack } from '../../stacks/v_stack.js';\nimport { ZStack } from '../../stacks/z_stack.js';\nimport { clsx } from 'clsx';\nimport React from 'react';\nimport { Button } from '../../actions/index.js';\nimport styles from './date_picker_time_selector.module.css';\nimport { BodyText } from '../../typography/index.js';\nimport { ClockIcon } from '@tcn/icons/clock_icon.js';\n\nexport interface DatePickerTimeSelectorProps {\n origin: Date | null;\n intervalInMinutes: number;\n max: Date | null;\n min: Date | null;\n minVisibleTimeInMilliseconds: number;\n maxVisibleTimeInMilliseconds: number;\n onSelect: (hours: number, minutes: number, seconds: number) => void;\n disabled?: boolean;\n height?: string;\n}\n\nexport function DatePickerTimeSelector({\n origin,\n intervalInMinutes,\n max,\n min,\n minVisibleTimeInMilliseconds,\n maxVisibleTimeInMilliseconds,\n onSelect,\n disabled,\n height,\n}: DatePickerTimeSelectorProps) {\n const stepInMilliseconds = intervalInMinutes * 1000 * 60;\n const amountOfSteps = (24 * 1000 * 60 * 60) / stepInMilliseconds;\n const normalizedDate = new Date(origin || new Date());\n const options: React.ReactElement[] = [];\n const minTime = min?.getTime() ?? -Infinity;\n const maxTime = max?.getTime() ?? Infinity;\n\n normalizedDate.setHours(0, 0, 0, 0);\n let offset = normalizedDate.getTime();\n let offsetFromZero = 0;\n\n for (let x = 0; x < amountOfSteps; x++) {\n const date = new Date(offset);\n\n let hour = date.getHours() % 12;\n const minute = date.getMinutes();\n const meridiem = date.getHours() >= 12 ? 'PM' : 'AM';\n hour = hour === 0 ? 12 : hour;\n\n const isSelected =\n origin != null &&\n date.getHours() === origin.getHours() &&\n date.getMinutes() === origin.getMinutes() &&\n date.getSeconds() === origin.getSeconds();\n\n const time = date.getTime();\n const isOutOfRange = time < minTime || time > maxTime;\n\n const button = (\n <Button\n key={x}\n width=\"flex\"\n hierarchy=\"tertiary\"\n className={clsx('tcn-selected-time', isSelected && styles['selected-time'])}\n disabled={origin == null || disabled || isOutOfRange}\n onClick={() => {\n onSelect(date.getHours(), date.getMinutes(), date.getSeconds());\n }}\n >{`${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')} ${meridiem}`}</Button>\n );\n\n if (\n offsetFromZero >= minVisibleTimeInMilliseconds &&\n offsetFromZero <= maxVisibleTimeInMilliseconds\n ) {\n options.push(button);\n }\n\n offset += stepInMilliseconds;\n offsetFromZero += stepInMilliseconds;\n }\n\n return (\n <VStack\n width=\"auto\"\n height={height}\n data-is-disabled={disabled || origin == null}\n className={clsx(styles['time-box'], 'tcn-time-box')}\n >\n <ZStack\n className={clsx(\n styles['time-box-title-container'],\n 'tcn-time-box-title-container'\n )}\n >\n <BodyText className={clsx(styles['time-box-title'], 'tcn-time-box-title')}>\n <ClockIcon size=\"lg\" />\n </BodyText>\n </ZStack>\n <VStack\n width=\"auto\"\n height=\"flex\"\n overflowY=\"auto\"\n style={{ paddingInline: '4px' }}\n >\n {options}\n </VStack>\n </VStack>\n );\n}\n"],"names":["DatePickerTimeSelector","origin","intervalInMinutes","max","min","minVisibleTimeInMilliseconds","maxVisibleTimeInMilliseconds","onSelect","disabled","height","stepInMilliseconds","amountOfSteps","normalizedDate","options","minTime","maxTime","offset","offsetFromZero","x","date","hour","minute","meridiem","isSelected","time","isOutOfRange","button","jsx","Button","clsx","styles","jsxs","VStack","ZStack","BodyText","ClockIcon"],"mappings":";;;;;;;;;;;;;;;;;;;;AAqBO,SAASA,GAAuB;AAAA,EACrC,QAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,KAAAC;AAAA,EACA,KAAAC;AAAA,EACA,8BAAAC;AAAA,EACA,8BAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AACF,GAAgC;AAC9B,QAAMC,IAAqBR,IAAoB,MAAO,IAChDS,IAAiB,KAAK,MAAO,KAAK,KAAMD,GACxCE,IAAiB,IAAI,KAAKX,KAAU,oBAAI,MAAM,GAC9CY,IAAgC,CAAA,GAChCC,IAAUV,GAAK,QAAA,KAAa,QAC5BW,IAAUZ,GAAK,QAAA,KAAa;AAElC,EAAAS,EAAe,SAAS,GAAG,GAAG,GAAG,CAAC;AAClC,MAAII,IAASJ,EAAe,QAAA,GACxBK,IAAiB;AAErB,WAASC,IAAI,GAAGA,IAAIP,GAAeO,KAAK;AACtC,UAAMC,IAAO,IAAI,KAAKH,CAAM;AAE5B,QAAII,IAAOD,EAAK,SAAA,IAAa;AAC7B,UAAME,IAASF,EAAK,WAAA,GACdG,IAAWH,EAAK,SAAA,KAAc,KAAK,OAAO;AAChD,IAAAC,IAAOA,MAAS,IAAI,KAAKA;AAEzB,UAAMG,IACJtB,KAAU,QACVkB,EAAK,SAAA,MAAelB,EAAO,SAAA,KAC3BkB,EAAK,WAAA,MAAiBlB,EAAO,WAAA,KAC7BkB,EAAK,WAAA,MAAiBlB,EAAO,WAAA,GAEzBuB,IAAOL,EAAK,QAAA,GACZM,IAAeD,IAAOV,KAAWU,IAAOT,GAExCW,IACJ,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QAEC,OAAM;AAAA,QACN,WAAU;AAAA,QACV,WAAWC,EAAK,qBAAqBN,KAAcO,EAAO,eAAe,CAAC;AAAA,QAC1E,UAAU7B,KAAU,QAAQO,KAAYiB;AAAA,QACxC,SAAS,MAAM;AACb,UAAAlB,EAASY,EAAK,YAAYA,EAAK,cAAcA,EAAK,YAAY;AAAA,QAChE;AAAA,QACA,aAAGC,EAAK,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC,IAAIC,EAAO,WAAW,SAAS,GAAG,GAAG,CAAC,IAAIC,CAAQ;AAAA,MAAA;AAAA,MARhFJ;AAAA,IAAA;AAWT,IACED,KAAkBZ,KAClBY,KAAkBX,KAElBO,EAAQ,KAAKa,CAAM,GAGrBV,KAAUN,GACVO,KAAkBP;AAAA,EACpB;AAEA,SACE,gBAAAqB;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAAvB;AAAA,MACA,oBAAkBD,KAAYP,KAAU;AAAA,MACxC,WAAW4B,EAAKC,EAAO,UAAU,GAAG,cAAc;AAAA,MAElD,UAAA;AAAA,QAAA,gBAAAH;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,WAAWJ;AAAA,cACTC,EAAO,0BAA0B;AAAA,cACjC;AAAA,YAAA;AAAA,YAGF,UAAA,gBAAAH,EAACO,GAAA,EAAS,WAAWL,EAAKC,EAAO,gBAAgB,GAAG,oBAAoB,GACtE,UAAA,gBAAAH,EAACQ,GAAA,EAAU,MAAK,MAAK,EAAA,CACvB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF,gBAAAR;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,QAAO;AAAA,YACP,WAAU;AAAA,YACV,OAAO,EAAE,eAAe,MAAA;AAAA,YAEvB,UAAAnB;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"date_picker_time_selector.js","sources":["../../../src/inputs/date_picker/date_picker_time_selector.tsx"],"sourcesContent":["import { VStack } from '../../stacks/v_stack.js';\nimport { ZStack } from '../../stacks/z_stack.js';\nimport { clsx } from 'clsx';\nimport React from 'react';\nimport { Button } from '../../actions/index.js';\nimport styles from './date_picker_time_selector.module.css';\nimport { BodyText } from '../../typography/index.js';\nimport { ClockIcon } from '@tcn/icons/clock_icon.js';\n\nexport interface DatePickerTimeSelectorProps {\n origin: Date | null;\n intervalInMinutes: number;\n max: Date | null;\n min: Date | null;\n minVisibleTimeInMilliseconds: number;\n maxVisibleTimeInMilliseconds: number;\n onSelect: (hours: number, minutes: number, seconds: number) => void;\n disabled?: boolean;\n height?: string;\n}\n\nexport function DatePickerTimeSelector({\n origin,\n intervalInMinutes,\n max,\n min,\n minVisibleTimeInMilliseconds,\n maxVisibleTimeInMilliseconds,\n onSelect,\n disabled,\n height,\n}: DatePickerTimeSelectorProps) {\n const stepInMilliseconds = intervalInMinutes * 1000 * 60;\n const amountOfSteps = (24 * 1000 * 60 * 60) / stepInMilliseconds;\n const normalizedDate = new Date(origin || new Date());\n const options: React.ReactElement[] = [];\n const minTime = min?.getTime() ?? -Infinity;\n const maxTime = max?.getTime() ?? Infinity;\n\n normalizedDate.setHours(0, 0, 0, 0);\n let offset = normalizedDate.getTime();\n let offsetFromZero = 0;\n\n for (let x = 0; x < amountOfSteps; x++) {\n const date = new Date(offset);\n\n let hour = date.getHours() % 12;\n const minute = date.getMinutes();\n const meridiem = date.getHours() >= 12 ? 'PM' : 'AM';\n hour = hour === 0 ? 12 : hour;\n\n const isSelected =\n origin != null &&\n date.getHours() === origin.getHours() &&\n date.getMinutes() === origin.getMinutes() &&\n date.getSeconds() === origin.getSeconds();\n\n const time = date.getTime();\n const isOutOfRange = time < minTime || time > maxTime;\n\n const button = (\n <Button\n key={x}\n width=\"flex\"\n hierarchy=\"tertiary\"\n className={clsx('tcn-selected-time', isSelected && styles['selected-time'])}\n disabled={origin == null || disabled || isOutOfRange}\n onClick={() => {\n onSelect(date.getHours(), date.getMinutes(), date.getSeconds());\n }}\n >{`${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')} ${meridiem}`}</Button>\n );\n\n if (\n offsetFromZero >= minVisibleTimeInMilliseconds &&\n offsetFromZero <= maxVisibleTimeInMilliseconds\n ) {\n options.push(button);\n }\n\n offset += stepInMilliseconds;\n offsetFromZero += stepInMilliseconds;\n }\n\n return (\n <VStack\n width=\"auto\"\n height={height}\n data-is-disabled={disabled || origin == null}\n className={clsx(styles['time-box'], 'tcn-time-box')}\n >\n <ZStack\n className={clsx(\n styles['time-box-title-container'],\n 'tcn-time-box-title-container'\n )}\n >\n <BodyText className={clsx(styles['time-box-title'], 'tcn-time-box-title')}>\n <ClockIcon size=\"lg\" />\n </BodyText>\n </ZStack>\n <VStack\n width=\"auto\"\n height=\"flex\"\n overflowY=\"auto\"\n style={{ paddingInline: '4px' }}\n >\n {options}\n </VStack>\n </VStack>\n );\n}\n"],"names":["DatePickerTimeSelector","origin","intervalInMinutes","max","min","minVisibleTimeInMilliseconds","maxVisibleTimeInMilliseconds","onSelect","disabled","height","stepInMilliseconds","amountOfSteps","normalizedDate","options","minTime","maxTime","offset","offsetFromZero","x","date","hour","minute","meridiem","isSelected","time","isOutOfRange","button","jsx","Button","clsx","styles","jsxs","VStack","ZStack","BodyText","ClockIcon"],"mappings":";;;;;;;;;;;;;;;;;;AAqBO,SAASA,GAAuB;AAAA,EACrC,QAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,KAAAC;AAAA,EACA,KAAAC;AAAA,EACA,8BAAAC;AAAA,EACA,8BAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AACF,GAAgC;AAC9B,QAAMC,IAAqBR,IAAoB,MAAO,IAChDS,IAAiB,KAAK,MAAO,KAAK,KAAMD,GACxCE,IAAiB,IAAI,KAAKX,KAAU,oBAAI,MAAM,GAC9CY,IAAgC,CAAA,GAChCC,IAAUV,GAAK,QAAA,KAAa,QAC5BW,IAAUZ,GAAK,QAAA,KAAa;AAElC,EAAAS,EAAe,SAAS,GAAG,GAAG,GAAG,CAAC;AAClC,MAAII,IAASJ,EAAe,QAAA,GACxBK,IAAiB;AAErB,WAASC,IAAI,GAAGA,IAAIP,GAAeO,KAAK;AACtC,UAAMC,IAAO,IAAI,KAAKH,CAAM;AAE5B,QAAII,IAAOD,EAAK,SAAA,IAAa;AAC7B,UAAME,IAASF,EAAK,WAAA,GACdG,IAAWH,EAAK,SAAA,KAAc,KAAK,OAAO;AAChD,IAAAC,IAAOA,MAAS,IAAI,KAAKA;AAEzB,UAAMG,IACJtB,KAAU,QACVkB,EAAK,SAAA,MAAelB,EAAO,SAAA,KAC3BkB,EAAK,WAAA,MAAiBlB,EAAO,WAAA,KAC7BkB,EAAK,WAAA,MAAiBlB,EAAO,WAAA,GAEzBuB,IAAOL,EAAK,QAAA,GACZM,IAAeD,IAAOV,KAAWU,IAAOT,GAExCW,IACJ,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QAEC,OAAM;AAAA,QACN,WAAU;AAAA,QACV,WAAWC,EAAK,qBAAqBN,KAAcO,EAAO,eAAe,CAAC;AAAA,QAC1E,UAAU7B,KAAU,QAAQO,KAAYiB;AAAA,QACxC,SAAS,MAAM;AACb,UAAAlB,EAASY,EAAK,YAAYA,EAAK,cAAcA,EAAK,YAAY;AAAA,QAChE;AAAA,QACA,aAAGC,EAAK,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC,IAAIC,EAAO,WAAW,SAAS,GAAG,GAAG,CAAC,IAAIC,CAAQ;AAAA,MAAA;AAAA,MARhFJ;AAAA,IAAA;AAWT,IACED,KAAkBZ,KAClBY,KAAkBX,KAElBO,EAAQ,KAAKa,CAAM,GAGrBV,KAAUN,GACVO,KAAkBP;AAAA,EACpB;AAEA,SACE,gBAAAqB;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAAvB;AAAA,MACA,oBAAkBD,KAAYP,KAAU;AAAA,MACxC,WAAW4B,EAAKC,EAAO,UAAU,GAAG,cAAc;AAAA,MAElD,UAAA;AAAA,QAAA,gBAAAH;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,WAAWJ;AAAA,cACTC,EAAO,0BAA0B;AAAA,cACjC;AAAA,YAAA;AAAA,YAGF,UAAA,gBAAAH,EAACO,GAAA,EAAS,WAAWL,EAAKC,EAAO,gBAAgB,GAAG,oBAAoB,GACtE,UAAA,gBAAAH,EAACQ,GAAA,EAAU,MAAK,MAAK,EAAA,CACvB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF,gBAAAR;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,QAAO;AAAA,YACP,WAAU;AAAA,YACV,OAAO,EAAE,eAAe,MAAA;AAAA,YAEvB,UAAAnB;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -3,8 +3,6 @@ import "../../actions/button/base_button/base_button.js";
3
3
  import "../../actions/button/button_group/button_group.js";
4
4
  import "../../actions/button/slim_button/slim_button.js";
5
5
  import { Button as h } from "../../actions/button/button/button.js";
6
- import "../../actions/button/select_group/select_group.js";
7
- import "../../actions/button/select_group/single_select_group.js";
8
6
  import "../../actions/toggle/toggle.js";
9
7
  import { clsx as d } from "clsx";
10
8
  import { useState as n } from "react";
@@ -12,13 +10,13 @@ import { Popper as y } from "../../overlay/popper/legacy/popper.js";
12
10
  import { DatePickerYearSelector as g } from "./date_picker_year_selector.js";
13
11
  import { useSignalValue as b } from "@tcn/state";
14
12
  import '../../date_picker_year_input.css';const k = "_year-select_eb568a7", s = { "year-select": k };
15
- function N({ presenter: t }) {
16
- const { visibleYear: c } = b(t.stateBroadcast), [i, a] = n(null), [l, r] = n(!1);
13
+ function F({ presenter: t }) {
14
+ const { visibleYear: c } = b(t.stateBroadcast), [a, i] = n(null), [l, r] = n(!1);
17
15
  function o() {
18
16
  r(!1);
19
17
  }
20
18
  function m(p) {
21
- a(p.currentTarget), r(!0);
19
+ i(p.currentTarget), r(!0);
22
20
  }
23
21
  return /* @__PURE__ */ u(f, { children: [
24
22
  /* @__PURE__ */ e(
@@ -35,7 +33,7 @@ function N({ presenter: t }) {
35
33
  /* @__PURE__ */ e(
36
34
  y,
37
35
  {
38
- anchorElement: i,
36
+ anchorElement: a,
39
37
  horizontalAnchor: "center",
40
38
  horizontalOrigin: "center",
41
39
  onClose: o,
@@ -47,6 +45,6 @@ function N({ presenter: t }) {
47
45
  ] });
48
46
  }
49
47
  export {
50
- N as DatePickerYearInput
48
+ F as DatePickerYearInput
51
49
  };
52
50
  //# sourceMappingURL=date_picker_year_input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date_picker_year_input.js","sources":["../../../src/inputs/date_picker/date_picker_year_input.tsx"],"sourcesContent":["import { Button } from '../../actions/index.js';\nimport { clsx } from 'clsx';\nimport styles from './date_picker_year_input.module.css';\nimport { useState } from 'react';\nimport { Popper } from '../../overlay/popper/legacy/popper.js';\nimport { DatePickerPresenter } from './date_picker_presenter.js';\nimport { DatePickerYearSelector } from './date_picker_year_selector.js';\nimport { useSignalValue } from '@tcn/state';\n\nexport interface DatePickerYearInputProps {\n presenter: DatePickerPresenter;\n}\n\nexport function DatePickerYearInput({ presenter }: DatePickerYearInputProps) {\n const { visibleYear } = useSignalValue(presenter.stateBroadcast);\n const [buttonRef, setButtonRef] = useState<HTMLButtonElement | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n function close() {\n setIsOpen(false);\n }\n\n function open(event: React.MouseEvent<HTMLButtonElement>) {\n setButtonRef(event.currentTarget);\n setIsOpen(true);\n }\n\n return (\n <>\n <Button\n hierarchy=\"tertiary\"\n className={clsx('tcn-date-picker-year-select', styles['year-select'])}\n width=\"auto\"\n hAlign=\"start\"\n onClick={open}\n >\n <span className={styles.selectedLabel}>{visibleYear}</span>\n </Button>\n <Popper\n anchorElement={buttonRef}\n horizontalAnchor=\"center\"\n horizontalOrigin=\"center\"\n onClose={close}\n open={isOpen}\n restoreFocus\n >\n <DatePickerYearSelector presenter={presenter} onClose={close} />\n </Popper>\n </>\n );\n}\n"],"names":["DatePickerYearInput","presenter","visibleYear","useSignalValue","buttonRef","setButtonRef","useState","isOpen","setIsOpen","close","open","event","jsxs","Fragment","jsx","Button","clsx","styles","Popper","DatePickerYearSelector"],"mappings":";;;;;;;;;;;;;;AAaO,SAASA,EAAoB,EAAE,WAAAC,KAAuC;AAC3E,QAAM,EAAE,aAAAC,EAAA,IAAgBC,EAAeF,EAAU,cAAc,GACzD,CAACG,GAAWC,CAAY,IAAIC,EAAmC,IAAI,GACnE,CAACC,GAAQC,CAAS,IAAIF,EAAS,EAAK;AAE1C,WAASG,IAAQ;AACf,IAAAD,EAAU,EAAK;AAAA,EACjB;AAEA,WAASE,EAAKC,GAA4C;AACxD,IAAAN,EAAaM,EAAM,aAAa,GAChCH,EAAU,EAAI;AAAA,EAChB;AAEA,SACE,gBAAAI,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,WAAWC,EAAK,+BAA+BC,EAAO,aAAa,CAAC;AAAA,QACpE,OAAM;AAAA,QACN,QAAO;AAAA,QACP,SAASP;AAAA,QAET,UAAA,gBAAAI,EAAC,QAAA,EAAK,WAAWG,EAAO,eAAgB,UAAAf,EAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,IAEtD,gBAAAY;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,eAAed;AAAA,QACf,kBAAiB;AAAA,QACjB,kBAAiB;AAAA,QACjB,SAASK;AAAA,QACT,MAAMF;AAAA,QACN,cAAY;AAAA,QAEZ,UAAA,gBAAAO,EAACK,GAAA,EAAuB,WAAAlB,GAAsB,SAASQ,EAAA,CAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAChE,GACF;AAEJ;"}
1
+ {"version":3,"file":"date_picker_year_input.js","sources":["../../../src/inputs/date_picker/date_picker_year_input.tsx"],"sourcesContent":["import { Button } from '../../actions/index.js';\nimport { clsx } from 'clsx';\nimport styles from './date_picker_year_input.module.css';\nimport { useState } from 'react';\nimport { Popper } from '../../overlay/popper/legacy/popper.js';\nimport { DatePickerPresenter } from './date_picker_presenter.js';\nimport { DatePickerYearSelector } from './date_picker_year_selector.js';\nimport { useSignalValue } from '@tcn/state';\n\nexport interface DatePickerYearInputProps {\n presenter: DatePickerPresenter;\n}\n\nexport function DatePickerYearInput({ presenter }: DatePickerYearInputProps) {\n const { visibleYear } = useSignalValue(presenter.stateBroadcast);\n const [buttonRef, setButtonRef] = useState<HTMLButtonElement | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n function close() {\n setIsOpen(false);\n }\n\n function open(event: React.MouseEvent<HTMLButtonElement>) {\n setButtonRef(event.currentTarget);\n setIsOpen(true);\n }\n\n return (\n <>\n <Button\n hierarchy=\"tertiary\"\n className={clsx('tcn-date-picker-year-select', styles['year-select'])}\n width=\"auto\"\n hAlign=\"start\"\n onClick={open}\n >\n <span className={styles.selectedLabel}>{visibleYear}</span>\n </Button>\n <Popper\n anchorElement={buttonRef}\n horizontalAnchor=\"center\"\n horizontalOrigin=\"center\"\n onClose={close}\n open={isOpen}\n restoreFocus\n >\n <DatePickerYearSelector presenter={presenter} onClose={close} />\n </Popper>\n </>\n );\n}\n"],"names":["DatePickerYearInput","presenter","visibleYear","useSignalValue","buttonRef","setButtonRef","useState","isOpen","setIsOpen","close","open","event","jsxs","Fragment","jsx","Button","clsx","styles","Popper","DatePickerYearSelector"],"mappings":";;;;;;;;;;;;AAaO,SAASA,EAAoB,EAAE,WAAAC,KAAuC;AAC3E,QAAM,EAAE,aAAAC,EAAA,IAAgBC,EAAeF,EAAU,cAAc,GACzD,CAACG,GAAWC,CAAY,IAAIC,EAAmC,IAAI,GACnE,CAACC,GAAQC,CAAS,IAAIF,EAAS,EAAK;AAE1C,WAASG,IAAQ;AACf,IAAAD,EAAU,EAAK;AAAA,EACjB;AAEA,WAASE,EAAKC,GAA4C;AACxD,IAAAN,EAAaM,EAAM,aAAa,GAChCH,EAAU,EAAI;AAAA,EAChB;AAEA,SACE,gBAAAI,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,WAAWC,EAAK,+BAA+BC,EAAO,aAAa,CAAC;AAAA,QACpE,OAAM;AAAA,QACN,QAAO;AAAA,QACP,SAASP;AAAA,QAET,UAAA,gBAAAI,EAAC,QAAA,EAAK,WAAWG,EAAO,eAAgB,UAAAf,EAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,IAEtD,gBAAAY;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,eAAed;AAAA,QACf,kBAAiB;AAAA,QACjB,kBAAiB;AAAA,QACjB,SAASK;AAAA,QACT,MAAMF;AAAA,QACN,cAAY;AAAA,QAEZ,UAAA,gBAAAO,EAACK,GAAA,EAAuB,WAAAlB,GAAsB,SAASQ,EAAA,CAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAChE,GACF;AAEJ;"}
@@ -7,8 +7,6 @@ import "../../actions/button/base_button/base_button.js";
7
7
  import "../../actions/button/button_group/button_group.js";
8
8
  import { SlimButton as g } from "../../actions/button/slim_button/slim_button.js";
9
9
  import "../../actions/button/button/button.js";
10
- import "../../actions/button/select_group/select_group.js";
11
- import "../../actions/button/select_group/single_select_group.js";
12
10
  import "../../actions/toggle/toggle.js";
13
11
  import { HStack as t } from "../../stacks/h_stack.js";
14
12
  import { Spacer as x } from "../../stacks/spacer.js";
@@ -28,7 +26,7 @@ import "../../utils/dnd/context.js";
28
26
  import { clsx as y } from "clsx";
29
27
  import "../../draggable.module-BgelQsuJ.js";
30
28
  import '../../date_picker_year_selector.css';const q = "_date-picker-year-selector_ab05e1f", A = "_date-picker-year-button_fded757", Y = { "date-picker-year-selector": q, "date-picker-year-button": A };
31
- function be({
29
+ function Ye({
32
30
  presenter: s,
33
31
  onClose: k
34
32
  }) {
@@ -111,6 +109,6 @@ function be({
111
109
  );
112
110
  }
113
111
  export {
114
- be as DatePickerYearSelector
112
+ Ye as DatePickerYearSelector
115
113
  };
116
114
  //# sourceMappingURL=date_picker_year_selector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date_picker_year_selector.js","sources":["../../../src/inputs/date_picker/date_picker_year_selector.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { ChevronLeftIcon } from '@tcn/icons/chevron_left_icon.js';\nimport { ChevronRightIcon } from '@tcn/icons/chevron_right_icon.js';\nimport { useSignalValue } from '@tcn/state';\nimport { SlimButton } from '../../actions/index.js';\nimport { HStack } from '../../stacks/h_stack.js';\nimport { Spacer } from '../../stacks/spacer.js';\nimport { VStack } from '../../stacks/v_stack.js';\nimport { BodyText, Headline } from '../../typography/index.js';\nimport { DatePickerPresenter } from './date_picker_presenter.js';\nimport styles from './date_picker_year_selector.module.css';\nimport { FocusRedirect } from '../../utils/index.js';\nimport { clsx } from 'clsx';\n\nexport interface DatePickerYearSelectorProps {\n presenter: DatePickerPresenter;\n onClose: () => void;\n}\n\nexport function DatePickerYearSelector({\n presenter,\n onClose,\n}: DatePickerYearSelectorProps) {\n const { min, max, visibleYear, visibleMonth } = useSignalValue(\n presenter.stateBroadcast\n );\n\n const [offset, setOffset] = useState(0);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const minYear = min == null ? -Infinity : min.getFullYear();\n const maxYear = max == null ? Infinity : max.getFullYear();\n const years: React.ReactNode[] = [];\n const remainder = visibleYear % 20;\n let firstYear = visibleYear - remainder + offset;\n let lastYear = firstYear + 19;\n\n for (let x = 0; x < 20; x++) {\n let disabled = false;\n const date = new Date(visibleYear, visibleMonth, 1);\n date.setFullYear(visibleYear - remainder + x + offset);\n\n if (date.getFullYear() > maxYear || date.getFullYear() < minYear) {\n disabled = true;\n }\n\n const Button: any = HStack;\n\n years.push(\n <Button\n as=\"button\"\n key={x}\n width=\"flex\"\n disabled={disabled}\n className={clsx(styles['date-picker-year-button'], 'tcn-date-picker-year-button')}\n data-is-disabled={String(disabled)}\n data-is-selected={String(date.getFullYear() === visibleYear)}\n onClick={() => {\n presenter.setVisibleYear(date.getFullYear());\n onClose();\n }}\n >\n <BodyText>{date.getFullYear()}</BodyText>\n </Button>\n );\n }\n\n function focus() {\n if (containerRef.current != null) {\n containerRef.current.focus();\n }\n }\n\n useEffect(() => {\n if (containerRef.current != null) {\n containerRef.current.focus();\n }\n }, []);\n\n const firstRow = years.slice(0, 4);\n const secondRow = years.slice(4, 8);\n const thirdRow = years.slice(8, 12);\n const fourthRow = years.slice(12, 16);\n const fifthRow = years.slice(16, 20);\n\n function prev() {\n setOffset(offset - 20);\n }\n\n function next() {\n setOffset(offset + 20);\n }\n\n return (\n <VStack\n ref={containerRef}\n tabIndex={0}\n padding=\"8px\"\n className={clsx(\n styles['date-picker-year-selector'],\n 'tcn-date-picker-year-selector'\n )}\n gap=\"4px\"\n >\n <HStack gap=\"4px\">\n <SlimButton onClick={prev} hierarchy=\"tertiary\">\n <ChevronLeftIcon flipOnRtl size=\"md\" />\n </SlimButton>\n <Spacer />\n <Headline\n selectable={false}\n emphasis=\"faint\"\n hierarchy=\"tertiary\"\n >{`${firstYear}-${lastYear}`}</Headline>\n <Spacer />\n <SlimButton hierarchy=\"tertiary\" onClick={next}>\n <ChevronRightIcon size=\"md\" />\n </SlimButton>\n </HStack>\n <HStack gap=\"4px\">{firstRow}</HStack>\n <HStack gap=\"4px\">{secondRow}</HStack>\n <HStack gap=\"4px\">{thirdRow}</HStack>\n <HStack gap=\"4px\">{fourthRow}</HStack>\n <HStack gap=\"4px\">{fifthRow}</HStack>\n <FocusRedirect onRedirect={focus} />\n </VStack>\n );\n}\n"],"names":["DatePickerYearSelector","presenter","onClose","min","max","visibleYear","visibleMonth","useSignalValue","offset","setOffset","useState","containerRef","useRef","minYear","maxYear","years","remainder","firstYear","lastYear","x","disabled","date","Button","HStack","jsx","clsx","styles","BodyText","focus","useEffect","firstRow","secondRow","thirdRow","fourthRow","fifthRow","prev","next","jsxs","VStack","SlimButton","ChevronLeftIcon","Spacer","Headline","ChevronRightIcon","FocusRedirect"],"mappings":"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"}
1
+ {"version":3,"file":"date_picker_year_selector.js","sources":["../../../src/inputs/date_picker/date_picker_year_selector.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { ChevronLeftIcon } from '@tcn/icons/chevron_left_icon.js';\nimport { ChevronRightIcon } from '@tcn/icons/chevron_right_icon.js';\nimport { useSignalValue } from '@tcn/state';\nimport { SlimButton } from '../../actions/index.js';\nimport { HStack } from '../../stacks/h_stack.js';\nimport { Spacer } from '../../stacks/spacer.js';\nimport { VStack } from '../../stacks/v_stack.js';\nimport { BodyText, Headline } from '../../typography/index.js';\nimport { DatePickerPresenter } from './date_picker_presenter.js';\nimport styles from './date_picker_year_selector.module.css';\nimport { FocusRedirect } from '../../utils/index.js';\nimport { clsx } from 'clsx';\n\nexport interface DatePickerYearSelectorProps {\n presenter: DatePickerPresenter;\n onClose: () => void;\n}\n\nexport function DatePickerYearSelector({\n presenter,\n onClose,\n}: DatePickerYearSelectorProps) {\n const { min, max, visibleYear, visibleMonth } = useSignalValue(\n presenter.stateBroadcast\n );\n\n const [offset, setOffset] = useState(0);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const minYear = min == null ? -Infinity : min.getFullYear();\n const maxYear = max == null ? Infinity : max.getFullYear();\n const years: React.ReactNode[] = [];\n const remainder = visibleYear % 20;\n let firstYear = visibleYear - remainder + offset;\n let lastYear = firstYear + 19;\n\n for (let x = 0; x < 20; x++) {\n let disabled = false;\n const date = new Date(visibleYear, visibleMonth, 1);\n date.setFullYear(visibleYear - remainder + x + offset);\n\n if (date.getFullYear() > maxYear || date.getFullYear() < minYear) {\n disabled = true;\n }\n\n const Button: any = HStack;\n\n years.push(\n <Button\n as=\"button\"\n key={x}\n width=\"flex\"\n disabled={disabled}\n className={clsx(styles['date-picker-year-button'], 'tcn-date-picker-year-button')}\n data-is-disabled={String(disabled)}\n data-is-selected={String(date.getFullYear() === visibleYear)}\n onClick={() => {\n presenter.setVisibleYear(date.getFullYear());\n onClose();\n }}\n >\n <BodyText>{date.getFullYear()}</BodyText>\n </Button>\n );\n }\n\n function focus() {\n if (containerRef.current != null) {\n containerRef.current.focus();\n }\n }\n\n useEffect(() => {\n if (containerRef.current != null) {\n containerRef.current.focus();\n }\n }, []);\n\n const firstRow = years.slice(0, 4);\n const secondRow = years.slice(4, 8);\n const thirdRow = years.slice(8, 12);\n const fourthRow = years.slice(12, 16);\n const fifthRow = years.slice(16, 20);\n\n function prev() {\n setOffset(offset - 20);\n }\n\n function next() {\n setOffset(offset + 20);\n }\n\n return (\n <VStack\n ref={containerRef}\n tabIndex={0}\n padding=\"8px\"\n className={clsx(\n styles['date-picker-year-selector'],\n 'tcn-date-picker-year-selector'\n )}\n gap=\"4px\"\n >\n <HStack gap=\"4px\">\n <SlimButton onClick={prev} hierarchy=\"tertiary\">\n <ChevronLeftIcon flipOnRtl size=\"md\" />\n </SlimButton>\n <Spacer />\n <Headline\n selectable={false}\n emphasis=\"faint\"\n hierarchy=\"tertiary\"\n >{`${firstYear}-${lastYear}`}</Headline>\n <Spacer />\n <SlimButton hierarchy=\"tertiary\" onClick={next}>\n <ChevronRightIcon size=\"md\" />\n </SlimButton>\n </HStack>\n <HStack gap=\"4px\">{firstRow}</HStack>\n <HStack gap=\"4px\">{secondRow}</HStack>\n <HStack gap=\"4px\">{thirdRow}</HStack>\n <HStack gap=\"4px\">{fourthRow}</HStack>\n <HStack gap=\"4px\">{fifthRow}</HStack>\n <FocusRedirect onRedirect={focus} />\n </VStack>\n );\n}\n"],"names":["DatePickerYearSelector","presenter","onClose","min","max","visibleYear","visibleMonth","useSignalValue","offset","setOffset","useState","containerRef","useRef","minYear","maxYear","years","remainder","firstYear","lastYear","x","disabled","date","Button","HStack","jsx","clsx","styles","BodyText","focus","useEffect","firstRow","secondRow","thirdRow","fourthRow","fifthRow","prev","next","jsxs","VStack","SlimButton","ChevronLeftIcon","Spacer","Headline","ChevronRightIcon","FocusRedirect"],"mappings":"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"}
@@ -40,4 +40,6 @@ export * from './switch/switch.js';
40
40
  export * from './textarea/textarea.js';
41
41
  export * from './unit_input/unit_input.js';
42
42
  export * from './input_group/input_group.js';
43
+ export { SelectGroup, type SelectGroupProps, } from '../inputs/select_group/select_group.js';
44
+ export { SingleSelectGroup, type SingleSelectGroupProps, } from '../inputs/select_group/single_select_group.js';
43
45
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/inputs/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,0BAA0B,CAAC;AAEzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AAEjC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AACxD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAEhD,cAAc,sCAAsC,CAAC;AAErD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qCAAqC,CAAC;AAEpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,qDAAqD,CAAC;AACpE,cAAc,4CAA4C,CAAC;AAE3D,cAAc,kBAAkB,CAAC;AAEjC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AAEjD,cAAc,oBAAoB,CAAC;AAEnC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,4BAA4B,CAAC;AAE3C,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/inputs/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,0BAA0B,CAAC;AAEzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AAEjC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AACxD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAEhD,cAAc,sCAAsC,CAAC;AAErD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qCAAqC,CAAC;AAEpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,qDAAqD,CAAC;AACpE,cAAc,4CAA4C,CAAC;AAE3D,cAAc,kBAAkB,CAAC;AAEjC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AAEjD,cAAc,oBAAoB,CAAC;AAEnC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,4BAA4B,CAAC;AAE3C,cAAc,8BAA8B,CAAC;AAE7C,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,+CAA+C,CAAC"}