@ryuzaki13/react-foundation-ui 1.5.10 → 1.5.11

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 (107) hide show
  1. package/dist/advanced-search/index.js +182 -148
  2. package/dist/advanced-search/index.js.map +1 -1
  3. package/dist/advanced-search/model/useAdvancedSearchSelection.d.ts +1 -1
  4. package/dist/advanced-search/model/useAdvancedSearchSelection.d.ts.map +1 -1
  5. package/dist/advanced-search/ui/AdvancedSearchModal.d.ts +12 -3
  6. package/dist/advanced-search/ui/AdvancedSearchModal.d.ts.map +1 -1
  7. package/dist/advanced-search/ui/AdvancedSearchModalSession.d.ts +15 -0
  8. package/dist/advanced-search/ui/AdvancedSearchModalSession.d.ts.map +1 -0
  9. package/dist/advanced-search/ui/AdvancedSearchSelect.d.ts.map +1 -1
  10. package/dist/badge/index.js +1 -1
  11. package/dist/base-table/index.js +1 -1
  12. package/dist/button/index.js +1 -1
  13. package/dist/check-box/index.js +1 -1
  14. package/dist/chunks/{CalendarView-BSshXZAX.js → CalendarView-DqA-PbAU.js} +42 -42
  15. package/dist/chunks/{CalendarView-BSshXZAX.js.map → CalendarView-DqA-PbAU.js.map} +1 -1
  16. package/dist/chunks/{ImageViewerRuntime-BMs3BBkV.js → ImageViewerRuntime-HGBWp9NM.js} +18 -18
  17. package/dist/chunks/{ImageViewerRuntime-BMs3BBkV.js.map → ImageViewerRuntime-HGBWp9NM.js.map} +1 -1
  18. package/dist/chunks/{TextEditorLexicalClient-CLjpATRu.js → TextEditorLexicalClient-B084kVzu.js} +322 -322
  19. package/dist/chunks/{TextEditorLexicalClient-CLjpATRu.js.map → TextEditorLexicalClient-B084kVzu.js.map} +1 -1
  20. package/dist/chunks/{badge-CaooZXYD.js → badge-DMM8cOHd.js} +16 -16
  21. package/dist/chunks/{badge-CaooZXYD.js.map → badge-DMM8cOHd.js.map} +1 -1
  22. package/dist/chunks/{base-table-fUJY__6M.js → base-table-CJdKCKhb.js} +125 -125
  23. package/dist/chunks/{base-table-fUJY__6M.js.map → base-table-CJdKCKhb.js.map} +1 -1
  24. package/dist/chunks/{button-C--u7uJj.js → button-CzUO5rzq.js} +17 -17
  25. package/dist/chunks/{button-C--u7uJj.js.map → button-CzUO5rzq.js.map} +1 -1
  26. package/dist/chunks/{check-box-BZiEBR9c.js → check-box-sfGjYczQ.js} +11 -11
  27. package/dist/chunks/{check-box-BZiEBR9c.js.map → check-box-sfGjYczQ.js.map} +1 -1
  28. package/dist/chunks/{context-menu-XZ-e0f6_.js → context-menu-6nJkPmKV.js} +83 -83
  29. package/dist/chunks/{context-menu-XZ-e0f6_.js.map → context-menu-6nJkPmKV.js.map} +1 -1
  30. package/dist/chunks/date-input-9T8AoG5U.js +341 -0
  31. package/dist/chunks/{date-input-Dr5QNVT6.js.map → date-input-9T8AoG5U.js.map} +1 -1
  32. package/dist/chunks/{input-BNszawm6.js → input-VC8jEoTa.js} +37 -37
  33. package/dist/chunks/{input-BNszawm6.js.map → input-VC8jEoTa.js.map} +1 -1
  34. package/dist/chunks/{input-files-DxLVr2PF.js → input-files-CoMjadk7.js} +22 -22
  35. package/dist/chunks/{input-files-DxLVr2PF.js.map → input-files-CoMjadk7.js.map} +1 -1
  36. package/dist/chunks/{input-search-C2OOhZlw.js → input-search-Bs_9SxT0.js} +2 -2
  37. package/dist/chunks/{input-search-C2OOhZlw.js.map → input-search-Bs_9SxT0.js.map} +1 -1
  38. package/dist/chunks/{misc-Cp_r022Z.js → misc-CkRRma5E.js} +55 -55
  39. package/dist/chunks/{misc-Cp_r022Z.js.map → misc-CkRRma5E.js.map} +1 -1
  40. package/dist/chunks/{modal-DK9M7lT5.js → modal-LHkNxBko.js} +38 -38
  41. package/dist/chunks/{modal-DK9M7lT5.js.map → modal-LHkNxBko.js.map} +1 -1
  42. package/dist/chunks/{multi-select-CFHaQPot.js → multi-select-BJ6Lst1E.js} +44 -44
  43. package/dist/chunks/{multi-select-CFHaQPot.js.map → multi-select-BJ6Lst1E.js.map} +1 -1
  44. package/dist/chunks/{picker-D3Fc15JH.js → picker-DLnfOgZj.js} +34 -34
  45. package/dist/chunks/{picker-D3Fc15JH.js.map → picker-DLnfOgZj.js.map} +1 -1
  46. package/dist/chunks/{popover-BTT7zSqx.js → popover-IExDrsF6.js} +67 -67
  47. package/dist/chunks/{popover-BTT7zSqx.js.map → popover-IExDrsF6.js.map} +1 -1
  48. package/dist/chunks/{select-BolFlcoY.js → select-CysiIrej.js} +5 -5
  49. package/dist/chunks/{select-BolFlcoY.js.map → select-CysiIrej.js.map} +1 -1
  50. package/dist/chunks/{sortable-DcTIAbjD.js → sortable-BKIwlqhI.js} +17 -17
  51. package/dist/chunks/{sortable-DcTIAbjD.js.map → sortable-BKIwlqhI.js.map} +1 -1
  52. package/dist/chunks/{table-BChs6bgR.js → table-CIWdAcPY.js} +2 -2
  53. package/dist/chunks/{table-BChs6bgR.js.map → table-CIWdAcPY.js.map} +1 -1
  54. package/dist/chunks/{types-CxXyru6U.js → types-D9Wj9wrg.js} +21 -21
  55. package/dist/chunks/{types-CxXyru6U.js.map → types-D9Wj9wrg.js.map} +1 -1
  56. package/dist/chunks/{useODataSelectBase-BhCMCzv_.js → useODataSelectBase-Bq36Wp1U.js} +8 -8
  57. package/dist/chunks/{useODataSelectBase-BhCMCzv_.js.map → useODataSelectBase-Bq36Wp1U.js.map} +1 -1
  58. package/dist/context-menu/index.js +1 -1
  59. package/dist/date-input/index.js +2 -2
  60. package/dist/date-time-input/index.js +32 -32
  61. package/dist/dialog/index.js +9 -9
  62. package/dist/disclosure/index.js +10 -10
  63. package/dist/drop-zone/index.js +8 -8
  64. package/dist/errors/index.js +8 -8
  65. package/dist/expandable-action-panel/index.js +16 -16
  66. package/dist/flex/useFlexClasses.d.ts +1 -1
  67. package/dist/fullscreen-portal/index.js +7 -7
  68. package/dist/image/index.js +27 -27
  69. package/dist/input/index.js +1 -1
  70. package/dist/input-date-time/index.js +1 -1
  71. package/dist/input-file/index.js +1 -1
  72. package/dist/input-files/index.js +1 -1
  73. package/dist/input-image/index.js +1 -1
  74. package/dist/input-search/index.js +1 -1
  75. package/dist/layout-picker/index.js +1 -1
  76. package/dist/list/index.js +25 -25
  77. package/dist/listbox/index.js +5 -5
  78. package/dist/misc/index.js +1 -1
  79. package/dist/modal/index.js +1 -1
  80. package/dist/multi-select/index.js +1 -1
  81. package/dist/notifications/index.js +30 -30
  82. package/dist/picker/index.js +1 -1
  83. package/dist/popover/index.js +1 -1
  84. package/dist/preset-range-date-input/index.js +1 -1
  85. package/dist/preset-select/index.js +1 -1
  86. package/dist/radio-button/index.js +10 -10
  87. package/dist/select/index.js +1 -1
  88. package/dist/simple-table/index.js +1 -1
  89. package/dist/slider/index.js +3 -3
  90. package/dist/sortable/index.js +1 -1
  91. package/dist/state-select/index.js +1 -1
  92. package/dist/styles.css +1 -1
  93. package/dist/switch/index.js +11 -11
  94. package/dist/table/index.js +1 -1
  95. package/dist/table-sorting/index.js +13 -13
  96. package/dist/tabs/index.js +1 -1
  97. package/dist/tag-input/index.js +55 -55
  98. package/dist/tag-input/index.js.map +1 -1
  99. package/dist/text/index.js +1 -1
  100. package/dist/text-editor/index.js +3 -3
  101. package/dist/textarea/index.js +1 -1
  102. package/dist/tree-select/index.js +134 -134
  103. package/dist/tree-select/index.js.map +1 -1
  104. package/dist/tree-table/index.js +16 -16
  105. package/package.json +1 -1
  106. package/storybook-static/project.json +1 -1
  107. package/dist/chunks/date-input-Dr5QNVT6.js +0 -341
@@ -1,24 +1,24 @@
1
1
  import { t as e } from "./ui.module-DHVTOqZ0.js";
2
2
  import { t } from "./grid-dI94AAbi.js";
3
- import { i as n, l as r, s as i } from "./input-BNszawm6.js";
3
+ import { i as n, l as r, s as i } from "./input-VC8jEoTa.js";
4
4
  import { t as a } from "./separator-B72Aq-6a.js";
5
5
  import { forwardRef as o, useEffect as s, useMemo as c, useRef as l, useState as u } from "react";
6
6
  import { cn as d } from "@ryuzaki13/react-foundation-lib/utils";
7
- import { ChevronDownIcon as f } from "lucide-react";
8
- import { jsx as p, jsxs as m } from "react/jsx-runtime";
9
- import { normalizeTextToLower as h } from "@ryuzaki13/react-foundation-lib/formatters";
10
- import { FloatingFocusManager as g, FloatingPortal as _ } from "@floating-ui/react";
11
- import { useFloatingListbox as v } from "@ryuzaki13/react-foundation-lib/hooks";
7
+ import { FloatingFocusManager as f, FloatingPortal as p } from "@floating-ui/react";
8
+ import { jsx as m, jsxs as h } from "react/jsx-runtime";
9
+ import { ChevronDownIcon as g } from "lucide-react";
10
+ import { useFloatingListbox as _ } from "@ryuzaki13/react-foundation-lib/hooks";
11
+ import { normalizeTextToLower as v } from "@ryuzaki13/react-foundation-lib/formatters";
12
12
  import { AnimatePresence as y, motion as b } from "motion/react";
13
13
  //#region src/picker/PickerField.tsx
14
14
  function x({ id: e, label: t, description: n, disabled: a, size: o, className: s, error: c, children: l }) {
15
- let { controlId: u, labelId: d, descriptionId: f, errorId: m, describedBy: h } = r({
15
+ let { controlId: u, labelId: d, descriptionId: f, errorId: p, describedBy: h } = r({
16
16
  id: e,
17
17
  hasLabel: t != null,
18
18
  hasDescription: !!n,
19
19
  hasError: !!c
20
20
  });
21
- return /* @__PURE__ */ p(i, {
21
+ return /* @__PURE__ */ m(i, {
22
22
  label: t,
23
23
  description: n,
24
24
  disabled: a,
@@ -28,12 +28,12 @@ function x({ id: e, label: t, description: n, disabled: a, size: o, className: s
28
28
  controlId: u,
29
29
  labelId: d,
30
30
  descriptionId: f,
31
- errorId: m,
31
+ errorId: p,
32
32
  children: l({
33
33
  controlId: u,
34
34
  labelId: d,
35
35
  descriptionId: f,
36
- errorId: m,
36
+ errorId: p,
37
37
  describedBy: h
38
38
  })
39
39
  });
@@ -51,14 +51,14 @@ var S = {
51
51
  function C(e) {
52
52
  e.stopPropagation();
53
53
  }
54
- function w({ open: e, context: t, floatingStyles: n, listId: r, labelId: i, popupAriaLabel: o, descriptionId: s, activeOptionId: c, ariaMultiselectable: l, popupRole: u = "listbox", setFloating: f, getFloatingProps: h, onKeyDown: v, initialFocus: x = -1, returnFocus: w = !1, tabIndex: T = 0, className: E, maxWidth: D, layoutClassName: O, headerClassName: k, bodyClassName: A, header: j, children: M }) {
55
- return /* @__PURE__ */ p(y, { children: e && /* @__PURE__ */ p(_, { children: /* @__PURE__ */ p(g, {
54
+ function w({ open: e, context: t, floatingStyles: n, listId: r, labelId: i, popupAriaLabel: o, descriptionId: s, activeOptionId: c, ariaMultiselectable: l, popupRole: u = "listbox", setFloating: g, getFloatingProps: _, onKeyDown: v, initialFocus: x = -1, returnFocus: w = !1, tabIndex: T = 0, className: E, maxWidth: D, layoutClassName: O, headerClassName: k, bodyClassName: A, header: j, children: M }) {
55
+ return /* @__PURE__ */ m(y, { children: e && /* @__PURE__ */ m(p, { children: /* @__PURE__ */ m(f, {
56
56
  context: t,
57
57
  modal: !1,
58
58
  initialFocus: x,
59
59
  returnFocus: w,
60
- children: /* @__PURE__ */ p(b.div, {
61
- ref: f,
60
+ children: /* @__PURE__ */ m(b.div, {
61
+ ref: g,
62
62
  style: {
63
63
  ...n,
64
64
  maxWidth: D
@@ -75,7 +75,7 @@ function w({ open: e, context: t, floatingStyles: n, listId: r, labelId: i, popu
75
75
  opacity: 0,
76
76
  scale: .95
77
77
  },
78
- ...h({
78
+ ..._({
79
79
  id: r,
80
80
  role: u,
81
81
  tabIndex: T,
@@ -88,12 +88,12 @@ function w({ open: e, context: t, floatingStyles: n, listId: r, labelId: i, popu
88
88
  onKeyDown: v,
89
89
  className: E
90
90
  }),
91
- children: /* @__PURE__ */ m("div", {
91
+ children: /* @__PURE__ */ h("div", {
92
92
  className: d(S.popupLayout, O),
93
- children: [j ? /* @__PURE__ */ m("div", {
93
+ children: [j ? /* @__PURE__ */ h("div", {
94
94
  className: k,
95
- children: [j, /* @__PURE__ */ p(a, { className: "marginBlockSm" })]
96
- }) : /* @__PURE__ */ p("div", {}), /* @__PURE__ */ p("div", {
95
+ children: [j, /* @__PURE__ */ m(a, { className: "marginBlockSm" })]
96
+ }) : /* @__PURE__ */ m("div", {}), /* @__PURE__ */ m("div", {
97
97
  className: d(S.popupBody, A),
98
98
  children: M
99
99
  })]
@@ -104,10 +104,10 @@ function w({ open: e, context: t, floatingStyles: n, listId: r, labelId: i, popu
104
104
  //#endregion
105
105
  //#region src/picker/PickerSelectionToolbar.tsx
106
106
  function T({ onSelectAll: e, onDeselectAll: n, selectAllButtonRef: r }) {
107
- return /* @__PURE__ */ m(t.Container, {
107
+ return /* @__PURE__ */ h(t.Container, {
108
108
  gap: "xs",
109
109
  templateColumns: "1fr 1fr",
110
- children: [/* @__PURE__ */ p("button", {
110
+ children: [/* @__PURE__ */ m("button", {
111
111
  ref: r,
112
112
  type: "button",
113
113
  className: S.selectionActionButton,
@@ -115,7 +115,7 @@ function T({ onSelectAll: e, onDeselectAll: n, selectAllButtonRef: r }) {
115
115
  "data-ui": "picker-select-all",
116
116
  "data-action": "select-all",
117
117
  children: "Выбрать все"
118
- }), /* @__PURE__ */ p("button", {
118
+ }), /* @__PURE__ */ m("button", {
119
119
  type: "button",
120
120
  className: S.selectionActionButton,
121
121
  onClick: n,
@@ -129,7 +129,7 @@ function T({ onSelectAll: e, onDeselectAll: n, selectAllButtonRef: r }) {
129
129
  //#region src/picker/PickerStatus.tsx
130
130
  function E({ emptyState: t, loadingState: n, errorState: r }) {
131
131
  let i = r ?? n ?? t;
132
- return i == null ? null : /* @__PURE__ */ p("div", {
132
+ return i == null ? null : /* @__PURE__ */ m("div", {
133
133
  className: d(e.uiPopupOption, S.status, r !== void 0 && S.statusError),
134
134
  "aria-disabled": !0,
135
135
  children: i
@@ -138,31 +138,31 @@ function E({ emptyState: t, loadingState: n, errorState: r }) {
138
138
  //#endregion
139
139
  //#region src/picker/PickerTriggerActions.tsx
140
140
  function D({ open: t, disabled: n, children: r, onToggleMouseDown: i, onToggleClick: a, openAriaLabel: o = "Открыть список", closeAriaLabel: s = "Закрыть список" }) {
141
- return /* @__PURE__ */ m("div", {
141
+ return /* @__PURE__ */ h("div", {
142
142
  className: e.uiToggleButtonContainer,
143
143
  "data-disabled": n || void 0,
144
144
  children: [
145
145
  r,
146
- /* @__PURE__ */ p("div", { className: e.uiButtonSeparator }),
147
- /* @__PURE__ */ p("button", {
146
+ /* @__PURE__ */ m("div", { className: e.uiButtonSeparator }),
147
+ /* @__PURE__ */ m("button", {
148
148
  type: "button",
149
149
  "aria-label": t ? s : o,
150
150
  className: e.uiToggleButton,
151
151
  onMouseDown: i,
152
152
  onClick: a,
153
- children: /* @__PURE__ */ p(f, { className: d(e.uiToggleIcon, t && e.uiToggleIconOpen) })
153
+ children: /* @__PURE__ */ m(g, { className: d(e.uiToggleIcon, t && e.uiToggleIconOpen) })
154
154
  })
155
155
  ]
156
156
  });
157
157
  }
158
158
  //#endregion
159
159
  //#region src/picker/PickerTriggerInput.tsx
160
- var O = o(({ rootRef: t, endAdornment: r, overlay: i, rootClassName: a, inputClassName: o, ...s }, c) => /* @__PURE__ */ m("div", {
160
+ var O = o(({ rootRef: t, endAdornment: r, overlay: i, rootClassName: a, inputClassName: o, ...s }, c) => /* @__PURE__ */ h("div", {
161
161
  ref: t,
162
162
  className: d(e.uiInputContainer, S.triggerContainer, a),
163
- children: [/* @__PURE__ */ p(n, {
163
+ children: [/* @__PURE__ */ m(n, {
164
164
  endAdornment: r,
165
- children: ({ controlClassName: t }) => /* @__PURE__ */ p("input", {
165
+ children: ({ controlClassName: t }) => /* @__PURE__ */ m("input", {
166
166
  ...s,
167
167
  ref: c,
168
168
  className: d(e.uiInputWithToggle, t, o)
@@ -215,10 +215,10 @@ function A(e) {
215
215
  //#endregion
216
216
  //#region src/picker/model/usePickerDefaultFilter.ts
217
217
  function j(e) {
218
- return h((Array.isArray(e) ? e : [e]).filter(Boolean).join(" "));
218
+ return v((Array.isArray(e) ? e : [e]).filter(Boolean).join(" "));
219
219
  }
220
220
  function M({ options: e, query: t, enabled: n = !0, getSearchText: r }) {
221
- let i = h(t);
221
+ let i = v(t);
222
222
  return c(() => !n || !i ? [...e] : e.filter((e) => j(r(e)).includes(i)), [
223
223
  n,
224
224
  r,
@@ -230,7 +230,7 @@ function M({ options: e, query: t, enabled: n = !0, getSearchText: r }) {
230
230
  //#region src/picker/model/usePickerFloatingListbox.ts
231
231
  function N(e) {
232
232
  let t = e.triggerMode ? k(e.triggerMode) : void 0;
233
- return v({
233
+ return _({
234
234
  ...e,
235
235
  focusFloatingOnOpen: e.focusFloatingOnOpen ?? t?.focusFloatingOnOpen,
236
236
  restoreFocusOnClose: e.restoreFocusOnClose ?? t?.restoreFocusOnClose
@@ -337,4 +337,4 @@ function L({ mode: e, open: t, currentQuery: n, hasDisplayValue: r, inputRef: i,
337
337
  //#endregion
338
338
  export { M as a, O as c, T as d, w as f, N as i, D as l, F as n, A as o, x as p, P as r, k as s, L as t, E as u };
339
339
 
340
- //# sourceMappingURL=picker-D3Fc15JH.js.map
340
+ //# sourceMappingURL=picker-DLnfOgZj.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"picker-D3Fc15JH.js","names":[],"sources":["../../src/picker/PickerField.tsx","../../src/picker/Picker.module.scss","../../src/picker/PickerPopup.tsx","../../src/picker/PickerSelectionToolbar.tsx","../../src/picker/PickerStatus.tsx","../../src/picker/PickerTriggerActions.tsx","../../src/picker/PickerTriggerInput.tsx","../../src/picker/model/createPickerTriggerPolicy.ts","../../src/picker/model/extractPickerTextContent.ts","../../src/picker/model/usePickerDefaultFilter.ts","../../src/picker/model/usePickerFloatingListbox.ts","../../src/picker/model/usePickerQuery.ts","../../src/picker/model/usePickerSelectionLifecycle.ts","../../src/picker/model/usePickerTriggerController.ts"],"sourcesContent":["import { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\n\nimport { InputUI } from \"../input\";\nimport { useInputFieldIds } from \"../input/lib/useInputFieldIds\";\n\nimport { PickerFieldProps } from \"./types\";\n\nexport function PickerField<TValue extends InputType>({\n\tid,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tsize,\n\tclassName,\n\terror,\n\tchildren\n}: PickerFieldProps<TValue>) {\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\tid,\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\treturn (\n\t\t<InputUI\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tsize={size}\n\t\t\tclassName={className}\n\t\t\terror={error}\n\t\t\tcontrolId={controlId}\n\t\t\tlabelId={labelId}\n\t\t\tdescriptionId={descriptionId}\n\t\t\terrorId={errorId}>\n\t\t\t{children({ controlId, labelId, descriptionId, errorId, describedBy })}\n\t\t</InputUI>\n\t);\n}\n",".popupLayout {\n\tdisplay: grid;\n\tgrid-template-rows: auto 1fr;\n\tmin-height: 0;\n\tmax-height: 75vh;\n\toverflow: hidden;\n\n\tflex: 1 1 auto;\n}\n\n.popupBody {\n\tmin-height: 0;\n}\n\n.status {\n\tpadding: var(--space-xs) var(--space-sm);\n\tcolor: var(--content-2);\n}\n\n.statusError {\n\tcolor: var(--status-error-text);\n}\n\n.triggerContainer {\n\tposition: relative;\n}\n\n.selectionActionButton {\n\tpadding-block: var(--space-xs);\n\tborder-radius: var(--radius-sm);\n\n\t&:hover {\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n","import { type CSSProperties, type KeyboardEvent, type MouseEvent, type ReactNode } from \"react\";\n\nimport { FloatingContext, FloatingFocusManager, FloatingPortal } from \"@floating-ui/react\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { AnimatePresence, motion } from \"motion/react\";\n\nimport { Separator } from \"../separator\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerPopupProps {\n\topen: boolean;\n\tcontext: FloatingContext;\n\tfloatingStyles: CSSProperties;\n\tlistId: string;\n\tlabelId?: string;\n\tpopupAriaLabel?: string;\n\tdescriptionId?: string;\n\tactiveOptionId?: string;\n\tariaMultiselectable?: boolean;\n\tpopupRole?: \"listbox\" | \"dialog\";\n\tsetFloating: (node: HTMLElement | null) => void;\n\tgetFloatingProps: (userProps?: Record<string, unknown>) => Record<string, unknown>;\n\tonKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n\tinitialFocus?: number;\n\treturnFocus?: boolean;\n\ttabIndex?: number;\n\tclassName?: string;\n\tmaxWidth?: CSSProperties[\"maxWidth\"];\n\tlayoutClassName?: string;\n\theaderClassName?: string;\n\tbodyClassName?: string;\n\theader?: ReactNode;\n\tchildren: ReactNode;\n}\n\nfunction stopNestedFloatingMouseDown(event: MouseEvent<HTMLElement>): void {\n\tevent.stopPropagation();\n}\n\nexport function PickerPopup({\n\topen,\n\tcontext,\n\tfloatingStyles,\n\tlistId,\n\tlabelId,\n\tpopupAriaLabel,\n\tdescriptionId,\n\tactiveOptionId,\n\tariaMultiselectable,\n\tpopupRole = \"listbox\",\n\tsetFloating,\n\tgetFloatingProps,\n\tonKeyDown,\n\tinitialFocus = -1,\n\treturnFocus = false,\n\ttabIndex = 0,\n\tclassName,\n\tmaxWidth,\n\tlayoutClassName,\n\theaderClassName,\n\tbodyClassName,\n\theader,\n\tchildren\n}: PickerPopupProps) {\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<FloatingPortal>\n\t\t\t\t\t<FloatingFocusManager context={context} modal={false} initialFocus={initialFocus} returnFocus={returnFocus}>\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tref={setFloating}\n\t\t\t\t\t\t\tstyle={{ ...floatingStyles, maxWidth }}\n\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\t{...getFloatingProps({\n\t\t\t\t\t\t\t\tid: listId,\n\t\t\t\t\t\t\t\trole: popupRole,\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\t\"aria-labelledby\": labelId,\n\t\t\t\t\t\t\t\t\"aria-label\": labelId ? undefined : popupAriaLabel,\n\t\t\t\t\t\t\t\t\"aria-describedby\": descriptionId,\n\t\t\t\t\t\t\t\t\"aria-activedescendant\": activeOptionId,\n\t\t\t\t\t\t\t\t\"aria-multiselectable\": ariaMultiselectable || undefined,\n\t\t\t\t\t\t\t\tonMouseDown: stopNestedFloatingMouseDown,\n\t\t\t\t\t\t\t\tonKeyDown,\n\t\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t\t})}>\n\t\t\t\t\t\t\t<div className={cn(styles.popupLayout, layoutClassName)}>\n\t\t\t\t\t\t\t\t{header ? (\n\t\t\t\t\t\t\t\t\t<div className={headerClassName}>\n\t\t\t\t\t\t\t\t\t\t{header}\n\t\t\t\t\t\t\t\t\t\t<Separator className=\"marginBlockSm\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div className={cn(styles.popupBody, bodyClassName)}>{children}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t</FloatingFocusManager>\n\t\t\t\t</FloatingPortal>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n}\n","import { type Ref } from \"react\";\n\nimport { Grid } from \"../grid\";\n\nimport styles from \"./Picker.module.scss\";\n\ntype PickerSelectionToolbarProps = {\n\tonSelectAll: () => void;\n\tonDeselectAll: () => void;\n\tselectAllButtonRef?: Ref<HTMLButtonElement>;\n};\n\n/**\n * Общая панель массовых действий для picker-компонентов с множественным выбором.\n * Компонент не знает формат значения и делегирует изменение владельцу selection-модели.\n */\nexport function PickerSelectionToolbar({ onSelectAll, onDeselectAll, selectAllButtonRef }: PickerSelectionToolbarProps) {\n\treturn (\n\t\t<Grid.Container gap=\"xs\" templateColumns=\"1fr 1fr\">\n\t\t\t<button\n\t\t\t\tref={selectAllButtonRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectionActionButton}\n\t\t\t\tonClick={onSelectAll}\n\t\t\t\tdata-ui=\"picker-select-all\"\n\t\t\t\tdata-action=\"select-all\">\n\t\t\t\tВыбрать все\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectionActionButton}\n\t\t\t\tonClick={onDeselectAll}\n\t\t\t\tdata-ui=\"picker-deselect-all\"\n\t\t\t\tdata-action=\"deselect-all\">\n\t\t\t\tСнять выбор\n\t\t\t</button>\n\t\t</Grid.Container>\n\t);\n}\n","import { ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerStatusProps {\n\temptyState?: ReactNode;\n\tloadingState?: ReactNode;\n\terrorState?: ReactNode;\n}\n\nexport function PickerStatus({ emptyState, loadingState, errorState }: PickerStatusProps) {\n\tconst content = errorState ?? loadingState ?? emptyState;\n\n\tif (content === undefined || content === null) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className={cn(uiStyles.uiPopupOption, styles.status, errorState !== undefined && styles.statusError)} aria-disabled={true}>\n\t\t\t{content}\n\t\t</div>\n\t);\n}\n","import { MouseEvent, ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { ChevronDownIcon } from \"lucide-react\";\n\nimport uiStyles from \"../ui.module.scss\";\n\ninterface PickerTriggerActionsProps {\n\topen: boolean;\n\tdisabled?: boolean;\n\tchildren?: ReactNode;\n\tonToggleMouseDown?: (event: MouseEvent<HTMLButtonElement>) => void;\n\tonToggleClick: () => void;\n\topenAriaLabel?: string;\n\tcloseAriaLabel?: string;\n}\n\nexport function PickerTriggerActions({\n\topen,\n\tdisabled,\n\tchildren,\n\tonToggleMouseDown,\n\tonToggleClick,\n\topenAriaLabel = \"Открыть список\",\n\tcloseAriaLabel = \"Закрыть список\"\n}: PickerTriggerActionsProps) {\n\treturn (\n\t\t<div className={uiStyles.uiToggleButtonContainer} data-disabled={disabled || undefined}>\n\t\t\t{children}\n\n\t\t\t<div className={uiStyles.uiButtonSeparator} />\n\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label={open ? closeAriaLabel : openAriaLabel}\n\t\t\t\tclassName={uiStyles.uiToggleButton}\n\t\t\t\tonMouseDown={onToggleMouseDown}\n\t\t\t\tonClick={onToggleClick}>\n\t\t\t\t<ChevronDownIcon className={cn(uiStyles.uiToggleIcon, open && uiStyles.uiToggleIconOpen)} />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n","import { ComponentPropsWithoutRef, forwardRef, ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputControl } from \"../input\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerTriggerInputProps extends Omit<ComponentPropsWithoutRef<\"input\">, \"size\"> {\n\trootRef?: (node: HTMLDivElement | null) => void;\n\tendAdornment?: ReactNode;\n\toverlay?: ReactNode;\n\trootClassName?: string;\n\tinputClassName?: string;\n}\n\nexport const PickerTriggerInput = forwardRef<HTMLInputElement, PickerTriggerInputProps>(\n\t({ rootRef, endAdornment, overlay, rootClassName, inputClassName, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div ref={rootRef} className={cn(uiStyles.uiInputContainer, styles.triggerContainer, rootClassName)}>\n\t\t\t\t<InputControl endAdornment={endAdornment}>\n\t\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t\t<input {...props} ref={ref} className={cn(uiStyles.uiInputWithToggle, controlClassName, inputClassName)} />\n\t\t\t\t\t)}\n\t\t\t\t</InputControl>\n\t\t\t\t{overlay}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nPickerTriggerInput.displayName = \"PickerTriggerInput\";\n","export type PickerTriggerMode = \"display\" | \"search-single\" | \"search-multi\";\n\ninterface PickerTriggerTextFocusParams {\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n}\n\nexport interface PickerTriggerPolicy {\n\tfocusFloatingOnOpen: boolean;\n\trestoreFocusOnClose: boolean;\n\tresetQueryOnClose: boolean;\n\tshouldOpenOnTriggerClick: (open: boolean) => boolean;\n\tshouldOpenOnInputChange: (open: boolean) => boolean;\n\tshouldFocusReferenceOnToggle: (open: boolean) => boolean;\n\tshouldSelectTriggerTextOnFocus: (params: PickerTriggerTextFocusParams) => boolean;\n}\n\n/**\n * Единая политика поведения trigger-input для picker-компонентов.\n * Нормализует различия между display-режимом, single-search и multi-search.\n */\nexport function createPickerTriggerPolicy(mode: PickerTriggerMode): PickerTriggerPolicy {\n\tswitch (mode) {\n\t\tcase \"search-single\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: ({ open, currentQuery, hasDisplayValue }) =>\n\t\t\t\t\t!open && currentQuery.length === 0 && hasDisplayValue\n\t\t\t};\n\t\tcase \"search-multi\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t\tcase \"display\":\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: true,\n\t\t\t\trestoreFocusOnClose: true,\n\t\t\t\tresetQueryOnClose: false,\n\t\t\t\tshouldOpenOnTriggerClick: (open) => !open,\n\t\t\t\tshouldOpenOnInputChange: () => false,\n\t\t\t\tshouldFocusReferenceOnToggle: () => false,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t}\n}\n","import { ReactNode } from \"react\";\n\nexport function extractPickerTextContent(node: ReactNode): string | undefined {\n\tif (typeof node === \"string\" || typeof node === \"number\") {\n\t\treturn String(node);\n\t}\n\n\tif (Array.isArray(node)) {\n\t\tconst values = node.map(extractPickerTextContent).filter((value): value is string => Boolean(value));\n\t\treturn values.length ? values.join(\" \") : undefined;\n\t}\n\n\treturn undefined;\n}\n","import { useMemo } from \"react\";\n\nimport { normalizeTextToLower } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\ninterface UsePickerDefaultFilterOptions<T> {\n\toptions: readonly T[];\n\tquery: string;\n\tenabled?: boolean;\n\tgetSearchText: (option: T) => unknown;\n}\n\nfunction normalizeSearchText(value: unknown) {\n\tconst parts = Array.isArray(value) ? value : [value];\n\n\treturn normalizeTextToLower(parts.filter(Boolean).join(\" \"));\n}\n\nexport function usePickerDefaultFilter<T>({ options, query, enabled = true, getSearchText }: UsePickerDefaultFilterOptions<T>) {\n\tconst normalizedQuery = normalizeTextToLower(query);\n\n\treturn useMemo(() => {\n\t\tif (!enabled || !normalizedQuery) {\n\t\t\treturn [...options];\n\t\t}\n\n\t\treturn options.filter((option) => normalizeSearchText(getSearchText(option)).includes(normalizedQuery));\n\t}, [enabled, getSearchText, normalizedQuery, options]);\n}\n","import { Placement } from \"@floating-ui/react\";\nimport {\n\ttype FloatingListboxPlacementStrategy,\n\ttype FloatingListboxSizeResolver,\n\tuseFloatingListbox\n} from \"@ryuzaki13/react-foundation-lib/hooks\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerFloatingListboxParams<T> {\n\toptions: readonly T[];\n\tselectedIndex: number;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n\tgetOptionDisabled?: (option: T) => boolean;\n\tonSelect?: (option: T) => void;\n\tdisabled?: boolean;\n\tplacement?: Placement;\n\tplacementStrategy?: FloatingListboxPlacementStrategy;\n\tcloseOnSelect?: boolean;\n\tfocusFloatingOnOpen?: boolean;\n\tallowOpenWithoutOptions?: boolean;\n\trestoreFocusOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n\tresolveFloatingSize?: FloatingListboxSizeResolver;\n}\n\n/**\n * Единая точка входа для popup/listbox поведения во всех picker-компонентах.\n */\nexport function usePickerFloatingListbox<T>(params: UsePickerFloatingListboxParams<T>) {\n\tconst triggerPolicy = params.triggerMode ? createPickerTriggerPolicy(params.triggerMode) : undefined;\n\n\treturn useFloatingListbox({\n\t\t...params,\n\t\tfocusFloatingOnOpen: params.focusFloatingOnOpen ?? triggerPolicy?.focusFloatingOnOpen,\n\t\trestoreFocusOnClose: params.restoreFocusOnClose ?? triggerPolicy?.restoreFocusOnClose\n\t});\n}\n","import { useState } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerQueryOptions {\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tresetOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n}\n\n/**\n * Управляет controlled/uncontrolled query и возвращает policy закрытия владельцу open-state.\n * Сброс выполняется самим владельцем в событии close, поэтому hook не зеркалит lifecycle через effect.\n */\nexport function usePickerQuery({ query, defaultQuery, onQuery, resetOnClose, triggerMode }: UsePickerQueryOptions) {\n\tconst isControlled = query !== undefined;\n\tconst [internalQuery, setInternalQuery] = useState(defaultQuery ?? \"\");\n\tconst currentQuery = isControlled ? (query ?? \"\") : internalQuery;\n\tconst resolvedResetOnClose = resetOnClose ?? (triggerMode ? createPickerTriggerPolicy(triggerMode).resetQueryOnClose : true);\n\n\tconst setQuery = (nextValue: string) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalQuery(nextValue);\n\t\t}\n\n\t\tonQuery?.(nextValue);\n\t};\n\n\treturn {\n\t\tquery: currentQuery,\n\t\tsetQuery,\n\t\tclearQuery: () => setQuery(\"\"),\n\t\tresetQueryOnClose: resolvedResetOnClose\n\t};\n}\n","import { useEffect, useRef, useState } from \"react\";\n\ninterface UsePickerSelectionLifecycleOptions<TValue> {\n\tvalue: TValue;\n\topen: boolean;\n\tonCommit: (value: TValue) => void;\n\tonOpen?: () => void;\n\tonClose?: (value: TValue) => void;\n\tisEqual: (left: TValue, right: TValue) => boolean;\n}\n\n/**\n * Общий жизненный цикл чернового выбора для picker-компонентов,\n * где изменения подтверждаются при закрытии popup.\n */\nexport function usePickerSelectionLifecycle<TValue>({\n\tvalue,\n\topen,\n\tonCommit,\n\tonOpen,\n\tonClose,\n\tisEqual\n}: UsePickerSelectionLifecycleOptions<TValue>) {\n\tconst previousOpenRef = useRef(false);\n\tconst [draftValue, setDraftValue] = useState(value);\n\n\tuseEffect(() => {\n\t\tif (previousOpenRef.current && !open) {\n\t\t\tif (!isEqual(draftValue, value)) {\n\t\t\t\tonCommit(draftValue);\n\t\t\t}\n\n\t\t\tonClose?.(draftValue);\n\t\t}\n\n\t\tpreviousOpenRef.current = open;\n\t}, [draftValue, isEqual, onClose, onCommit, open, value]);\n\n\tconst prepareOpen = () => {\n\t\tsetDraftValue(value);\n\t\tonOpen?.();\n\t};\n\n\treturn {\n\t\tdraftValue,\n\t\tsetDraftValue,\n\t\tprepareOpen\n\t};\n}\n","import { MouseEvent, RefObject } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerTriggerControllerOptions {\n\tmode: PickerTriggerMode;\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n\tinputRef: RefObject<HTMLInputElement | null>;\n\tsetQuery?: (value: string) => void;\n\topenList?: () => void;\n\tclose?: () => void;\n\ttoggleOpen?: () => void;\n\tonBeforeOpen?: () => void;\n}\n\ninterface HandleTriggerKeyDownOptions {\n\tevent: React.KeyboardEvent<HTMLElement>;\n\tonActivateWhenOpen?: () => void;\n\tenableSpaceActivation?: boolean;\n\tenableClosedArrowDownOpen?: boolean;\n\tsuppressClosedArrowUp?: boolean;\n}\n\nfunction focusInput(inputRef: RefObject<HTMLInputElement | null>) {\n\trequestAnimationFrame(() => {\n\t\tinputRef.current?.focus();\n\t});\n}\n\n/**\n * Единый контроллер пользовательских действий на trigger-input.\n * Держит поведение display/search-single/search-multi в одном месте.\n */\nexport function usePickerTriggerController({\n\tmode,\n\topen,\n\tcurrentQuery,\n\thasDisplayValue,\n\tinputRef,\n\tsetQuery,\n\topenList,\n\tclose,\n\ttoggleOpen,\n\tonBeforeOpen\n}: UsePickerTriggerControllerOptions) {\n\tconst policy = createPickerTriggerPolicy(mode);\n\n\tconst openTrigger = () => {\n\t\tonBeforeOpen?.();\n\n\t\tif (openList) {\n\t\t\topenList();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst closeTrigger = () => {\n\t\tif (close) {\n\t\t\tclose();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst toggleTrigger = () => {\n\t\tif (open) {\n\t\t\tcloseTrigger();\n\t\t} else {\n\t\t\topenTrigger();\n\t\t}\n\n\t\tif (policy.shouldFocusReferenceOnToggle(open)) {\n\t\t\tfocusInput(inputRef);\n\t\t}\n\t};\n\n\treturn {\n\t\tpolicy,\n\t\thandleTriggerInputChange: (nextValue: string) => {\n\t\t\tsetQuery?.(nextValue);\n\n\t\t\tif (policy.shouldOpenOnInputChange(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerClick: () => {\n\t\t\tif (policy.shouldOpenOnTriggerClick(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerFocus: (input: HTMLInputElement) => {\n\t\t\tif (\n\t\t\t\tpolicy.shouldSelectTriggerTextOnFocus({\n\t\t\t\t\topen,\n\t\t\t\t\tcurrentQuery,\n\t\t\t\t\thasDisplayValue\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tinput.select();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\thandleToggleMouseDown: (event: MouseEvent<HTMLButtonElement>) => {\n\t\t\tevent.preventDefault();\n\t\t},\n\t\thandleToggleClick: () => {\n\t\t\ttoggleTrigger();\n\t\t},\n\t\thandleTriggerKeyDown: ({\n\t\t\tevent,\n\t\t\tonActivateWhenOpen,\n\t\t\tenableSpaceActivation = false,\n\t\t\tenableClosedArrowDownOpen = false,\n\t\t\tsuppressClosedArrowUp = false\n\t\t}: HandleTriggerKeyDownOptions) => {\n\t\t\tif (!open && suppressClosedArrowUp && event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!open && enableClosedArrowDownOpen && event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleTrigger();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Enter\") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (enableSpaceActivation && event.key === \" \") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttoggleTrigger\n\t};\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"picker-DLnfOgZj.js","names":[],"sources":["../../src/picker/PickerField.tsx","../../src/picker/Picker.module.scss","../../src/picker/PickerPopup.tsx","../../src/picker/PickerSelectionToolbar.tsx","../../src/picker/PickerStatus.tsx","../../src/picker/PickerTriggerActions.tsx","../../src/picker/PickerTriggerInput.tsx","../../src/picker/model/createPickerTriggerPolicy.ts","../../src/picker/model/extractPickerTextContent.ts","../../src/picker/model/usePickerDefaultFilter.ts","../../src/picker/model/usePickerFloatingListbox.ts","../../src/picker/model/usePickerQuery.ts","../../src/picker/model/usePickerSelectionLifecycle.ts","../../src/picker/model/usePickerTriggerController.ts"],"sourcesContent":["import { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\n\nimport { InputUI } from \"../input\";\nimport { useInputFieldIds } from \"../input/lib/useInputFieldIds\";\n\nimport { PickerFieldProps } from \"./types\";\n\nexport function PickerField<TValue extends InputType>({\n\tid,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tsize,\n\tclassName,\n\terror,\n\tchildren\n}: PickerFieldProps<TValue>) {\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\tid,\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\treturn (\n\t\t<InputUI\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tsize={size}\n\t\t\tclassName={className}\n\t\t\terror={error}\n\t\t\tcontrolId={controlId}\n\t\t\tlabelId={labelId}\n\t\t\tdescriptionId={descriptionId}\n\t\t\terrorId={errorId}>\n\t\t\t{children({ controlId, labelId, descriptionId, errorId, describedBy })}\n\t\t</InputUI>\n\t);\n}\n",".popupLayout {\n\tdisplay: grid;\n\tgrid-template-rows: auto 1fr;\n\tmin-height: 0;\n\tmax-height: 75vh;\n\toverflow: hidden;\n\n\tflex: 1 1 auto;\n}\n\n.popupBody {\n\tmin-height: 0;\n}\n\n.status {\n\tpadding: var(--space-xs) var(--space-sm);\n\tcolor: var(--content-2);\n}\n\n.statusError {\n\tcolor: var(--status-error-text);\n}\n\n.triggerContainer {\n\tposition: relative;\n}\n\n.selectionActionButton {\n\tpadding-block: var(--space-xs);\n\tborder-radius: var(--radius-sm);\n\n\t&:hover {\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n","import { type CSSProperties, type KeyboardEvent, type MouseEvent, type ReactNode } from \"react\";\n\nimport { FloatingContext, FloatingFocusManager, FloatingPortal } from \"@floating-ui/react\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { AnimatePresence, motion } from \"motion/react\";\n\nimport { Separator } from \"../separator\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerPopupProps {\n\topen: boolean;\n\tcontext: FloatingContext;\n\tfloatingStyles: CSSProperties;\n\tlistId: string;\n\tlabelId?: string;\n\tpopupAriaLabel?: string;\n\tdescriptionId?: string;\n\tactiveOptionId?: string;\n\tariaMultiselectable?: boolean;\n\tpopupRole?: \"listbox\" | \"dialog\";\n\tsetFloating: (node: HTMLElement | null) => void;\n\tgetFloatingProps: (userProps?: Record<string, unknown>) => Record<string, unknown>;\n\tonKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n\tinitialFocus?: number;\n\treturnFocus?: boolean;\n\ttabIndex?: number;\n\tclassName?: string;\n\tmaxWidth?: CSSProperties[\"maxWidth\"];\n\tlayoutClassName?: string;\n\theaderClassName?: string;\n\tbodyClassName?: string;\n\theader?: ReactNode;\n\tchildren: ReactNode;\n}\n\nfunction stopNestedFloatingMouseDown(event: MouseEvent<HTMLElement>): void {\n\tevent.stopPropagation();\n}\n\nexport function PickerPopup({\n\topen,\n\tcontext,\n\tfloatingStyles,\n\tlistId,\n\tlabelId,\n\tpopupAriaLabel,\n\tdescriptionId,\n\tactiveOptionId,\n\tariaMultiselectable,\n\tpopupRole = \"listbox\",\n\tsetFloating,\n\tgetFloatingProps,\n\tonKeyDown,\n\tinitialFocus = -1,\n\treturnFocus = false,\n\ttabIndex = 0,\n\tclassName,\n\tmaxWidth,\n\tlayoutClassName,\n\theaderClassName,\n\tbodyClassName,\n\theader,\n\tchildren\n}: PickerPopupProps) {\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<FloatingPortal>\n\t\t\t\t\t<FloatingFocusManager context={context} modal={false} initialFocus={initialFocus} returnFocus={returnFocus}>\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tref={setFloating}\n\t\t\t\t\t\t\tstyle={{ ...floatingStyles, maxWidth }}\n\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\t{...getFloatingProps({\n\t\t\t\t\t\t\t\tid: listId,\n\t\t\t\t\t\t\t\trole: popupRole,\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\t\"aria-labelledby\": labelId,\n\t\t\t\t\t\t\t\t\"aria-label\": labelId ? undefined : popupAriaLabel,\n\t\t\t\t\t\t\t\t\"aria-describedby\": descriptionId,\n\t\t\t\t\t\t\t\t\"aria-activedescendant\": activeOptionId,\n\t\t\t\t\t\t\t\t\"aria-multiselectable\": ariaMultiselectable || undefined,\n\t\t\t\t\t\t\t\tonMouseDown: stopNestedFloatingMouseDown,\n\t\t\t\t\t\t\t\tonKeyDown,\n\t\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t\t})}>\n\t\t\t\t\t\t\t<div className={cn(styles.popupLayout, layoutClassName)}>\n\t\t\t\t\t\t\t\t{header ? (\n\t\t\t\t\t\t\t\t\t<div className={headerClassName}>\n\t\t\t\t\t\t\t\t\t\t{header}\n\t\t\t\t\t\t\t\t\t\t<Separator className=\"marginBlockSm\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div className={cn(styles.popupBody, bodyClassName)}>{children}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t</FloatingFocusManager>\n\t\t\t\t</FloatingPortal>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n}\n","import { type Ref } from \"react\";\n\nimport { Grid } from \"../grid\";\n\nimport styles from \"./Picker.module.scss\";\n\ntype PickerSelectionToolbarProps = {\n\tonSelectAll: () => void;\n\tonDeselectAll: () => void;\n\tselectAllButtonRef?: Ref<HTMLButtonElement>;\n};\n\n/**\n * Общая панель массовых действий для picker-компонентов с множественным выбором.\n * Компонент не знает формат значения и делегирует изменение владельцу selection-модели.\n */\nexport function PickerSelectionToolbar({ onSelectAll, onDeselectAll, selectAllButtonRef }: PickerSelectionToolbarProps) {\n\treturn (\n\t\t<Grid.Container gap=\"xs\" templateColumns=\"1fr 1fr\">\n\t\t\t<button\n\t\t\t\tref={selectAllButtonRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectionActionButton}\n\t\t\t\tonClick={onSelectAll}\n\t\t\t\tdata-ui=\"picker-select-all\"\n\t\t\t\tdata-action=\"select-all\">\n\t\t\t\tВыбрать все\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectionActionButton}\n\t\t\t\tonClick={onDeselectAll}\n\t\t\t\tdata-ui=\"picker-deselect-all\"\n\t\t\t\tdata-action=\"deselect-all\">\n\t\t\t\tСнять выбор\n\t\t\t</button>\n\t\t</Grid.Container>\n\t);\n}\n","import { ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerStatusProps {\n\temptyState?: ReactNode;\n\tloadingState?: ReactNode;\n\terrorState?: ReactNode;\n}\n\nexport function PickerStatus({ emptyState, loadingState, errorState }: PickerStatusProps) {\n\tconst content = errorState ?? loadingState ?? emptyState;\n\n\tif (content === undefined || content === null) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className={cn(uiStyles.uiPopupOption, styles.status, errorState !== undefined && styles.statusError)} aria-disabled={true}>\n\t\t\t{content}\n\t\t</div>\n\t);\n}\n","import { MouseEvent, ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { ChevronDownIcon } from \"lucide-react\";\n\nimport uiStyles from \"../ui.module.scss\";\n\ninterface PickerTriggerActionsProps {\n\topen: boolean;\n\tdisabled?: boolean;\n\tchildren?: ReactNode;\n\tonToggleMouseDown?: (event: MouseEvent<HTMLButtonElement>) => void;\n\tonToggleClick: () => void;\n\topenAriaLabel?: string;\n\tcloseAriaLabel?: string;\n}\n\nexport function PickerTriggerActions({\n\topen,\n\tdisabled,\n\tchildren,\n\tonToggleMouseDown,\n\tonToggleClick,\n\topenAriaLabel = \"Открыть список\",\n\tcloseAriaLabel = \"Закрыть список\"\n}: PickerTriggerActionsProps) {\n\treturn (\n\t\t<div className={uiStyles.uiToggleButtonContainer} data-disabled={disabled || undefined}>\n\t\t\t{children}\n\n\t\t\t<div className={uiStyles.uiButtonSeparator} />\n\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label={open ? closeAriaLabel : openAriaLabel}\n\t\t\t\tclassName={uiStyles.uiToggleButton}\n\t\t\t\tonMouseDown={onToggleMouseDown}\n\t\t\t\tonClick={onToggleClick}>\n\t\t\t\t<ChevronDownIcon className={cn(uiStyles.uiToggleIcon, open && uiStyles.uiToggleIconOpen)} />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n","import { ComponentPropsWithoutRef, forwardRef, ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputControl } from \"../input\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerTriggerInputProps extends Omit<ComponentPropsWithoutRef<\"input\">, \"size\"> {\n\trootRef?: (node: HTMLDivElement | null) => void;\n\tendAdornment?: ReactNode;\n\toverlay?: ReactNode;\n\trootClassName?: string;\n\tinputClassName?: string;\n}\n\nexport const PickerTriggerInput = forwardRef<HTMLInputElement, PickerTriggerInputProps>(\n\t({ rootRef, endAdornment, overlay, rootClassName, inputClassName, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div ref={rootRef} className={cn(uiStyles.uiInputContainer, styles.triggerContainer, rootClassName)}>\n\t\t\t\t<InputControl endAdornment={endAdornment}>\n\t\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t\t<input {...props} ref={ref} className={cn(uiStyles.uiInputWithToggle, controlClassName, inputClassName)} />\n\t\t\t\t\t)}\n\t\t\t\t</InputControl>\n\t\t\t\t{overlay}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nPickerTriggerInput.displayName = \"PickerTriggerInput\";\n","export type PickerTriggerMode = \"display\" | \"search-single\" | \"search-multi\";\n\ninterface PickerTriggerTextFocusParams {\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n}\n\nexport interface PickerTriggerPolicy {\n\tfocusFloatingOnOpen: boolean;\n\trestoreFocusOnClose: boolean;\n\tresetQueryOnClose: boolean;\n\tshouldOpenOnTriggerClick: (open: boolean) => boolean;\n\tshouldOpenOnInputChange: (open: boolean) => boolean;\n\tshouldFocusReferenceOnToggle: (open: boolean) => boolean;\n\tshouldSelectTriggerTextOnFocus: (params: PickerTriggerTextFocusParams) => boolean;\n}\n\n/**\n * Единая политика поведения trigger-input для picker-компонентов.\n * Нормализует различия между display-режимом, single-search и multi-search.\n */\nexport function createPickerTriggerPolicy(mode: PickerTriggerMode): PickerTriggerPolicy {\n\tswitch (mode) {\n\t\tcase \"search-single\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: ({ open, currentQuery, hasDisplayValue }) =>\n\t\t\t\t\t!open && currentQuery.length === 0 && hasDisplayValue\n\t\t\t};\n\t\tcase \"search-multi\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t\tcase \"display\":\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: true,\n\t\t\t\trestoreFocusOnClose: true,\n\t\t\t\tresetQueryOnClose: false,\n\t\t\t\tshouldOpenOnTriggerClick: (open) => !open,\n\t\t\t\tshouldOpenOnInputChange: () => false,\n\t\t\t\tshouldFocusReferenceOnToggle: () => false,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t}\n}\n","import { ReactNode } from \"react\";\n\nexport function extractPickerTextContent(node: ReactNode): string | undefined {\n\tif (typeof node === \"string\" || typeof node === \"number\") {\n\t\treturn String(node);\n\t}\n\n\tif (Array.isArray(node)) {\n\t\tconst values = node.map(extractPickerTextContent).filter((value): value is string => Boolean(value));\n\t\treturn values.length ? values.join(\" \") : undefined;\n\t}\n\n\treturn undefined;\n}\n","import { useMemo } from \"react\";\n\nimport { normalizeTextToLower } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\ninterface UsePickerDefaultFilterOptions<T> {\n\toptions: readonly T[];\n\tquery: string;\n\tenabled?: boolean;\n\tgetSearchText: (option: T) => unknown;\n}\n\nfunction normalizeSearchText(value: unknown) {\n\tconst parts = Array.isArray(value) ? value : [value];\n\n\treturn normalizeTextToLower(parts.filter(Boolean).join(\" \"));\n}\n\nexport function usePickerDefaultFilter<T>({ options, query, enabled = true, getSearchText }: UsePickerDefaultFilterOptions<T>) {\n\tconst normalizedQuery = normalizeTextToLower(query);\n\n\treturn useMemo(() => {\n\t\tif (!enabled || !normalizedQuery) {\n\t\t\treturn [...options];\n\t\t}\n\n\t\treturn options.filter((option) => normalizeSearchText(getSearchText(option)).includes(normalizedQuery));\n\t}, [enabled, getSearchText, normalizedQuery, options]);\n}\n","import { Placement } from \"@floating-ui/react\";\nimport {\n\ttype FloatingListboxPlacementStrategy,\n\ttype FloatingListboxSizeResolver,\n\tuseFloatingListbox\n} from \"@ryuzaki13/react-foundation-lib/hooks\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerFloatingListboxParams<T> {\n\toptions: readonly T[];\n\tselectedIndex: number;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n\tgetOptionDisabled?: (option: T) => boolean;\n\tonSelect?: (option: T) => void;\n\tdisabled?: boolean;\n\tplacement?: Placement;\n\tplacementStrategy?: FloatingListboxPlacementStrategy;\n\tcloseOnSelect?: boolean;\n\tfocusFloatingOnOpen?: boolean;\n\tallowOpenWithoutOptions?: boolean;\n\trestoreFocusOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n\tresolveFloatingSize?: FloatingListboxSizeResolver;\n}\n\n/**\n * Единая точка входа для popup/listbox поведения во всех picker-компонентах.\n */\nexport function usePickerFloatingListbox<T>(params: UsePickerFloatingListboxParams<T>) {\n\tconst triggerPolicy = params.triggerMode ? createPickerTriggerPolicy(params.triggerMode) : undefined;\n\n\treturn useFloatingListbox({\n\t\t...params,\n\t\tfocusFloatingOnOpen: params.focusFloatingOnOpen ?? triggerPolicy?.focusFloatingOnOpen,\n\t\trestoreFocusOnClose: params.restoreFocusOnClose ?? triggerPolicy?.restoreFocusOnClose\n\t});\n}\n","import { useState } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerQueryOptions {\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tresetOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n}\n\n/**\n * Управляет controlled/uncontrolled query и возвращает policy закрытия владельцу open-state.\n * Сброс выполняется самим владельцем в событии close, поэтому hook не зеркалит lifecycle через effect.\n */\nexport function usePickerQuery({ query, defaultQuery, onQuery, resetOnClose, triggerMode }: UsePickerQueryOptions) {\n\tconst isControlled = query !== undefined;\n\tconst [internalQuery, setInternalQuery] = useState(defaultQuery ?? \"\");\n\tconst currentQuery = isControlled ? (query ?? \"\") : internalQuery;\n\tconst resolvedResetOnClose = resetOnClose ?? (triggerMode ? createPickerTriggerPolicy(triggerMode).resetQueryOnClose : true);\n\n\tconst setQuery = (nextValue: string) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalQuery(nextValue);\n\t\t}\n\n\t\tonQuery?.(nextValue);\n\t};\n\n\treturn {\n\t\tquery: currentQuery,\n\t\tsetQuery,\n\t\tclearQuery: () => setQuery(\"\"),\n\t\tresetQueryOnClose: resolvedResetOnClose\n\t};\n}\n","import { useEffect, useRef, useState } from \"react\";\n\ninterface UsePickerSelectionLifecycleOptions<TValue> {\n\tvalue: TValue;\n\topen: boolean;\n\tonCommit: (value: TValue) => void;\n\tonOpen?: () => void;\n\tonClose?: (value: TValue) => void;\n\tisEqual: (left: TValue, right: TValue) => boolean;\n}\n\n/**\n * Общий жизненный цикл чернового выбора для picker-компонентов,\n * где изменения подтверждаются при закрытии popup.\n */\nexport function usePickerSelectionLifecycle<TValue>({\n\tvalue,\n\topen,\n\tonCommit,\n\tonOpen,\n\tonClose,\n\tisEqual\n}: UsePickerSelectionLifecycleOptions<TValue>) {\n\tconst previousOpenRef = useRef(false);\n\tconst [draftValue, setDraftValue] = useState(value);\n\n\tuseEffect(() => {\n\t\tif (previousOpenRef.current && !open) {\n\t\t\tif (!isEqual(draftValue, value)) {\n\t\t\t\tonCommit(draftValue);\n\t\t\t}\n\n\t\t\tonClose?.(draftValue);\n\t\t}\n\n\t\tpreviousOpenRef.current = open;\n\t}, [draftValue, isEqual, onClose, onCommit, open, value]);\n\n\tconst prepareOpen = () => {\n\t\tsetDraftValue(value);\n\t\tonOpen?.();\n\t};\n\n\treturn {\n\t\tdraftValue,\n\t\tsetDraftValue,\n\t\tprepareOpen\n\t};\n}\n","import { MouseEvent, RefObject } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerTriggerControllerOptions {\n\tmode: PickerTriggerMode;\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n\tinputRef: RefObject<HTMLInputElement | null>;\n\tsetQuery?: (value: string) => void;\n\topenList?: () => void;\n\tclose?: () => void;\n\ttoggleOpen?: () => void;\n\tonBeforeOpen?: () => void;\n}\n\ninterface HandleTriggerKeyDownOptions {\n\tevent: React.KeyboardEvent<HTMLElement>;\n\tonActivateWhenOpen?: () => void;\n\tenableSpaceActivation?: boolean;\n\tenableClosedArrowDownOpen?: boolean;\n\tsuppressClosedArrowUp?: boolean;\n}\n\nfunction focusInput(inputRef: RefObject<HTMLInputElement | null>) {\n\trequestAnimationFrame(() => {\n\t\tinputRef.current?.focus();\n\t});\n}\n\n/**\n * Единый контроллер пользовательских действий на trigger-input.\n * Держит поведение display/search-single/search-multi в одном месте.\n */\nexport function usePickerTriggerController({\n\tmode,\n\topen,\n\tcurrentQuery,\n\thasDisplayValue,\n\tinputRef,\n\tsetQuery,\n\topenList,\n\tclose,\n\ttoggleOpen,\n\tonBeforeOpen\n}: UsePickerTriggerControllerOptions) {\n\tconst policy = createPickerTriggerPolicy(mode);\n\n\tconst openTrigger = () => {\n\t\tonBeforeOpen?.();\n\n\t\tif (openList) {\n\t\t\topenList();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst closeTrigger = () => {\n\t\tif (close) {\n\t\t\tclose();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst toggleTrigger = () => {\n\t\tif (open) {\n\t\t\tcloseTrigger();\n\t\t} else {\n\t\t\topenTrigger();\n\t\t}\n\n\t\tif (policy.shouldFocusReferenceOnToggle(open)) {\n\t\t\tfocusInput(inputRef);\n\t\t}\n\t};\n\n\treturn {\n\t\tpolicy,\n\t\thandleTriggerInputChange: (nextValue: string) => {\n\t\t\tsetQuery?.(nextValue);\n\n\t\t\tif (policy.shouldOpenOnInputChange(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerClick: () => {\n\t\t\tif (policy.shouldOpenOnTriggerClick(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerFocus: (input: HTMLInputElement) => {\n\t\t\tif (\n\t\t\t\tpolicy.shouldSelectTriggerTextOnFocus({\n\t\t\t\t\topen,\n\t\t\t\t\tcurrentQuery,\n\t\t\t\t\thasDisplayValue\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tinput.select();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\thandleToggleMouseDown: (event: MouseEvent<HTMLButtonElement>) => {\n\t\t\tevent.preventDefault();\n\t\t},\n\t\thandleToggleClick: () => {\n\t\t\ttoggleTrigger();\n\t\t},\n\t\thandleTriggerKeyDown: ({\n\t\t\tevent,\n\t\t\tonActivateWhenOpen,\n\t\t\tenableSpaceActivation = false,\n\t\t\tenableClosedArrowDownOpen = false,\n\t\t\tsuppressClosedArrowUp = false\n\t\t}: HandleTriggerKeyDownOptions) => {\n\t\t\tif (!open && suppressClosedArrowUp && event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!open && enableClosedArrowDownOpen && event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleTrigger();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Enter\") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (enableSpaceActivation && event.key === \" \") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttoggleTrigger\n\t};\n}\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { t as e } from "./floating-arrow-DPKwJfww.js";
2
2
  import { cloneElement as t, createContext as n, useCallback as r, useContext as i, useEffect as a, useLayoutEffect as o, useRef as s, useState as c } from "react";
3
3
  import { cn as l } from "@ryuzaki13/react-foundation-lib/utils";
4
- import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
5
- import { FloatingPortal as p, arrow as m, autoUpdate as h, flip as g, offset as _, shift as v, useDismiss as y, useFloating as b, useHover as x, useInteractions as S, useRole as C } from "@floating-ui/react";
6
- import { useClickOutside as w, useEscapeDismiss as T, useOverlayFocus as E } from "@ryuzaki13/react-foundation-lib/dom";
4
+ import { FloatingPortal as u, arrow as d, autoUpdate as f, flip as p, offset as m, shift as h, useDismiss as g, useFloating as _, useHover as v, useInteractions as y, useRole as b } from "@floating-ui/react";
5
+ import { useClickOutside as x, useEscapeDismiss as S, useOverlayFocus as C } from "@ryuzaki13/react-foundation-lib/dom";
6
+ import { Fragment as w, jsx as T, jsxs as E } from "react/jsx-runtime";
7
7
  import { createMissingContextError as D } from "@ryuzaki13/react-foundation-lib/error";
8
8
  import { createPortal as O } from "react-dom";
9
9
  var k = {
@@ -22,45 +22,45 @@ function j() {
22
22
  //#endregion
23
23
  //#region src/popover/components/PopoverContent.tsx
24
24
  var M = ({ children: t, onClose: n, closeOnOutside: i = !0, closeOnEscape: a = !0, disableOutsideClick: o = !1, background: c = "secondary" }) => {
25
- let { open: u, setOpen: m, refs: h, floatingStyles: g, middlewareData: _, placement: v, arrowRef: y } = j(), b = s(null), x = r((e) => {
26
- b.current = e, h.setFloating(e);
27
- }, [h]), S = E({
28
- active: u,
25
+ let { open: d, setOpen: f, refs: p, floatingStyles: m, middlewareData: h, placement: g, arrowRef: _ } = j(), v = s(null), y = r((e) => {
26
+ v.current = e, p.setFloating(e);
27
+ }, [p]), b = C({
28
+ active: d,
29
29
  initialFocus: "container",
30
30
  restoreFocus: !0,
31
- containerRef: b
32
- }), C = r(() => {
33
- u && (m(!1), n?.());
31
+ containerRef: v
32
+ }), w = r(() => {
33
+ d && (f(!1), n?.());
34
34
  }, [
35
- m,
35
+ f,
36
36
  n,
37
- u
37
+ d
38
38
  ]);
39
- T({
40
- active: u,
39
+ S({
40
+ active: d,
41
41
  enabled: a,
42
- onDismiss: C,
43
- containerRef: S
42
+ onDismiss: w,
43
+ containerRef: b
44
44
  });
45
45
  let D = r(() => {
46
- !u || o || i && C();
46
+ !d || o || i && w();
47
47
  }, [
48
- u,
48
+ d,
49
49
  o,
50
50
  i,
51
- C
51
+ w
52
52
  ]);
53
- return w([h.floating, h.reference], D), u ? /* @__PURE__ */ d(p, { children: /* @__PURE__ */ f("div", {
54
- ref: x,
55
- style: g,
53
+ return x([p.floating, p.reference], D), d ? /* @__PURE__ */ T(u, { children: /* @__PURE__ */ E("div", {
54
+ ref: y,
55
+ style: m,
56
56
  className: l(k.popover, k[c]),
57
57
  role: "dialog",
58
58
  "aria-modal": "true",
59
59
  tabIndex: -1,
60
- children: [typeof t == "function" ? t({ setClose: C }) : t, /* @__PURE__ */ d(e, {
61
- ref: y,
62
- placement: v,
63
- middlewareData: _
60
+ children: [typeof t == "function" ? t({ setClose: w }) : t, /* @__PURE__ */ T(e, {
61
+ ref: _,
62
+ placement: g,
63
+ middlewareData: h
64
64
  })]
65
65
  }) }) : null;
66
66
  }, N = ({ passive: e, children: n }) => {
@@ -77,33 +77,33 @@ var M = ({ children: t, onClose: n, closeOnOutside: i = !0, closeOnEscape: a = !
77
77
  onClick: s
78
78
  });
79
79
  }, P = Object.assign(({ children: e, open: t, defaultOpen: n, onOpenChange: i, placement: a = "bottom" }) => {
80
- let [o, l] = c(n ?? !1), u = t !== void 0, f = u ? t : o, p = r((e) => {
81
- let t = typeof e == "function" ? e(f) : e;
80
+ let [o, l] = c(n ?? !1), u = t !== void 0, g = u ? t : o, v = r((e) => {
81
+ let t = typeof e == "function" ? e(g) : e;
82
82
  u || l(t), i?.(t);
83
83
  }, [
84
84
  u,
85
85
  i,
86
- f
87
- ]), y = s(null), { refs: x, floatingStyles: S, middlewareData: C, placement: w } = b({
88
- open: f,
89
- onOpenChange: p,
86
+ g
87
+ ]), y = s(null), { refs: b, floatingStyles: x, middlewareData: S, placement: C } = _({
88
+ open: g,
89
+ onOpenChange: v,
90
90
  placement: a,
91
91
  middleware: [
92
- _(8),
93
- g(),
94
- v({ padding: 16 }),
95
- m({ element: y.current })
92
+ m(8),
93
+ p(),
94
+ h({ padding: 16 }),
95
+ d({ element: y.current })
96
96
  ],
97
- whileElementsMounted: h
97
+ whileElementsMounted: f
98
98
  });
99
- return /* @__PURE__ */ d(A.Provider, {
99
+ return /* @__PURE__ */ T(A.Provider, {
100
100
  value: {
101
- open: f,
102
- setOpen: p,
103
- refs: x,
104
- floatingStyles: S,
105
- placement: w,
106
- middlewareData: C,
101
+ open: g,
102
+ setOpen: v,
103
+ refs: b,
104
+ floatingStyles: x,
105
+ placement: C,
106
+ middlewareData: S,
107
107
  arrowRef: y
108
108
  },
109
109
  children: e
@@ -119,14 +119,14 @@ var M = ({ children: t, onClose: n, closeOnOutside: i = !0, closeOnEscape: a = !
119
119
  error: "bpGNoX",
120
120
  warning: "tYnRg-",
121
121
  success: "_8lflEh"
122
- }, I = ({ content: t, children: n, openOnHover: r = !0, placement: i = "bottom", openDelay: a = 200, closeDelay: p = 100, maxWidth: w, state: T, tooltip: E, positionUpdateKey: D }) => {
123
- let [k, A] = c(!1), j = s(null), { refs: M, floatingStyles: N, middlewareData: P, context: I, placement: L, update: R } = b({
122
+ }, I = ({ content: t, children: n, openOnHover: r = !0, placement: i = "bottom", openDelay: a = 200, closeDelay: u = 100, maxWidth: x, state: S, tooltip: C, positionUpdateKey: D }) => {
123
+ let [k, A] = c(!1), j = s(null), { refs: M, floatingStyles: N, middlewareData: P, context: I, placement: L, update: R } = _({
124
124
  open: k,
125
125
  onOpenChange: A,
126
126
  placement: i,
127
127
  middleware: [
128
- _(8),
129
- g({
128
+ m(8),
129
+ p({
130
130
  fallbackAxisSideDirection: "end",
131
131
  fallbackPlacements: [
132
132
  "top",
@@ -134,13 +134,13 @@ var M = ({ children: t, onClose: n, closeOnOutside: i = !0, closeOnEscape: a = !
134
134
  "bottom"
135
135
  ]
136
136
  }),
137
- v({ padding: 16 }),
138
- m({
137
+ h({ padding: 16 }),
138
+ d({
139
139
  element: j,
140
140
  padding: 8
141
141
  })
142
142
  ],
143
- whileElementsMounted: h
143
+ whileElementsMounted: f
144
144
  });
145
145
  o(() => {
146
146
  k && R();
@@ -149,48 +149,48 @@ var M = ({ children: t, onClose: n, closeOnOutside: i = !0, closeOnEscape: a = !
149
149
  D,
150
150
  R
151
151
  ]);
152
- let z = x(I, {
152
+ let z = v(I, {
153
153
  enabled: r,
154
154
  move: !1,
155
155
  delay: {
156
156
  open: a,
157
- close: p
157
+ close: u
158
158
  }
159
- }), B = y(I), V = C(I), { getReferenceProps: H, getFloatingProps: U } = S([
159
+ }), B = g(I), V = b(I), { getReferenceProps: H, getFloatingProps: U } = y([
160
160
  z,
161
161
  B,
162
162
  V
163
163
  ]);
164
- return /* @__PURE__ */ f(u, { children: [/* @__PURE__ */ d("span", {
164
+ return /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T("span", {
165
165
  ref: M.setReference,
166
166
  ...H(),
167
167
  style: { lineHeight: 1 },
168
168
  children: n
169
- }), k && O(/* @__PURE__ */ f("div", {
169
+ }), k && O(/* @__PURE__ */ E("div", {
170
170
  ref: M.setFloating,
171
171
  style: {
172
172
  ...N,
173
173
  zIndex: "var(--z-tooltip)",
174
- maxWidth: w ? `${w}em` : void 0
174
+ maxWidth: x ? `${x}em` : void 0
175
175
  },
176
176
  ...U(),
177
177
  role: "tooltip",
178
- className: l(F.tooltipPanel, E && F.tooltip, T && F[T]),
179
- children: [t, /* @__PURE__ */ d(e, {
178
+ className: l(F.tooltipPanel, C && F.tooltip, S && F[S]),
179
+ children: [t, /* @__PURE__ */ T(e, {
180
180
  ref: j,
181
181
  placement: L,
182
182
  middlewareData: P
183
183
  })]
184
184
  }), document.body)] });
185
185
  }, L = ({ x: t, y: n, children: r }) => {
186
- let i = s(null), { refs: o, floatingStyles: c, middlewareData: l, placement: u } = b({
186
+ let i = s(null), { refs: o, floatingStyles: c, middlewareData: l, placement: u } = _({
187
187
  strategy: "absolute",
188
188
  placement: "top",
189
189
  middleware: [
190
- _(6),
191
- g(),
192
- v({ padding: 16 }),
193
- m({ element: i })
190
+ m(6),
191
+ p(),
192
+ h({ padding: 16 }),
193
+ d({ element: i })
194
194
  ]
195
195
  });
196
196
  return a(() => {
@@ -209,7 +209,7 @@ var M = ({ children: t, onClose: n, closeOnOutside: i = !0, closeOnEscape: a = !
209
209
  t,
210
210
  n,
211
211
  o
212
- ]), /* @__PURE__ */ f("div", {
212
+ ]), /* @__PURE__ */ E("div", {
213
213
  ref: o.setFloating,
214
214
  style: {
215
215
  ...c,
@@ -217,7 +217,7 @@ var M = ({ children: t, onClose: n, closeOnOutside: i = !0, closeOnEscape: a = !
217
217
  pointerEvents: "none"
218
218
  },
219
219
  className: F.tooltip,
220
- children: [r, /* @__PURE__ */ d(e, {
220
+ children: [r, /* @__PURE__ */ T(e, {
221
221
  ref: i,
222
222
  placement: u,
223
223
  middlewareData: l
@@ -227,4 +227,4 @@ var M = ({ children: t, onClose: n, closeOnOutside: i = !0, closeOnEscape: a = !
227
227
  //#endregion
228
228
  export { M as a, N as i, I as n, j as o, P as r, L as t };
229
229
 
230
- //# sourceMappingURL=popover-BTT7zSqx.js.map
230
+ //# sourceMappingURL=popover-IExDrsF6.js.map