67 lines
2.5 KiB
JavaScript
67 lines
2.5 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
always: function() {
|
|
return always;
|
|
},
|
|
optional: function() {
|
|
return optional;
|
|
},
|
|
resolveShorthand: function() {
|
|
return resolveShorthand;
|
|
}
|
|
});
|
|
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
|
|
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
const _constants = require("./constants");
|
|
function always(value, options) {
|
|
const { defaultProps, elementType } = options;
|
|
const props = resolveShorthand(value);
|
|
/**
|
|
* Casting is required here as SlotComponentType is a function, not an object.
|
|
* Although SlotComponentType has a function signature, it is still just an object.
|
|
* This is required to make a slot callable (JSX compatible), this is the exact same approach
|
|
* that is used on `@types/react` components
|
|
*/ const propsWithMetadata = {
|
|
...defaultProps,
|
|
...props,
|
|
[_constants.SLOT_ELEMENT_TYPE_SYMBOL]: elementType
|
|
};
|
|
if (props && typeof props.children === 'function') {
|
|
propsWithMetadata[_constants.SLOT_RENDER_FUNCTION_SYMBOL] = props.children;
|
|
propsWithMetadata.children = defaultProps === null || defaultProps === void 0 ? void 0 : defaultProps.children;
|
|
}
|
|
return propsWithMetadata;
|
|
}
|
|
function optional(value, options) {
|
|
if (value === null || value === undefined && !options.renderByDefault) {
|
|
return undefined;
|
|
}
|
|
return always(value, options);
|
|
}
|
|
function resolveShorthand(value) {
|
|
if (typeof value === 'string' || typeof value === 'number' || Array.isArray(value) || // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
/*#__PURE__*/ _react.isValidElement(value)) {
|
|
return {
|
|
children: value
|
|
};
|
|
}
|
|
if (value && typeof value !== 'object' && process.env.NODE_ENV !== 'production') {
|
|
// TODO: would be nice to have a link to slot documentation in this error message
|
|
// eslint-disable-next-line no-console
|
|
console.error(`@fluentui/react-utilities [slot.${resolveShorthand.name}]:
|
|
A slot got an invalid value "${value}" (${typeof value}).
|
|
A valid value for a slot is a slot shorthand or slot properties object.
|
|
Slot shorthands can be strings, numbers, arrays or JSX elements`);
|
|
}
|
|
return value;
|
|
}
|