UNPKG

analytica-frontend-lib

Version:

Repositório público dos componentes utilizados nas plataformas da Analytica Ensino

1 lines 4.72 kB
{"version":3,"sources":["../src/components/PeriodSelector/PeriodSelector.tsx","../src/components/PeriodSelector/types.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { Menu, MenuContent, MenuItem } from '../Menu/Menu';\nimport type { PeriodSelectorProps, PeriodTab } from './types';\nimport { PERIOD_OPTIONS } from './types';\n\n/**\n * PeriodSelector - Component for selecting time periods\n *\n * Provides a menu-based selector for common time periods (7 days, 1 month, etc.)\n * Uses the Menu component with breadcrumb variant for a clean tab-like appearance.\n *\n * @example\n * ```tsx\n * const [period, setPeriod] = useState('1_MONTH');\n *\n * <PeriodSelector\n * value={period}\n * onChange={setPeriod}\n * />\n * ```\n *\n * @example With excluded values\n * ```tsx\n * <PeriodSelector\n * value={period}\n * onChange={setPeriod}\n * excludeValues={['3_MONTHS']}\n * />\n * ```\n *\n * @example With custom options\n * ```tsx\n * <PeriodSelector\n * value={period}\n * onChange={setPeriod}\n * options={[\n * { value: '7_DAYS', label: '7 dias' },\n * { value: '30_DAYS', label: '30 dias' },\n * ]}\n * />\n * ```\n */\nexport function PeriodSelector({\n value,\n onChange,\n defaultValue = '1_MONTH',\n options = PERIOD_OPTIONS as readonly PeriodTab[],\n excludeValues = [],\n className,\n}: Readonly<PeriodSelectorProps>) {\n // Filter out excluded values\n const filteredOptions = useMemo((): readonly PeriodTab[] => {\n if (excludeValues.length === 0) {\n return options;\n }\n return options.filter(\n (opt: PeriodTab) => !excludeValues.includes(opt.value)\n );\n }, [options, excludeValues]);\n\n return (\n <Menu\n defaultValue={defaultValue}\n value={value}\n variant=\"breadcrumb\"\n className={`!px-0 ${className ?? ''}`}\n onValueChange={onChange}\n >\n <MenuContent className=\"!px-0\">\n {filteredOptions.map((tab: PeriodTab) => (\n <MenuItem\n key={tab.value}\n variant=\"menu2\"\n value={tab.value}\n className=\"w-full flex items-center justify-center\"\n >\n {tab.label}\n </MenuItem>\n ))}\n </MenuContent>\n </Menu>\n );\n}\n\nexport default PeriodSelector;\n","/**\n * Period enum for time-based filtering\n */\nexport enum Period {\n SEVEN_DAYS = '7_DAYS',\n ONE_MONTH = '1_MONTH',\n THREE_MONTHS = '3_MONTHS',\n SIX_MONTHS = '6_MONTHS',\n ONE_YEAR = '1_YEAR',\n}\n\n/**\n * Period tab configuration\n */\nexport interface PeriodTab {\n value: string;\n label: string;\n}\n\n/**\n * Default period tabs matching the design system\n */\nexport const PERIOD_OPTIONS = [\n { value: Period.SEVEN_DAYS, label: '7 dias' },\n { value: Period.ONE_MONTH, label: '1 mês' },\n { value: Period.THREE_MONTHS, label: '3 meses' },\n { value: Period.SIX_MONTHS, label: '6 meses' },\n { value: Period.ONE_YEAR, label: '1 ano' },\n] as const;\n\n/**\n * Period value type (derived from PERIOD_OPTIONS)\n */\nexport type PeriodValue = (typeof PERIOD_OPTIONS)[number]['value'];\n\n/**\n * Props for PeriodSelector component\n */\nexport interface PeriodSelectorProps {\n /** Currently selected period value */\n value: string;\n /** Callback when period changes */\n onChange: (value: string) => void;\n /** Default value (used for uncontrolled mode) */\n defaultValue?: string;\n /** Custom period options (defaults to PERIOD_OPTIONS) */\n options?: readonly PeriodTab[];\n /** Period values to exclude from the list */\n excludeValues?: string[];\n /** Additional className for the container */\n className?: string;\n}\n"],"mappings":";;;;;;;AAAA,SAAS,eAAe;;;ACGjB,IAAK,SAAL,kBAAKA,YAAL;AACL,EAAAA,QAAA,gBAAa;AACb,EAAAA,QAAA,eAAY;AACZ,EAAAA,QAAA,kBAAe;AACf,EAAAA,QAAA,gBAAa;AACb,EAAAA,QAAA,cAAW;AALD,SAAAA;AAAA,GAAA;AAmBL,IAAM,iBAAiB;AAAA,EAC5B,EAAE,OAAO,2BAAmB,OAAO,SAAS;AAAA,EAC5C,EAAE,OAAO,2BAAkB,OAAO,WAAQ;AAAA,EAC1C,EAAE,OAAO,+BAAqB,OAAO,UAAU;AAAA,EAC/C,EAAE,OAAO,6BAAmB,OAAO,UAAU;AAAA,EAC7C,EAAE,OAAO,yBAAiB,OAAO,QAAQ;AAC3C;;;AD0CU;AA5BH,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,UAAU;AAAA,EACV,gBAAgB,CAAC;AAAA,EACjB;AACF,GAAkC;AAEhC,QAAM,kBAAkB,QAAQ,MAA4B;AAC1D,QAAI,cAAc,WAAW,GAAG;AAC9B,aAAO;AAAA,IACT;AACA,WAAO,QAAQ;AAAA,MACb,CAAC,QAAmB,CAAC,cAAc,SAAS,IAAI,KAAK;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,SAAS,aAAa,CAAC;AAE3B,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,SAAQ;AAAA,MACR,WAAW,SAAS,aAAa,EAAE;AAAA,MACnC,eAAe;AAAA,MAEf,8BAAC,eAAY,WAAU,SACpB,0BAAgB,IAAI,CAAC,QACpB;AAAA,QAAC;AAAA;AAAA,UAEC,SAAQ;AAAA,UACR,OAAO,IAAI;AAAA,UACX,WAAU;AAAA,UAET,cAAI;AAAA;AAAA,QALA,IAAI;AAAA,MAMX,CACD,GACH;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,yBAAQ;","names":["Period"]}