@lmb-it/kitsconcerto-native 0.1.274 → 0.1.276
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/components/Avatar/index.cjs +1 -0
- package/components/Avatar/index.cjs.map +1 -1
- package/components/Avatar/index.js +1 -0
- package/components/Avatar/index.js.map +1 -1
- package/components/Banner/banner.cjs +1 -0
- package/components/Banner/banner.cjs.map +1 -1
- package/components/Banner/banner.js +1 -0
- package/components/Banner/banner.js.map +1 -1
- package/components/BottomTabBar/index.cjs +1 -0
- package/components/BottomTabBar/index.cjs.map +1 -1
- package/components/BottomTabBar/index.js +1 -0
- package/components/BottomTabBar/index.js.map +1 -1
- package/components/Button/Button.cjs +1 -0
- package/components/Button/Button.cjs.map +1 -1
- package/components/Button/Button.js +1 -0
- package/components/Button/Button.js.map +1 -1
- package/components/Carousel/index.cjs +1 -0
- package/components/Carousel/index.cjs.map +1 -1
- package/components/Carousel/index.js +1 -0
- package/components/Carousel/index.js.map +1 -1
- package/components/ChatBubble/index.cjs +1 -0
- package/components/ChatBubble/index.cjs.map +1 -1
- package/components/ChatBubble/index.js +1 -0
- package/components/ChatBubble/index.js.map +1 -1
- package/components/Chip/index.cjs +1 -0
- package/components/Chip/index.cjs.map +1 -1
- package/components/Chip/index.js +1 -0
- package/components/Chip/index.js.map +1 -1
- package/components/DateSeparator/index.cjs +1 -0
- package/components/DateSeparator/index.cjs.map +1 -1
- package/components/DateSeparator/index.js +1 -0
- package/components/DateSeparator/index.js.map +1 -1
- package/components/DetailsList/index.cjs +1 -0
- package/components/DetailsList/index.cjs.map +1 -1
- package/components/DetailsList/index.js +1 -0
- package/components/DetailsList/index.js.map +1 -1
- package/components/EmptyState/index.cjs +1 -0
- package/components/EmptyState/index.cjs.map +1 -1
- package/components/EmptyState/index.js +1 -0
- package/components/EmptyState/index.js.map +1 -1
- package/components/Gallery/index.cjs +1 -0
- package/components/Gallery/index.cjs.map +1 -1
- package/components/Gallery/index.js +1 -0
- package/components/Gallery/index.js.map +1 -1
- package/components/MessageComposer/index.cjs +1 -0
- package/components/MessageComposer/index.cjs.map +1 -1
- package/components/MessageComposer/index.js +1 -0
- package/components/MessageComposer/index.js.map +1 -1
- package/components/MessageReceipt/index.cjs +1 -0
- package/components/MessageReceipt/index.cjs.map +1 -1
- package/components/MessageReceipt/index.js +1 -0
- package/components/MessageReceipt/index.js.map +1 -1
- package/components/ProgressBar/index.cjs +1 -0
- package/components/ProgressBar/index.cjs.map +1 -1
- package/components/ProgressBar/index.js +1 -0
- package/components/ProgressBar/index.js.map +1 -1
- package/components/SegmentedControl/index.cjs +1 -0
- package/components/SegmentedControl/index.cjs.map +1 -1
- package/components/SegmentedControl/index.js +1 -0
- package/components/SegmentedControl/index.js.map +1 -1
- package/components/StatCard/index.cjs +1 -0
- package/components/StatCard/index.cjs.map +1 -1
- package/components/StatCard/index.js +1 -0
- package/components/StatCard/index.js.map +1 -1
- package/components/Stepper/index.cjs +1 -0
- package/components/Stepper/index.cjs.map +1 -1
- package/components/Stepper/index.js +1 -0
- package/components/Stepper/index.js.map +1 -1
- package/components/Tabs/index.cjs +1 -0
- package/components/Tabs/index.cjs.map +1 -1
- package/components/Tabs/index.js +1 -0
- package/components/Tabs/index.js.map +1 -1
- package/components/Timeline/index.cjs +1 -0
- package/components/Timeline/index.cjs.map +1 -1
- package/components/Timeline/index.js +1 -0
- package/components/Timeline/index.js.map +1 -1
- package/components/Translate/index.cjs +1 -0
- package/components/Translate/index.cjs.map +1 -1
- package/components/Translate/index.js +1 -0
- package/components/Translate/index.js.map +1 -1
- package/components/TypingIndicator/index.cjs +1 -0
- package/components/TypingIndicator/index.cjs.map +1 -1
- package/components/TypingIndicator/index.js +1 -0
- package/components/TypingIndicator/index.js.map +1 -1
- package/components/overlay/ConfirmDialog/index.cjs +1 -0
- package/components/overlay/ConfirmDialog/index.cjs.map +1 -1
- package/components/overlay/ConfirmDialog/index.js +1 -0
- package/components/overlay/ConfirmDialog/index.js.map +1 -1
- package/components/overlay/Dialog/index.cjs +1 -0
- package/components/overlay/Dialog/index.cjs.map +1 -1
- package/components/overlay/Dialog/index.js +1 -0
- package/components/overlay/Dialog/index.js.map +1 -1
- package/contexts/PermissionsContext.cjs +2 -0
- package/contexts/PermissionsContext.cjs.map +1 -1
- package/contexts/PermissionsContext.js +3 -2
- package/contexts/PermissionsContext.js.map +1 -1
- package/form/controls/Checkbox/index.cjs +1 -0
- package/form/controls/Checkbox/index.cjs.map +1 -1
- package/form/controls/Checkbox/index.js +1 -0
- package/form/controls/Checkbox/index.js.map +1 -1
- package/form/controls/RadioButton/radio.cjs +1 -0
- package/form/controls/RadioButton/radio.cjs.map +1 -1
- package/form/controls/RadioButton/radio.js +1 -0
- package/form/controls/RadioButton/radio.js.map +1 -1
- package/form/controls/TriStateCheckbox/index.cjs +1 -0
- package/form/controls/TriStateCheckbox/index.cjs.map +1 -1
- package/form/controls/TriStateCheckbox/index.js +1 -0
- package/form/controls/TriStateCheckbox/index.js.map +1 -1
- package/form/file-pickers/index.cjs +1 -0
- package/form/file-pickers/index.cjs.map +1 -1
- package/form/file-pickers/index.js +1 -0
- package/form/file-pickers/index.js.map +1 -1
- package/form/helpers/FormContainer/index.cjs +1 -0
- package/form/helpers/FormContainer/index.cjs.map +1 -1
- package/form/helpers/FormContainer/index.js +1 -0
- package/form/helpers/FormContainer/index.js.map +1 -1
- package/form/inputs/ColorPicker/index.cjs +1 -0
- package/form/inputs/ColorPicker/index.cjs.map +1 -1
- package/form/inputs/ColorPicker/index.js +1 -0
- package/form/inputs/ColorPicker/index.js.map +1 -1
- package/form/inputs/Datepicker/index.cjs +1 -0
- package/form/inputs/Datepicker/index.cjs.map +1 -1
- package/form/inputs/Datepicker/index.js +1 -0
- package/form/inputs/Datepicker/index.js.map +1 -1
- package/form/inputs/InputLocation/index.cjs +1 -0
- package/form/inputs/InputLocation/index.cjs.map +1 -1
- package/form/inputs/InputLocation/index.js +1 -0
- package/form/inputs/InputLocation/index.js.map +1 -1
- package/form/inputs/InputMask/index.cjs +1 -0
- package/form/inputs/InputMask/index.cjs.map +1 -1
- package/form/inputs/InputMask/index.js +1 -0
- package/form/inputs/InputMask/index.js.map +1 -1
- package/form/inputs/InputNumber/index.cjs +1 -0
- package/form/inputs/InputNumber/index.cjs.map +1 -1
- package/form/inputs/InputNumber/index.js +1 -0
- package/form/inputs/InputNumber/index.js.map +1 -1
- package/form/inputs/InputPassword/index.cjs +1 -0
- package/form/inputs/InputPassword/index.cjs.map +1 -1
- package/form/inputs/InputPassword/index.js +1 -0
- package/form/inputs/InputPassword/index.js.map +1 -1
- package/form/inputs/InputSwitch/index.cjs +1 -0
- package/form/inputs/InputSwitch/index.cjs.map +1 -1
- package/form/inputs/InputSwitch/index.js +1 -0
- package/form/inputs/InputSwitch/index.js.map +1 -1
- package/form/inputs/InputText/index.cjs +1 -0
- package/form/inputs/InputText/index.cjs.map +1 -1
- package/form/inputs/InputText/index.js +1 -0
- package/form/inputs/InputText/index.js.map +1 -1
- package/form/inputs/InputTextarea/index.cjs +1 -0
- package/form/inputs/InputTextarea/index.cjs.map +1 -1
- package/form/inputs/InputTextarea/index.js +1 -0
- package/form/inputs/InputTextarea/index.js.map +1 -1
- package/form/inputs/PhoneInput/index.cjs +1 -0
- package/form/inputs/PhoneInput/index.cjs.map +1 -1
- package/form/inputs/PhoneInput/index.js +1 -0
- package/form/inputs/PhoneInput/index.js.map +1 -1
- package/form/selects/AutoComplete/index.cjs +1 -0
- package/form/selects/AutoComplete/index.cjs.map +1 -1
- package/form/selects/AutoComplete/index.js +1 -0
- package/form/selects/AutoComplete/index.js.map +1 -1
- package/form/selects/CascadeSelect/index.cjs +1 -0
- package/form/selects/CascadeSelect/index.cjs.map +1 -1
- package/form/selects/CascadeSelect/index.js +1 -0
- package/form/selects/CascadeSelect/index.js.map +1 -1
- package/form/selects/Dropdown/index.cjs +1 -0
- package/form/selects/Dropdown/index.cjs.map +1 -1
- package/form/selects/Dropdown/index.js +1 -0
- package/form/selects/Dropdown/index.js.map +1 -1
- package/form/selects/ListBox/index.cjs +1 -0
- package/form/selects/ListBox/index.cjs.map +1 -1
- package/form/selects/ListBox/index.js +1 -0
- package/form/selects/ListBox/index.js.map +1 -1
- package/form/selects/MultiSelect/index.cjs +1 -0
- package/form/selects/MultiSelect/index.cjs.map +1 -1
- package/form/selects/MultiSelect/index.js +1 -0
- package/form/selects/MultiSelect/index.js.map +1 -1
- package/form/selects/TreeSelect/index.cjs +1 -0
- package/form/selects/TreeSelect/index.cjs.map +1 -1
- package/form/selects/TreeSelect/index.js +1 -0
- package/form/selects/TreeSelect/index.js.map +1 -1
- package/form/selects/helpers/SelectPopupOverlay.cjs +1 -0
- package/form/selects/helpers/SelectPopupOverlay.cjs.map +1 -1
- package/form/selects/helpers/SelectPopupOverlay.js +1 -0
- package/form/selects/helpers/SelectPopupOverlay.js.map +1 -1
- package/form-renderer/components/fields/FileUploader/index.cjs +1 -0
- package/form-renderer/components/fields/FileUploader/index.cjs.map +1 -1
- package/form-renderer/components/fields/FileUploader/index.js +1 -0
- package/form-renderer/components/fields/FileUploader/index.js.map +1 -1
- package/form-renderer/components/fields/Group/index.cjs +1 -0
- package/form-renderer/components/fields/Group/index.cjs.map +1 -1
- package/form-renderer/components/fields/Group/index.js +1 -0
- package/form-renderer/components/fields/Group/index.js.map +1 -1
- package/form-renderer/components/fields/Radios/index.cjs +1 -0
- package/form-renderer/components/fields/Radios/index.cjs.map +1 -1
- package/form-renderer/components/fields/Radios/index.js +1 -0
- package/form-renderer/components/fields/Radios/index.js.map +1 -1
- package/form-renderer/components/fields/Select/index.cjs +1 -0
- package/form-renderer/components/fields/Select/index.cjs.map +1 -1
- package/form-renderer/components/fields/Select/index.js +1 -0
- package/form-renderer/components/fields/Select/index.js.map +1 -1
- package/hooks/main.cjs +1 -0
- package/hooks/main.cjs.map +1 -1
- package/hooks/main.js +1 -0
- package/hooks/main.js.map +1 -1
- package/index.cjs +3 -0
- package/index.cjs.map +1 -1
- package/index.d.ts +14 -2
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/primitives/Card/index.cjs +1 -0
- package/primitives/Card/index.cjs.map +1 -1
- package/primitives/Card/index.js +1 -0
- package/primitives/Card/index.js.map +1 -1
|
@@ -8,6 +8,7 @@ var reactHookForm = require('react-hook-form');
|
|
|
8
8
|
var index_native = require('../../../../form/helpers/FormContainer/index.cjs');
|
|
9
9
|
var index_native$1 = require('../../FormRenderer/index.cjs');
|
|
10
10
|
require('../../../../contexts/DialogContext.cjs');
|
|
11
|
+
require('../../../../contexts/PermissionsContext.cjs');
|
|
11
12
|
var useComponentDefaults = require('../../../../hooks/useComponentDefaults.cjs');
|
|
12
13
|
var useResolvedElementStyles = require('../../../../hooks/useResolvedElementStyles.cjs');
|
|
13
14
|
var helpers = require('../../../utils/helpers.cjs');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../../../src/form-renderer/components/fields/Group/index.native.tsx"],"sourcesContent":["// components/fields/Group.tsx\n\nimport React, {useCallback, useEffect, useImperativeHandle, useMemo, useState} from 'react';\nimport {type FieldArrayWithId, type FieldValues, useFieldArray} from 'react-hook-form';\nimport type {IFormElement, IGroup, UseFieldLogicElementProps} from \"@lmb-it/kitsconcerto-types\";\nimport {Box, Flex} from \"../../../../_compat\";\nimport KitsContainer from \"../../../../form/helpers/FormContainer\";\nimport {FormRenderer} from \"../../FormRenderer\";\nimport {useComponentDefaults, useResolvedElementStyles} from \"../../../../hooks\";\nimport {flattenSlotStyles} from \"../../../utils\";\n\n/**\n * Renders a repeatable group of fields (a field array), preserving all the logic\n * for default values, min/max repeats, and custom action buttons.\n */\nexport const Group = <T extends FieldValues>({\n element,\n control,\n getValues,\n groupField,\n focusedField,\n setFocusedField,\n fieldLogic,\n rowGap,\n }: UseFieldLogicElementProps<T>) => { // Ensure UseFieldLogicProps is updated to pass focus props\n // 1. Get the group's own dynamic state (visibility, layout, label) from the logic hook.\n const {isShown, label, elements, helperText: groupHelperText, fieldState, hideError, isRequired, slots} = fieldLogic;\n\n // Fallback focus state, used only when the parent form doesn't supply\n // focusedField/setFocusedField — web passes the props straight through.\n const [_focusedField, _setFocusedField] = useState<string>('');\n\n const groupElement = element as IGroup<T>;\n const {groupsSettings} = groupElement;\n\n // Resolve groupSlots (dynamic or static) and merge with theme Group defaults\n const resolvedGroupSlots = useMemo(() => {\n const gs = groupElement.groupSlots;\n if (!gs) return undefined;\n if (typeof gs === 'function') {\n return (gs as any)(fieldLogic.watchedValues, fieldLogic.formContext.getValues(), fieldLogic.formContext, groupField);\n }\n return gs;\n }, [groupElement.groupSlots, fieldLogic.watchedValues, fieldLogic.formContext, groupField]);\n\n const {elementStyles: groupStyles} = useComponentDefaults('Group', {\n slots: resolvedGroupSlots,\n } as any);\n const elStyles = useResolvedElementStyles(groupStyles);\n\n // Element-level `slots` (the outer KitsContainer's container/label/helperText/\n // error) arrive in the nested IElementSlotConfig shape; flatten to the flat\n // { [slot]: styleRecord } map KitsContainer expects. (groupSlots above drive\n // the inner repeatable list — root/body/row — and are already flattened.)\n const containerSlots = useMemo(() => flattenSlotStyles(slots), [slots]);\n\n // 2. Initialize react-hook-form's field array management.\n const fieldArray = useFieldArray({\n control,\n name: element.id as any,\n });\n const {fields, append, remove} = fieldArray;\n\n // console.log('hitted', element, {fields}, element.id)\n // 3. Process group settings with defaults, exactly like the original component.\n const settings = useMemo(() => ({\n grid: groupsSettings?.grid,\n repeatable: {\n minRepeats: groupsSettings?.repeatable?.minRepeats || 0,\n maxRepeats: groupsSettings?.repeatable?.maxRepeats || Infinity,\n plusButton: groupsSettings?.repeatable?.plusButton,\n minusButton: groupsSettings?.repeatable?.minusButton,\n },\n removeButtonRow: groupsSettings?.removeButtonRow,\n }), [groupsSettings]);\n\n // 4. Replicate the logic to build a default item object for new rows.\n const createDefaultItem = (): FieldValues => {\n const item: FieldValues = {};\n elements?.forEach(el => {\n if (\"displayOnly\" in el && el.displayOnly) return;\n\n if (\"initialUri\" in el) {\n item[el.id as string] = (el as any).initialUri;\n } else if (\"initialValue\" in el && el.initialValue !== undefined) {\n item[el.id as string] = el.initialValue;\n }\n });\n return item;\n };\n\n const handleAppend = (count = 1) => {\n const max = settings.repeatable.maxRepeats;\n\n if (max && fields.length >= max) {\n return;\n }\n const itemsToAdd = Array(count).fill(0).map(() => createDefaultItem());\n append(itemsToAdd as any, {shouldFocus: true});\n };\n\n const handleRemove = (index: number) => {\n if (fields.length > (settings.repeatable.minRepeats || 0)) {\n remove(index);\n }\n };\n useEffect(() => {\n const generateGroupElements = () => {\n const min = settings.repeatable.minRepeats || 0;\n if (fields.length < min) {\n const itemsToAppend = min - fields.length;\n // console.log({itemsToAppend, current: fields.length})\n\n handleAppend(itemsToAppend);\n }\n };\n\n // This pattern correctly avoids the infinite loop by not depending on `append` or `fields`.\n // The timeout gives react-hook-form time to initialize before we check the length.\n const timer = setTimeout(generateGroupElements, 100);\n return () => clearTimeout(timer);\n\n }, [element.id, settings.repeatable.minRepeats]); // Stable dependencies\n\n // 6. Replicate the `useImperativeHandle` logic to expose the ref.\n useImperativeHandle(groupsSettings?.ref, () => fieldArray, [fieldArray]);\n\n\n const reBuildElements = useCallback((field: FieldArrayWithId, index: number) => {\n return elements?.map((childElement) => {\n const toArray = Object.entries(field);\n\n const findField = toArray.find(([name]) => name == childElement.id);\n\n return {\n ...childElement,\n initialValue: findField ? findField[1] : undefined,\n };\n }) as IFormElement<any>[];\n }, [element, elements]);\n\n\n if (!isShown) {\n return null;\n }\n\n return (\n <KitsContainer\n id={element.id.toString()}\n label={label}\n helperText={groupHelperText}\n errors={fieldState?.error?.message}\n invalid={fieldState?.invalid}\n hideError={hideError}\n required={isRequired}\n bare\n elementStyles={containerSlots}\n >\n <Flex w=\"full\" flexDirection=\"column\" gap={6} mb={4}\n style={elStyles.root || undefined}>\n\n <Box style={elStyles.body || undefined}>\n {fields.map((field, index) => (\n <Flex key={field.id} w=\"full\" position=\"relative\" flexDirection=\"column\"\n rowGap={6}\n columnGap={8}\n style={elStyles.row || undefined}>\n\n <FormRenderer\n /* ⛔ THE SAME REASON AS `Object`: a repeated item's\n fields go through this nested renderer, so without\n this the form's `rowGap` never reaches the rows\n inside a repeatable card. The `rowGap={6}` on the\n Flex above is NOT this — it separates the item's\n fields from its remove button, and is deliberately\n left alone. */\n rowGap={rowGap}\n elements={reBuildElements(field, index)}\n control={control}\n groupField={{\n index,\n name: element.id.toString(),\n // Use the path-arg form of getValues so a Group nested inside\n // an Object resolves correctly: the FormRenderer rewrites this\n // Group's id to a dotted path (e.g. \"addressGroup.addresses\"),\n // and getValues()[dottedKey] would be undefined (→ crash on\n // [index]). getValues(path) traverses the nesting instead.\n values: (getValues(element.id as any) as any)?.[index],\n append: handleAppend,\n remove: () => handleRemove(index),\n }}\n getValues={getValues}\n parentPath={`${element.id.toString()}.${index}.`}\n focusedField={(focusedField ?? _focusedField)!}\n setFocusedField={(setFocusedField ?? _setFocusedField)!}\n grid={groupsSettings?.grid}\n />\n\n {settings.removeButtonRow && (\n <Box style={{zIndex: 1, ...(elStyles.removeButton || {})}}>\n {settings.removeButtonRow(fields.length, () => handleRemove(index), index)}\n </Box>\n )}\n\n\n {settings.repeatable.minusButton && fields.length > settings.repeatable.minRepeats && (\n <Box style={{zIndex: 1, ...(elStyles.removeButton || {})}}>\n {settings.repeatable.minusButton(fields.length, () => handleRemove(index))}\n </Box>\n )}\n </Flex>\n ))}\n </Box>\n\n {settings.repeatable.plusButton && (\n <Flex justifyContent=\"flex-start\" w=\"full\" mt={8}\n style={elStyles.addButton || undefined}>\n {settings.repeatable.plusButton(fields.length, handleAppend)}\n </Flex>\n )}\n </Flex>\n </KitsContainer>\n );\n};\n\nexport default Group;\n"],"names":["useState","useMemo","useComponentDefaults","useResolvedElementStyles","flattenSlotStyles","useFieldArray","useEffect","useImperativeHandle","useCallback","jsx","KitsContainer","jsxs","Flex","Box","index","FormRenderer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../../../src/form-renderer/components/fields/Group/index.native.tsx"],"sourcesContent":["// components/fields/Group.tsx\n\nimport React, {useCallback, useEffect, useImperativeHandle, useMemo, useState} from 'react';\nimport {type FieldArrayWithId, type FieldValues, useFieldArray} from 'react-hook-form';\nimport type {IFormElement, IGroup, UseFieldLogicElementProps} from \"@lmb-it/kitsconcerto-types\";\nimport {Box, Flex} from \"../../../../_compat\";\nimport KitsContainer from \"../../../../form/helpers/FormContainer\";\nimport {FormRenderer} from \"../../FormRenderer\";\nimport {useComponentDefaults, useResolvedElementStyles} from \"../../../../hooks\";\nimport {flattenSlotStyles} from \"../../../utils\";\n\n/**\n * Renders a repeatable group of fields (a field array), preserving all the logic\n * for default values, min/max repeats, and custom action buttons.\n */\nexport const Group = <T extends FieldValues>({\n element,\n control,\n getValues,\n groupField,\n focusedField,\n setFocusedField,\n fieldLogic,\n rowGap,\n }: UseFieldLogicElementProps<T>) => { // Ensure UseFieldLogicProps is updated to pass focus props\n // 1. Get the group's own dynamic state (visibility, layout, label) from the logic hook.\n const {isShown, label, elements, helperText: groupHelperText, fieldState, hideError, isRequired, slots} = fieldLogic;\n\n // Fallback focus state, used only when the parent form doesn't supply\n // focusedField/setFocusedField — web passes the props straight through.\n const [_focusedField, _setFocusedField] = useState<string>('');\n\n const groupElement = element as IGroup<T>;\n const {groupsSettings} = groupElement;\n\n // Resolve groupSlots (dynamic or static) and merge with theme Group defaults\n const resolvedGroupSlots = useMemo(() => {\n const gs = groupElement.groupSlots;\n if (!gs) return undefined;\n if (typeof gs === 'function') {\n return (gs as any)(fieldLogic.watchedValues, fieldLogic.formContext.getValues(), fieldLogic.formContext, groupField);\n }\n return gs;\n }, [groupElement.groupSlots, fieldLogic.watchedValues, fieldLogic.formContext, groupField]);\n\n const {elementStyles: groupStyles} = useComponentDefaults('Group', {\n slots: resolvedGroupSlots,\n } as any);\n const elStyles = useResolvedElementStyles(groupStyles);\n\n // Element-level `slots` (the outer KitsContainer's container/label/helperText/\n // error) arrive in the nested IElementSlotConfig shape; flatten to the flat\n // { [slot]: styleRecord } map KitsContainer expects. (groupSlots above drive\n // the inner repeatable list — root/body/row — and are already flattened.)\n const containerSlots = useMemo(() => flattenSlotStyles(slots), [slots]);\n\n // 2. Initialize react-hook-form's field array management.\n const fieldArray = useFieldArray({\n control,\n name: element.id as any,\n });\n const {fields, append, remove} = fieldArray;\n\n // console.log('hitted', element, {fields}, element.id)\n // 3. Process group settings with defaults, exactly like the original component.\n const settings = useMemo(() => ({\n grid: groupsSettings?.grid,\n repeatable: {\n minRepeats: groupsSettings?.repeatable?.minRepeats || 0,\n maxRepeats: groupsSettings?.repeatable?.maxRepeats || Infinity,\n plusButton: groupsSettings?.repeatable?.plusButton,\n minusButton: groupsSettings?.repeatable?.minusButton,\n },\n removeButtonRow: groupsSettings?.removeButtonRow,\n }), [groupsSettings]);\n\n // 4. Replicate the logic to build a default item object for new rows.\n const createDefaultItem = (): FieldValues => {\n const item: FieldValues = {};\n elements?.forEach(el => {\n if (\"displayOnly\" in el && el.displayOnly) return;\n\n if (\"initialUri\" in el) {\n item[el.id as string] = (el as any).initialUri;\n } else if (\"initialValue\" in el && el.initialValue !== undefined) {\n item[el.id as string] = el.initialValue;\n }\n });\n return item;\n };\n\n const handleAppend = (count = 1) => {\n const max = settings.repeatable.maxRepeats;\n\n if (max && fields.length >= max) {\n return;\n }\n const itemsToAdd = Array(count).fill(0).map(() => createDefaultItem());\n append(itemsToAdd as any, {shouldFocus: true});\n };\n\n const handleRemove = (index: number) => {\n if (fields.length > (settings.repeatable.minRepeats || 0)) {\n remove(index);\n }\n };\n useEffect(() => {\n const generateGroupElements = () => {\n const min = settings.repeatable.minRepeats || 0;\n if (fields.length < min) {\n const itemsToAppend = min - fields.length;\n // console.log({itemsToAppend, current: fields.length})\n\n handleAppend(itemsToAppend);\n }\n };\n\n // This pattern correctly avoids the infinite loop by not depending on `append` or `fields`.\n // The timeout gives react-hook-form time to initialize before we check the length.\n const timer = setTimeout(generateGroupElements, 100);\n return () => clearTimeout(timer);\n\n }, [element.id, settings.repeatable.minRepeats]); // Stable dependencies\n\n // 6. Replicate the `useImperativeHandle` logic to expose the ref.\n useImperativeHandle(groupsSettings?.ref, () => fieldArray, [fieldArray]);\n\n\n const reBuildElements = useCallback((field: FieldArrayWithId, index: number) => {\n return elements?.map((childElement) => {\n const toArray = Object.entries(field);\n\n const findField = toArray.find(([name]) => name == childElement.id);\n\n return {\n ...childElement,\n initialValue: findField ? findField[1] : undefined,\n };\n }) as IFormElement<any>[];\n }, [element, elements]);\n\n\n if (!isShown) {\n return null;\n }\n\n return (\n <KitsContainer\n id={element.id.toString()}\n label={label}\n helperText={groupHelperText}\n errors={fieldState?.error?.message}\n invalid={fieldState?.invalid}\n hideError={hideError}\n required={isRequired}\n bare\n elementStyles={containerSlots}\n >\n <Flex w=\"full\" flexDirection=\"column\" gap={6} mb={4}\n style={elStyles.root || undefined}>\n\n <Box style={elStyles.body || undefined}>\n {fields.map((field, index) => (\n <Flex key={field.id} w=\"full\" position=\"relative\" flexDirection=\"column\"\n rowGap={6}\n columnGap={8}\n style={elStyles.row || undefined}>\n\n <FormRenderer\n /* ⛔ THE SAME REASON AS `Object`: a repeated item's\n fields go through this nested renderer, so without\n this the form's `rowGap` never reaches the rows\n inside a repeatable card. The `rowGap={6}` on the\n Flex above is NOT this — it separates the item's\n fields from its remove button, and is deliberately\n left alone. */\n rowGap={rowGap}\n elements={reBuildElements(field, index)}\n control={control}\n groupField={{\n index,\n name: element.id.toString(),\n // Use the path-arg form of getValues so a Group nested inside\n // an Object resolves correctly: the FormRenderer rewrites this\n // Group's id to a dotted path (e.g. \"addressGroup.addresses\"),\n // and getValues()[dottedKey] would be undefined (→ crash on\n // [index]). getValues(path) traverses the nesting instead.\n values: (getValues(element.id as any) as any)?.[index],\n append: handleAppend,\n remove: () => handleRemove(index),\n }}\n getValues={getValues}\n parentPath={`${element.id.toString()}.${index}.`}\n focusedField={(focusedField ?? _focusedField)!}\n setFocusedField={(setFocusedField ?? _setFocusedField)!}\n grid={groupsSettings?.grid}\n />\n\n {settings.removeButtonRow && (\n <Box style={{zIndex: 1, ...(elStyles.removeButton || {})}}>\n {settings.removeButtonRow(fields.length, () => handleRemove(index), index)}\n </Box>\n )}\n\n\n {settings.repeatable.minusButton && fields.length > settings.repeatable.minRepeats && (\n <Box style={{zIndex: 1, ...(elStyles.removeButton || {})}}>\n {settings.repeatable.minusButton(fields.length, () => handleRemove(index))}\n </Box>\n )}\n </Flex>\n ))}\n </Box>\n\n {settings.repeatable.plusButton && (\n <Flex justifyContent=\"flex-start\" w=\"full\" mt={8}\n style={elStyles.addButton || undefined}>\n {settings.repeatable.plusButton(fields.length, handleAppend)}\n </Flex>\n )}\n </Flex>\n </KitsContainer>\n );\n};\n\nexport default Group;\n"],"names":["useState","useMemo","useComponentDefaults","useResolvedElementStyles","flattenSlotStyles","useFieldArray","useEffect","useImperativeHandle","useCallback","jsx","KitsContainer","jsxs","Flex","Box","index","FormRenderer"],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { useFieldArray } from 'react-hook-form';
|
|
|
4
4
|
import KitsContainer from '../../../../form/helpers/FormContainer/index.js';
|
|
5
5
|
import { FormRenderer } from '../../FormRenderer/index.js';
|
|
6
6
|
import '../../../../contexts/DialogContext.js';
|
|
7
|
+
import '../../../../contexts/PermissionsContext.js';
|
|
7
8
|
import useComponentDefaults from '../../../../hooks/useComponentDefaults.js';
|
|
8
9
|
import useResolvedElementStyles from '../../../../hooks/useResolvedElementStyles.js';
|
|
9
10
|
import { flattenSlotStyles } from '../../../utils/helpers.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../src/form-renderer/components/fields/Group/index.native.tsx"],"sourcesContent":["// components/fields/Group.tsx\n\nimport React, {useCallback, useEffect, useImperativeHandle, useMemo, useState} from 'react';\nimport {type FieldArrayWithId, type FieldValues, useFieldArray} from 'react-hook-form';\nimport type {IFormElement, IGroup, UseFieldLogicElementProps} from \"@lmb-it/kitsconcerto-types\";\nimport {Box, Flex} from \"../../../../_compat\";\nimport KitsContainer from \"../../../../form/helpers/FormContainer\";\nimport {FormRenderer} from \"../../FormRenderer\";\nimport {useComponentDefaults, useResolvedElementStyles} from \"../../../../hooks\";\nimport {flattenSlotStyles} from \"../../../utils\";\n\n/**\n * Renders a repeatable group of fields (a field array), preserving all the logic\n * for default values, min/max repeats, and custom action buttons.\n */\nexport const Group = <T extends FieldValues>({\n element,\n control,\n getValues,\n groupField,\n focusedField,\n setFocusedField,\n fieldLogic,\n rowGap,\n }: UseFieldLogicElementProps<T>) => { // Ensure UseFieldLogicProps is updated to pass focus props\n // 1. Get the group's own dynamic state (visibility, layout, label) from the logic hook.\n const {isShown, label, elements, helperText: groupHelperText, fieldState, hideError, isRequired, slots} = fieldLogic;\n\n // Fallback focus state, used only when the parent form doesn't supply\n // focusedField/setFocusedField — web passes the props straight through.\n const [_focusedField, _setFocusedField] = useState<string>('');\n\n const groupElement = element as IGroup<T>;\n const {groupsSettings} = groupElement;\n\n // Resolve groupSlots (dynamic or static) and merge with theme Group defaults\n const resolvedGroupSlots = useMemo(() => {\n const gs = groupElement.groupSlots;\n if (!gs) return undefined;\n if (typeof gs === 'function') {\n return (gs as any)(fieldLogic.watchedValues, fieldLogic.formContext.getValues(), fieldLogic.formContext, groupField);\n }\n return gs;\n }, [groupElement.groupSlots, fieldLogic.watchedValues, fieldLogic.formContext, groupField]);\n\n const {elementStyles: groupStyles} = useComponentDefaults('Group', {\n slots: resolvedGroupSlots,\n } as any);\n const elStyles = useResolvedElementStyles(groupStyles);\n\n // Element-level `slots` (the outer KitsContainer's container/label/helperText/\n // error) arrive in the nested IElementSlotConfig shape; flatten to the flat\n // { [slot]: styleRecord } map KitsContainer expects. (groupSlots above drive\n // the inner repeatable list — root/body/row — and are already flattened.)\n const containerSlots = useMemo(() => flattenSlotStyles(slots), [slots]);\n\n // 2. Initialize react-hook-form's field array management.\n const fieldArray = useFieldArray({\n control,\n name: element.id as any,\n });\n const {fields, append, remove} = fieldArray;\n\n // console.log('hitted', element, {fields}, element.id)\n // 3. Process group settings with defaults, exactly like the original component.\n const settings = useMemo(() => ({\n grid: groupsSettings?.grid,\n repeatable: {\n minRepeats: groupsSettings?.repeatable?.minRepeats || 0,\n maxRepeats: groupsSettings?.repeatable?.maxRepeats || Infinity,\n plusButton: groupsSettings?.repeatable?.plusButton,\n minusButton: groupsSettings?.repeatable?.minusButton,\n },\n removeButtonRow: groupsSettings?.removeButtonRow,\n }), [groupsSettings]);\n\n // 4. Replicate the logic to build a default item object for new rows.\n const createDefaultItem = (): FieldValues => {\n const item: FieldValues = {};\n elements?.forEach(el => {\n if (\"displayOnly\" in el && el.displayOnly) return;\n\n if (\"initialUri\" in el) {\n item[el.id as string] = (el as any).initialUri;\n } else if (\"initialValue\" in el && el.initialValue !== undefined) {\n item[el.id as string] = el.initialValue;\n }\n });\n return item;\n };\n\n const handleAppend = (count = 1) => {\n const max = settings.repeatable.maxRepeats;\n\n if (max && fields.length >= max) {\n return;\n }\n const itemsToAdd = Array(count).fill(0).map(() => createDefaultItem());\n append(itemsToAdd as any, {shouldFocus: true});\n };\n\n const handleRemove = (index: number) => {\n if (fields.length > (settings.repeatable.minRepeats || 0)) {\n remove(index);\n }\n };\n useEffect(() => {\n const generateGroupElements = () => {\n const min = settings.repeatable.minRepeats || 0;\n if (fields.length < min) {\n const itemsToAppend = min - fields.length;\n // console.log({itemsToAppend, current: fields.length})\n\n handleAppend(itemsToAppend);\n }\n };\n\n // This pattern correctly avoids the infinite loop by not depending on `append` or `fields`.\n // The timeout gives react-hook-form time to initialize before we check the length.\n const timer = setTimeout(generateGroupElements, 100);\n return () => clearTimeout(timer);\n\n }, [element.id, settings.repeatable.minRepeats]); // Stable dependencies\n\n // 6. Replicate the `useImperativeHandle` logic to expose the ref.\n useImperativeHandle(groupsSettings?.ref, () => fieldArray, [fieldArray]);\n\n\n const reBuildElements = useCallback((field: FieldArrayWithId, index: number) => {\n return elements?.map((childElement) => {\n const toArray = Object.entries(field);\n\n const findField = toArray.find(([name]) => name == childElement.id);\n\n return {\n ...childElement,\n initialValue: findField ? findField[1] : undefined,\n };\n }) as IFormElement<any>[];\n }, [element, elements]);\n\n\n if (!isShown) {\n return null;\n }\n\n return (\n <KitsContainer\n id={element.id.toString()}\n label={label}\n helperText={groupHelperText}\n errors={fieldState?.error?.message}\n invalid={fieldState?.invalid}\n hideError={hideError}\n required={isRequired}\n bare\n elementStyles={containerSlots}\n >\n <Flex w=\"full\" flexDirection=\"column\" gap={6} mb={4}\n style={elStyles.root || undefined}>\n\n <Box style={elStyles.body || undefined}>\n {fields.map((field, index) => (\n <Flex key={field.id} w=\"full\" position=\"relative\" flexDirection=\"column\"\n rowGap={6}\n columnGap={8}\n style={elStyles.row || undefined}>\n\n <FormRenderer\n /* ⛔ THE SAME REASON AS `Object`: a repeated item's\n fields go through this nested renderer, so without\n this the form's `rowGap` never reaches the rows\n inside a repeatable card. The `rowGap={6}` on the\n Flex above is NOT this — it separates the item's\n fields from its remove button, and is deliberately\n left alone. */\n rowGap={rowGap}\n elements={reBuildElements(field, index)}\n control={control}\n groupField={{\n index,\n name: element.id.toString(),\n // Use the path-arg form of getValues so a Group nested inside\n // an Object resolves correctly: the FormRenderer rewrites this\n // Group's id to a dotted path (e.g. \"addressGroup.addresses\"),\n // and getValues()[dottedKey] would be undefined (→ crash on\n // [index]). getValues(path) traverses the nesting instead.\n values: (getValues(element.id as any) as any)?.[index],\n append: handleAppend,\n remove: () => handleRemove(index),\n }}\n getValues={getValues}\n parentPath={`${element.id.toString()}.${index}.`}\n focusedField={(focusedField ?? _focusedField)!}\n setFocusedField={(setFocusedField ?? _setFocusedField)!}\n grid={groupsSettings?.grid}\n />\n\n {settings.removeButtonRow && (\n <Box style={{zIndex: 1, ...(elStyles.removeButton || {})}}>\n {settings.removeButtonRow(fields.length, () => handleRemove(index), index)}\n </Box>\n )}\n\n\n {settings.repeatable.minusButton && fields.length > settings.repeatable.minRepeats && (\n <Box style={{zIndex: 1, ...(elStyles.removeButton || {})}}>\n {settings.repeatable.minusButton(fields.length, () => handleRemove(index))}\n </Box>\n )}\n </Flex>\n ))}\n </Box>\n\n {settings.repeatable.plusButton && (\n <Flex justifyContent=\"flex-start\" w=\"full\" mt={8}\n style={elStyles.addButton || undefined}>\n {settings.repeatable.plusButton(fields.length, handleAppend)}\n </Flex>\n )}\n </Flex>\n </KitsContainer>\n );\n};\n\nexport default Group;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/form-renderer/components/fields/Group/index.native.tsx"],"sourcesContent":["// components/fields/Group.tsx\n\nimport React, {useCallback, useEffect, useImperativeHandle, useMemo, useState} from 'react';\nimport {type FieldArrayWithId, type FieldValues, useFieldArray} from 'react-hook-form';\nimport type {IFormElement, IGroup, UseFieldLogicElementProps} from \"@lmb-it/kitsconcerto-types\";\nimport {Box, Flex} from \"../../../../_compat\";\nimport KitsContainer from \"../../../../form/helpers/FormContainer\";\nimport {FormRenderer} from \"../../FormRenderer\";\nimport {useComponentDefaults, useResolvedElementStyles} from \"../../../../hooks\";\nimport {flattenSlotStyles} from \"../../../utils\";\n\n/**\n * Renders a repeatable group of fields (a field array), preserving all the logic\n * for default values, min/max repeats, and custom action buttons.\n */\nexport const Group = <T extends FieldValues>({\n element,\n control,\n getValues,\n groupField,\n focusedField,\n setFocusedField,\n fieldLogic,\n rowGap,\n }: UseFieldLogicElementProps<T>) => { // Ensure UseFieldLogicProps is updated to pass focus props\n // 1. Get the group's own dynamic state (visibility, layout, label) from the logic hook.\n const {isShown, label, elements, helperText: groupHelperText, fieldState, hideError, isRequired, slots} = fieldLogic;\n\n // Fallback focus state, used only when the parent form doesn't supply\n // focusedField/setFocusedField — web passes the props straight through.\n const [_focusedField, _setFocusedField] = useState<string>('');\n\n const groupElement = element as IGroup<T>;\n const {groupsSettings} = groupElement;\n\n // Resolve groupSlots (dynamic or static) and merge with theme Group defaults\n const resolvedGroupSlots = useMemo(() => {\n const gs = groupElement.groupSlots;\n if (!gs) return undefined;\n if (typeof gs === 'function') {\n return (gs as any)(fieldLogic.watchedValues, fieldLogic.formContext.getValues(), fieldLogic.formContext, groupField);\n }\n return gs;\n }, [groupElement.groupSlots, fieldLogic.watchedValues, fieldLogic.formContext, groupField]);\n\n const {elementStyles: groupStyles} = useComponentDefaults('Group', {\n slots: resolvedGroupSlots,\n } as any);\n const elStyles = useResolvedElementStyles(groupStyles);\n\n // Element-level `slots` (the outer KitsContainer's container/label/helperText/\n // error) arrive in the nested IElementSlotConfig shape; flatten to the flat\n // { [slot]: styleRecord } map KitsContainer expects. (groupSlots above drive\n // the inner repeatable list — root/body/row — and are already flattened.)\n const containerSlots = useMemo(() => flattenSlotStyles(slots), [slots]);\n\n // 2. Initialize react-hook-form's field array management.\n const fieldArray = useFieldArray({\n control,\n name: element.id as any,\n });\n const {fields, append, remove} = fieldArray;\n\n // console.log('hitted', element, {fields}, element.id)\n // 3. Process group settings with defaults, exactly like the original component.\n const settings = useMemo(() => ({\n grid: groupsSettings?.grid,\n repeatable: {\n minRepeats: groupsSettings?.repeatable?.minRepeats || 0,\n maxRepeats: groupsSettings?.repeatable?.maxRepeats || Infinity,\n plusButton: groupsSettings?.repeatable?.plusButton,\n minusButton: groupsSettings?.repeatable?.minusButton,\n },\n removeButtonRow: groupsSettings?.removeButtonRow,\n }), [groupsSettings]);\n\n // 4. Replicate the logic to build a default item object for new rows.\n const createDefaultItem = (): FieldValues => {\n const item: FieldValues = {};\n elements?.forEach(el => {\n if (\"displayOnly\" in el && el.displayOnly) return;\n\n if (\"initialUri\" in el) {\n item[el.id as string] = (el as any).initialUri;\n } else if (\"initialValue\" in el && el.initialValue !== undefined) {\n item[el.id as string] = el.initialValue;\n }\n });\n return item;\n };\n\n const handleAppend = (count = 1) => {\n const max = settings.repeatable.maxRepeats;\n\n if (max && fields.length >= max) {\n return;\n }\n const itemsToAdd = Array(count).fill(0).map(() => createDefaultItem());\n append(itemsToAdd as any, {shouldFocus: true});\n };\n\n const handleRemove = (index: number) => {\n if (fields.length > (settings.repeatable.minRepeats || 0)) {\n remove(index);\n }\n };\n useEffect(() => {\n const generateGroupElements = () => {\n const min = settings.repeatable.minRepeats || 0;\n if (fields.length < min) {\n const itemsToAppend = min - fields.length;\n // console.log({itemsToAppend, current: fields.length})\n\n handleAppend(itemsToAppend);\n }\n };\n\n // This pattern correctly avoids the infinite loop by not depending on `append` or `fields`.\n // The timeout gives react-hook-form time to initialize before we check the length.\n const timer = setTimeout(generateGroupElements, 100);\n return () => clearTimeout(timer);\n\n }, [element.id, settings.repeatable.minRepeats]); // Stable dependencies\n\n // 6. Replicate the `useImperativeHandle` logic to expose the ref.\n useImperativeHandle(groupsSettings?.ref, () => fieldArray, [fieldArray]);\n\n\n const reBuildElements = useCallback((field: FieldArrayWithId, index: number) => {\n return elements?.map((childElement) => {\n const toArray = Object.entries(field);\n\n const findField = toArray.find(([name]) => name == childElement.id);\n\n return {\n ...childElement,\n initialValue: findField ? findField[1] : undefined,\n };\n }) as IFormElement<any>[];\n }, [element, elements]);\n\n\n if (!isShown) {\n return null;\n }\n\n return (\n <KitsContainer\n id={element.id.toString()}\n label={label}\n helperText={groupHelperText}\n errors={fieldState?.error?.message}\n invalid={fieldState?.invalid}\n hideError={hideError}\n required={isRequired}\n bare\n elementStyles={containerSlots}\n >\n <Flex w=\"full\" flexDirection=\"column\" gap={6} mb={4}\n style={elStyles.root || undefined}>\n\n <Box style={elStyles.body || undefined}>\n {fields.map((field, index) => (\n <Flex key={field.id} w=\"full\" position=\"relative\" flexDirection=\"column\"\n rowGap={6}\n columnGap={8}\n style={elStyles.row || undefined}>\n\n <FormRenderer\n /* ⛔ THE SAME REASON AS `Object`: a repeated item's\n fields go through this nested renderer, so without\n this the form's `rowGap` never reaches the rows\n inside a repeatable card. The `rowGap={6}` on the\n Flex above is NOT this — it separates the item's\n fields from its remove button, and is deliberately\n left alone. */\n rowGap={rowGap}\n elements={reBuildElements(field, index)}\n control={control}\n groupField={{\n index,\n name: element.id.toString(),\n // Use the path-arg form of getValues so a Group nested inside\n // an Object resolves correctly: the FormRenderer rewrites this\n // Group's id to a dotted path (e.g. \"addressGroup.addresses\"),\n // and getValues()[dottedKey] would be undefined (→ crash on\n // [index]). getValues(path) traverses the nesting instead.\n values: (getValues(element.id as any) as any)?.[index],\n append: handleAppend,\n remove: () => handleRemove(index),\n }}\n getValues={getValues}\n parentPath={`${element.id.toString()}.${index}.`}\n focusedField={(focusedField ?? _focusedField)!}\n setFocusedField={(setFocusedField ?? _setFocusedField)!}\n grid={groupsSettings?.grid}\n />\n\n {settings.removeButtonRow && (\n <Box style={{zIndex: 1, ...(elStyles.removeButton || {})}}>\n {settings.removeButtonRow(fields.length, () => handleRemove(index), index)}\n </Box>\n )}\n\n\n {settings.repeatable.minusButton && fields.length > settings.repeatable.minRepeats && (\n <Box style={{zIndex: 1, ...(elStyles.removeButton || {})}}>\n {settings.repeatable.minusButton(fields.length, () => handleRemove(index))}\n </Box>\n )}\n </Flex>\n ))}\n </Box>\n\n {settings.repeatable.plusButton && (\n <Flex justifyContent=\"flex-start\" w=\"full\" mt={8}\n style={elStyles.addButton || undefined}>\n {settings.repeatable.plusButton(fields.length, handleAppend)}\n </Flex>\n )}\n </Flex>\n </KitsContainer>\n );\n};\n\nexport default Group;\n"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
6
6
|
var radio_native = require('../../../../form/controls/RadioButton/radio.cjs');
|
|
7
7
|
require('react');
|
|
8
8
|
require('../../../../contexts/DialogContext.cjs');
|
|
9
|
+
require('../../../../contexts/PermissionsContext.cjs');
|
|
9
10
|
|
|
10
11
|
const Radios = ({
|
|
11
12
|
element,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../../../src/form-renderer/components/fields/Radios/index.tsx"],"sourcesContent":["// components/fields/Checkboxes.tsx\n\nimport React from 'react';\nimport type {FieldValues} from 'react-hook-form';\nimport type {ICheckbox, UseFieldLogicElementProps} from \"@lmb-it/kitsconcerto-types\";\nimport {Flex, KitsRadios} from \"../../../../_compat\";\nimport type {IRadioCheckboxListItem} from \"@lmb-it/kitsconcerto-types\";\n\n/**\n * Renders a group of checkboxes.\n\n */\nexport const Radios = <T extends FieldValues>({\n element,\n control,\n getValues,\n fieldLogic,\n }: UseFieldLogicElementProps<T>) => {\n\n // 1. The central hook provides all the necessary state and resolved props.\n const {\n field,\n fieldState,\n label,\n isDisabled,\n isRequired,\n helperText,\n hideError,\n list,\n attached,\n style: elementStyle,\n slots,\n } = fieldLogic\n\n\n\n // 2. Cast the element to its specific type to access unique properties.\n const checkboxElement = element as ICheckbox<T>;\n const {vertical} = checkboxElement;\n\n // 3. The component is now only responsible for rendering the UI.\n return (\n <KitsRadios<T>\n // --- Core react-hook-form props ---\n {...field} // Spreads `onChange`, `onBlur`, `value`, `ref`\n\n onChange={(checked, event)=>{\n field.onChange({\n target:{\n value:event.value\n }\n });\n }}\n // --- Resolved props from useFieldLogic ---\n id={field.name}\n label={label}\n hideError={hideError}\n disabled={isDisabled}\n required={isRequired}\n invalid={fieldState.invalid}\n errors={fieldState.error?.message}\n helperText={helperText}\n item={list as IRadioCheckboxListItem[]}\n attached={attached}\n appearanceMode={vertical ? 'vertical' : 'horizontal'}\n style={elementStyle?.input}\n containerStyle={elementStyle?.container}\n slots={slots}\n />\n );\n};\n\nexport default Radios;\n"],"names":["jsx","KitsRadios"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../../../src/form-renderer/components/fields/Radios/index.tsx"],"sourcesContent":["// components/fields/Checkboxes.tsx\n\nimport React from 'react';\nimport type {FieldValues} from 'react-hook-form';\nimport type {ICheckbox, UseFieldLogicElementProps} from \"@lmb-it/kitsconcerto-types\";\nimport {Flex, KitsRadios} from \"../../../../_compat\";\nimport type {IRadioCheckboxListItem} from \"@lmb-it/kitsconcerto-types\";\n\n/**\n * Renders a group of checkboxes.\n\n */\nexport const Radios = <T extends FieldValues>({\n element,\n control,\n getValues,\n fieldLogic,\n }: UseFieldLogicElementProps<T>) => {\n\n // 1. The central hook provides all the necessary state and resolved props.\n const {\n field,\n fieldState,\n label,\n isDisabled,\n isRequired,\n helperText,\n hideError,\n list,\n attached,\n style: elementStyle,\n slots,\n } = fieldLogic\n\n\n\n // 2. Cast the element to its specific type to access unique properties.\n const checkboxElement = element as ICheckbox<T>;\n const {vertical} = checkboxElement;\n\n // 3. The component is now only responsible for rendering the UI.\n return (\n <KitsRadios<T>\n // --- Core react-hook-form props ---\n {...field} // Spreads `onChange`, `onBlur`, `value`, `ref`\n\n onChange={(checked, event)=>{\n field.onChange({\n target:{\n value:event.value\n }\n });\n }}\n // --- Resolved props from useFieldLogic ---\n id={field.name}\n label={label}\n hideError={hideError}\n disabled={isDisabled}\n required={isRequired}\n invalid={fieldState.invalid}\n errors={fieldState.error?.message}\n helperText={helperText}\n item={list as IRadioCheckboxListItem[]}\n attached={attached}\n appearanceMode={vertical ? 'vertical' : 'horizontal'}\n style={elementStyle?.input}\n containerStyle={elementStyle?.container}\n slots={slots}\n />\n );\n};\n\nexport default Radios;\n"],"names":["jsx","KitsRadios"],"mappings":";;;;;;;;;;AAYO,MAAM,SAAS,CAAwB;AAAA,EACI,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACJ,CAAA,KAAoC;AAG9E,EAAA,MAAM;AAAA,IACF,KAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO,YAAA;AAAA,IACP;AAAA,GACJ,GAAI,UAAA;AAKJ,EAAA,MAAM,eAAA,GAAkB,OAAA;AACxB,EAAA,MAAM,EAAC,UAAQ,GAAI,eAAA;AAGnB,EAAA,uBACIA,cAAA;AAAA,IAACC,oBAAA;AAAA,IAAA;AAAA,MAEI,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAU,CAAC,OAAA,EAAS,KAAA,KAAQ;AACxB,QAAA,KAAA,CAAM,QAAA,CAAS;AAAA,UACX,MAAA,EAAO;AAAA,YACH,OAAM,KAAA,CAAM;AAAA;AAChB,SACH,CAAA;AAAA,MACL,CAAA;AAAA,MAEA,IAAI,KAAA,CAAM,IAAA;AAAA,MACV,KAAA;AAAA,MACA,SAAA;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,EAAM,IAAA;AAAA,MACN,QAAA;AAAA,MACA,cAAA,EAAgB,WAAW,UAAA,GAAa,YAAA;AAAA,MACxC,OAAO,YAAA,EAAc,KAAA;AAAA,MACrB,gBAAgB,YAAA,EAAc,SAAA;AAAA,MAC9B;AAAA;AAAA,GACJ;AAER;;;;;"}
|
|
@@ -2,6 +2,7 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import KitsRadio from '../../../../form/controls/RadioButton/radio.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
import '../../../../contexts/DialogContext.js';
|
|
5
|
+
import '../../../../contexts/PermissionsContext.js';
|
|
5
6
|
|
|
6
7
|
const Radios = ({
|
|
7
8
|
element,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../src/form-renderer/components/fields/Radios/index.tsx"],"sourcesContent":["// components/fields/Checkboxes.tsx\n\nimport React from 'react';\nimport type {FieldValues} from 'react-hook-form';\nimport type {ICheckbox, UseFieldLogicElementProps} from \"@lmb-it/kitsconcerto-types\";\nimport {Flex, KitsRadios} from \"../../../../_compat\";\nimport type {IRadioCheckboxListItem} from \"@lmb-it/kitsconcerto-types\";\n\n/**\n * Renders a group of checkboxes.\n\n */\nexport const Radios = <T extends FieldValues>({\n element,\n control,\n getValues,\n fieldLogic,\n }: UseFieldLogicElementProps<T>) => {\n\n // 1. The central hook provides all the necessary state and resolved props.\n const {\n field,\n fieldState,\n label,\n isDisabled,\n isRequired,\n helperText,\n hideError,\n list,\n attached,\n style: elementStyle,\n slots,\n } = fieldLogic\n\n\n\n // 2. Cast the element to its specific type to access unique properties.\n const checkboxElement = element as ICheckbox<T>;\n const {vertical} = checkboxElement;\n\n // 3. The component is now only responsible for rendering the UI.\n return (\n <KitsRadios<T>\n // --- Core react-hook-form props ---\n {...field} // Spreads `onChange`, `onBlur`, `value`, `ref`\n\n onChange={(checked, event)=>{\n field.onChange({\n target:{\n value:event.value\n }\n });\n }}\n // --- Resolved props from useFieldLogic ---\n id={field.name}\n label={label}\n hideError={hideError}\n disabled={isDisabled}\n required={isRequired}\n invalid={fieldState.invalid}\n errors={fieldState.error?.message}\n helperText={helperText}\n item={list as IRadioCheckboxListItem[]}\n attached={attached}\n appearanceMode={vertical ? 'vertical' : 'horizontal'}\n style={elementStyle?.input}\n containerStyle={elementStyle?.container}\n slots={slots}\n />\n );\n};\n\nexport default Radios;\n"],"names":["KitsRadios"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/form-renderer/components/fields/Radios/index.tsx"],"sourcesContent":["// components/fields/Checkboxes.tsx\n\nimport React from 'react';\nimport type {FieldValues} from 'react-hook-form';\nimport type {ICheckbox, UseFieldLogicElementProps} from \"@lmb-it/kitsconcerto-types\";\nimport {Flex, KitsRadios} from \"../../../../_compat\";\nimport type {IRadioCheckboxListItem} from \"@lmb-it/kitsconcerto-types\";\n\n/**\n * Renders a group of checkboxes.\n\n */\nexport const Radios = <T extends FieldValues>({\n element,\n control,\n getValues,\n fieldLogic,\n }: UseFieldLogicElementProps<T>) => {\n\n // 1. The central hook provides all the necessary state and resolved props.\n const {\n field,\n fieldState,\n label,\n isDisabled,\n isRequired,\n helperText,\n hideError,\n list,\n attached,\n style: elementStyle,\n slots,\n } = fieldLogic\n\n\n\n // 2. Cast the element to its specific type to access unique properties.\n const checkboxElement = element as ICheckbox<T>;\n const {vertical} = checkboxElement;\n\n // 3. The component is now only responsible for rendering the UI.\n return (\n <KitsRadios<T>\n // --- Core react-hook-form props ---\n {...field} // Spreads `onChange`, `onBlur`, `value`, `ref`\n\n onChange={(checked, event)=>{\n field.onChange({\n target:{\n value:event.value\n }\n });\n }}\n // --- Resolved props from useFieldLogic ---\n id={field.name}\n label={label}\n hideError={hideError}\n disabled={isDisabled}\n required={isRequired}\n invalid={fieldState.invalid}\n errors={fieldState.error?.message}\n helperText={helperText}\n item={list as IRadioCheckboxListItem[]}\n attached={attached}\n appearanceMode={vertical ? 'vertical' : 'horizontal'}\n style={elementStyle?.input}\n containerStyle={elementStyle?.container}\n slots={slots}\n />\n );\n};\n\nexport default Radios;\n"],"names":["KitsRadios"],"mappings":";;;;;;AAYO,MAAM,SAAS,CAAwB;AAAA,EACI,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACJ,CAAA,KAAoC;AAG9E,EAAA,MAAM;AAAA,IACF,KAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO,YAAA;AAAA,IACP;AAAA,GACJ,GAAI,UAAA;AAKJ,EAAA,MAAM,eAAA,GAAkB,OAAA;AACxB,EAAA,MAAM,EAAC,UAAQ,GAAI,eAAA;AAGnB,EAAA,uBACI,GAAA;AAAA,IAACA,SAAA;AAAA,IAAA;AAAA,MAEI,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAU,CAAC,OAAA,EAAS,KAAA,KAAQ;AACxB,QAAA,KAAA,CAAM,QAAA,CAAS;AAAA,UACX,MAAA,EAAO;AAAA,YACH,OAAM,KAAA,CAAM;AAAA;AAChB,SACH,CAAA;AAAA,MACL,CAAA;AAAA,MAEA,IAAI,KAAA,CAAM,IAAA;AAAA,MACV,KAAA;AAAA,MACA,SAAA;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,EAAM,IAAA;AAAA,MACN,QAAA;AAAA,MACA,cAAA,EAAgB,WAAW,UAAA,GAAa,YAAA;AAAA,MACxC,OAAO,YAAA,EAAc,KAAA;AAAA,MACrB,gBAAgB,YAAA,EAAc,SAAA;AAAA,MAC9B;AAAA;AAAA,GACJ;AAER;;;;"}
|
|
@@ -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 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":"
|
|
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;;;;;"}
|
|
@@ -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 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":"
|
|
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/hooks/main.cjs
CHANGED
package/hooks/main.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.cjs","sources":["../../../src/hooks/main.ts"],"sourcesContent":["import {useContext} from \"react\";\nimport {MainContext} from \"../contexts\";\n\nexport const useKitsConcerto = () => useContext(MainContext);\n"],"names":["useContext","MainContext"],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.cjs","sources":["../../../src/hooks/main.ts"],"sourcesContent":["import {useContext} from \"react\";\nimport {MainContext} from \"../contexts\";\n\nexport const useKitsConcerto = () => useContext(MainContext);\n"],"names":["useContext","MainContext"],"mappings":";;;;;;;AAGO,MAAM,eAAA,GAAkB,MAAMA,gBAAA,CAAWC,wBAAW;;;;"}
|
package/hooks/main.js
CHANGED
package/hooks/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../../../src/hooks/main.ts"],"sourcesContent":["import {useContext} from \"react\";\nimport {MainContext} from \"../contexts\";\n\nexport const useKitsConcerto = () => useContext(MainContext);\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../../../src/hooks/main.ts"],"sourcesContent":["import {useContext} from \"react\";\nimport {MainContext} from \"../contexts\";\n\nexport const useKitsConcerto = () => useContext(MainContext);\n"],"names":[],"mappings":";;;;;AAGO,MAAM,eAAA,GAAkB,MAAM,UAAA,CAAW,WAAW;;;;"}
|
package/index.cjs
CHANGED
|
@@ -98,6 +98,7 @@ var index_native$O = require('./contexts/Locale/index.cjs');
|
|
|
98
98
|
var index_native$P = require('./contexts/Main/index.cjs');
|
|
99
99
|
var index_native$15 = require('./contexts/Theme/index.cjs');
|
|
100
100
|
var DialogContext = require('./contexts/DialogContext.cjs');
|
|
101
|
+
var PermissionsContext = require('./contexts/PermissionsContext.cjs');
|
|
101
102
|
var useSelectionController = require('./hooks/useSelectionController.cjs');
|
|
102
103
|
var useDisclosure = require('./hooks/useDisclosure.cjs');
|
|
103
104
|
var index_native$1g = require('./hooks/useScrollState/index.cjs');
|
|
@@ -286,6 +287,8 @@ exports.ThemeContextProvider = index_native$15.default;
|
|
|
286
287
|
exports.useTheme = index_native$15.useTheme;
|
|
287
288
|
exports.useDialog = DialogContext.useDialog;
|
|
288
289
|
exports.usePopup = DialogContext.usePopup;
|
|
290
|
+
exports.PermissionsProvider = PermissionsContext.default;
|
|
291
|
+
exports.usePermissions = PermissionsContext.usePermissions;
|
|
289
292
|
exports.useSelectionController = useSelectionController.default;
|
|
290
293
|
exports.useDisclosure = useDisclosure.default;
|
|
291
294
|
exports.useScrollState = index_native$1g.default;
|
package/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/index.d.ts
CHANGED
|
@@ -3929,7 +3929,7 @@ export interface ISkeletonText {
|
|
|
3929
3929
|
style: IStyleClasses;
|
|
3930
3930
|
}
|
|
3931
3931
|
|
|
3932
|
-
export interface ISkeleton {
|
|
3932
|
+
export interface ISkeleton extends IStyleClasses {
|
|
3933
3933
|
variant?: 'rounded' | 'sharp' | 'circular';
|
|
3934
3934
|
startColor?: string;
|
|
3935
3935
|
isLoaded?: boolean;
|
|
@@ -5493,6 +5493,7 @@ export interface TreeChangeProps {
|
|
|
5493
5493
|
}, clear: clearFunction) => void;
|
|
5494
5494
|
}
|
|
5495
5495
|
export interface TextLabels {
|
|
5496
|
+
searchPlaceholder?: string;
|
|
5496
5497
|
addNode?: string;
|
|
5497
5498
|
addItem?: string;
|
|
5498
5499
|
deleteNode?: string;
|
|
@@ -5531,6 +5532,8 @@ export interface ITreeViewProps<T = any> extends CallbackProps<T>, ValidationPro
|
|
|
5531
5532
|
sortable?: boolean;
|
|
5532
5533
|
text?: TextLabels;
|
|
5533
5534
|
hideToolbar?: boolean;
|
|
5535
|
+
/** Keep selection semantics while leaving the row surface neutral. */
|
|
5536
|
+
highlightSelectedNode?: boolean;
|
|
5534
5537
|
}
|
|
5535
5538
|
|
|
5536
5539
|
export interface IRef {
|
|
@@ -9089,6 +9092,15 @@ export interface Ctx {
|
|
|
9089
9092
|
declare const usePopup: () => Ctx;
|
|
9090
9093
|
declare const useDialog: () => Ctx;
|
|
9091
9094
|
|
|
9095
|
+
export type IPermissionsContextValues = {
|
|
9096
|
+
check: (permissions: string | string[] | Permissions | null) => boolean;
|
|
9097
|
+
};
|
|
9098
|
+
declare const PermissionsProvider: FC<PropsWithChildren<{
|
|
9099
|
+
roles?: string[] | null;
|
|
9100
|
+
}>>;
|
|
9101
|
+
|
|
9102
|
+
declare const usePermissions: () => IPermissionsContextValues;
|
|
9103
|
+
|
|
9092
9104
|
export type BooleanParams = {
|
|
9093
9105
|
mode: "boolean";
|
|
9094
9106
|
value?: boolean;
|
|
@@ -15031,5 +15043,5 @@ declare const localeFiles: {
|
|
|
15031
15043
|
};
|
|
15032
15044
|
};
|
|
15033
15045
|
|
|
15034
|
-
export { ALPHA_COLOR_VARS, ALPHA_STEPS, ALPHA_TOKEN_NAMES, AccentEdge, CustomAccordion as Accordion, ActionCard, Alert, AlertDescription, AlertIcon, AlertTitle, KitsAnimatePresence as AnimatePresence, AnyFile, Avatar, AvatarStack, Badge, Banner, BottomTabBar, Box, BreadCrumb, Button, Card, Carousel, Center, ChatBubble, Chip, CircularProgress, Collapse, CommandPalette, Container, CustomPopover, DEFAULT_NATIVE_SHADOWS, DataView, DataViewContext, DateSeparator, Delta, DetailList as DetailsList, Divider, Donut, DotGrid, EDateFormat, EKeyFilter, Editable, EmptyState, FIELD_LABEL_MARGIN, FIELD_MARGIN, Flex, Form, FormSelect, GUTTER, Gallery, Gauge, Form as GoForm, Datatable as GoTable, KitsGrid as Grid, KitsGridItem as GridItem, GroupedBars, HELPER_TEXT_MARGIN, HStack, Heading, Icon, IconMap, Image, KitsInputSwitch as InputSwitch, KeyboardNavContext, KitsAutoComplete, KitsBarChart, KitsCascadeSelect, KitsCheckbox as KitsCheckboxes, KitsConfirm, KitsConfirmPopup, KitsContainer, KitsInputCalendar as KitsDatepicker, KitsDialogControlled as KitsDialog, KitsDropdown, FilePicker as KitsFilePicker, KitsInputColorPicker, KitsInputLocation, KitsInputMask, KitsInputNumber, KitsInputPassword, KitsInputText, KitsInputTextarea, KitsLineChart, KitsListBox, KitsMultiSelect, KitsPhoneComponent, KitsRadar, KitsRadio as KitsRadios, RadiusPicker as KitsRadiusPicker, KitsSliders, KitsThemeProvider, KitsToast, KitsTreeSelect, Label, Legend, Link, List, ListItem, Loader, LocaleContext, LocaleContextProvider, MainContext, MainContextProvider, MapTile, MessageComposer, MessageReceipt, MetricCard, KitsMultiSelect as MultiSelect, PersonCard, ProgressBar, RadiusPicker, RankedList, ReducedMotionProvider, Rise, SHADOW_PRESET_KEYS, SPACER, KitsScrollView as ScrollView, SegmentedControl, FormSelect as Select, SelectButton, Skeleton$1 as Skeleton, SkeletonRows, Skeleton as SkeletonText, Sparkline, StackedBars, StatCard, StatGroup, StatePill, StatusCard, Stepper, Striped, Svg, TableContext, Tabs, Text, ThemeContextProvider, Timeline, Tip, Tooltip, Translate, KitsTreeSelect as TreeSelect, TreeView, TriStateCheckbox, TypingIndicator, VStack, Wash, WidgetPanel, borderProperties, breakpoints, capitalizeFirstLetter, checkExtAgainstAccepted, checkNameDuplication, colorWithAlpha, dateTimeFormat, deepMerge, defaultSeverityTheme, defaultTheme, downloadCanvas, dynamicList, expandShadowNative, extendTheme, fileTypeIcon, fileValidation, filesExt, filesMemes, filesTypes, flattenSlotStyles, fontSizeMapping, formFileValidation, formatNumber, getActiveNativeShadows, getCombinedChildIds, getCustomDateTime, getDateElements, getDefaultValues, getMeme, getParams, getPropertyByPath, getType, getTypes, getURLParams, imagesExt, imagesMemes, imagesTypes, isAlphaToken, isNumber, isSemanticToken, isShadowPreset, isThemeToken, isToday, isValidURL, kitsMotion, listingProperties, localeFiles, allProperties as mapCssProperties, mergeRefs, nonPxProperties, propertiesWithoutCssEquivalent, pxProperties, resolveStyleRecord, resolveTokenValue, schemaBuilder, setActiveNativeShadows, shadowNative, shadowWeb, sizeMapping, sizingProperties, timeAgo, timeSince, toMemes, useAllSeverityColors, useComponentDefaults, useCountUp, useDataView, useDialog, useDisclosure, useEnter, useFieldLogic, useFocusStyles, useFormFieldKeyboardNav, useFormManager, useKeyboardNav, useKeyboardNavProvider, useKitsColorScheme, useKitsConcerto, useKitsTheme, useLanguage, useMeasuredWidth, useNativeColorMap, usePopup, useReducedMotion, useResolvedElementStyles, useResolvedStyle, useRtlLineHeight, useScrollState, useSelectionController, useSeverityColors, useTable, useTheme, useThemedFont, useToast };
|
|
15046
|
+
export { ALPHA_COLOR_VARS, ALPHA_STEPS, ALPHA_TOKEN_NAMES, AccentEdge, CustomAccordion as Accordion, ActionCard, Alert, AlertDescription, AlertIcon, AlertTitle, KitsAnimatePresence as AnimatePresence, AnyFile, Avatar, AvatarStack, Badge, Banner, BottomTabBar, Box, BreadCrumb, Button, Card, Carousel, Center, ChatBubble, Chip, CircularProgress, Collapse, CommandPalette, Container, CustomPopover, DEFAULT_NATIVE_SHADOWS, DataView, DataViewContext, DateSeparator, Delta, DetailList as DetailsList, Divider, Donut, DotGrid, EDateFormat, EKeyFilter, Editable, EmptyState, FIELD_LABEL_MARGIN, FIELD_MARGIN, Flex, Form, FormSelect, GUTTER, Gallery, Gauge, Form as GoForm, Datatable as GoTable, KitsGrid as Grid, KitsGridItem as GridItem, GroupedBars, HELPER_TEXT_MARGIN, HStack, Heading, Icon, IconMap, Image, KitsInputSwitch as InputSwitch, KeyboardNavContext, KitsAutoComplete, KitsBarChart, KitsCascadeSelect, KitsCheckbox as KitsCheckboxes, KitsConfirm, KitsConfirmPopup, KitsContainer, KitsInputCalendar as KitsDatepicker, KitsDialogControlled as KitsDialog, KitsDropdown, FilePicker as KitsFilePicker, KitsInputColorPicker, KitsInputLocation, KitsInputMask, KitsInputNumber, KitsInputPassword, KitsInputText, KitsInputTextarea, KitsLineChart, KitsListBox, KitsMultiSelect, KitsPhoneComponent, KitsRadar, KitsRadio as KitsRadios, RadiusPicker as KitsRadiusPicker, KitsSliders, KitsThemeProvider, KitsToast, KitsTreeSelect, Label, Legend, Link, List, ListItem, Loader, LocaleContext, LocaleContextProvider, MainContext, MainContextProvider, MapTile, MessageComposer, MessageReceipt, MetricCard, KitsMultiSelect as MultiSelect, PermissionsProvider, PersonCard, ProgressBar, RadiusPicker, RankedList, ReducedMotionProvider, Rise, SHADOW_PRESET_KEYS, SPACER, KitsScrollView as ScrollView, SegmentedControl, FormSelect as Select, SelectButton, Skeleton$1 as Skeleton, SkeletonRows, Skeleton as SkeletonText, Sparkline, StackedBars, StatCard, StatGroup, StatePill, StatusCard, Stepper, Striped, Svg, TableContext, Tabs, Text, ThemeContextProvider, Timeline, Tip, Tooltip, Translate, KitsTreeSelect as TreeSelect, TreeView, TriStateCheckbox, TypingIndicator, VStack, Wash, WidgetPanel, borderProperties, breakpoints, capitalizeFirstLetter, checkExtAgainstAccepted, checkNameDuplication, colorWithAlpha, dateTimeFormat, deepMerge, defaultSeverityTheme, defaultTheme, downloadCanvas, dynamicList, expandShadowNative, extendTheme, fileTypeIcon, fileValidation, filesExt, filesMemes, filesTypes, flattenSlotStyles, fontSizeMapping, formFileValidation, formatNumber, getActiveNativeShadows, getCombinedChildIds, getCustomDateTime, getDateElements, getDefaultValues, getMeme, getParams, getPropertyByPath, getType, getTypes, getURLParams, imagesExt, imagesMemes, imagesTypes, isAlphaToken, isNumber, isSemanticToken, isShadowPreset, isThemeToken, isToday, isValidURL, kitsMotion, listingProperties, localeFiles, allProperties as mapCssProperties, mergeRefs, nonPxProperties, propertiesWithoutCssEquivalent, pxProperties, resolveStyleRecord, resolveTokenValue, schemaBuilder, setActiveNativeShadows, shadowNative, shadowWeb, sizeMapping, sizingProperties, timeAgo, timeSince, toMemes, useAllSeverityColors, useComponentDefaults, useCountUp, useDataView, useDialog, useDisclosure, useEnter, useFieldLogic, useFocusStyles, useFormFieldKeyboardNav, useFormManager, useKeyboardNav, useKeyboardNavProvider, useKitsColorScheme, useKitsConcerto, useKitsTheme, useLanguage, useMeasuredWidth, useNativeColorMap, usePermissions, usePopup, useReducedMotion, useResolvedElementStyles, useResolvedStyle, useRtlLineHeight, useScrollState, useSelectionController, useSeverityColors, useTable, useTheme, useThemedFont, useToast };
|
|
15035
15047
|
export type { AlignmentsValues, AllSlotKeys, AnimationsValues, AvatarShape, AvatarSize, AvatarStatus, BannerAction, BannerStatus, BaseFieldProps, Booleanish, Breakpoint, CallbackProps, ChatBubbleTone, ChatBubbleVariant, ChipSeverity, ChipSize, ColorMode, ColorScale, ColorValue, Colors, ColorsType, ComponentSize, CustomSubmitButtonProps, DataTableFilterMeta, DataTableFilterMetaData, DataTableOperatorFilterMetaData, DataTableSelectionSingleChangeEvent, DataTableSortMeta, DeepPartial, DetailItemInputType, DynamicValue, ElementProps, EnteringAnimation, ExitingAnimation, ExpandedKeys, FetchError, FetchSuccess, FetchTableDataRes, FetchTablePaginationData, FieldWrapperProps, File$1 as File, FileUploaderTemplate, FileUploaderTemplateParams, FlexAlignmentsValues, FlexValues, FormBooleanEvent, FormBooleanTarget, FormEvent, FormTarget, GroupFieldConfigs, HighSizingValue, IAccentEdgeProps, IAccordionElementSlots, IAccordionProps, IActionCardProps, IAddressComponentValue, IAddressExperianFormat, IAddressFormat, IAddressFormatResults, IAddressSearchResults, IAlertComponent, IAlertProps, IAlignment, IAnimation, IAutoCompleteCore, IAutoCompleteElement, IAvatarElementSlots, IAvatarProps, IAvatarStackElementSlots, IAvatarStackProps, IBadgeProps, IBannerProps, IBarChartProps, IBaseValidation, IBasicSectionProps, IBg, IBodyTemplate, IBodyTemplateIcon, IBorder, IBottomTabBarElementSlots, IBottomTabBarProps, IBoxComponent, IBuilderAddressField, IBuilderCheckboxField, IBuilderContainerField, IBuilderDateField, IBuilderField, IBuilderFieldBase, IBuilderFieldExport, IBuilderFileField, IBuilderGroupField, IBuilderMultiselectField, IBuilderNumberField, IBuilderPhoneField, IBuilderRadiosField, IBuilderRadiusPickerField, IBuilderSectionField, IBuilderSelectField, IBuilderSwitchField, IBuilderTagsField, IBuilderTextField, IBuilderTextareaField, IButton, IButtonElementSlots, IButtonParams, IButtonProps, IButtonState, IButtonsFilter, ICanvasProps, ICardComponent, ICardElementSlots, ICarouselElementSlots, ICarouselProps, ICascadeSelect, ICascadeSelectCore, IChatBubbleElementSlots, IChatBubbleProps, ICheckbox, ICheckboxFilter, ICheckboxSlots, IChildren, IChildrenParams, IChipProps, ICircularProgressProps, ICollapseProps, IColorPicker, IColumn, IColumnBase, ICombined, ICommandPaletteGroup, ICommandPaletteItem, ICommandPaletteProps, IComponentThemeConfig, IConditionGroupProps, IConditionRowProps, IConditionRule, IConditionsSectionProps, IConfirmDialogProps, IConfirmPopupProps, IContainer, IContainerCardProps, IContainerProps, IContextValues, ICountrySearchResults, ICssStyling, IDVButtonsFilter, IDVCheckboxFilter, IDVDateFilter, IDVDropdownFilter, IDVFilters, IDVMessages, IDVMultiselectFilter, IDVNumberFilter, IDVPaginationRequest, IDVPaginationResponse, IDVPaginationState, IDVPhoneFilter, IDVRangeFilter, IDVTextFilter, IDVTriStateFilter, IDataTableContextValues, IDataTableProps, IDataViewContextValues, IDataViewProps, IDataViewRefValues, IDatatableRefValues, IDate, IDateFilter, IDateProps, IDateSeparatorElementSlots, IDateSeparatorProps, IDateValidation, IDatepickerSlots, IDeltaProps, IDetailItem, IDetailListProps, IDialogButton, IDialogProps, IDialogRef, IDialogState, IDisplay, IDividerComponent, IDonutProps, IDonutSegment, IDotGridProps, IDoughnutChartProps, IDropdownCore, IDropdownFilter, IDropdownSelect, IEditableProps, IEditors, IEffects, IElementBase, IElementSlotConfig, IElementStyle, IEmail, IEmailSearchResults, IEmptyStateElementSlots, IEmptyStateProps, IFieldCardProps, IFieldCondition, IFieldPreviewProps, IFile, IFileUploader, IFileUploaderElement, IFileUploaderTypes, IFileValidation, IFilesExtTypeKeys, IFilters, IFlexAlignment, IFlexComponent, IFormAddon, IFormBuilderInternalState, IFormBuilderMeta, IFormBuilderPayload, IFormBuilderProps, IFormComponent, IFormElement, IFormElementBaseSlots, IFormElementSlots, IFormGrid, IFormListsElements, IFormSelect, IFormSelectElements, IFormSingleElement, IGalleryElementSlots, IGalleryItem, IGalleryProps, IGaugeProps, IGrid, IGridCellStyle, IGridComponent, IGridItem, IGridItemComponent, IGroup, IGroupCardProps, IGroupElementSlots, IGroupSettings, IGroupedBarsDatum, IGroupedBarsProps, IHeaderElementSlots, IHeadingComponent, IIconProps, IImageComponent, IImagesExtTypeKeys, IInteractivity, IKeyedColumn, IKitsAnimation, IKitsBarChartDatum, IKitsBarChartProps, IKitsCheckboxProps, IKitsComponentDefaults, IKitsContainer, IKitsDialogControlled, IKitsInputCalendar, IKitsInputColorPicker, IKitsInputLocation, IKitsInputMask, IKitsInputNumber, IKitsInputPassword, IKitsInputRating, IKitsInputSwitch, IKitsInputText, IKitsInputTextarea, IKitsLineChartProps, IKitsLineChartSeries, IKitsPhoneInput, IKitsRadioProps, IKitsTheme, IKitsThemeColors, IKitsThemeConfig, IKitsThemeContextValues, IKitsThemeFontSizes, IKitsThemeFontWeights, IKitsThemeFonts, IKitsThemeLineHeights, IKitsThemeRadii, IKitsThemeShadows, IKitsThemeSpacing, IKitsToastRef, ILabelElement, ILabelProps, ILanguage, ILayout, ILegendItem, ILegendProps, ILineChartProps, ILinkComponent, ILinkOverrides, IList, IListBoxCore, IListBoxElement, IListBoxSelect, IListItem, IListing, ILoaderProps, ILoadingIndicatorContext, ILocaleContextProps, ILocaleContextValues, ILocation, ILocationDetailsResponse, ILocationResponse, IMainContextProps, IMainContextValues, IMapTilePoint, IMapTileProps, IMemes, IMenuItem, IMessageComposerElementSlots, IMessageComposerProps, IMessageReceiptElementSlots, IMessageReceiptProps, IMessages, IMetricCardProps, IMinusButton, IModalComponent, IModalFormProps, IMultiSelect, IMultiSelectCore, IMultiSelectSlots, IMultiselect, IMultiselectFilter, INativeShadow, INonCrossPlatformTypes, INumberFilter, INumberInput, INumberProps, INumberValidation, IObjectGroup, IOneOfTypes, IOptionItem, IOptionsEditorProps, IOptionsSource, IPageISection, IPaginationRequest, IPaginationResponse, IPaginatorLabels, IPaletteItemProps, IPaletteProps, IPanelCustomSlot, IPassword, IPasswordProps, IPersonCardProps, IPhone, IPhoneFilter, IPhoneObjectValue, IPhoneValidationResults, IPhoneValue, IPieChartProps, IPlusButton, IPolarAreaChartProps, IPopoverProps, IProgressBarElementSlots, IProgressBarProps, IPropertiesPanelProps, IRTLDetection, IRadarChartProps, IRadarProps, IRadarSeries, IRadioCheckboxListItem, IRadioGroup, IRadioSlots, IRadiusPickerEvents, IRadiusPickerField, IRadiusPickerI18n, IRadiusPickerProps, IRangeFilter, IRankedListProps, IRankedListRow, IRef, IRepeatableSettings, IResponsiveElement, IRiseProps, ISVGComponent, IScrollViewComponent, ISegmentedControlOption, ISegmentedControlProps, ISelect, ISelectBase, ISelectCore, ISelectElement, ISelectSlots, ISelectType, ISelectedFile, ISelectedFileType, ISelectionValidation, ISeverityColorSlots, ISeverityThemeMap, IShadowDefinition, IShadowValue, ISidebarElementSlots, ISizing, ISkeleton, ISkeletonRowsProps, ISkeletonText, ISliderProps, ISpacing, ISparklineProps, IStackProps, IStackedBarsDatum, IStackedBarsProps, IStatCardElementSlots, IStatCardProps, IStatGroupElementSlots, IStatGroupProps, IStatePillProps, IStatisticsProps, IStats, IStatusCardProps, IStepperElementSlots, IStepperProps, IStripedProps, IStyleClasses, ISwitch, ISwitchSlots, ITabBarItem, ITabItem, ITableElementSlots, ITableFlatConfig, ITabsElementSlots, ITabsProps, ITags, IText, ITextComponent, ITextFieldProps, ITextFilter, ITextInput, ITextInputProps, ITextInputSlots, ITextValidation, ITextarea, IThemeContextProps, IThemeContextValues, ITimelineElementSlots, ITimelineItem, ITimelineProps, ITipProps, IToastAction, IToastFunction, IToastOptions, IToastParams, IToolbarProps, ITransforms, ITransition, ITranslatableInputProps, ITranslatableText, ITranslateComponent, ITreeItem, ITreeSelect, ITreeSelectCore, ITreeSelectElement, ITreeSelectNode, ITreeViewProps, ITriStateFilter, ITypingIndicatorElementSlots, ITypingIndicatorProps, IUnkeyedColumn, IUseCountUpOptions, IUseFormReturn, IUserAvatar, IValidationSectionProps, IWashProps, IWidgetBarIncomingProp, IWidgetChartContextProps, IWidgetChartProp, IWidgetData, IWidgetDoughnutIncomingProp, IWidgetLineIncomingProp, IWidgetPanelProps, IWidgetPieIncomingProp, IWidgetPolarAreaIncomingProp, IWidgetRadarIncomingProp, IconName, IconType, InputTextFieldProps, KitsBreakpoint, KitsConditionalObject, KitsDevice, KitsMotion, KitsOrientation, KitsPlatform, KitsResponsiveObject, KitsResponsiveValue, KitsThemeOverride, LabelVariant, LatLng, LoadMode, LoadingIndicatorRenderer, LogicFunction, MapInteraction, MeasurementValues, MessageReceiptState, Nullable, Numbering0_12, Numbering0_32, Numberish, OnCenterChange, OnLocationError, OnLocationFound, OnRadiusChange, OnRadiusValueChange, OnSubmitHandler, OnUnitChange, Orientation, PaginationState, PaginatorPageChangeEvent$1 as PaginatorPageChangeEvent, Permissions, PlatformKey, RadiusPickerDisplay, RadiusPickerLayout, RadiusPickerSize, RadiusUnit, RadiusValue, RenderLocationButtonProps, RenderMapProps, RenderSearchBoxProps, SelectFieldProps, SemanticColorTokens, ServerMethod, ServerResponse, ServerSideProps, SetManyOpts, Severity, Shades, ShadowPreset, Shapes, SidesValues, SizingNumbering, SizingValue, StatePillState, StepperVariant, TAcceptedFileType, TBuilderFieldType, TCheckboxRadioMode, TCheckboxRadioSize, TConditionAction, TConditionMatch, TConditionOperator, TDateBoundary, TDynamicFlag, TExternalFilterLabelMode, TFiltersLayout, TIsoFormat, TItemsPerRow, TKeyFilter, TLocationProvider, TPaginatorAlign, TextLabels, TextProps, ThemedFontKind, TimelineItemStatus, Timeout, TimingNumbering, ToastPosition, ToastSeverity, ToastSize, TooltipDataAttributes, TooltipProps, TreeChangeProps, TreeCheckboxSelectionKeyType, TreeCheckboxSelectionKeys, TreeNode, TreeNodeClickEvent, TreeNodeTemplateOptions, TreeProps, TreeRef, TreeSelectionEvent, Types, UseComponentDefaultsResult, UseDisclosureReturnType, UseFieldLogicElementProps, UseFieldLogicProps, UseFieldLogicReturn, UseFormManagerEvents, UseFormManagerReturn, UseToastApi, ValidationProps, children, clearFunction, downloadableFileResponse, settings1, settings2 };
|
package/index.js
CHANGED
|
@@ -96,6 +96,7 @@ export { LocaleContext, default as LocaleContextProvider } from './contexts/Loca
|
|
|
96
96
|
export { MainContext, default as MainContextProvider } from './contexts/Main/index.js';
|
|
97
97
|
export { default as ThemeContextProvider, useTheme } from './contexts/Theme/index.js';
|
|
98
98
|
export { useDialog, usePopup } from './contexts/DialogContext.js';
|
|
99
|
+
export { default as PermissionsProvider, usePermissions } from './contexts/PermissionsContext.js';
|
|
99
100
|
export { default as useSelectionController } from './hooks/useSelectionController.js';
|
|
100
101
|
export { default as useDisclosure } from './hooks/useDisclosure.js';
|
|
101
102
|
export { default as useScrollState } from './hooks/useScrollState/index.js';
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -86,6 +86,7 @@ require('../../apps/mobile/src/Core/Input/index.cjs');
|
|
|
86
86
|
require('../../apps/mobile/src/Core/Input/Field.cjs');
|
|
87
87
|
require('../../apps/mobile/src/Core/Input/Slot.cjs');
|
|
88
88
|
require('../../contexts/DialogContext.cjs');
|
|
89
|
+
require('../../contexts/PermissionsContext.cjs');
|
|
89
90
|
var useComponentDefaults = require('../../hooks/useComponentDefaults.cjs');
|
|
90
91
|
|
|
91
92
|
const Card = (rawProps) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/primitives/Card/index.native.tsx"],"sourcesContent":["import React, {useMemo} from \"react\";\nimport {Pressable} from \"react-native\";\nimport {Heading, Text, type ICardProps} from \"@lmb-it/kitsconcertomobile\";\nimport {ResponsiveElement, useSeparator} from \"../../factory\";\nimport type {ICardComponent} from \"@lmb-it/kitsconcerto-types\";\nimport {useComponentDefaults} from \"@lmb-it/kitsconcerto/hooks\";\n\nconst Card = (rawProps: ICardComponent<Omit<ICardProps, 'title'>>) => {\n const {mergedProps: cardProps, themeStyle, elementStyles} = useComponentDefaults('Card', rawProps);\n const {\n title,\n subTitle,\n header,\n footer,\n className,\n variant = 'elevated',\n size = 'md',\n ref,\n children: CardChildren,\n localProps,\n onPress,\n ...props\n } = cardProps;\n const {cssProps, nativeProps} = useSeparator<any>({\n variant,\n size,\n ...props\n });\n\n const children = useMemo(() => {\n const ret:any[] = [];\n\n if (header) {\n ret.push(React.isValidElement(header)\n ? React.cloneElement(header, { key: 'header' })\n : <React.Fragment key=\"header\">\n {typeof header == 'function' ? localProps ? header(localProps) : \"\" : header}\n </React.Fragment>);\n }\n\n if (title) {\n ret.push(\n <Heading key=\"title\" size=\"md\" className=\"mb-1\">\n {typeof title == 'function' ? localProps ? title(localProps) : \"\" : title}\n </Heading>\n );\n }\n\n if (subTitle) {\n ret.push(<Text key=\"subTitle\">\n {typeof subTitle == 'function' ? localProps ? subTitle(localProps) : \"\" : subTitle}\n </Text>);\n }\n\n if (CardChildren) {\n ret.push(React.isValidElement(CardChildren)\n ? React.cloneElement(CardChildren, { key: 'CardChildren' })\n : <React.Fragment key=\"CardChildren\">{CardChildren}</React.Fragment>);\n }\n\n if (footer) {\n ret.push(React.isValidElement(footer)\n ? React.cloneElement(footer, { key: 'footer' })\n : <React.Fragment key=\"footer\">\n {typeof footer == 'function' ? localProps ? footer(localProps) : \"\" : footer}\n </React.Fragment>);\n }\n return <>{ret}</>;\n }, [header, title, subTitle, CardChildren]);\n\n\n const classes = useMemo(() => {\n const classes: string[] = [];\n classes.push('shadow-hard-1')\n\n if(className){\n classes.push(className)\n }\n\n return classes.join(\" \");\n }, [className]);\n\n const { entering, exiting, ...restNativeProps } = nativeProps;\n\n const cardElement = (\n <ResponsiveElement\n ref={ref}\n entering={entering}\n exiting={exiting}\n additionalStyles={{\n display: \"flex\",\n width:'auto'\n }}\n additionalClasses={classes}\n cssProps={{...themeStyle, ...(elementStyles.root || {}), ...cssProps}}\n nativeProps={restNativeProps}\n as={'Card'}\n children={children}\n />\n );\n\n if (onPress) {\n return (\n <Pressable onPress={onPress} accessibilityRole=\"button\">\n {cardElement}\n </Pressable>\n );\n }\n\n return cardElement;\n}\n\nexport default Card;\n"],"names":["useComponentDefaults","useSeparator","useMemo","jsx","Heading","Text","classes","ResponsiveElement","Pressable"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/primitives/Card/index.native.tsx"],"sourcesContent":["import React, {useMemo} from \"react\";\nimport {Pressable} from \"react-native\";\nimport {Heading, Text, type ICardProps} from \"@lmb-it/kitsconcertomobile\";\nimport {ResponsiveElement, useSeparator} from \"../../factory\";\nimport type {ICardComponent} from \"@lmb-it/kitsconcerto-types\";\nimport {useComponentDefaults} from \"@lmb-it/kitsconcerto/hooks\";\n\nconst Card = (rawProps: ICardComponent<Omit<ICardProps, 'title'>>) => {\n const {mergedProps: cardProps, themeStyle, elementStyles} = useComponentDefaults('Card', rawProps);\n const {\n title,\n subTitle,\n header,\n footer,\n className,\n variant = 'elevated',\n size = 'md',\n ref,\n children: CardChildren,\n localProps,\n onPress,\n ...props\n } = cardProps;\n const {cssProps, nativeProps} = useSeparator<any>({\n variant,\n size,\n ...props\n });\n\n const children = useMemo(() => {\n const ret:any[] = [];\n\n if (header) {\n ret.push(React.isValidElement(header)\n ? React.cloneElement(header, { key: 'header' })\n : <React.Fragment key=\"header\">\n {typeof header == 'function' ? localProps ? header(localProps) : \"\" : header}\n </React.Fragment>);\n }\n\n if (title) {\n ret.push(\n <Heading key=\"title\" size=\"md\" className=\"mb-1\">\n {typeof title == 'function' ? localProps ? title(localProps) : \"\" : title}\n </Heading>\n );\n }\n\n if (subTitle) {\n ret.push(<Text key=\"subTitle\">\n {typeof subTitle == 'function' ? localProps ? subTitle(localProps) : \"\" : subTitle}\n </Text>);\n }\n\n if (CardChildren) {\n ret.push(React.isValidElement(CardChildren)\n ? React.cloneElement(CardChildren, { key: 'CardChildren' })\n : <React.Fragment key=\"CardChildren\">{CardChildren}</React.Fragment>);\n }\n\n if (footer) {\n ret.push(React.isValidElement(footer)\n ? React.cloneElement(footer, { key: 'footer' })\n : <React.Fragment key=\"footer\">\n {typeof footer == 'function' ? localProps ? footer(localProps) : \"\" : footer}\n </React.Fragment>);\n }\n return <>{ret}</>;\n }, [header, title, subTitle, CardChildren]);\n\n\n const classes = useMemo(() => {\n const classes: string[] = [];\n classes.push('shadow-hard-1')\n\n if(className){\n classes.push(className)\n }\n\n return classes.join(\" \");\n }, [className]);\n\n const { entering, exiting, ...restNativeProps } = nativeProps;\n\n const cardElement = (\n <ResponsiveElement\n ref={ref}\n entering={entering}\n exiting={exiting}\n additionalStyles={{\n display: \"flex\",\n width:'auto'\n }}\n additionalClasses={classes}\n cssProps={{...themeStyle, ...(elementStyles.root || {}), ...cssProps}}\n nativeProps={restNativeProps}\n as={'Card'}\n children={children}\n />\n );\n\n if (onPress) {\n return (\n <Pressable onPress={onPress} accessibilityRole=\"button\">\n {cardElement}\n </Pressable>\n );\n }\n\n return cardElement;\n}\n\nexport default Card;\n"],"names":["useComponentDefaults","useSeparator","useMemo","jsx","Heading","Text","classes","ResponsiveElement","Pressable"],"mappings":"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"}
|
package/primitives/Card/index.js
CHANGED
|
@@ -82,6 +82,7 @@ import '../../apps/mobile/src/Core/Input/index.js';
|
|
|
82
82
|
import '../../apps/mobile/src/Core/Input/Field.js';
|
|
83
83
|
import '../../apps/mobile/src/Core/Input/Slot.js';
|
|
84
84
|
import '../../contexts/DialogContext.js';
|
|
85
|
+
import '../../contexts/PermissionsContext.js';
|
|
85
86
|
import useComponentDefaults from '../../hooks/useComponentDefaults.js';
|
|
86
87
|
|
|
87
88
|
const Card = (rawProps) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/primitives/Card/index.native.tsx"],"sourcesContent":["import React, {useMemo} from \"react\";\nimport {Pressable} from \"react-native\";\nimport {Heading, Text, type ICardProps} from \"@lmb-it/kitsconcertomobile\";\nimport {ResponsiveElement, useSeparator} from \"../../factory\";\nimport type {ICardComponent} from \"@lmb-it/kitsconcerto-types\";\nimport {useComponentDefaults} from \"@lmb-it/kitsconcerto/hooks\";\n\nconst Card = (rawProps: ICardComponent<Omit<ICardProps, 'title'>>) => {\n const {mergedProps: cardProps, themeStyle, elementStyles} = useComponentDefaults('Card', rawProps);\n const {\n title,\n subTitle,\n header,\n footer,\n className,\n variant = 'elevated',\n size = 'md',\n ref,\n children: CardChildren,\n localProps,\n onPress,\n ...props\n } = cardProps;\n const {cssProps, nativeProps} = useSeparator<any>({\n variant,\n size,\n ...props\n });\n\n const children = useMemo(() => {\n const ret:any[] = [];\n\n if (header) {\n ret.push(React.isValidElement(header)\n ? React.cloneElement(header, { key: 'header' })\n : <React.Fragment key=\"header\">\n {typeof header == 'function' ? localProps ? header(localProps) : \"\" : header}\n </React.Fragment>);\n }\n\n if (title) {\n ret.push(\n <Heading key=\"title\" size=\"md\" className=\"mb-1\">\n {typeof title == 'function' ? localProps ? title(localProps) : \"\" : title}\n </Heading>\n );\n }\n\n if (subTitle) {\n ret.push(<Text key=\"subTitle\">\n {typeof subTitle == 'function' ? localProps ? subTitle(localProps) : \"\" : subTitle}\n </Text>);\n }\n\n if (CardChildren) {\n ret.push(React.isValidElement(CardChildren)\n ? React.cloneElement(CardChildren, { key: 'CardChildren' })\n : <React.Fragment key=\"CardChildren\">{CardChildren}</React.Fragment>);\n }\n\n if (footer) {\n ret.push(React.isValidElement(footer)\n ? React.cloneElement(footer, { key: 'footer' })\n : <React.Fragment key=\"footer\">\n {typeof footer == 'function' ? localProps ? footer(localProps) : \"\" : footer}\n </React.Fragment>);\n }\n return <>{ret}</>;\n }, [header, title, subTitle, CardChildren]);\n\n\n const classes = useMemo(() => {\n const classes: string[] = [];\n classes.push('shadow-hard-1')\n\n if(className){\n classes.push(className)\n }\n\n return classes.join(\" \");\n }, [className]);\n\n const { entering, exiting, ...restNativeProps } = nativeProps;\n\n const cardElement = (\n <ResponsiveElement\n ref={ref}\n entering={entering}\n exiting={exiting}\n additionalStyles={{\n display: \"flex\",\n width:'auto'\n }}\n additionalClasses={classes}\n cssProps={{...themeStyle, ...(elementStyles.root || {}), ...cssProps}}\n nativeProps={restNativeProps}\n as={'Card'}\n children={children}\n />\n );\n\n if (onPress) {\n return (\n <Pressable onPress={onPress} accessibilityRole=\"button\">\n {cardElement}\n </Pressable>\n );\n }\n\n return cardElement;\n}\n\nexport default Card;\n"],"names":["classes"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/primitives/Card/index.native.tsx"],"sourcesContent":["import React, {useMemo} from \"react\";\nimport {Pressable} from \"react-native\";\nimport {Heading, Text, type ICardProps} from \"@lmb-it/kitsconcertomobile\";\nimport {ResponsiveElement, useSeparator} from \"../../factory\";\nimport type {ICardComponent} from \"@lmb-it/kitsconcerto-types\";\nimport {useComponentDefaults} from \"@lmb-it/kitsconcerto/hooks\";\n\nconst Card = (rawProps: ICardComponent<Omit<ICardProps, 'title'>>) => {\n const {mergedProps: cardProps, themeStyle, elementStyles} = useComponentDefaults('Card', rawProps);\n const {\n title,\n subTitle,\n header,\n footer,\n className,\n variant = 'elevated',\n size = 'md',\n ref,\n children: CardChildren,\n localProps,\n onPress,\n ...props\n } = cardProps;\n const {cssProps, nativeProps} = useSeparator<any>({\n variant,\n size,\n ...props\n });\n\n const children = useMemo(() => {\n const ret:any[] = [];\n\n if (header) {\n ret.push(React.isValidElement(header)\n ? React.cloneElement(header, { key: 'header' })\n : <React.Fragment key=\"header\">\n {typeof header == 'function' ? localProps ? header(localProps) : \"\" : header}\n </React.Fragment>);\n }\n\n if (title) {\n ret.push(\n <Heading key=\"title\" size=\"md\" className=\"mb-1\">\n {typeof title == 'function' ? localProps ? title(localProps) : \"\" : title}\n </Heading>\n );\n }\n\n if (subTitle) {\n ret.push(<Text key=\"subTitle\">\n {typeof subTitle == 'function' ? localProps ? subTitle(localProps) : \"\" : subTitle}\n </Text>);\n }\n\n if (CardChildren) {\n ret.push(React.isValidElement(CardChildren)\n ? React.cloneElement(CardChildren, { key: 'CardChildren' })\n : <React.Fragment key=\"CardChildren\">{CardChildren}</React.Fragment>);\n }\n\n if (footer) {\n ret.push(React.isValidElement(footer)\n ? React.cloneElement(footer, { key: 'footer' })\n : <React.Fragment key=\"footer\">\n {typeof footer == 'function' ? localProps ? footer(localProps) : \"\" : footer}\n </React.Fragment>);\n }\n return <>{ret}</>;\n }, [header, title, subTitle, CardChildren]);\n\n\n const classes = useMemo(() => {\n const classes: string[] = [];\n classes.push('shadow-hard-1')\n\n if(className){\n classes.push(className)\n }\n\n return classes.join(\" \");\n }, [className]);\n\n const { entering, exiting, ...restNativeProps } = nativeProps;\n\n const cardElement = (\n <ResponsiveElement\n ref={ref}\n entering={entering}\n exiting={exiting}\n additionalStyles={{\n display: \"flex\",\n width:'auto'\n }}\n additionalClasses={classes}\n cssProps={{...themeStyle, ...(elementStyles.root || {}), ...cssProps}}\n nativeProps={restNativeProps}\n as={'Card'}\n children={children}\n />\n );\n\n if (onPress) {\n return (\n <Pressable onPress={onPress} accessibilityRole=\"button\">\n {cardElement}\n </Pressable>\n );\n }\n\n return cardElement;\n}\n\nexport default Card;\n"],"names":["classes"],"mappings":"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"}
|