UNPKG

@aegov/design-system-react

Version:

A design system for the Government of the United Arab Emirates. Extending the original design system released as @aegov/design-system, this is the package specefically created for the ReactJs enviornment.

120 lines (119 loc) 4.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _reactTabs = require("@radix-ui/react-tabs"); var _classVarianceAuthority = require("class-variance-authority"); var _zod = require("zod"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const tabsSchema = _zod.z.object({ variant: _zod.z.enum(['default', 'pills', 'compact']).default('default'), items: _zod.z.array(_zod.z.object({ value: _zod.z.string(), label: _zod.z.string(), content: _zod.z.any(), icon: _zod.z.any().optional() })), defaultValue: _zod.z.string().optional() }); const tabsVariants = (0, _classVarianceAuthority.cva)('w-full', { variants: { variant: { default: 'border-b-2 border-gray-200', pills: '', compact: 'border-b-2 border-gray-200' } }, defaultVariants: { variant: 'default' } }); const tabListVariants = (0, _classVarianceAuthority.cva)('flex gap-4 md:gap-6 lg:gap-7 xl:gap-8 -mb-px', { variants: { variant: { default: '', pills: '', compact: '' } } }); const tabTriggerVariants = (0, _classVarianceAuthority.cva)('items-center gap-3 font-medium rounded-t-lg border-b-[3px] border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400 focus-visible:ring-offset-0', { variants: { variant: { default: 'py-6 px-1 text-base hover:text-gray-950 hover:border-primary-500 data-[state=active]:text-primary-600 data-[state=active]:border-primary-500', pills: 'py-3 px-4 lg:px-6 text-base rounded-lg hover:bg-aeblack-50 data-[state=active]:bg-primary-100 data-[state=active]:text-primary-900', compact: 'py-4 px-1 text-sm hover:text-gray-950 hover:border-primary-500 data-[state=active]:text-primary-600 data-[state=active]:border-primary-500' } }, defaultVariants: { variant: 'default' } }); const tabContentVariants = (0, _classVarianceAuthority.cva)('p-4 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400 focus-visible:ring-offset-0', { variants: { variant: { default: 'border-t border-aeblack-100 border-t-2', pills: '', compact: 'border-t border-aeblack-100 border-t-2' } } }); const Tabs = ({ variant = 'default', items, defaultValue, className, ...props }) => { // Validate props try { tabsSchema.parse({ variant, items, defaultValue }); } catch (error) { console.error('Tabs validation error:', error); return null; } return /*#__PURE__*/_react.default.createElement(_reactTabs.Root, _extends({ defaultValue: defaultValue || items[0].value, className: tabsVariants({ variant, className }) }, props), /*#__PURE__*/_react.default.createElement(_reactTabs.List, { className: tabListVariants({ variant }) }, items.map(({ value, label, icon: Icon }) => /*#__PURE__*/_react.default.createElement(_reactTabs.Trigger, { key: value, value: value, className: tabTriggerVariants({ variant }) }, /*#__PURE__*/_react.default.createElement("div", { className: "flex items-center gap-2" }, Icon && /*#__PURE__*/_react.default.createElement(Icon, { className: "w-5 h-5" }), /*#__PURE__*/_react.default.createElement("span", { className: "whitespace-nowrap" }, label))))), items.map(({ value, content }) => /*#__PURE__*/_react.default.createElement(_reactTabs.Content, { key: value, value: value, className: tabContentVariants({ variant }) }, content))); }; var _default = exports.default = Tabs;