@lmb-it/kitsconcerto-native 0.1.257 → 0.1.259
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.
- package/apps/mobile/src/Core/Dropdown/index.cjs +96 -76
- package/apps/mobile/src/Core/Dropdown/index.cjs.map +1 -1
- package/apps/mobile/src/Core/Dropdown/index.js +98 -78
- package/apps/mobile/src/Core/Dropdown/index.js.map +1 -1
- package/apps/mobile/src/Core/Dropdown/panelGeometry.cjs +43 -0
- package/apps/mobile/src/Core/Dropdown/panelGeometry.cjs.map +1 -0
- package/apps/mobile/src/Core/Dropdown/panelGeometry.js +38 -0
- package/apps/mobile/src/Core/Dropdown/panelGeometry.js.map +1 -0
- package/apps/mobile/src/Core/MultiSelect/index.cjs +34 -5
- package/apps/mobile/src/Core/MultiSelect/index.cjs.map +1 -1
- package/apps/mobile/src/Core/MultiSelect/index.js +34 -5
- package/apps/mobile/src/Core/MultiSelect/index.js.map +1 -1
- package/apps/mobile/src/Factory/helpers/useKeyboardHeight.cjs +24 -0
- package/apps/mobile/src/Factory/helpers/useKeyboardHeight.cjs.map +1 -0
- package/apps/mobile/src/Factory/helpers/useKeyboardHeight.js +22 -0
- package/apps/mobile/src/Factory/helpers/useKeyboardHeight.js.map +1 -0
- package/form/selects/Dropdown/index.cjs +11 -2
- package/form/selects/Dropdown/index.cjs.map +1 -1
- package/form/selects/Dropdown/index.js +11 -2
- package/form/selects/Dropdown/index.js.map +1 -1
- package/form/selects/ListBox/index.cjs +6 -2
- package/form/selects/ListBox/index.cjs.map +1 -1
- package/form/selects/ListBox/index.js +6 -2
- package/form/selects/ListBox/index.js.map +1 -1
- package/form/selects/MultiSelect/index.cjs +11 -2
- package/form/selects/MultiSelect/index.cjs.map +1 -1
- package/form/selects/MultiSelect/index.js +11 -2
- package/form/selects/MultiSelect/index.js.map +1 -1
- package/form/selects/helpers/SelectPopupOverlay.cjs +200 -0
- package/form/selects/helpers/SelectPopupOverlay.cjs.map +1 -0
- package/form/selects/helpers/SelectPopupOverlay.js +196 -0
- package/form/selects/helpers/SelectPopupOverlay.js.map +1 -0
- package/form-renderer/components/fields/Select/index.cjs +2 -0
- package/form-renderer/components/fields/Select/index.cjs.map +1 -1
- package/form-renderer/components/fields/Select/index.js +2 -0
- package/form-renderer/components/fields/Select/index.js.map +1 -1
- package/index.d.ts +15 -0
- package/locale/ar.json.cjs +3 -0
- package/locale/ar.json.cjs.map +1 -1
- package/locale/ar.json.js +3 -1
- package/locale/ar.json.js.map +1 -1
- package/locale/en.json.cjs +3 -0
- package/locale/en.json.cjs.map +1 -1
- package/locale/en.json.js +3 -1
- package/locale/en.json.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectPopupOverlay.cjs","sources":["../../../../../src/form/selects/helpers/SelectPopupOverlay.native.tsx"],"sourcesContent":["import React from 'react';\nimport {Pressable, StyleSheet, Text, View, useWindowDimensions} from 'react-native';\nimport {useSafeAreaInsets} from 'react-native-safe-area-context';\nimport {useKeyboardHeight} from '@lmb-it/kitsconcertomobile';\nimport KitsDialogControlled from '../../../components/overlay/Dialog';\nimport {useKitsTheme} from '../../../contexts/Theme';\nimport {useLanguage} from '../../../hooks';\nimport useThemedFont from '../../../hooks/useThemedFont';\n\n/**\n * The container a select's options live in when `popup` is on.\n *\n * ⛔ THIS IS NOT A SECOND OVERLAY MECHANISM. It is the library's own\n * `KitsDialogControlled` in bottom-sheet position, so the scrim, the slide\n * animation, the safe-area insets, `dismissableMask` and Android's hardware\n * back all come from the one place that already owns them. The only thing\n * this file adds is the header row and the sizing a picker needs.\n *\n * ⛔ IT USES `content` MODE ON PURPOSE. The Dialog's default template puts its\n * children inside a ScrollView with `maxHeight: 400`. A FlatList inside a\n * ScrollView scrolls badly and warns, and a 400pt cap is the very thing the\n * popup exists to escape. `content` replaces the whole header/body/footer\n * template, so the caller's search field can be pinned and its list can own\n * the remaining height.\n *\n * WHY A FIXED FRACTION OF THE SCREEN. The popup's whole purpose is that its\n * height does not depend on where the trigger happens to sit or on whether the\n * keyboard is up. It takes a fixed share of the window, the search field sits\n * at the top of it, and the list takes the rest.\n */\n\nexport interface ISelectPopupOverlayProps {\n /** Open state. */\n visible: boolean;\n /** Called for every dismissal route — the ✕, the scrim, Android back. */\n onClose: () => void;\n /** Title shown beside the close control. Falls back to the field's label. */\n title?: React.ReactNode;\n /** The search field and the list. */\n children: React.ReactNode;\n}\n\n/** Share of the window height the sheet occupies when the keyboard is down. */\nconst SHEET_HEIGHT_RATIO = 0.75;\n/** Never shorter than this, even on a small screen with the keyboard up. */\nconst SHEET_MIN_HEIGHT = 240;\n\nconst SelectPopupOverlay = ({visible, onClose, title, children}: ISelectPopupOverlayProps) => {\n const {resolveToken} = useKitsTheme();\n const {isRTL} = useLanguage();\n const insets = useSafeAreaInsets();\n const {height: windowHeight} = useWindowDimensions();\n /* Raw RN <Text> does not inherit `fontFamily` through View parents, so a\n consumer that swaps the theme font would see it everywhere except here.\n See useThemedFont's own note. */\n const headingFont = useThemedFont('heading');\n const keyboardHeight = useKeyboardHeight();\n\n /*\n * ⛔ \"OWNS THE SCREEN\" MEANS ABOVE THE KEYBOARD, NOT BEHIND IT. A sheet\n * pinned to the bottom at a fixed 75% still has its lower half under the\n * keyboard the moment the search field takes focus, and the list is back to\n * competing for the gap — the exact fault the popup exists to escape, one\n * layer along. The sheet is capped to what is actually visible.\n *\n * The keyboard replaces the bottom inset rather than adding to it: it\n * covers the home indicator.\n */\n const visibleHeight = windowHeight - Math.max(insets.bottom, keyboardHeight) - insets.top;\n const sheetHeight = Math.max(\n Math.min(SHEET_MIN_HEIGHT, visibleHeight),\n Math.min(Math.round(windowHeight * SHEET_HEIGHT_RATIO), visibleHeight),\n );\n\n const textColor = resolveToken('text');\n const borderColor = resolveToken('border');\n const grabberColor = resolveToken('gray.300');\n const subtextColor = resolveToken('gray.500');\n\n return (\n <KitsDialogControlled\n onHide={onClose}\n state={{\n visible,\n position: 'bottom',\n // Tap-outside dismiss. `onRequestClose` inside the Dialog gives\n // Android's back button the same route.\n dismissableMask: true,\n onClose,\n style: {\n height: sheetHeight,\n // The keyboard already clears the home indicator, so the\n // inset is only owed when the keyboard is down.\n paddingBottom: keyboardHeight > 0 ? 0 : insets.bottom,\n marginBottom: keyboardHeight,\n },\n content: ({hide}: {hide: () => void}) => (\n <View style={styles.root}>\n <View style={[styles.grabber, {backgroundColor: grabberColor}]} />\n <View\n style={[\n styles.header,\n {borderBottomColor: borderColor},\n // The header mirrors with the reader, like every\n // other row this library draws.\n isRTL ? styles.headerRtl : styles.headerLtr,\n ]}>\n <Text\n numberOfLines={1}\n style={[\n styles.title,\n {color: textColor, fontFamily: headingFont},\n isRTL ? styles.titleRtl : styles.titleLtr,\n ]}>\n {title}\n </Text>\n <Pressable onPress={hide} hitSlop={12} accessibilityRole=\"button\">\n <Text style={[styles.close, {color: subtextColor}]}>✕</Text>\n </Pressable>\n </View>\n {children}\n </View>\n ),\n }}\n />\n );\n};\n\nconst styles = StyleSheet.create({\n root: {\n flex: 1,\n minHeight: 0,\n },\n grabber: {\n width: 40,\n height: 4,\n borderRadius: 2,\n alignSelf: 'center',\n marginTop: 8,\n marginBottom: 4,\n },\n header: {\n alignItems: 'center',\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderBottomWidth: 1,\n gap: 12,\n },\n headerLtr: {flexDirection: 'row'},\n headerRtl: {flexDirection: 'row-reverse'},\n title: {\n flex: 1,\n fontSize: 17,\n fontWeight: '700',\n },\n titleLtr: {textAlign: 'left', writingDirection: 'ltr'},\n titleRtl: {textAlign: 'right', writingDirection: 'rtl'},\n close: {\n fontSize: 18,\n },\n});\n\nexport default SelectPopupOverlay;\n"],"names":["useKitsTheme","useLanguage","useSafeAreaInsets","useWindowDimensions","useThemedFont","useKeyboardHeight","jsx","KitsDialogControlled","jsxs","View","Text","Pressable","StyleSheet"],"mappings":"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"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useWindowDimensions, View, Text, Pressable, StyleSheet } from 'react-native';
|
|
3
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
4
|
+
import '../../../apps/mobile/src/ui/accordion/index.js';
|
|
5
|
+
import '../../../apps/mobile/src/ui/actionsheet/index.js';
|
|
6
|
+
import '../../../apps/mobile/src/ui/alert/index.js';
|
|
7
|
+
import '../../../apps/mobile/src/ui/alert-dialog/index.js';
|
|
8
|
+
import '../../../apps/mobile/src/ui/avatar/index.js';
|
|
9
|
+
import '../../../apps/mobile/src/ui/badge/index.js';
|
|
10
|
+
import '../../../apps/mobile/src/ui/bottomsheet/index.js';
|
|
11
|
+
import '../../../apps/mobile/src/ui/box/index.js';
|
|
12
|
+
import '../../../apps/mobile/src/ui/button/index.js';
|
|
13
|
+
import '../../../apps/mobile/src/ui/card/index.js';
|
|
14
|
+
import '../../../apps/mobile/src/ui/center/index.js';
|
|
15
|
+
import '../../../apps/mobile/src/ui/checkbox/index.js';
|
|
16
|
+
import '../../../apps/mobile/src/ui/divider/index.js';
|
|
17
|
+
import '../../../apps/mobile/src/ui/drawer/index.js';
|
|
18
|
+
import '../../../apps/mobile/src/ui/fab/index.js';
|
|
19
|
+
import '../../../apps/mobile/src/ui/form-control/index.js';
|
|
20
|
+
import 'react';
|
|
21
|
+
import '../../../apps/mobile/src/ui/gluestack-ui-provider/config.js';
|
|
22
|
+
import '@gluestack-ui/core/overlay/creator';
|
|
23
|
+
import '@gluestack-ui/core/toast/creator';
|
|
24
|
+
import 'nativewind';
|
|
25
|
+
import '../../../apps/mobile/src/ui/grid/index.js';
|
|
26
|
+
import '../../../apps/mobile/src/ui/heading/index.js';
|
|
27
|
+
import '../../../apps/mobile/src/ui/hstack/index.js';
|
|
28
|
+
import '../../../apps/mobile/src/ui/icon/index.js';
|
|
29
|
+
import '../../../apps/mobile/src/ui/image/index.js';
|
|
30
|
+
import '../../../apps/mobile/src/ui/image-background/index.js';
|
|
31
|
+
import '../../../apps/mobile/src/ui/input/index.js';
|
|
32
|
+
import '../../../apps/mobile/src/ui/link/index.js';
|
|
33
|
+
import '../../../apps/mobile/src/ui/menu/index.js';
|
|
34
|
+
import '../../../apps/mobile/src/ui/modal/index.js';
|
|
35
|
+
import '../../../apps/mobile/src/ui/popover/index.js';
|
|
36
|
+
import '../../../apps/mobile/src/ui/portal/index.js';
|
|
37
|
+
import '../../../apps/mobile/src/ui/pressable/index.js';
|
|
38
|
+
import '../../../apps/mobile/src/ui/progress/index.js';
|
|
39
|
+
import '../../../apps/mobile/src/ui/radio/index.js';
|
|
40
|
+
import '../../../apps/mobile/src/ui/select/index.js';
|
|
41
|
+
import '../../../apps/mobile/src/ui/skeleton/index.js';
|
|
42
|
+
import '../../../apps/mobile/src/ui/slider/index.js';
|
|
43
|
+
import '../../../apps/mobile/src/ui/spinner/index.js';
|
|
44
|
+
import '../../../apps/mobile/src/ui/switch/index.js';
|
|
45
|
+
import '../../../apps/mobile/src/ui/table/index.js';
|
|
46
|
+
import '../../../apps/mobile/src/ui/text/index.js';
|
|
47
|
+
import '../../../apps/mobile/src/ui/textarea/index.js';
|
|
48
|
+
import '../../../apps/mobile/src/ui/toast/index.js';
|
|
49
|
+
import '../../../apps/mobile/src/ui/tooltip/index.js';
|
|
50
|
+
import '../../../apps/mobile/src/ui/vstack/index.js';
|
|
51
|
+
import 'react-native-reanimated';
|
|
52
|
+
import 'react-icons/fa';
|
|
53
|
+
import 'react-icons/ai';
|
|
54
|
+
import 'react-icons/io';
|
|
55
|
+
import '../../../packages/types/src/Components/Molecules/Form/FilePicker/types/filesTypes.js';
|
|
56
|
+
import 'yup';
|
|
57
|
+
import '../../../packages/types/src/Css/map/index.js';
|
|
58
|
+
import '../../../packages/types/src/Theme/shadows.js';
|
|
59
|
+
import '../../../packages/types/src/Theme/defaultTheme.js';
|
|
60
|
+
import '../../../packages/types/src/Theme/alphaColors.js';
|
|
61
|
+
import '../../../apps/mobile/src/Factory/helpers/cssVarMap.js';
|
|
62
|
+
import '../../../apps/mobile/src/Factory/DimensionsContext.js';
|
|
63
|
+
import { useKeyboardHeight } from '../../../apps/mobile/src/Factory/helpers/useKeyboardHeight.js';
|
|
64
|
+
import 'i18next';
|
|
65
|
+
import 'react-i18next';
|
|
66
|
+
import '../../../apps/mobile/src/Core/AutoComplete/index.js';
|
|
67
|
+
import '../../../apps/mobile/src/Core/Dropdown/index.js';
|
|
68
|
+
import '../../../apps/mobile/src/Core/MultiSelect/index.js';
|
|
69
|
+
import '../../../apps/mobile/src/Core/Trees/components/CoreTree.js';
|
|
70
|
+
import '../../../apps/mobile/src/Core/Trees/components/CoreTreeSelect.js';
|
|
71
|
+
import '../../../apps/mobile/src/Core/Trees/components/CoreToolbar.js';
|
|
72
|
+
import '../../../apps/mobile/src/Core/Paginator/index.js';
|
|
73
|
+
import 'lucide-react-native';
|
|
74
|
+
import '../../../apps/mobile/src/Core/SelectButton/index.js';
|
|
75
|
+
import '../../../apps/mobile/src/Core/DataTable/DataTable.js';
|
|
76
|
+
import '../../../apps/mobile/src/Core/Tag/index.js';
|
|
77
|
+
import '../../../apps/mobile/src/Core/Badge/index.js';
|
|
78
|
+
import '../../../apps/mobile/src/Core/ProgressBar/index.js';
|
|
79
|
+
import '../../../apps/mobile/src/Core/Checkbox/index.js';
|
|
80
|
+
import '../../../apps/mobile/src/Core/RadioButton/index.js';
|
|
81
|
+
import '../../../apps/mobile/src/Core/Input/index.js';
|
|
82
|
+
import '../../../apps/mobile/src/Core/Input/Field.js';
|
|
83
|
+
import '../../../apps/mobile/src/Core/Input/Slot.js';
|
|
84
|
+
import KitsDialogControlled from '../../../components/overlay/Dialog/index.js';
|
|
85
|
+
import { useLanguage } from '../../../hooks/locale.js';
|
|
86
|
+
import '../../../contexts/DialogContext.js';
|
|
87
|
+
import useThemedFont from '../../../hooks/useThemedFont.js';
|
|
88
|
+
import { useKitsTheme } from '../../../contexts/Theme/KitsThemeProvider.js';
|
|
89
|
+
|
|
90
|
+
const SHEET_HEIGHT_RATIO = 0.75;
|
|
91
|
+
const SHEET_MIN_HEIGHT = 240;
|
|
92
|
+
const SelectPopupOverlay = ({ visible, onClose, title, children }) => {
|
|
93
|
+
const { resolveToken } = useKitsTheme();
|
|
94
|
+
const { isRTL } = useLanguage();
|
|
95
|
+
const insets = useSafeAreaInsets();
|
|
96
|
+
const { height: windowHeight } = useWindowDimensions();
|
|
97
|
+
const headingFont = useThemedFont("heading");
|
|
98
|
+
const keyboardHeight = useKeyboardHeight();
|
|
99
|
+
const visibleHeight = windowHeight - Math.max(insets.bottom, keyboardHeight) - insets.top;
|
|
100
|
+
const sheetHeight = Math.max(
|
|
101
|
+
Math.min(SHEET_MIN_HEIGHT, visibleHeight),
|
|
102
|
+
Math.min(Math.round(windowHeight * SHEET_HEIGHT_RATIO), visibleHeight)
|
|
103
|
+
);
|
|
104
|
+
const textColor = resolveToken("text");
|
|
105
|
+
const borderColor = resolveToken("border");
|
|
106
|
+
const grabberColor = resolveToken("gray.300");
|
|
107
|
+
const subtextColor = resolveToken("gray.500");
|
|
108
|
+
return /* @__PURE__ */ jsx(
|
|
109
|
+
KitsDialogControlled,
|
|
110
|
+
{
|
|
111
|
+
onHide: onClose,
|
|
112
|
+
state: {
|
|
113
|
+
visible,
|
|
114
|
+
position: "bottom",
|
|
115
|
+
// Tap-outside dismiss. `onRequestClose` inside the Dialog gives
|
|
116
|
+
// Android's back button the same route.
|
|
117
|
+
dismissableMask: true,
|
|
118
|
+
onClose,
|
|
119
|
+
style: {
|
|
120
|
+
height: sheetHeight,
|
|
121
|
+
// The keyboard already clears the home indicator, so the
|
|
122
|
+
// inset is only owed when the keyboard is down.
|
|
123
|
+
paddingBottom: keyboardHeight > 0 ? 0 : insets.bottom,
|
|
124
|
+
marginBottom: keyboardHeight
|
|
125
|
+
},
|
|
126
|
+
content: ({ hide }) => /* @__PURE__ */ jsxs(View, { style: styles.root, children: [
|
|
127
|
+
/* @__PURE__ */ jsx(View, { style: [styles.grabber, { backgroundColor: grabberColor }] }),
|
|
128
|
+
/* @__PURE__ */ jsxs(
|
|
129
|
+
View,
|
|
130
|
+
{
|
|
131
|
+
style: [
|
|
132
|
+
styles.header,
|
|
133
|
+
{ borderBottomColor: borderColor },
|
|
134
|
+
// The header mirrors with the reader, like every
|
|
135
|
+
// other row this library draws.
|
|
136
|
+
isRTL ? styles.headerRtl : styles.headerLtr
|
|
137
|
+
],
|
|
138
|
+
children: [
|
|
139
|
+
/* @__PURE__ */ jsx(
|
|
140
|
+
Text,
|
|
141
|
+
{
|
|
142
|
+
numberOfLines: 1,
|
|
143
|
+
style: [
|
|
144
|
+
styles.title,
|
|
145
|
+
{ color: textColor, fontFamily: headingFont },
|
|
146
|
+
isRTL ? styles.titleRtl : styles.titleLtr
|
|
147
|
+
],
|
|
148
|
+
children: title
|
|
149
|
+
}
|
|
150
|
+
),
|
|
151
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: hide, hitSlop: 12, accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: [styles.close, { color: subtextColor }], children: "\u2715" }) })
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
),
|
|
155
|
+
children
|
|
156
|
+
] })
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
);
|
|
160
|
+
};
|
|
161
|
+
const styles = StyleSheet.create({
|
|
162
|
+
root: {
|
|
163
|
+
flex: 1,
|
|
164
|
+
minHeight: 0
|
|
165
|
+
},
|
|
166
|
+
grabber: {
|
|
167
|
+
width: 40,
|
|
168
|
+
height: 4,
|
|
169
|
+
borderRadius: 2,
|
|
170
|
+
alignSelf: "center",
|
|
171
|
+
marginTop: 8,
|
|
172
|
+
marginBottom: 4
|
|
173
|
+
},
|
|
174
|
+
header: {
|
|
175
|
+
alignItems: "center",
|
|
176
|
+
paddingHorizontal: 16,
|
|
177
|
+
paddingVertical: 12,
|
|
178
|
+
borderBottomWidth: 1,
|
|
179
|
+
gap: 12
|
|
180
|
+
},
|
|
181
|
+
headerLtr: { flexDirection: "row" },
|
|
182
|
+
headerRtl: { flexDirection: "row-reverse" },
|
|
183
|
+
title: {
|
|
184
|
+
flex: 1,
|
|
185
|
+
fontSize: 17,
|
|
186
|
+
fontWeight: "700"
|
|
187
|
+
},
|
|
188
|
+
titleLtr: { textAlign: "left", writingDirection: "ltr" },
|
|
189
|
+
titleRtl: { textAlign: "right", writingDirection: "rtl" },
|
|
190
|
+
close: {
|
|
191
|
+
fontSize: 18
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
export { SelectPopupOverlay as default };
|
|
196
|
+
//# sourceMappingURL=SelectPopupOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectPopupOverlay.js","sources":["../../../../../src/form/selects/helpers/SelectPopupOverlay.native.tsx"],"sourcesContent":["import React from 'react';\nimport {Pressable, StyleSheet, Text, View, useWindowDimensions} from 'react-native';\nimport {useSafeAreaInsets} from 'react-native-safe-area-context';\nimport {useKeyboardHeight} from '@lmb-it/kitsconcertomobile';\nimport KitsDialogControlled from '../../../components/overlay/Dialog';\nimport {useKitsTheme} from '../../../contexts/Theme';\nimport {useLanguage} from '../../../hooks';\nimport useThemedFont from '../../../hooks/useThemedFont';\n\n/**\n * The container a select's options live in when `popup` is on.\n *\n * ⛔ THIS IS NOT A SECOND OVERLAY MECHANISM. It is the library's own\n * `KitsDialogControlled` in bottom-sheet position, so the scrim, the slide\n * animation, the safe-area insets, `dismissableMask` and Android's hardware\n * back all come from the one place that already owns them. The only thing\n * this file adds is the header row and the sizing a picker needs.\n *\n * ⛔ IT USES `content` MODE ON PURPOSE. The Dialog's default template puts its\n * children inside a ScrollView with `maxHeight: 400`. A FlatList inside a\n * ScrollView scrolls badly and warns, and a 400pt cap is the very thing the\n * popup exists to escape. `content` replaces the whole header/body/footer\n * template, so the caller's search field can be pinned and its list can own\n * the remaining height.\n *\n * WHY A FIXED FRACTION OF THE SCREEN. The popup's whole purpose is that its\n * height does not depend on where the trigger happens to sit or on whether the\n * keyboard is up. It takes a fixed share of the window, the search field sits\n * at the top of it, and the list takes the rest.\n */\n\nexport interface ISelectPopupOverlayProps {\n /** Open state. */\n visible: boolean;\n /** Called for every dismissal route — the ✕, the scrim, Android back. */\n onClose: () => void;\n /** Title shown beside the close control. Falls back to the field's label. */\n title?: React.ReactNode;\n /** The search field and the list. */\n children: React.ReactNode;\n}\n\n/** Share of the window height the sheet occupies when the keyboard is down. */\nconst SHEET_HEIGHT_RATIO = 0.75;\n/** Never shorter than this, even on a small screen with the keyboard up. */\nconst SHEET_MIN_HEIGHT = 240;\n\nconst SelectPopupOverlay = ({visible, onClose, title, children}: ISelectPopupOverlayProps) => {\n const {resolveToken} = useKitsTheme();\n const {isRTL} = useLanguage();\n const insets = useSafeAreaInsets();\n const {height: windowHeight} = useWindowDimensions();\n /* Raw RN <Text> does not inherit `fontFamily` through View parents, so a\n consumer that swaps the theme font would see it everywhere except here.\n See useThemedFont's own note. */\n const headingFont = useThemedFont('heading');\n const keyboardHeight = useKeyboardHeight();\n\n /*\n * ⛔ \"OWNS THE SCREEN\" MEANS ABOVE THE KEYBOARD, NOT BEHIND IT. A sheet\n * pinned to the bottom at a fixed 75% still has its lower half under the\n * keyboard the moment the search field takes focus, and the list is back to\n * competing for the gap — the exact fault the popup exists to escape, one\n * layer along. The sheet is capped to what is actually visible.\n *\n * The keyboard replaces the bottom inset rather than adding to it: it\n * covers the home indicator.\n */\n const visibleHeight = windowHeight - Math.max(insets.bottom, keyboardHeight) - insets.top;\n const sheetHeight = Math.max(\n Math.min(SHEET_MIN_HEIGHT, visibleHeight),\n Math.min(Math.round(windowHeight * SHEET_HEIGHT_RATIO), visibleHeight),\n );\n\n const textColor = resolveToken('text');\n const borderColor = resolveToken('border');\n const grabberColor = resolveToken('gray.300');\n const subtextColor = resolveToken('gray.500');\n\n return (\n <KitsDialogControlled\n onHide={onClose}\n state={{\n visible,\n position: 'bottom',\n // Tap-outside dismiss. `onRequestClose` inside the Dialog gives\n // Android's back button the same route.\n dismissableMask: true,\n onClose,\n style: {\n height: sheetHeight,\n // The keyboard already clears the home indicator, so the\n // inset is only owed when the keyboard is down.\n paddingBottom: keyboardHeight > 0 ? 0 : insets.bottom,\n marginBottom: keyboardHeight,\n },\n content: ({hide}: {hide: () => void}) => (\n <View style={styles.root}>\n <View style={[styles.grabber, {backgroundColor: grabberColor}]} />\n <View\n style={[\n styles.header,\n {borderBottomColor: borderColor},\n // The header mirrors with the reader, like every\n // other row this library draws.\n isRTL ? styles.headerRtl : styles.headerLtr,\n ]}>\n <Text\n numberOfLines={1}\n style={[\n styles.title,\n {color: textColor, fontFamily: headingFont},\n isRTL ? styles.titleRtl : styles.titleLtr,\n ]}>\n {title}\n </Text>\n <Pressable onPress={hide} hitSlop={12} accessibilityRole=\"button\">\n <Text style={[styles.close, {color: subtextColor}]}>✕</Text>\n </Pressable>\n </View>\n {children}\n </View>\n ),\n }}\n />\n );\n};\n\nconst styles = StyleSheet.create({\n root: {\n flex: 1,\n minHeight: 0,\n },\n grabber: {\n width: 40,\n height: 4,\n borderRadius: 2,\n alignSelf: 'center',\n marginTop: 8,\n marginBottom: 4,\n },\n header: {\n alignItems: 'center',\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderBottomWidth: 1,\n gap: 12,\n },\n headerLtr: {flexDirection: 'row'},\n headerRtl: {flexDirection: 'row-reverse'},\n title: {\n flex: 1,\n fontSize: 17,\n fontWeight: '700',\n },\n titleLtr: {textAlign: 'left', writingDirection: 'ltr'},\n titleRtl: {textAlign: 'right', writingDirection: 'rtl'},\n close: {\n fontSize: 18,\n },\n});\n\nexport default SelectPopupOverlay;\n"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,7 @@ const Select = ({
|
|
|
46
46
|
filterBy,
|
|
47
47
|
virtualScroll,
|
|
48
48
|
showClear,
|
|
49
|
+
popup,
|
|
49
50
|
// Specific
|
|
50
51
|
withArrow,
|
|
51
52
|
isMultiple,
|
|
@@ -85,6 +86,7 @@ const Select = ({
|
|
|
85
86
|
filterBy,
|
|
86
87
|
virtualScroll,
|
|
87
88
|
showClear,
|
|
89
|
+
popup,
|
|
88
90
|
withArrow,
|
|
89
91
|
isMultiple,
|
|
90
92
|
forceSelection,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../../../src/form-renderer/components/fields/Select/index.tsx"],"sourcesContent":["import React from 'react';\nimport type {FieldValues} from 'react-hook-form';\nimport type {Shapes, UseFieldLogicElementProps} from \"@lmb-it/kitsconcerto-types\";\nimport {FormSelect} from \"../../../../_compat\";\nimport type {IListItem} from \"@lmb-it/kitsconcerto-types\";\n\nexport const Select = <T extends FieldValues>({\n element,\n control,\n getValues,\n fieldLogic,\n }: UseFieldLogicElementProps<T>) => {\n\n const {\n field,\n fieldState,\n label,\n placeholder,\n isDisabled,\n isRequired,\n helperText,\n watchedValues,\n list,\n attached,\n style: elementStyle,\n slots,\n } = fieldLogic;\n\n // Map form element type → FormSelect shape\n const shapeMap: Record<string, Shapes> = {\n Select: 'dropdown',\n Multiselect: 'multiselect',\n Tags: 'autocomplete',\n ListBox: 'listBox',\n TreeSelect: 'treeSelect',\n };\n\n const shape: Shapes = shapeMap[element.type as keyof typeof shapeMap] || 'dropdown';\n\n const {\n // Common\n labelKey,\n valueKey,\n outputValueKey,\n childrenKey,\n withFilter,\n filterBy,\n virtualScroll,\n showClear,\n // Specific\n withArrow,\n isMultiple,\n forceSelection,\n completeMethod,\n valueMode,\n selectionLimit,\n hideError,\n // TreeSelect specific\n onlyParentsWithChildren,\n isStructured,\n } = element as any;\n\n // No key regeneration needed here.\n // SelectContext already handles list changes reactively via its own useEffect([list]).\n // All underlying components (Dropdown, AutoComplete, etc.) react to prop changes natively.\n // A key change would force a full remount — destroying focus state and any user interaction.\n\n return (\n <FormSelect\n {...field}\n id={field.name}\n shape={shape}\n label={label}\n placeholder={placeholder}\n disabled={isDisabled}\n required={isRequired}\n invalid={fieldState.invalid}\n errors={fieldState.error?.message}\n helperText={helperText}\n list={list as IListItem[]}\n hideError={hideError}\n attached={attached}\n style={elementStyle?.input}\n containerStyle={elementStyle?.container}\n slots={slots}\n labelKey={labelKey}\n valueKey={valueKey}\n outputValueKey={outputValueKey}\n childrenKey={childrenKey}\n withFilter={withFilter}\n filterBy={filterBy}\n virtualScroll={virtualScroll}\n showClear={showClear}\n withArrow={withArrow}\n isMultiple={isMultiple}\n forceSelection={forceSelection}\n completeMethod={completeMethod}\n valueMode={valueMode}\n selectionLimit={selectionLimit}\n onlyParentsWithChildren={onlyParentsWithChildren}\n isStructured={isStructured}\n />\n );\n};\n\nexport default Select;\n"],"names":["jsx","FormSelect"],"mappings":";;;;;;;;;;AAMO,MAAM,SAAS,CAAwB;AAAA,EACI,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACJ,CAAA,KAAoC;AAE9E,EAAA,MAAM;AAAA,IACF,KAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO,YAAA;AAAA,IACP;AAAA,GACJ,GAAI,UAAA;AAGJ,EAAA,MAAM,QAAA,GAAmC;AAAA,IACrC,MAAA,EAAQ,UAAA;AAAA,IACR,WAAA,EAAa,aAAA;AAAA,IACb,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,SAAA;AAAA,IACT,UAAA,EAAY;AAAA,GAChB;AAEA,EAAA,MAAM,KAAA,GAAgB,QAAA,CAAS,OAAA,CAAQ,IAA6B,CAAA,IAAK,UAAA;AAEzE,EAAA,MAAM;AAAA;AAAA,IAEF,QAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA;AAAA,IAEA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA;AAAA,IAEA,uBAAA;AAAA,IACA;AAAA,GACJ,GAAI,OAAA;AAOJ,EAAA,uBACIA,cAAA;AAAA,IAACC,qBAAA;AAAA,IAAA;AAAA,MACI,GAAG,KAAA;AAAA,MACJ,IAAI,KAAA,CAAM,IAAA;AAAA,MACV,KAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA,EAAU,UAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,SAAS,UAAA,CAAW,OAAA;AAAA,MACpB,MAAA,EAAQ,WAAW,KAAA,EAAO,OAAA;AAAA,MAC1B,UAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAO,YAAA,EAAc,KAAA;AAAA,MACrB,gBAAgB,YAAA,EAAc,SAAA;AAAA,MAC9B,KAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,uBAAA;AAAA,MACA;AAAA;AAAA,GACJ;AAER;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../../../src/form-renderer/components/fields/Select/index.tsx"],"sourcesContent":["import React from 'react';\nimport type {FieldValues} from 'react-hook-form';\nimport type {Shapes, UseFieldLogicElementProps} from \"@lmb-it/kitsconcerto-types\";\nimport {FormSelect} from \"../../../../_compat\";\nimport type {IListItem} from \"@lmb-it/kitsconcerto-types\";\n\nexport const Select = <T extends FieldValues>({\n element,\n control,\n getValues,\n fieldLogic,\n }: UseFieldLogicElementProps<T>) => {\n\n const {\n field,\n fieldState,\n label,\n placeholder,\n isDisabled,\n isRequired,\n helperText,\n watchedValues,\n list,\n attached,\n style: elementStyle,\n slots,\n } = fieldLogic;\n\n // Map form element type → FormSelect shape\n const shapeMap: Record<string, Shapes> = {\n Select: 'dropdown',\n Multiselect: 'multiselect',\n Tags: 'autocomplete',\n ListBox: 'listBox',\n TreeSelect: 'treeSelect',\n };\n\n const shape: Shapes = shapeMap[element.type as keyof typeof shapeMap] || 'dropdown';\n\n const {\n // Common\n labelKey,\n valueKey,\n outputValueKey,\n childrenKey,\n withFilter,\n filterBy,\n virtualScroll,\n showClear,\n popup,\n // Specific\n withArrow,\n isMultiple,\n forceSelection,\n completeMethod,\n valueMode,\n selectionLimit,\n hideError,\n // TreeSelect specific\n onlyParentsWithChildren,\n isStructured,\n } = element as any;\n\n // No key regeneration needed here.\n // SelectContext already handles list changes reactively via its own useEffect([list]).\n // All underlying components (Dropdown, AutoComplete, etc.) react to prop changes natively.\n // A key change would force a full remount — destroying focus state and any user interaction.\n\n return (\n <FormSelect\n {...field}\n id={field.name}\n shape={shape}\n label={label}\n placeholder={placeholder}\n disabled={isDisabled}\n required={isRequired}\n invalid={fieldState.invalid}\n errors={fieldState.error?.message}\n helperText={helperText}\n list={list as IListItem[]}\n hideError={hideError}\n attached={attached}\n style={elementStyle?.input}\n containerStyle={elementStyle?.container}\n slots={slots}\n labelKey={labelKey}\n valueKey={valueKey}\n outputValueKey={outputValueKey}\n childrenKey={childrenKey}\n withFilter={withFilter}\n filterBy={filterBy}\n virtualScroll={virtualScroll}\n showClear={showClear}\n /* ⛔ A PROP IS ONLY AS GOOD AS ITS NARROWEST GATE. This renderer\n forwards a NAMED list, not a spread, so a select prop that is not\n listed here never reaches the component however correct the rest\n of the chain is. `popup` was added to the type, the wrapper and\n the native component and still did nothing, because of this line's\n absence. */\n popup={popup}\n withArrow={withArrow}\n isMultiple={isMultiple}\n forceSelection={forceSelection}\n completeMethod={completeMethod}\n valueMode={valueMode}\n selectionLimit={selectionLimit}\n onlyParentsWithChildren={onlyParentsWithChildren}\n isStructured={isStructured}\n />\n );\n};\n\nexport default Select;\n"],"names":["jsx","FormSelect"],"mappings":";;;;;;;;;;AAMO,MAAM,SAAS,CAAwB;AAAA,EACI,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACJ,CAAA,KAAoC;AAE9E,EAAA,MAAM;AAAA,IACF,KAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO,YAAA;AAAA,IACP;AAAA,GACJ,GAAI,UAAA;AAGJ,EAAA,MAAM,QAAA,GAAmC;AAAA,IACrC,MAAA,EAAQ,UAAA;AAAA,IACR,WAAA,EAAa,aAAA;AAAA,IACb,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,SAAA;AAAA,IACT,UAAA,EAAY;AAAA,GAChB;AAEA,EAAA,MAAM,KAAA,GAAgB,QAAA,CAAS,OAAA,CAAQ,IAA6B,CAAA,IAAK,UAAA;AAEzE,EAAA,MAAM;AAAA;AAAA,IAEF,QAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA;AAAA,IAEA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA;AAAA,IAEA,uBAAA;AAAA,IACA;AAAA,GACJ,GAAI,OAAA;AAOJ,EAAA,uBACIA,cAAA;AAAA,IAACC,qBAAA;AAAA,IAAA;AAAA,MACI,GAAG,KAAA;AAAA,MACJ,IAAI,KAAA,CAAM,IAAA;AAAA,MACV,KAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA,EAAU,UAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,SAAS,UAAA,CAAW,OAAA;AAAA,MACpB,MAAA,EAAQ,WAAW,KAAA,EAAO,OAAA;AAAA,MAC1B,UAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAO,YAAA,EAAc,KAAA;AAAA,MACrB,gBAAgB,YAAA,EAAc,SAAA;AAAA,MAC9B,KAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MAOA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,uBAAA;AAAA,MACA;AAAA;AAAA,GACJ;AAER;;;;;"}
|
|
@@ -42,6 +42,7 @@ const Select = ({
|
|
|
42
42
|
filterBy,
|
|
43
43
|
virtualScroll,
|
|
44
44
|
showClear,
|
|
45
|
+
popup,
|
|
45
46
|
// Specific
|
|
46
47
|
withArrow,
|
|
47
48
|
isMultiple,
|
|
@@ -81,6 +82,7 @@ const Select = ({
|
|
|
81
82
|
filterBy,
|
|
82
83
|
virtualScroll,
|
|
83
84
|
showClear,
|
|
85
|
+
popup,
|
|
84
86
|
withArrow,
|
|
85
87
|
isMultiple,
|
|
86
88
|
forceSelection,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../src/form-renderer/components/fields/Select/index.tsx"],"sourcesContent":["import React from 'react';\nimport type {FieldValues} from 'react-hook-form';\nimport type {Shapes, UseFieldLogicElementProps} from \"@lmb-it/kitsconcerto-types\";\nimport {FormSelect} from \"../../../../_compat\";\nimport type {IListItem} from \"@lmb-it/kitsconcerto-types\";\n\nexport const Select = <T extends FieldValues>({\n element,\n control,\n getValues,\n fieldLogic,\n }: UseFieldLogicElementProps<T>) => {\n\n const {\n field,\n fieldState,\n label,\n placeholder,\n isDisabled,\n isRequired,\n helperText,\n watchedValues,\n list,\n attached,\n style: elementStyle,\n slots,\n } = fieldLogic;\n\n // Map form element type → FormSelect shape\n const shapeMap: Record<string, Shapes> = {\n Select: 'dropdown',\n Multiselect: 'multiselect',\n Tags: 'autocomplete',\n ListBox: 'listBox',\n TreeSelect: 'treeSelect',\n };\n\n const shape: Shapes = shapeMap[element.type as keyof typeof shapeMap] || 'dropdown';\n\n const {\n // Common\n labelKey,\n valueKey,\n outputValueKey,\n childrenKey,\n withFilter,\n filterBy,\n virtualScroll,\n showClear,\n // Specific\n withArrow,\n isMultiple,\n forceSelection,\n completeMethod,\n valueMode,\n selectionLimit,\n hideError,\n // TreeSelect specific\n onlyParentsWithChildren,\n isStructured,\n } = element as any;\n\n // No key regeneration needed here.\n // SelectContext already handles list changes reactively via its own useEffect([list]).\n // All underlying components (Dropdown, AutoComplete, etc.) react to prop changes natively.\n // A key change would force a full remount — destroying focus state and any user interaction.\n\n return (\n <FormSelect\n {...field}\n id={field.name}\n shape={shape}\n label={label}\n placeholder={placeholder}\n disabled={isDisabled}\n required={isRequired}\n invalid={fieldState.invalid}\n errors={fieldState.error?.message}\n helperText={helperText}\n list={list as IListItem[]}\n hideError={hideError}\n attached={attached}\n style={elementStyle?.input}\n containerStyle={elementStyle?.container}\n slots={slots}\n labelKey={labelKey}\n valueKey={valueKey}\n outputValueKey={outputValueKey}\n childrenKey={childrenKey}\n withFilter={withFilter}\n filterBy={filterBy}\n virtualScroll={virtualScroll}\n showClear={showClear}\n withArrow={withArrow}\n isMultiple={isMultiple}\n forceSelection={forceSelection}\n completeMethod={completeMethod}\n valueMode={valueMode}\n selectionLimit={selectionLimit}\n onlyParentsWithChildren={onlyParentsWithChildren}\n isStructured={isStructured}\n />\n );\n};\n\nexport default Select;\n"],"names":[],"mappings":";;;;;;AAMO,MAAM,SAAS,CAAwB;AAAA,EACI,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACJ,CAAA,KAAoC;AAE9E,EAAA,MAAM;AAAA,IACF,KAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO,YAAA;AAAA,IACP;AAAA,GACJ,GAAI,UAAA;AAGJ,EAAA,MAAM,QAAA,GAAmC;AAAA,IACrC,MAAA,EAAQ,UAAA;AAAA,IACR,WAAA,EAAa,aAAA;AAAA,IACb,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,SAAA;AAAA,IACT,UAAA,EAAY;AAAA,GAChB;AAEA,EAAA,MAAM,KAAA,GAAgB,QAAA,CAAS,OAAA,CAAQ,IAA6B,CAAA,IAAK,UAAA;AAEzE,EAAA,MAAM;AAAA;AAAA,IAEF,QAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA;AAAA,IAEA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA;AAAA,IAEA,uBAAA;AAAA,IACA;AAAA,GACJ,GAAI,OAAA;AAOJ,EAAA,uBACI,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACI,GAAG,KAAA;AAAA,MACJ,IAAI,KAAA,CAAM,IAAA;AAAA,MACV,KAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA,EAAU,UAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,SAAS,UAAA,CAAW,OAAA;AAAA,MACpB,MAAA,EAAQ,WAAW,KAAA,EAAO,OAAA;AAAA,MAC1B,UAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAO,YAAA,EAAc,KAAA;AAAA,MACrB,gBAAgB,YAAA,EAAc,SAAA;AAAA,MAC9B,KAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,uBAAA;AAAA,MACA;AAAA;AAAA,GACJ;AAER;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/form-renderer/components/fields/Select/index.tsx"],"sourcesContent":["import React from 'react';\nimport type {FieldValues} from 'react-hook-form';\nimport type {Shapes, UseFieldLogicElementProps} from \"@lmb-it/kitsconcerto-types\";\nimport {FormSelect} from \"../../../../_compat\";\nimport type {IListItem} from \"@lmb-it/kitsconcerto-types\";\n\nexport const Select = <T extends FieldValues>({\n element,\n control,\n getValues,\n fieldLogic,\n }: UseFieldLogicElementProps<T>) => {\n\n const {\n field,\n fieldState,\n label,\n placeholder,\n isDisabled,\n isRequired,\n helperText,\n watchedValues,\n list,\n attached,\n style: elementStyle,\n slots,\n } = fieldLogic;\n\n // Map form element type → FormSelect shape\n const shapeMap: Record<string, Shapes> = {\n Select: 'dropdown',\n Multiselect: 'multiselect',\n Tags: 'autocomplete',\n ListBox: 'listBox',\n TreeSelect: 'treeSelect',\n };\n\n const shape: Shapes = shapeMap[element.type as keyof typeof shapeMap] || 'dropdown';\n\n const {\n // Common\n labelKey,\n valueKey,\n outputValueKey,\n childrenKey,\n withFilter,\n filterBy,\n virtualScroll,\n showClear,\n popup,\n // Specific\n withArrow,\n isMultiple,\n forceSelection,\n completeMethod,\n valueMode,\n selectionLimit,\n hideError,\n // TreeSelect specific\n onlyParentsWithChildren,\n isStructured,\n } = element as any;\n\n // No key regeneration needed here.\n // SelectContext already handles list changes reactively via its own useEffect([list]).\n // All underlying components (Dropdown, AutoComplete, etc.) react to prop changes natively.\n // A key change would force a full remount — destroying focus state and any user interaction.\n\n return (\n <FormSelect\n {...field}\n id={field.name}\n shape={shape}\n label={label}\n placeholder={placeholder}\n disabled={isDisabled}\n required={isRequired}\n invalid={fieldState.invalid}\n errors={fieldState.error?.message}\n helperText={helperText}\n list={list as IListItem[]}\n hideError={hideError}\n attached={attached}\n style={elementStyle?.input}\n containerStyle={elementStyle?.container}\n slots={slots}\n labelKey={labelKey}\n valueKey={valueKey}\n outputValueKey={outputValueKey}\n childrenKey={childrenKey}\n withFilter={withFilter}\n filterBy={filterBy}\n virtualScroll={virtualScroll}\n showClear={showClear}\n /* ⛔ A PROP IS ONLY AS GOOD AS ITS NARROWEST GATE. This renderer\n forwards a NAMED list, not a spread, so a select prop that is not\n listed here never reaches the component however correct the rest\n of the chain is. `popup` was added to the type, the wrapper and\n the native component and still did nothing, because of this line's\n absence. */\n popup={popup}\n withArrow={withArrow}\n isMultiple={isMultiple}\n forceSelection={forceSelection}\n completeMethod={completeMethod}\n valueMode={valueMode}\n selectionLimit={selectionLimit}\n onlyParentsWithChildren={onlyParentsWithChildren}\n isStructured={isStructured}\n />\n );\n};\n\nexport default Select;\n"],"names":[],"mappings":";;;;;;AAMO,MAAM,SAAS,CAAwB;AAAA,EACI,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACJ,CAAA,KAAoC;AAE9E,EAAA,MAAM;AAAA,IACF,KAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO,YAAA;AAAA,IACP;AAAA,GACJ,GAAI,UAAA;AAGJ,EAAA,MAAM,QAAA,GAAmC;AAAA,IACrC,MAAA,EAAQ,UAAA;AAAA,IACR,WAAA,EAAa,aAAA;AAAA,IACb,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,SAAA;AAAA,IACT,UAAA,EAAY;AAAA,GAChB;AAEA,EAAA,MAAM,KAAA,GAAgB,QAAA,CAAS,OAAA,CAAQ,IAA6B,CAAA,IAAK,UAAA;AAEzE,EAAA,MAAM;AAAA;AAAA,IAEF,QAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA;AAAA,IAEA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA;AAAA,IAEA,uBAAA;AAAA,IACA;AAAA,GACJ,GAAI,OAAA;AAOJ,EAAA,uBACI,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACI,GAAG,KAAA;AAAA,MACJ,IAAI,KAAA,CAAM,IAAA;AAAA,MACV,KAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA,EAAU,UAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,SAAS,UAAA,CAAW,OAAA;AAAA,MACpB,MAAA,EAAQ,WAAW,KAAA,EAAO,OAAA;AAAA,MAC1B,UAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAO,YAAA,EAAc,KAAA;AAAA,MACrB,gBAAgB,YAAA,EAAc,SAAA;AAAA,MAC9B,KAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MAOA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,uBAAA;AAAA,MACA;AAAA;AAAA,GACJ;AAER;;;;"}
|
package/index.d.ts
CHANGED
|
@@ -5446,6 +5446,19 @@ export interface ISelectCore<TStyle = any, TLocalProps = any> extends IFormSingl
|
|
|
5446
5446
|
filterBy?: string;
|
|
5447
5447
|
virtualScroll?: boolean | any;
|
|
5448
5448
|
emptyFilterMessage?: ReactNode;
|
|
5449
|
+
/**
|
|
5450
|
+
* Open the options in a popup that owns the screen instead of a panel
|
|
5451
|
+
* anchored to the trigger.
|
|
5452
|
+
*
|
|
5453
|
+
* ⛔ NATIVE ONLY, BY DESIGN. On web the options render in PrimeReact's own
|
|
5454
|
+
* overlay, which is not boxed in by an on-screen keyboard — there is no
|
|
5455
|
+
* fault there to escape. The prop is accepted and ignored on web so a
|
|
5456
|
+
* shared element array stays valid on both surfaces, rather than a
|
|
5457
|
+
* consumer having to branch on platform.
|
|
5458
|
+
*
|
|
5459
|
+
* Default false: every existing consumer keeps the anchored panel.
|
|
5460
|
+
*/
|
|
5461
|
+
popup?: boolean;
|
|
5449
5462
|
showClear?: boolean;
|
|
5450
5463
|
itemTemplate?: (item: any) => ReactNode;
|
|
5451
5464
|
className?: string;
|
|
@@ -9477,6 +9490,7 @@ declare const localeFiles: {
|
|
|
9477
9490
|
strong: string;
|
|
9478
9491
|
passwordPrompt: string;
|
|
9479
9492
|
emptyFilterMessage: string;
|
|
9493
|
+
searchPlaceholder: string;
|
|
9480
9494
|
searchMessage: string;
|
|
9481
9495
|
selectionMessage: string;
|
|
9482
9496
|
emptySelectionMessage: string;
|
|
@@ -10251,6 +10265,7 @@ declare const localeFiles: {
|
|
|
10251
10265
|
strong: string;
|
|
10252
10266
|
passwordPrompt: string;
|
|
10253
10267
|
emptyFilterMessage: string;
|
|
10268
|
+
searchPlaceholder: string;
|
|
10254
10269
|
searchMessage: string;
|
|
10255
10270
|
selectionMessage: string;
|
|
10256
10271
|
emptySelectionMessage: string;
|
package/locale/ar.json.cjs
CHANGED
|
@@ -126,6 +126,7 @@ var medium = "متوسط";
|
|
|
126
126
|
var strong = "قوي";
|
|
127
127
|
var passwordPrompt = "أدخل كلمة السر";
|
|
128
128
|
var emptyFilterMessage = "لا يوجد خيارات";
|
|
129
|
+
var searchPlaceholder = "بحث...";
|
|
129
130
|
var searchMessage = "{0} النتائج المتاحة";
|
|
130
131
|
var selectionMessage = "{0} عناصر تم اختيارها";
|
|
131
132
|
var emptySelectionMessage = "لم يتم اختيار اي عنصر";
|
|
@@ -283,6 +284,7 @@ var ar = {
|
|
|
283
284
|
strong: strong,
|
|
284
285
|
passwordPrompt: passwordPrompt,
|
|
285
286
|
emptyFilterMessage: emptyFilterMessage,
|
|
287
|
+
searchPlaceholder: searchPlaceholder,
|
|
286
288
|
searchMessage: searchMessage,
|
|
287
289
|
selectionMessage: selectionMessage,
|
|
288
290
|
emptySelectionMessage: emptySelectionMessage,
|
|
@@ -423,6 +425,7 @@ exports.remove = remove;
|
|
|
423
425
|
exports.removeRule = removeRule;
|
|
424
426
|
exports.save = save;
|
|
425
427
|
exports.searchMessage = searchMessage;
|
|
428
|
+
exports.searchPlaceholder = searchPlaceholder;
|
|
426
429
|
exports.selectionMessage = selectionMessage;
|
|
427
430
|
exports.settings = settings;
|
|
428
431
|
exports.showMonthAfterYear = showMonthAfterYear;
|
package/locale/ar.json.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ar.json.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ar.json.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/locale/ar.json.js
CHANGED
|
@@ -122,6 +122,7 @@ var medium = "متوسط";
|
|
|
122
122
|
var strong = "قوي";
|
|
123
123
|
var passwordPrompt = "أدخل كلمة السر";
|
|
124
124
|
var emptyFilterMessage = "لا يوجد خيارات";
|
|
125
|
+
var searchPlaceholder = "بحث...";
|
|
125
126
|
var searchMessage = "{0} النتائج المتاحة";
|
|
126
127
|
var selectionMessage = "{0} عناصر تم اختيارها";
|
|
127
128
|
var emptySelectionMessage = "لم يتم اختيار اي عنصر";
|
|
@@ -279,6 +280,7 @@ var ar = {
|
|
|
279
280
|
strong: strong,
|
|
280
281
|
passwordPrompt: passwordPrompt,
|
|
281
282
|
emptyFilterMessage: emptyFilterMessage,
|
|
283
|
+
searchPlaceholder: searchPlaceholder,
|
|
282
284
|
searchMessage: searchMessage,
|
|
283
285
|
selectionMessage: selectionMessage,
|
|
284
286
|
emptySelectionMessage: emptySelectionMessage,
|
|
@@ -324,5 +326,5 @@ var ar = {
|
|
|
324
326
|
actionRequired: actionRequired
|
|
325
327
|
};
|
|
326
328
|
|
|
327
|
-
export { accept, actionRequired, addCategory, addImages, addItem, addRule, after, am, any, apply, aria, before, between, cancel, changeImage, choose, chooseDate, chooseFile, chooseImage, chooseMonth, chooseYear, clear, clickOrDragToUpload, completed, contains, custom, dateAfter, dateBefore, dateFormat, dateIs, dateIsNot, dayNames, dayNamesMin, dayNamesShort, ar as default, _arbitrary0 as delete, dragFilesHere, edit, emptyFileUploadMessage, emptyFilterMessage, emptyMessage, emptySearchMessage, emptySelectionMessage, endsWith, equal, equals, fileSizeTypes, filesBeingDropped, filesSelected, filter, firstDayOfWeek, generatePhoto, greaterThan, greaterThanOrEqualTo, gt, gte, include, lessThan, lessThanOrEqualTo, lt, lte, matchAll, matchAny, maximumAllowedFiles, medium, monthNames, monthNamesShort, nextDecade, nextHour, nextMinute, nextMonth, nextSecond, nextYear, noFilter, not, notContains, notEquals, now, openMenu, password, passwordPrompt, pending, pm, prevDecade, prevHour, prevMinute, prevMonth, prevSecond, prevYear, profile, reject, remove, removeRule, save, searchMessage, selectionMessage, settings, showMonthAfterYear, signOut, startsWith, strong, tapToUpload, today, toggleColorMode, typeNotSupported, upload, weak, weekHeader };
|
|
329
|
+
export { accept, actionRequired, addCategory, addImages, addItem, addRule, after, am, any, apply, aria, before, between, cancel, changeImage, choose, chooseDate, chooseFile, chooseImage, chooseMonth, chooseYear, clear, clickOrDragToUpload, completed, contains, custom, dateAfter, dateBefore, dateFormat, dateIs, dateIsNot, dayNames, dayNamesMin, dayNamesShort, ar as default, _arbitrary0 as delete, dragFilesHere, edit, emptyFileUploadMessage, emptyFilterMessage, emptyMessage, emptySearchMessage, emptySelectionMessage, endsWith, equal, equals, fileSizeTypes, filesBeingDropped, filesSelected, filter, firstDayOfWeek, generatePhoto, greaterThan, greaterThanOrEqualTo, gt, gte, include, lessThan, lessThanOrEqualTo, lt, lte, matchAll, matchAny, maximumAllowedFiles, medium, monthNames, monthNamesShort, nextDecade, nextHour, nextMinute, nextMonth, nextSecond, nextYear, noFilter, not, notContains, notEquals, now, openMenu, password, passwordPrompt, pending, pm, prevDecade, prevHour, prevMinute, prevMonth, prevSecond, prevYear, profile, reject, remove, removeRule, save, searchMessage, searchPlaceholder, selectionMessage, settings, showMonthAfterYear, signOut, startsWith, strong, tapToUpload, today, toggleColorMode, typeNotSupported, upload, weak, weekHeader };
|
|
328
330
|
//# sourceMappingURL=ar.json.js.map
|
package/locale/ar.json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ar.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ar.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/locale/en.json.cjs
CHANGED
|
@@ -126,6 +126,7 @@ var medium = "Medium";
|
|
|
126
126
|
var strong = "Strong";
|
|
127
127
|
var passwordPrompt = "Enter a password";
|
|
128
128
|
var emptyFilterMessage = "No results found";
|
|
129
|
+
var searchPlaceholder = "Search...";
|
|
129
130
|
var searchMessage = "{0} results are available";
|
|
130
131
|
var selectionMessage = "{0} items selected";
|
|
131
132
|
var emptySelectionMessage = "No selected item";
|
|
@@ -283,6 +284,7 @@ var en = {
|
|
|
283
284
|
strong: strong,
|
|
284
285
|
passwordPrompt: passwordPrompt,
|
|
285
286
|
emptyFilterMessage: emptyFilterMessage,
|
|
287
|
+
searchPlaceholder: searchPlaceholder,
|
|
286
288
|
searchMessage: searchMessage,
|
|
287
289
|
selectionMessage: selectionMessage,
|
|
288
290
|
emptySelectionMessage: emptySelectionMessage,
|
|
@@ -423,6 +425,7 @@ exports.remove = remove;
|
|
|
423
425
|
exports.removeRule = removeRule;
|
|
424
426
|
exports.save = save;
|
|
425
427
|
exports.searchMessage = searchMessage;
|
|
428
|
+
exports.searchPlaceholder = searchPlaceholder;
|
|
426
429
|
exports.selectionMessage = selectionMessage;
|
|
427
430
|
exports.settings = settings;
|
|
428
431
|
exports.showMonthAfterYear = showMonthAfterYear;
|
package/locale/en.json.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/locale/en.json.js
CHANGED
|
@@ -122,6 +122,7 @@ var medium = "Medium";
|
|
|
122
122
|
var strong = "Strong";
|
|
123
123
|
var passwordPrompt = "Enter a password";
|
|
124
124
|
var emptyFilterMessage = "No results found";
|
|
125
|
+
var searchPlaceholder = "Search...";
|
|
125
126
|
var searchMessage = "{0} results are available";
|
|
126
127
|
var selectionMessage = "{0} items selected";
|
|
127
128
|
var emptySelectionMessage = "No selected item";
|
|
@@ -279,6 +280,7 @@ var en = {
|
|
|
279
280
|
strong: strong,
|
|
280
281
|
passwordPrompt: passwordPrompt,
|
|
281
282
|
emptyFilterMessage: emptyFilterMessage,
|
|
283
|
+
searchPlaceholder: searchPlaceholder,
|
|
282
284
|
searchMessage: searchMessage,
|
|
283
285
|
selectionMessage: selectionMessage,
|
|
284
286
|
emptySelectionMessage: emptySelectionMessage,
|
|
@@ -324,5 +326,5 @@ var en = {
|
|
|
324
326
|
actionRequired: actionRequired
|
|
325
327
|
};
|
|
326
328
|
|
|
327
|
-
export { accept, actionRequired, addCategory, addImages, addItem, addRule, after, am, any, apply, aria, before, between, cancel, changeImage, choose, chooseDate, chooseFile, chooseImage, chooseMonth, chooseYear, clear, clickOrDragToUpload, completed, contains, custom, dateAfter, dateBefore, dateFormat, dateIs, dateIsNot, dayNames, dayNamesMin, dayNamesShort, en as default, _arbitrary0 as delete, dragFilesHere, edit, emptyFileUploadMessage, emptyFilterMessage, emptyMessage, emptySearchMessage, emptySelectionMessage, endsWith, equal, equals, fileSizeTypes, filesBeingDropped, filesSelected, filter, firstDayOfWeek, generatePhoto, greaterThan, greaterThanOrEqualTo, gt, gte, include, lessThan, lessThanOrEqualTo, lt, lte, matchAll, matchAny, maximumAllowedFiles, medium, monthNames, monthNamesShort, nextDecade, nextHour, nextMinute, nextMonth, nextSecond, nextYear, noFilter, not, notContains, notEquals, now, openMenu, password, passwordPrompt, pending, pm, prevDecade, prevHour, prevMinute, prevMonth, prevSecond, prevYear, profile, reject, remove, removeRule, save, searchMessage, selectionMessage, settings, showMonthAfterYear, signOut, startsWith, strong, tapToUpload, today, toggleColorMode, typeNotSupported, upload, weak, weekHeader };
|
|
329
|
+
export { accept, actionRequired, addCategory, addImages, addItem, addRule, after, am, any, apply, aria, before, between, cancel, changeImage, choose, chooseDate, chooseFile, chooseImage, chooseMonth, chooseYear, clear, clickOrDragToUpload, completed, contains, custom, dateAfter, dateBefore, dateFormat, dateIs, dateIsNot, dayNames, dayNamesMin, dayNamesShort, en as default, _arbitrary0 as delete, dragFilesHere, edit, emptyFileUploadMessage, emptyFilterMessage, emptyMessage, emptySearchMessage, emptySelectionMessage, endsWith, equal, equals, fileSizeTypes, filesBeingDropped, filesSelected, filter, firstDayOfWeek, generatePhoto, greaterThan, greaterThanOrEqualTo, gt, gte, include, lessThan, lessThanOrEqualTo, lt, lte, matchAll, matchAny, maximumAllowedFiles, medium, monthNames, monthNamesShort, nextDecade, nextHour, nextMinute, nextMonth, nextSecond, nextYear, noFilter, not, notContains, notEquals, now, openMenu, password, passwordPrompt, pending, pm, prevDecade, prevHour, prevMinute, prevMonth, prevSecond, prevYear, profile, reject, remove, removeRule, save, searchMessage, searchPlaceholder, selectionMessage, settings, showMonthAfterYear, signOut, startsWith, strong, tapToUpload, today, toggleColorMode, typeNotSupported, upload, weak, weekHeader };
|
|
328
330
|
//# sourceMappingURL=en.json.js.map
|
package/locale/en.json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|