@jarllyng/nostromo 3.2.0 → 3.3.1

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.
Files changed (135) hide show
  1. package/dist/chunk-35I2BJC3.js +3 -0
  2. package/dist/chunk-35I2BJC3.js.map +1 -0
  3. package/dist/chunk-35RWQSO2.cjs +3 -0
  4. package/dist/chunk-35RWQSO2.cjs.map +1 -0
  5. package/dist/chunk-3QVQ2TNE.cjs +3 -0
  6. package/dist/chunk-3QVQ2TNE.cjs.map +1 -0
  7. package/dist/{chunk-ZC4HJSII.cjs → chunk-5Z3MYAVM.cjs} +2 -2
  8. package/dist/{chunk-ZC4HJSII.cjs.map → chunk-5Z3MYAVM.cjs.map} +1 -1
  9. package/dist/{chunk-ZQDFYSZB.cjs → chunk-AYEM2M4H.cjs} +2 -2
  10. package/dist/{chunk-ZQDFYSZB.cjs.map → chunk-AYEM2M4H.cjs.map} +1 -1
  11. package/dist/chunk-BL2TM4YT.js +3 -0
  12. package/dist/chunk-BL2TM4YT.js.map +1 -0
  13. package/dist/{chunk-BSUHBLZO.cjs → chunk-BZ5ZCZJX.cjs} +2 -2
  14. package/dist/{chunk-BSUHBLZO.cjs.map → chunk-BZ5ZCZJX.cjs.map} +1 -1
  15. package/dist/chunk-C7HZAQBX.cjs +3 -0
  16. package/dist/chunk-C7HZAQBX.cjs.map +1 -0
  17. package/dist/chunk-DNTPD3PJ.js +3 -0
  18. package/dist/chunk-DNTPD3PJ.js.map +1 -0
  19. package/dist/{chunk-TGPWW7FC.js → chunk-HRJXPCGF.js} +2 -2
  20. package/dist/{chunk-TGPWW7FC.js.map → chunk-HRJXPCGF.js.map} +1 -1
  21. package/dist/chunk-JCETHQ55.cjs +3 -0
  22. package/dist/chunk-JCETHQ55.cjs.map +1 -0
  23. package/dist/chunk-MY2KMTUS.js +3 -0
  24. package/dist/chunk-MY2KMTUS.js.map +1 -0
  25. package/dist/chunk-NBX6FKCA.cjs +3 -0
  26. package/dist/chunk-NBX6FKCA.cjs.map +1 -0
  27. package/dist/chunk-NC27D5Y3.cjs +3 -0
  28. package/dist/chunk-NC27D5Y3.cjs.map +1 -0
  29. package/dist/chunk-NPSIDFOF.cjs +3 -0
  30. package/dist/chunk-NPSIDFOF.cjs.map +1 -0
  31. package/dist/chunk-QKM5LPRW.js +3 -0
  32. package/dist/chunk-QKM5LPRW.js.map +1 -0
  33. package/dist/chunk-SVWQWRPZ.js +3 -0
  34. package/dist/chunk-SVWQWRPZ.js.map +1 -0
  35. package/dist/chunk-TCA5Z7FL.js +3 -0
  36. package/dist/chunk-TCA5Z7FL.js.map +1 -0
  37. package/dist/chunk-UIEGBT4T.js +3 -0
  38. package/dist/chunk-UIEGBT4T.js.map +1 -0
  39. package/dist/chunk-VNDL67OG.cjs +3 -0
  40. package/dist/chunk-VNDL67OG.cjs.map +1 -0
  41. package/dist/chunk-WK6LNC2E.cjs +3 -0
  42. package/dist/chunk-WK6LNC2E.cjs.map +1 -0
  43. package/dist/{chunk-M5IBD3KV.js → chunk-WO3KCAN6.js} +2 -2
  44. package/dist/{chunk-M5IBD3KV.js.map → chunk-WO3KCAN6.js.map} +1 -1
  45. package/dist/{chunk-7W456HZL.js → chunk-XJJJEWSU.js} +2 -2
  46. package/dist/{chunk-7W456HZL.js.map → chunk-XJJJEWSU.js.map} +1 -1
  47. package/dist/chunk-XLZJ6HBL.js +3 -0
  48. package/dist/chunk-XLZJ6HBL.js.map +1 -0
  49. package/dist/chunk-XRVHMGMD.js +3 -0
  50. package/dist/chunk-XRVHMGMD.js.map +1 -0
  51. package/dist/chunk-Z7WEJ5IQ.cjs +3 -0
  52. package/dist/chunk-Z7WEJ5IQ.cjs.map +1 -0
  53. package/dist/components/core/breadcrumb.cjs +1 -1
  54. package/dist/components/core/breadcrumb.d.cts +7 -1
  55. package/dist/components/core/breadcrumb.d.ts +7 -1
  56. package/dist/components/core/breadcrumb.js +1 -1
  57. package/dist/components/core/calendar.cjs +1 -1
  58. package/dist/components/core/calendar.js +1 -1
  59. package/dist/components/core/charts-lazy.cjs +1 -1
  60. package/dist/components/core/charts-lazy.js +1 -1
  61. package/dist/components/core/charts.cjs +1 -1
  62. package/dist/components/core/charts.js +1 -1
  63. package/dist/components/core/checkbox.cjs +1 -1
  64. package/dist/components/core/checkbox.js +1 -1
  65. package/dist/components/core/data-table.cjs +1 -1
  66. package/dist/components/core/data-table.js +1 -1
  67. package/dist/components/core/dialog.cjs +1 -1
  68. package/dist/components/core/dialog.d.cts +20 -2
  69. package/dist/components/core/dialog.d.ts +20 -2
  70. package/dist/components/core/dialog.js +1 -1
  71. package/dist/components/core/icon.cjs +1 -1
  72. package/dist/components/core/icon.d.cts +1 -1
  73. package/dist/components/core/icon.d.ts +1 -1
  74. package/dist/components/core/icon.js +1 -1
  75. package/dist/components/core/separator.cjs +1 -1
  76. package/dist/components/core/separator.js +1 -1
  77. package/dist/components/core/skeleton.cjs +1 -1
  78. package/dist/components/core/skeleton.js +1 -1
  79. package/dist/components/core/table.cjs +1 -1
  80. package/dist/components/core/table.d.cts +11 -1
  81. package/dist/components/core/table.d.ts +11 -1
  82. package/dist/components/core/table.js +1 -1
  83. package/dist/components/core/toast.cjs +1 -1
  84. package/dist/components/core/toast.js +1 -1
  85. package/dist/components/core/tooltip.cjs +1 -1
  86. package/dist/components/core/tooltip.d.cts +9 -1
  87. package/dist/components/core/tooltip.d.ts +9 -1
  88. package/dist/components/core/tooltip.js +1 -1
  89. package/dist/index.cjs +1 -1
  90. package/dist/index.cjs.map +1 -1
  91. package/dist/index.d.cts +3 -3
  92. package/dist/index.d.ts +3 -3
  93. package/dist/index.js +1 -1
  94. package/dist/index.js.map +1 -1
  95. package/package.json +8 -8
  96. package/dist/chunk-4PN7OGLX.cjs +0 -3
  97. package/dist/chunk-4PN7OGLX.cjs.map +0 -1
  98. package/dist/chunk-4TYVEXRA.cjs +0 -3
  99. package/dist/chunk-4TYVEXRA.cjs.map +0 -1
  100. package/dist/chunk-B2BWBKZA.cjs +0 -3
  101. package/dist/chunk-B2BWBKZA.cjs.map +0 -1
  102. package/dist/chunk-CVOSWGQZ.js +0 -3
  103. package/dist/chunk-CVOSWGQZ.js.map +0 -1
  104. package/dist/chunk-EGQ2Q37R.cjs +0 -3
  105. package/dist/chunk-EGQ2Q37R.cjs.map +0 -1
  106. package/dist/chunk-EIXD3Y4R.js +0 -3
  107. package/dist/chunk-EIXD3Y4R.js.map +0 -1
  108. package/dist/chunk-G5ZSOVJY.cjs +0 -3
  109. package/dist/chunk-G5ZSOVJY.cjs.map +0 -1
  110. package/dist/chunk-G6TR5RGR.js +0 -3
  111. package/dist/chunk-G6TR5RGR.js.map +0 -1
  112. package/dist/chunk-GUJB555L.js +0 -3
  113. package/dist/chunk-GUJB555L.js.map +0 -1
  114. package/dist/chunk-JZROH43C.js +0 -3
  115. package/dist/chunk-JZROH43C.js.map +0 -1
  116. package/dist/chunk-MRZOLUSF.js +0 -3
  117. package/dist/chunk-MRZOLUSF.js.map +0 -1
  118. package/dist/chunk-OZ3RIKZO.cjs +0 -3
  119. package/dist/chunk-OZ3RIKZO.cjs.map +0 -1
  120. package/dist/chunk-PEYPRWZP.js +0 -3
  121. package/dist/chunk-PEYPRWZP.js.map +0 -1
  122. package/dist/chunk-PVHTEE5T.cjs +0 -3
  123. package/dist/chunk-PVHTEE5T.cjs.map +0 -1
  124. package/dist/chunk-QF5CRDZI.js +0 -3
  125. package/dist/chunk-QF5CRDZI.js.map +0 -1
  126. package/dist/chunk-RPRISB7O.cjs +0 -3
  127. package/dist/chunk-RPRISB7O.cjs.map +0 -1
  128. package/dist/chunk-SD4IIQ2I.cjs +0 -3
  129. package/dist/chunk-SD4IIQ2I.cjs.map +0 -1
  130. package/dist/chunk-TJFZAMBB.js +0 -3
  131. package/dist/chunk-TJFZAMBB.js.map +0 -1
  132. package/dist/chunk-VXMDVKAD.js +0 -3
  133. package/dist/chunk-VXMDVKAD.js.map +0 -1
  134. package/dist/chunk-ZYP2PDSX.cjs +0 -3
  135. package/dist/chunk-ZYP2PDSX.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/core/data-table.tsx"],"names":["filterBarVariants","cva","DataTable","initialData","columns","searchable","searchPlaceholder","searchKeys","onSearch","controlledSearchTerm","onSearchTermChange","filterable","filters","onFilter","controlledColumnFilters","onColumnFiltersChange","defaultSortColumn","defaultSortDirection","controlledSortColumn","controlledSortDirection","onSortChange","defaultPageSize","showPagination","controlledCurrentPage","controlledPageSize","onPageChange","onPageSizeChange","totalItems","showSearch","showFilters","filterBarClassName","searchBarClassName","rowKey","emptyText","tableProps","isControlledSearch","isControlledFilters","isControlledSort","isControlledPagination","internalSearchTerm","setInternalSearchTerm","useState","searchTerm","setSearchTerm","useMemo","value","internalColumnFilters","setInternalColumnFilters","columnFilters","setColumnFilters","internalSortColumn","setInternalSortColumn","internalSortDirection","setInternalSortDirection","sortColumn","sortDirection","setSortColumn","column","setSortDirection","dir","internalCurrentPage","setInternalCurrentPage","internalPageSize","setInternalPageSize","currentPage","pageSize","setCurrentPage","page","setPageSize","size","searchFilteredData","term","keys","col","record","key","filterFilteredData","filter","filterValue","recordValue","sortedData","sorted","a","b","aValue","bValue","comparison","paginatedData","startIndex","endIndex","handleSearch","useCallback","handleFilterChange","newFilters","handleSort","direction","handlePageChange","newPageSize","React","cn","Input","e","option","Table","DataTableMemoized","memo"],"mappings":"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","file":"chunk-ZQDFYSZB.cjs","sourcesContent":["import React, { useState, useMemo, useCallback } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { memo } from \"../../lib/memo\";\nimport { Table, TableColumn, TableProps } from \"./table\";\nimport { Input } from \"./input\";\n\n// Filter types\nexport type FilterType = \"text\" | \"select\" | \"number\" | \"date\" | \"boolean\";\n\nexport interface ColumnFilter<T = Record<string, unknown>> {\n key: string;\n type: FilterType;\n options?: Array<{ label: string; value: string | number }>;\n placeholder?: string;\n filterFn?: (value: unknown, record: T) => boolean;\n}\n\nexport interface DataTableProps<T = Record<string, unknown>> extends Omit<\n TableProps<T>,\n \"data\" | \"onSort\" | \"sortColumn\" | \"sortDirection\"\n> {\n data: T[];\n columns: TableColumn<T>[];\n\n // Search\n searchable?: boolean;\n searchPlaceholder?: string;\n searchKeys?: Array<keyof T | string>;\n onSearch?: (searchTerm: string, filteredData: T[]) => void;\n\n // Controlled search (for server-side filtering)\n searchTerm?: string;\n onSearchTermChange?: (searchTerm: string) => void;\n\n // Filtering\n filterable?: boolean;\n filters?: ColumnFilter<T>[];\n onFilter?: (filters: Record<string, unknown>, filteredData: T[]) => void;\n\n // Controlled filters (for server-side filtering)\n columnFilters?: Record<string, unknown>;\n onColumnFiltersChange?: (filters: Record<string, unknown>) => void;\n\n // Sorting (enhanced)\n defaultSortColumn?: string;\n defaultSortDirection?: \"asc\" | \"desc\";\n\n // Controlled sorting (for server-side sorting)\n sortColumn?: string;\n sortDirection?: \"asc\" | \"desc\";\n onSortChange?: (column: string, direction: \"asc\" | \"desc\") => void;\n\n // Pagination (enhanced)\n defaultPageSize?: number;\n showPagination?: boolean;\n\n // Controlled pagination (for server-side pagination)\n currentPage?: number;\n pageSize?: number;\n onPageChange?: (page: number) => void;\n onPageSizeChange?: (size: number) => void;\n totalItems?: number; // Required for server-side pagination\n\n // UI\n showSearch?: boolean;\n showFilters?: boolean;\n filterBarClassName?: string;\n searchBarClassName?: string;\n}\n\n// Filter bar component\nconst filterBarVariants = cva(\n \"flex flex-wrap items-center gap-2 p-4 bg-muted border-b border-border\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n compact: \"p-2 bg-card\",\n minimal: \"p-2 bg-transparent border-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport function DataTable<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n data: initialData,\n columns,\n searchable = true,\n searchPlaceholder = \"Search...\",\n searchKeys,\n onSearch,\n searchTerm: controlledSearchTerm,\n onSearchTermChange,\n filterable = false,\n filters = [],\n onFilter,\n columnFilters: controlledColumnFilters,\n onColumnFiltersChange,\n defaultSortColumn,\n defaultSortDirection = \"asc\",\n sortColumn: controlledSortColumn,\n sortDirection: controlledSortDirection,\n onSortChange,\n defaultPageSize = 10,\n showPagination = true,\n currentPage: controlledCurrentPage,\n pageSize: controlledPageSize,\n onPageChange,\n onPageSizeChange,\n totalItems,\n showSearch = true,\n showFilters = true,\n filterBarClassName,\n searchBarClassName,\n rowKey = \"id\",\n emptyText = \"No data found\",\n ...tableProps\n}: DataTableProps<T>) {\n // Determine if component is in controlled mode\n const isControlledSearch = controlledSearchTerm !== undefined;\n const isControlledFilters = controlledColumnFilters !== undefined;\n const isControlledSort = controlledSortColumn !== undefined;\n const isControlledPagination = controlledCurrentPage !== undefined;\n\n // Search state (controlled or uncontrolled)\n const [internalSearchTerm, setInternalSearchTerm] = useState(\"\");\n const searchTerm = isControlledSearch\n ? controlledSearchTerm\n : internalSearchTerm;\n const setSearchTerm = useMemo(\n () =>\n isControlledSearch\n ? (value: string) => onSearchTermChange?.(value)\n : setInternalSearchTerm,\n [isControlledSearch, onSearchTermChange],\n );\n\n // Filter state (controlled or uncontrolled)\n const [internalColumnFilters, setInternalColumnFilters] = useState<\n Record<string, unknown>\n >({});\n const columnFilters = isControlledFilters\n ? controlledColumnFilters\n : internalColumnFilters;\n const setColumnFilters = useMemo(\n () =>\n isControlledFilters\n ? (filters: Record<string, unknown>) => onColumnFiltersChange?.(filters)\n : setInternalColumnFilters,\n [isControlledFilters, onColumnFiltersChange],\n );\n\n // Sort state (controlled or uncontrolled)\n const [internalSortColumn, setInternalSortColumn] = useState<\n string | undefined\n >(defaultSortColumn);\n const [internalSortDirection, setInternalSortDirection] = useState<\n \"asc\" | \"desc\"\n >(defaultSortDirection);\n const sortColumn = isControlledSort\n ? controlledSortColumn\n : internalSortColumn;\n const sortDirection = isControlledSort\n ? controlledSortDirection\n : internalSortDirection;\n const setSortColumn = useMemo(\n () =>\n isControlledSort\n ? (column: string | undefined) => {\n if (column && onSortChange && sortDirection) {\n onSortChange(column, sortDirection);\n }\n }\n : setInternalSortColumn,\n [isControlledSort, onSortChange, sortDirection],\n );\n const setSortDirection = useMemo(\n () =>\n isControlledSort\n ? (dir: \"asc\" | \"desc\") => {\n if (sortColumn && onSortChange) {\n onSortChange(sortColumn, dir);\n }\n }\n : setInternalSortDirection,\n [isControlledSort, onSortChange, sortColumn],\n );\n\n // Pagination state (controlled or uncontrolled)\n const [internalCurrentPage, setInternalCurrentPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);\n const currentPage = isControlledPagination\n ? controlledCurrentPage\n : internalCurrentPage;\n const pageSize =\n controlledPageSize !== undefined ? controlledPageSize : internalPageSize;\n const setCurrentPage = useMemo(\n () =>\n isControlledPagination\n ? (page: number) => onPageChange?.(page)\n : setInternalCurrentPage,\n [isControlledPagination, onPageChange],\n );\n const setPageSize = useMemo(\n () =>\n onPageSizeChange\n ? (size: number) => onPageSizeChange(size)\n : setInternalPageSize,\n [onPageSizeChange],\n );\n\n // Apply search\n const searchFilteredData = useMemo(() => {\n if (!searchable || !searchTerm.trim()) {\n return initialData;\n }\n\n const term = searchTerm.toLowerCase();\n const keys =\n searchKeys ||\n columns.map((col) => col.dataIndex || col.key).filter(Boolean);\n\n return initialData.filter((record) => {\n return keys.some((key) => {\n const value =\n typeof key === \"string\"\n ? (record as Record<string, unknown>)[key]\n : record[key as keyof T];\n\n if (value === null || value === undefined) return false;\n\n return String(value).toLowerCase().includes(term);\n });\n });\n }, [initialData, searchTerm, searchable, searchKeys, columns]);\n\n // Apply column filters\n const filterFilteredData = useMemo(() => {\n if (\n !filterable ||\n filters.length === 0 ||\n Object.keys(columnFilters).length === 0\n ) {\n return searchFilteredData;\n }\n\n return searchFilteredData.filter((record) => {\n return filters.every((filter) => {\n const filterValue = columnFilters[filter.key];\n\n // Skip if no filter value\n if (\n filterValue === undefined ||\n filterValue === null ||\n filterValue === \"\"\n ) {\n return true;\n }\n\n // Use custom filter function if provided\n if (filter.filterFn) {\n return filter.filterFn(filterValue, record);\n }\n\n // Default filtering logic\n const recordValue = (record as Record<string, unknown>)[filter.key];\n\n switch (filter.type) {\n case \"text\":\n return String(recordValue)\n .toLowerCase()\n .includes(String(filterValue).toLowerCase());\n case \"number\":\n return Number(recordValue) === Number(filterValue);\n case \"boolean\":\n return Boolean(recordValue) === Boolean(filterValue);\n case \"select\":\n return String(recordValue) === String(filterValue);\n default:\n return String(recordValue).includes(String(filterValue));\n }\n });\n });\n }, [searchFilteredData, columnFilters, filterable, filters]);\n\n // Apply sorting\n const sortedData = useMemo(() => {\n if (!sortColumn) {\n return filterFilteredData;\n }\n\n const sorted = [...filterFilteredData];\n const column = columns.find((col) => col.key === sortColumn);\n\n if (!column || !column.sortable) {\n return sorted;\n }\n\n sorted.sort((a, b) => {\n const aValue = column.dataIndex\n ? a[column.dataIndex]\n : (a as Record<string, unknown>)[column.key];\n const bValue = column.dataIndex\n ? b[column.dataIndex]\n : (b as Record<string, unknown>)[column.key];\n\n // Handle null/undefined\n if (aValue === null || aValue === undefined) return 1;\n if (bValue === null || bValue === undefined) return -1;\n\n // Compare values\n let comparison = 0;\n if (typeof aValue === \"number\" && typeof bValue === \"number\") {\n comparison = aValue - bValue;\n } else {\n comparison = String(aValue).localeCompare(String(bValue));\n }\n\n return sortDirection === \"asc\" ? comparison : -comparison;\n });\n\n return sorted;\n }, [filterFilteredData, sortColumn, sortDirection, columns]);\n\n // Apply pagination\n // In controlled mode with server-side pagination, use provided data directly\n // In uncontrolled mode, slice the data client-side\n const paginatedData = useMemo(() => {\n if (!showPagination) {\n return sortedData;\n }\n\n // If in controlled pagination mode with totalItems, assume data is already paginated\n if (isControlledPagination && totalItems !== undefined) {\n return sortedData; // Data is already paginated server-side\n }\n\n // Client-side pagination\n const startIndex = (currentPage - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n\n return sortedData.slice(startIndex, endIndex);\n }, [\n sortedData,\n currentPage,\n pageSize,\n showPagination,\n isControlledPagination,\n totalItems,\n ]);\n\n // Calculate total pages for pagination display\n // Note: Currently not used but kept for future pagination UI enhancements\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _totalPages = useMemo(() => {\n if (!showPagination) return 1;\n if (isControlledPagination && totalItems !== undefined) {\n return Math.ceil(totalItems / pageSize);\n }\n return Math.ceil(sortedData.length / pageSize);\n }, [\n showPagination,\n isControlledPagination,\n totalItems,\n pageSize,\n sortedData.length,\n ]);\n\n // Callbacks\n const handleSearch = useCallback(\n (value: string) => {\n setSearchTerm(value);\n if (!isControlledPagination) {\n setCurrentPage(1); // Reset to first page on search (only in uncontrolled mode)\n }\n },\n [setSearchTerm, setCurrentPage, isControlledPagination],\n );\n\n const handleFilterChange = useCallback(\n (key: string, value: unknown) => {\n const newFilters = {\n ...columnFilters,\n [key]: value,\n };\n setColumnFilters(newFilters);\n if (!isControlledPagination) {\n setCurrentPage(1); // Reset to first page on filter (only in uncontrolled mode)\n }\n },\n [columnFilters, setColumnFilters, setCurrentPage, isControlledPagination],\n );\n\n const handleSort = useCallback(\n (column: TableColumn<T>, direction: \"asc\" | \"desc\") => {\n setSortColumn(column.key);\n setSortDirection(direction);\n },\n [setSortColumn, setSortDirection],\n );\n\n const handlePageChange = useCallback(\n (page: number, newPageSize: number) => {\n setCurrentPage(page);\n if (newPageSize !== pageSize) {\n setPageSize(newPageSize);\n setCurrentPage(1); // Reset to first page when page size changes\n }\n },\n [pageSize, setCurrentPage, setPageSize],\n );\n\n // Notify callbacks\n React.useEffect(() => {\n if (onSearch) {\n onSearch(searchTerm, searchFilteredData);\n }\n }, [searchTerm, searchFilteredData, onSearch]);\n\n React.useEffect(() => {\n if (onFilter) {\n onFilter(columnFilters, filterFilteredData);\n }\n }, [columnFilters, filterFilteredData, onFilter]);\n\n return (\n <div className=\"w-full\">\n {/* Search and Filter Bar */}\n {(showSearch || (showFilters && filterable && filters.length > 0)) && (\n <div className={cn(filterBarVariants(), filterBarClassName)}>\n {/* Search */}\n {showSearch && searchable && (\n <div className={cn(\"flex-1 min-w-[200px]\", searchBarClassName)}>\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchTerm}\n onChange={(e) => handleSearch(e.target.value)}\n className=\"w-full\"\n aria-label=\"Search table\"\n />\n </div>\n )}\n\n {/* Column Filters */}\n {showFilters && filterable && filters.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {filters.map((filter) => {\n const filterValue = columnFilters[filter.key];\n\n if (filter.type === \"select\" && filter.options) {\n return (\n <select\n key={filter.key}\n value={String(filterValue || \"\")}\n onChange={(e) =>\n handleFilterChange(\n filter.key,\n e.target.value || undefined,\n )\n }\n className=\"rounded-md border border-input px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring focus:border-primary\"\n aria-label={`Filter by ${filter.key}`}\n >\n <option value=\"\">All {filter.key}</option>\n {filter.options.map((option) => (\n <option key={option.value} value={String(option.value)}>\n {option.label}\n </option>\n ))}\n </select>\n );\n }\n\n return (\n <Input\n key={filter.key}\n type={filter.type === \"number\" ? \"number\" : \"text\"}\n placeholder={\n filter.placeholder || `Filter ${filter.key}...`\n }\n value={String(filterValue || \"\")}\n onChange={(e) =>\n handleFilterChange(\n filter.key,\n filter.type === \"number\"\n ? Number(e.target.value)\n : e.target.value,\n )\n }\n className=\"min-w-[150px]\"\n aria-label={`Filter by ${filter.key}`}\n />\n );\n })}\n\n {/* Clear Filters */}\n {Object.keys(columnFilters).length > 0 && (\n <button\n type=\"button\"\n onClick={() => setColumnFilters({})}\n className=\"px-3 py-2 text-sm text-muted-foreground hover:text-foreground underline\"\n aria-label=\"Clear all filters\"\n >\n Clear filters\n </button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Table */}\n <Table\n {...tableProps}\n data={paginatedData}\n columns={columns}\n rowKey={rowKey}\n emptyText={emptyText}\n {...(sortColumn && {\n sortColumn,\n sortDirection,\n })}\n onSort={handleSort}\n {...(showPagination && {\n pagination: {\n current: currentPage,\n pageSize: pageSize,\n total:\n isControlledPagination && totalItems !== undefined\n ? totalItems\n : sortedData.length,\n onChange: handlePageChange,\n showSizeChanger: true,\n },\n })}\n />\n\n {/* Results Summary */}\n {showPagination &&\n (isControlledPagination && totalItems !== undefined\n ? totalItems > 0\n : sortedData.length > 0) && (\n <div className=\"mt-2 px-4 py-2 text-sm text-muted-foreground\">\n {isControlledPagination && totalItems !== undefined ? (\n <>\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\n {Math.min(currentPage * pageSize, totalItems)} of {totalItems}{\" \"}\n results\n {searchTerm && \" (filtered)\"}\n </>\n ) : (\n <>\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\n {Math.min(currentPage * pageSize, sortedData.length)} of{\" \"}\n {sortedData.length} results\n {searchTerm && ` (filtered from ${initialData.length} total)`}\n </>\n )}\n </div>\n )}\n </div>\n );\n}\n\nDataTable.displayName = \"DataTable\";\n\n// Memoize DataTable for performance optimization\n// DataTable is a complex component with filtering, sorting, and pagination\nexport const DataTableMemoized = memo(DataTable) as typeof DataTable;\n"]}
1
+ {"version":3,"sources":["../src/components/core/data-table.tsx"],"names":["filterBarVariants","cva","DataTable","initialData","columns","searchable","searchPlaceholder","searchKeys","onSearch","controlledSearchTerm","onSearchTermChange","filterable","filters","onFilter","controlledColumnFilters","onColumnFiltersChange","defaultSortColumn","defaultSortDirection","controlledSortColumn","controlledSortDirection","onSortChange","defaultPageSize","showPagination","controlledCurrentPage","controlledPageSize","onPageChange","onPageSizeChange","totalItems","showSearch","showFilters","filterBarClassName","searchBarClassName","rowKey","emptyText","tableProps","isControlledSearch","isControlledFilters","isControlledSort","isControlledPagination","internalSearchTerm","setInternalSearchTerm","useState","searchTerm","setSearchTerm","useMemo","value","internalColumnFilters","setInternalColumnFilters","columnFilters","setColumnFilters","internalSortColumn","setInternalSortColumn","internalSortDirection","setInternalSortDirection","sortColumn","sortDirection","setSortColumn","column","setSortDirection","dir","internalCurrentPage","setInternalCurrentPage","internalPageSize","setInternalPageSize","currentPage","pageSize","setCurrentPage","page","setPageSize","size","searchFilteredData","term","keys","col","record","key","filterFilteredData","filter","filterValue","recordValue","sortedData","sorted","a","b","aValue","bValue","comparison","paginatedData","startIndex","endIndex","handleSearch","useCallback","handleFilterChange","newFilters","handleSort","direction","handlePageChange","newPageSize","React","cn","Input","e","option","Table","DataTableMemoized","memo"],"mappings":"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","file":"chunk-AYEM2M4H.cjs","sourcesContent":["import React, { useState, useMemo, useCallback } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { memo } from \"../../lib/memo\";\nimport { Table, TableColumn, TableProps } from \"./table\";\nimport { Input } from \"./input\";\n\n// Filter types\nexport type FilterType = \"text\" | \"select\" | \"number\" | \"date\" | \"boolean\";\n\nexport interface ColumnFilter<T = Record<string, unknown>> {\n key: string;\n type: FilterType;\n options?: Array<{ label: string; value: string | number }>;\n placeholder?: string;\n filterFn?: (value: unknown, record: T) => boolean;\n}\n\nexport interface DataTableProps<T = Record<string, unknown>> extends Omit<\n TableProps<T>,\n \"data\" | \"onSort\" | \"sortColumn\" | \"sortDirection\"\n> {\n data: T[];\n columns: TableColumn<T>[];\n\n // Search\n searchable?: boolean;\n searchPlaceholder?: string;\n searchKeys?: Array<keyof T | string>;\n onSearch?: (searchTerm: string, filteredData: T[]) => void;\n\n // Controlled search (for server-side filtering)\n searchTerm?: string;\n onSearchTermChange?: (searchTerm: string) => void;\n\n // Filtering\n filterable?: boolean;\n filters?: ColumnFilter<T>[];\n onFilter?: (filters: Record<string, unknown>, filteredData: T[]) => void;\n\n // Controlled filters (for server-side filtering)\n columnFilters?: Record<string, unknown>;\n onColumnFiltersChange?: (filters: Record<string, unknown>) => void;\n\n // Sorting (enhanced)\n defaultSortColumn?: string;\n defaultSortDirection?: \"asc\" | \"desc\";\n\n // Controlled sorting (for server-side sorting)\n sortColumn?: string;\n sortDirection?: \"asc\" | \"desc\";\n onSortChange?: (column: string, direction: \"asc\" | \"desc\") => void;\n\n // Pagination (enhanced)\n defaultPageSize?: number;\n showPagination?: boolean;\n\n // Controlled pagination (for server-side pagination)\n currentPage?: number;\n pageSize?: number;\n onPageChange?: (page: number) => void;\n onPageSizeChange?: (size: number) => void;\n totalItems?: number; // Required for server-side pagination\n\n // UI\n showSearch?: boolean;\n showFilters?: boolean;\n filterBarClassName?: string;\n searchBarClassName?: string;\n}\n\n// Filter bar component\nconst filterBarVariants = cva(\n \"flex flex-wrap items-center gap-2 p-4 bg-muted border-b border-border\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n compact: \"p-2 bg-card\",\n minimal: \"p-2 bg-transparent border-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport function DataTable<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n data: initialData,\n columns,\n searchable = true,\n searchPlaceholder = \"Search...\",\n searchKeys,\n onSearch,\n searchTerm: controlledSearchTerm,\n onSearchTermChange,\n filterable = false,\n filters = [],\n onFilter,\n columnFilters: controlledColumnFilters,\n onColumnFiltersChange,\n defaultSortColumn,\n defaultSortDirection = \"asc\",\n sortColumn: controlledSortColumn,\n sortDirection: controlledSortDirection,\n onSortChange,\n defaultPageSize = 10,\n showPagination = true,\n currentPage: controlledCurrentPage,\n pageSize: controlledPageSize,\n onPageChange,\n onPageSizeChange,\n totalItems,\n showSearch = true,\n showFilters = true,\n filterBarClassName,\n searchBarClassName,\n rowKey = \"id\",\n emptyText = \"No data found\",\n ...tableProps\n}: DataTableProps<T>) {\n // Determine if component is in controlled mode\n const isControlledSearch = controlledSearchTerm !== undefined;\n const isControlledFilters = controlledColumnFilters !== undefined;\n const isControlledSort = controlledSortColumn !== undefined;\n const isControlledPagination = controlledCurrentPage !== undefined;\n\n // Search state (controlled or uncontrolled)\n const [internalSearchTerm, setInternalSearchTerm] = useState(\"\");\n const searchTerm = isControlledSearch\n ? controlledSearchTerm\n : internalSearchTerm;\n const setSearchTerm = useMemo(\n () =>\n isControlledSearch\n ? (value: string) => onSearchTermChange?.(value)\n : setInternalSearchTerm,\n [isControlledSearch, onSearchTermChange],\n );\n\n // Filter state (controlled or uncontrolled)\n const [internalColumnFilters, setInternalColumnFilters] = useState<\n Record<string, unknown>\n >({});\n const columnFilters = isControlledFilters\n ? controlledColumnFilters\n : internalColumnFilters;\n const setColumnFilters = useMemo(\n () =>\n isControlledFilters\n ? (filters: Record<string, unknown>) => onColumnFiltersChange?.(filters)\n : setInternalColumnFilters,\n [isControlledFilters, onColumnFiltersChange],\n );\n\n // Sort state (controlled or uncontrolled)\n const [internalSortColumn, setInternalSortColumn] = useState<\n string | undefined\n >(defaultSortColumn);\n const [internalSortDirection, setInternalSortDirection] = useState<\n \"asc\" | \"desc\"\n >(defaultSortDirection);\n const sortColumn = isControlledSort\n ? controlledSortColumn\n : internalSortColumn;\n const sortDirection = isControlledSort\n ? controlledSortDirection\n : internalSortDirection;\n const setSortColumn = useMemo(\n () =>\n isControlledSort\n ? (column: string | undefined) => {\n if (column && onSortChange && sortDirection) {\n onSortChange(column, sortDirection);\n }\n }\n : setInternalSortColumn,\n [isControlledSort, onSortChange, sortDirection],\n );\n const setSortDirection = useMemo(\n () =>\n isControlledSort\n ? (dir: \"asc\" | \"desc\") => {\n if (sortColumn && onSortChange) {\n onSortChange(sortColumn, dir);\n }\n }\n : setInternalSortDirection,\n [isControlledSort, onSortChange, sortColumn],\n );\n\n // Pagination state (controlled or uncontrolled)\n const [internalCurrentPage, setInternalCurrentPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);\n const currentPage = isControlledPagination\n ? controlledCurrentPage\n : internalCurrentPage;\n const pageSize =\n controlledPageSize !== undefined ? controlledPageSize : internalPageSize;\n const setCurrentPage = useMemo(\n () =>\n isControlledPagination\n ? (page: number) => onPageChange?.(page)\n : setInternalCurrentPage,\n [isControlledPagination, onPageChange],\n );\n const setPageSize = useMemo(\n () =>\n onPageSizeChange\n ? (size: number) => onPageSizeChange(size)\n : setInternalPageSize,\n [onPageSizeChange],\n );\n\n // Apply search\n const searchFilteredData = useMemo(() => {\n if (!searchable || !searchTerm.trim()) {\n return initialData;\n }\n\n const term = searchTerm.toLowerCase();\n const keys =\n searchKeys ||\n columns.map((col) => col.dataIndex || col.key).filter(Boolean);\n\n return initialData.filter((record) => {\n return keys.some((key) => {\n const value =\n typeof key === \"string\"\n ? (record as Record<string, unknown>)[key]\n : record[key as keyof T];\n\n if (value === null || value === undefined) return false;\n\n return String(value).toLowerCase().includes(term);\n });\n });\n }, [initialData, searchTerm, searchable, searchKeys, columns]);\n\n // Apply column filters\n const filterFilteredData = useMemo(() => {\n if (\n !filterable ||\n filters.length === 0 ||\n Object.keys(columnFilters).length === 0\n ) {\n return searchFilteredData;\n }\n\n return searchFilteredData.filter((record) => {\n return filters.every((filter) => {\n const filterValue = columnFilters[filter.key];\n\n // Skip if no filter value\n if (\n filterValue === undefined ||\n filterValue === null ||\n filterValue === \"\"\n ) {\n return true;\n }\n\n // Use custom filter function if provided\n if (filter.filterFn) {\n return filter.filterFn(filterValue, record);\n }\n\n // Default filtering logic\n const recordValue = (record as Record<string, unknown>)[filter.key];\n\n switch (filter.type) {\n case \"text\":\n return String(recordValue)\n .toLowerCase()\n .includes(String(filterValue).toLowerCase());\n case \"number\":\n return Number(recordValue) === Number(filterValue);\n case \"boolean\":\n return Boolean(recordValue) === Boolean(filterValue);\n case \"select\":\n return String(recordValue) === String(filterValue);\n default:\n return String(recordValue).includes(String(filterValue));\n }\n });\n });\n }, [searchFilteredData, columnFilters, filterable, filters]);\n\n // Apply sorting\n const sortedData = useMemo(() => {\n if (!sortColumn) {\n return filterFilteredData;\n }\n\n const sorted = [...filterFilteredData];\n const column = columns.find((col) => col.key === sortColumn);\n\n if (!column || !column.sortable) {\n return sorted;\n }\n\n sorted.sort((a, b) => {\n const aValue = column.dataIndex\n ? a[column.dataIndex]\n : (a as Record<string, unknown>)[column.key];\n const bValue = column.dataIndex\n ? b[column.dataIndex]\n : (b as Record<string, unknown>)[column.key];\n\n // Handle null/undefined\n if (aValue === null || aValue === undefined) return 1;\n if (bValue === null || bValue === undefined) return -1;\n\n // Compare values\n let comparison = 0;\n if (typeof aValue === \"number\" && typeof bValue === \"number\") {\n comparison = aValue - bValue;\n } else {\n comparison = String(aValue).localeCompare(String(bValue));\n }\n\n return sortDirection === \"asc\" ? comparison : -comparison;\n });\n\n return sorted;\n }, [filterFilteredData, sortColumn, sortDirection, columns]);\n\n // Apply pagination\n // In controlled mode with server-side pagination, use provided data directly\n // In uncontrolled mode, slice the data client-side\n const paginatedData = useMemo(() => {\n if (!showPagination) {\n return sortedData;\n }\n\n // If in controlled pagination mode with totalItems, assume data is already paginated\n if (isControlledPagination && totalItems !== undefined) {\n return sortedData; // Data is already paginated server-side\n }\n\n // Client-side pagination\n const startIndex = (currentPage - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n\n return sortedData.slice(startIndex, endIndex);\n }, [\n sortedData,\n currentPage,\n pageSize,\n showPagination,\n isControlledPagination,\n totalItems,\n ]);\n\n // Calculate total pages for pagination display\n // Note: Currently not used but kept for future pagination UI enhancements\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _totalPages = useMemo(() => {\n if (!showPagination) return 1;\n if (isControlledPagination && totalItems !== undefined) {\n return Math.ceil(totalItems / pageSize);\n }\n return Math.ceil(sortedData.length / pageSize);\n }, [\n showPagination,\n isControlledPagination,\n totalItems,\n pageSize,\n sortedData.length,\n ]);\n\n // Callbacks\n const handleSearch = useCallback(\n (value: string) => {\n setSearchTerm(value);\n if (!isControlledPagination) {\n setCurrentPage(1); // Reset to first page on search (only in uncontrolled mode)\n }\n },\n [setSearchTerm, setCurrentPage, isControlledPagination],\n );\n\n const handleFilterChange = useCallback(\n (key: string, value: unknown) => {\n const newFilters = {\n ...columnFilters,\n [key]: value,\n };\n setColumnFilters(newFilters);\n if (!isControlledPagination) {\n setCurrentPage(1); // Reset to first page on filter (only in uncontrolled mode)\n }\n },\n [columnFilters, setColumnFilters, setCurrentPage, isControlledPagination],\n );\n\n const handleSort = useCallback(\n (column: TableColumn<T>, direction: \"asc\" | \"desc\") => {\n setSortColumn(column.key);\n setSortDirection(direction);\n },\n [setSortColumn, setSortDirection],\n );\n\n const handlePageChange = useCallback(\n (page: number, newPageSize: number) => {\n setCurrentPage(page);\n if (newPageSize !== pageSize) {\n setPageSize(newPageSize);\n setCurrentPage(1); // Reset to first page when page size changes\n }\n },\n [pageSize, setCurrentPage, setPageSize],\n );\n\n // Notify callbacks\n React.useEffect(() => {\n if (onSearch) {\n onSearch(searchTerm, searchFilteredData);\n }\n }, [searchTerm, searchFilteredData, onSearch]);\n\n React.useEffect(() => {\n if (onFilter) {\n onFilter(columnFilters, filterFilteredData);\n }\n }, [columnFilters, filterFilteredData, onFilter]);\n\n return (\n <div className=\"w-full\">\n {/* Search and Filter Bar */}\n {(showSearch || (showFilters && filterable && filters.length > 0)) && (\n <div className={cn(filterBarVariants(), filterBarClassName)}>\n {/* Search */}\n {showSearch && searchable && (\n <div className={cn(\"flex-1 min-w-[200px]\", searchBarClassName)}>\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchTerm}\n onChange={(e) => handleSearch(e.target.value)}\n className=\"w-full\"\n aria-label=\"Search table\"\n />\n </div>\n )}\n\n {/* Column Filters */}\n {showFilters && filterable && filters.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {filters.map((filter) => {\n const filterValue = columnFilters[filter.key];\n\n if (filter.type === \"select\" && filter.options) {\n return (\n <select\n key={filter.key}\n value={String(filterValue || \"\")}\n onChange={(e) =>\n handleFilterChange(\n filter.key,\n e.target.value || undefined,\n )\n }\n className=\"rounded-md border border-input px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring focus:border-primary\"\n aria-label={`Filter by ${filter.key}`}\n >\n <option value=\"\">All {filter.key}</option>\n {filter.options.map((option) => (\n <option key={option.value} value={String(option.value)}>\n {option.label}\n </option>\n ))}\n </select>\n );\n }\n\n return (\n <Input\n key={filter.key}\n type={filter.type === \"number\" ? \"number\" : \"text\"}\n placeholder={\n filter.placeholder || `Filter ${filter.key}...`\n }\n value={String(filterValue || \"\")}\n onChange={(e) =>\n handleFilterChange(\n filter.key,\n filter.type === \"number\"\n ? Number(e.target.value)\n : e.target.value,\n )\n }\n className=\"min-w-[150px]\"\n aria-label={`Filter by ${filter.key}`}\n />\n );\n })}\n\n {/* Clear Filters */}\n {Object.keys(columnFilters).length > 0 && (\n <button\n type=\"button\"\n onClick={() => setColumnFilters({})}\n className=\"px-3 py-2 text-sm text-muted-foreground hover:text-foreground underline\"\n aria-label=\"Clear all filters\"\n >\n Clear filters\n </button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Table */}\n <Table\n {...tableProps}\n data={paginatedData}\n columns={columns}\n rowKey={rowKey}\n emptyText={emptyText}\n {...(sortColumn && {\n sortColumn,\n sortDirection,\n })}\n onSort={handleSort}\n {...(showPagination && {\n pagination: {\n current: currentPage,\n pageSize: pageSize,\n total:\n isControlledPagination && totalItems !== undefined\n ? totalItems\n : sortedData.length,\n onChange: handlePageChange,\n showSizeChanger: true,\n },\n })}\n />\n\n {/* Results Summary */}\n {showPagination &&\n (isControlledPagination && totalItems !== undefined\n ? totalItems > 0\n : sortedData.length > 0) && (\n <div className=\"mt-2 px-4 py-2 text-sm text-muted-foreground\">\n {isControlledPagination && totalItems !== undefined ? (\n <>\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\n {Math.min(currentPage * pageSize, totalItems)} of {totalItems}{\" \"}\n results\n {searchTerm && \" (filtered)\"}\n </>\n ) : (\n <>\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\n {Math.min(currentPage * pageSize, sortedData.length)} of{\" \"}\n {sortedData.length} results\n {searchTerm && ` (filtered from ${initialData.length} total)`}\n </>\n )}\n </div>\n )}\n </div>\n );\n}\n\nDataTable.displayName = \"DataTable\";\n\n// Memoize DataTable for performance optimization\n// DataTable is a complex component with filtering, sorting, and pagination\nexport const DataTableMemoized = memo(DataTable) as typeof DataTable;\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {a}from'./chunk-AC2JBXHQ.js';import r from'react';import {cva}from'class-variance-authority';import {PawPrint,Bird,Fish,Dog,Cat,Butterfly,Bug,Anchor,Umbrella,Snowflake,Fire,Lightning,Sparkle,Crown,Medal,Trophy,Flag,Compass,Bookmark,Scroll,Ghost,Skull,Pill,Syringe,TestTube,Flask,Atom,Rocket,Alien,MapPin,Key,Gift,PuzzlePiece,GameController,Moon,Star,Planet,Mountains,Leaf,Flower,Tree,Wheelchair,Palette,Terminal,Code,PaintBrush,Wrench,ChartPie,ChartBar,ChartLine,Buildings,Briefcase,Lightbulb,GraduationCap,BookOpen,Book,StopCircle,PauseCircle,PlayCircle,MusicNote,TennisBall,SoccerBall,Football,Basketball,Hamburger,Pizza,Coffee,Bicycle,Boat,Airplane,Train,Bus,Car,Activity,Heart,Money,CreditCard,ShoppingBag,ShoppingCart,YoutubeLogo,LinkedinLogo,InstagramLogo,FacebookLogo,TwitterLogo,GithubLogo,CloudLightning,CloudSnow,CloudRain,Cloud,Sun,HardDrive,Cpu,BatteryWarning,WifiX,WifiHigh,ShieldCheck,Shield,EyeSlash,Eye,LockOpen,Lock,Timer,Calendar,Clock,Question,Info,Warning,XCircle,CheckCircle,FileImage,FilePdf,FileText,FolderOpen,Folder,File,VideoCamera,Image,Camera,SpeakerX,SpeakerLow,SpeakerHigh,Stop,Pause,Play,BellSlash,Bell,ChatCircle,Phone,Envelope,Share,Upload,Download,Copy,PencilSimple,Trash,X,Check,Minus,Plus,ArrowDown,ArrowUp,ArrowRight,ArrowLeft,CaretDown,CaretUp,CaretRight,CaretLeft,List,MagnifyingGlass,Gear,User,House}from'phosphor-react';var i={house:House,home:House,user:User,settings:Gear,search:MagnifyingGlass,menu:List,x:X,"chevron-left":CaretLeft,"chevron-right":CaretRight,"chevron-up":CaretUp,"chevron-down":CaretDown,"arrow-left":ArrowLeft,"arrow-right":ArrowRight,"arrow-up":ArrowUp,"arrow-down":ArrowDown,plus:Plus,minus:Minus,check:Check,"x-icon":X,trash:Trash,edit:PencilSimple,copy:Copy,download:Download,upload:Upload,share:Share,heart:Heart,star:Star,bookmark:Bookmark,mail:Envelope,phone:Phone,"message-circle":ChatCircle,bell:Bell,"bell-slash":BellSlash,play:Play,pause:Pause,stop:Stop,"volume-high":SpeakerHigh,"volume-low":SpeakerLow,"volume-x":SpeakerX,camera:Camera,image:Image,video:VideoCamera,file:File,folder:Folder,"folder-open":FolderOpen,"file-text":FileText,"file-pdf":FilePdf,"file-image":FileImage,"check-circle":CheckCircle,"x-circle":XCircle,warning:Warning,info:Info,question:Question,clock:Clock,calendar:Calendar,timer:Timer,lock:Lock,"lock-open":LockOpen,eye:Eye,"eye-slash":EyeSlash,shield:Shield,"shield-check":ShieldCheck,wifi:WifiHigh,"wifi-slash":WifiX,"battery-warning":BatteryWarning,cpu:Cpu,"hard-drive":HardDrive,sun:Sun,moon:Moon,cloud:Cloud,"cloud-rain":CloudRain,"cloud-snow":CloudSnow,"cloud-lightning":CloudLightning,github:GithubLogo,twitter:TwitterLogo,facebook:FacebookLogo,instagram:InstagramLogo,linkedin:LinkedinLogo,youtube:YoutubeLogo,"shopping-cart":ShoppingCart,"shopping-bag":ShoppingBag,"credit-card":CreditCard,money:Money,"heart-icon":Heart,activity:Activity,car:Car,bus:Bus,train:Train,plane:Airplane,ship:Boat,bicycle:Bicycle,coffee:Coffee,pizza:Pizza,hamburger:Hamburger,basketball:Basketball,football:Football,soccer:SoccerBall,tennis:TennisBall,"music-note":MusicNote,"play-circle":PlayCircle,"pause-circle":PauseCircle,"stop-circle":StopCircle,book:Book,"book-open":BookOpen,"graduation-cap":GraduationCap,lightbulb:Lightbulb,briefcase:Briefcase,building:Buildings,"chart-line":ChartLine,"chart-bar":ChartBar,"chart-pie":ChartPie,wrench:Wrench,"paint-brush":PaintBrush,code:Code,terminal:Terminal,palette:Palette,accessibility:Wheelchair,tree:Tree,flower:Flower,leaf:Leaf,mountain:Mountains,rocket:Rocket,planet:Planet,"star-icon":Star,"moon-icon":Moon,"game-controller":GameController,puzzle:PuzzlePiece,gift:Gift,key:Key,"map-pin":MapPin,compass:Compass,flag:Flag,trophy:Trophy,medal:Medal,crown:Crown,sparkle:Sparkle,zap:Lightning,fire:Fire,snowflake:Snowflake,umbrella:Umbrella,anchor:Anchor,bug:Bug,butterfly:Butterfly,cat:Cat,dog:Dog,fish:Fish,bird:Bird,"paw-print":PawPrint,alien:Alien,spaceship:Rocket,atom:Atom,flask:Flask,"test-tube":TestTube,syringe:Syringe,pill:Pill,skull:Skull,ghost:Ghost,scroll:Scroll,"bookmark-icon":Bookmark,"compass-icon":Compass,"flag-icon":Flag,"trophy-icon":Trophy,"medal-icon":Medal,"crown-icon":Crown,"sparkle-icon":Sparkle,"zap-icon":Lightning,"fire-icon":Fire,"snowflake-icon":Snowflake,"umbrella-icon":Umbrella,"anchor-icon":Anchor,"bug-icon":Bug,"butterfly-icon":Butterfly,"cat-icon":Cat,"dog-icon":Dog,"fish-icon":Fish,"bird-icon":Bird,"paw-print-icon":PawPrint},La=cva("",{variants:{size:{xs:"w-3 h-3",sm:"w-4 h-4",md:"w-5 h-5",lg:"w-6 h-6",xl:"w-8 h-8","2xl":"w-10 h-10","3xl":"w-12 h-12"},weight:{thin:"",light:"",regular:"",bold:"",fill:"",duotone:""},color:{current:"text-current",primary:"text-primary",secondary:"text-secondary-foreground",success:"text-success",warning:"text-warning",error:"text-error",muted:"text-muted-foreground"}},defaultVariants:{size:"md",weight:"regular",color:"current"}}),Fa=r.forwardRef(({name:t,size:l,weight:e,color:c,className:s,...p},h)=>{let o=i[t];return o?r.createElement(o,{ref:h,weight:e,className:a(La({size:l,weight:e,color:c}),s),...p}):null});Fa.displayName="Icon";var Aa=Object.keys(i);export{Fa as a,Aa as b};//# sourceMappingURL=chunk-BL2TM4YT.js.map
3
+ //# sourceMappingURL=chunk-BL2TM4YT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/icon.tsx"],"names":["iconMap","House","User","Gear","MagnifyingGlass","List","X","CaretLeft","CaretRight","CaretUp","CaretDown","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Plus","Minus","Check","XIcon","Trash","PencilSimple","Copy","Download","Upload","Share","Heart","Star","Bookmark","Envelope","Phone","ChatCircle","Bell","BellSlash","Play","Pause","Stop","SpeakerHigh","SpeakerLow","SpeakerX","Camera","Image","VideoCamera","File","Folder","FolderOpen","FileText","FilePdf","FileImage","CheckCircle","XCircle","Warning","Info","Question","Clock","Calendar","Timer","Lock","LockOpen","Eye","EyeSlash","Shield","ShieldCheck","WifiHigh","WifiX","BatteryWarning","Cpu","HardDrive","Sun","Moon","Cloud","CloudRain","CloudSnow","CloudLightning","GithubLogo","TwitterLogo","FacebookLogo","InstagramLogo","LinkedinLogo","YoutubeLogo","ShoppingCart","ShoppingBag","CreditCard","Money","HeartIcon","Activity","Car","Bus","Train","Airplane","Boat","Bicycle","Coffee","Pizza","Hamburger","Basketball","Football","SoccerBall","TennisBall","MusicNote","PlayCircle","PauseCircle","StopCircle","Book","BookOpen","GraduationCap","Lightbulb","Briefcase","Buildings","ChartLine","ChartBar","ChartPie","Wrench","PaintBrush","Code","Terminal","Palette","Wheelchair","Tree","Flower","Leaf","Mountains","Rocket","Planet","StarIcon","MoonIcon","GameController","PuzzlePiece","Gift","Key","MapPin","Compass","Flag","Trophy","Medal","Crown","Sparkle","Lightning","Fire","Snowflake","Umbrella","Anchor","Bug","Butterfly","Cat","Dog","Fish","Bird","PawPrint","Alien","Spaceship","Atom","Flask","TestTube","Syringe","Pill","Skull","Ghost","Scroll","BookmarkIcon","CompassIcon","FlagIcon","TrophyIcon","MedalIcon","CrownIcon","SparkleIcon","ZapIcon","FireIcon","SnowflakeIcon","UmbrellaIcon","AnchorIcon","BugIcon","ButterflyIcon","CatIcon","DogIcon","FishIcon","BirdIcon","PawPrintIcon","iconVariants","cva","Icon","React","name","size","weight","color","className","props","ref","IconComponent","cn","iconNames"],"mappings":"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","file":"chunk-BL2TM4YT.js","sourcesContent":["import React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n// Import commonly used Phosphor icons\nimport {\n // Navigation\n House,\n User,\n Gear,\n MagnifyingGlass,\n List,\n X,\n CaretLeft,\n CaretRight,\n CaretUp,\n CaretDown,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n ArrowDown,\n\n // Actions\n Plus,\n Minus,\n Check,\n X as XIcon,\n Trash,\n PencilSimple,\n Copy,\n Download,\n Upload,\n Share,\n Heart,\n Star,\n Bookmark,\n\n // Communication\n Envelope,\n Phone,\n ChatCircle,\n Bell,\n BellSlash,\n\n // Media\n Play,\n Pause,\n Stop,\n SpeakerHigh,\n SpeakerLow,\n SpeakerX,\n Camera,\n Image,\n VideoCamera,\n\n // Files\n File,\n Folder,\n FolderOpen,\n FileText,\n FilePdf,\n FileImage,\n\n // Status\n CheckCircle,\n XCircle,\n Warning,\n Info,\n Question,\n\n // Time\n Clock,\n Calendar,\n Timer,\n\n // Security\n Lock,\n LockOpen,\n Eye,\n EyeSlash,\n Shield,\n ShieldCheck,\n\n // Technology\n WifiHigh,\n WifiX,\n BatteryWarning,\n Cpu,\n HardDrive,\n\n // Weather\n Sun,\n Moon,\n Cloud,\n CloudRain,\n CloudSnow,\n CloudLightning,\n\n // Social\n GithubLogo,\n TwitterLogo,\n FacebookLogo,\n InstagramLogo,\n LinkedinLogo,\n YoutubeLogo,\n\n // Shopping\n ShoppingCart,\n ShoppingBag,\n CreditCard,\n Money,\n\n // Health\n Heart as HeartIcon,\n Activity,\n\n // Transportation\n Car,\n Bus,\n Train,\n Airplane,\n Boat,\n Bicycle,\n\n // Food\n Coffee,\n Pizza,\n Hamburger,\n\n // Sports\n Basketball,\n Football,\n SoccerBall,\n TennisBall,\n\n // Music\n MusicNote,\n PlayCircle,\n PauseCircle,\n StopCircle,\n\n // Education\n Book,\n BookOpen,\n GraduationCap,\n Lightbulb,\n\n // Business\n Briefcase,\n Buildings,\n ChartLine,\n ChartBar,\n ChartPie,\n\n // Tools\n Wrench,\n PaintBrush,\n Code,\n Terminal,\n Palette,\n Wheelchair,\n\n // Nature\n Tree,\n Flower,\n Leaf,\n Mountains,\n\n // Space\n Rocket,\n Planet,\n Star as StarIcon,\n Moon as MoonIcon,\n\n // Gaming\n GameController,\n PuzzlePiece,\n\n // Miscellaneous\n Gift,\n Key,\n MapPin,\n Compass,\n Flag,\n Trophy,\n Medal,\n Crown,\n Sparkle,\n Lightning,\n Fire,\n Snowflake,\n Umbrella,\n Anchor,\n Bug,\n Butterfly,\n Cat,\n Dog,\n Fish,\n Bird,\n PawPrint,\n\n // Nostromo themed\n Alien,\n Rocket as Spaceship,\n Atom,\n Flask,\n TestTube,\n Syringe,\n Pill,\n Skull,\n Ghost,\n Scroll,\n Bookmark as BookmarkIcon,\n Compass as CompassIcon,\n Flag as FlagIcon,\n Trophy as TrophyIcon,\n Medal as MedalIcon,\n Crown as CrownIcon,\n Sparkle as SparkleIcon,\n Lightning as ZapIcon,\n Fire as FireIcon,\n Snowflake as SnowflakeIcon,\n Umbrella as UmbrellaIcon,\n Anchor as AnchorIcon,\n Bug as BugIcon,\n Butterfly as ButterflyIcon,\n Cat as CatIcon,\n Dog as DogIcon,\n Fish as FishIcon,\n Bird as BirdIcon,\n PawPrint as PawPrintIcon,\n} from \"phosphor-react\";\n\n// Create a mapping of icon names to components\nconst iconMap: Record<string, React.ElementType> = {\n // Navigation\n house: House,\n // Alias: \"home\" is what people reach for first, and the Icon docs page itself\n // shipped <Icon name=\"home\" /> against a map that only had \"house\".\n home: House,\n user: User,\n settings: Gear,\n search: MagnifyingGlass,\n menu: List,\n x: X,\n \"chevron-left\": CaretLeft,\n \"chevron-right\": CaretRight,\n \"chevron-up\": CaretUp,\n \"chevron-down\": CaretDown,\n \"arrow-left\": ArrowLeft,\n \"arrow-right\": ArrowRight,\n \"arrow-up\": ArrowUp,\n \"arrow-down\": ArrowDown,\n\n // Actions\n plus: Plus,\n minus: Minus,\n check: Check,\n \"x-icon\": XIcon,\n trash: Trash,\n edit: PencilSimple,\n copy: Copy,\n download: Download,\n upload: Upload,\n share: Share,\n heart: Heart,\n star: Star,\n bookmark: Bookmark,\n\n // Communication\n mail: Envelope,\n phone: Phone,\n \"message-circle\": ChatCircle,\n bell: Bell,\n \"bell-slash\": BellSlash,\n\n // Media\n play: Play,\n pause: Pause,\n stop: Stop,\n \"volume-high\": SpeakerHigh,\n \"volume-low\": SpeakerLow,\n \"volume-x\": SpeakerX,\n camera: Camera,\n image: Image,\n video: VideoCamera,\n\n // Files\n file: File,\n folder: Folder,\n \"folder-open\": FolderOpen,\n \"file-text\": FileText,\n \"file-pdf\": FilePdf,\n \"file-image\": FileImage,\n\n // Status\n \"check-circle\": CheckCircle,\n \"x-circle\": XCircle,\n warning: Warning,\n info: Info,\n question: Question,\n\n // Time\n clock: Clock,\n calendar: Calendar,\n timer: Timer,\n\n // Security\n lock: Lock,\n \"lock-open\": LockOpen,\n eye: Eye,\n \"eye-slash\": EyeSlash,\n shield: Shield,\n \"shield-check\": ShieldCheck,\n\n // Technology\n wifi: WifiHigh,\n \"wifi-slash\": WifiX,\n \"battery-warning\": BatteryWarning,\n cpu: Cpu,\n \"hard-drive\": HardDrive,\n\n // Weather\n sun: Sun,\n moon: Moon,\n cloud: Cloud,\n \"cloud-rain\": CloudRain,\n \"cloud-snow\": CloudSnow,\n \"cloud-lightning\": CloudLightning,\n\n // Social\n github: GithubLogo,\n twitter: TwitterLogo,\n facebook: FacebookLogo,\n instagram: InstagramLogo,\n linkedin: LinkedinLogo,\n youtube: YoutubeLogo,\n\n // Shopping\n \"shopping-cart\": ShoppingCart,\n \"shopping-bag\": ShoppingBag,\n \"credit-card\": CreditCard,\n money: Money,\n\n // Health\n \"heart-icon\": HeartIcon,\n activity: Activity,\n\n // Transportation\n car: Car,\n bus: Bus,\n train: Train,\n plane: Airplane,\n ship: Boat,\n bicycle: Bicycle,\n\n // Food\n coffee: Coffee,\n pizza: Pizza,\n hamburger: Hamburger,\n\n // Sports\n basketball: Basketball,\n football: Football,\n soccer: SoccerBall,\n tennis: TennisBall,\n\n // Music\n \"music-note\": MusicNote,\n \"play-circle\": PlayCircle,\n \"pause-circle\": PauseCircle,\n \"stop-circle\": StopCircle,\n\n // Education\n book: Book,\n \"book-open\": BookOpen,\n \"graduation-cap\": GraduationCap,\n lightbulb: Lightbulb,\n\n // Business\n briefcase: Briefcase,\n building: Buildings,\n \"chart-line\": ChartLine,\n \"chart-bar\": ChartBar,\n \"chart-pie\": ChartPie,\n\n // Tools\n wrench: Wrench,\n \"paint-brush\": PaintBrush,\n\n // Developer and design vocabulary the set was missing - the Features example\n // asked for code/accessibility/palette and got nothing back.\n code: Code,\n terminal: Terminal,\n palette: Palette,\n accessibility: Wheelchair,\n\n // Nature\n tree: Tree,\n flower: Flower,\n leaf: Leaf,\n mountain: Mountains,\n\n // Space\n rocket: Rocket,\n planet: Planet,\n \"star-icon\": StarIcon,\n \"moon-icon\": MoonIcon,\n\n // Gaming\n \"game-controller\": GameController,\n puzzle: PuzzlePiece,\n\n // Miscellaneous\n gift: Gift,\n key: Key,\n \"map-pin\": MapPin,\n compass: Compass,\n flag: Flag,\n trophy: Trophy,\n medal: Medal,\n crown: Crown,\n sparkle: Sparkle,\n zap: Lightning,\n fire: Fire,\n snowflake: Snowflake,\n umbrella: Umbrella,\n anchor: Anchor,\n bug: Bug,\n butterfly: Butterfly,\n cat: Cat,\n dog: Dog,\n fish: Fish,\n bird: Bird,\n \"paw-print\": PawPrint,\n\n // Nostromo themed\n alien: Alien,\n spaceship: Spaceship,\n atom: Atom,\n flask: Flask,\n \"test-tube\": TestTube,\n syringe: Syringe,\n pill: Pill,\n skull: Skull,\n ghost: Ghost,\n scroll: Scroll,\n \"bookmark-icon\": BookmarkIcon,\n \"compass-icon\": CompassIcon,\n \"flag-icon\": FlagIcon,\n \"trophy-icon\": TrophyIcon,\n \"medal-icon\": MedalIcon,\n \"crown-icon\": CrownIcon,\n \"sparkle-icon\": SparkleIcon,\n \"zap-icon\": ZapIcon,\n \"fire-icon\": FireIcon,\n \"snowflake-icon\": SnowflakeIcon,\n \"umbrella-icon\": UmbrellaIcon,\n \"anchor-icon\": AnchorIcon,\n \"bug-icon\": BugIcon,\n \"butterfly-icon\": ButterflyIcon,\n \"cat-icon\": CatIcon,\n \"dog-icon\": DogIcon,\n \"fish-icon\": FishIcon,\n \"bird-icon\": BirdIcon,\n \"paw-print-icon\": PawPrintIcon,\n} as const;\n\nexport type IconName = keyof typeof iconMap;\n\nconst iconVariants = cva(\"\", {\n variants: {\n size: {\n xs: \"w-3 h-3\",\n sm: \"w-4 h-4\",\n md: \"w-5 h-5\",\n lg: \"w-6 h-6\",\n xl: \"w-8 h-8\",\n \"2xl\": \"w-10 h-10\",\n \"3xl\": \"w-12 h-12\",\n },\n weight: {\n thin: \"\",\n light: \"\",\n regular: \"\",\n bold: \"\",\n fill: \"\",\n duotone: \"\",\n },\n color: {\n current: \"text-current\",\n primary: \"text-primary\",\n secondary: \"text-secondary-foreground\",\n success: \"text-success\",\n warning: \"text-warning\",\n error: \"text-error\",\n muted: \"text-muted-foreground\",\n },\n },\n defaultVariants: {\n size: \"md\",\n weight: \"regular\",\n color: \"current\",\n },\n});\n\nexport interface IconProps\n extends\n Omit<React.HTMLAttributes<SVGSVGElement>, \"color\">,\n VariantProps<typeof iconVariants> {\n name: IconName;\n className?: string;\n}\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ name, size, weight, color, className, ...props }, ref) => {\n const IconComponent = iconMap[name];\n\n if (!IconComponent) {\n console.warn(`Icon \"${name}\" not found in iconMap`);\n return null;\n }\n\n return (\n <IconComponent\n ref={ref}\n weight={\n weight as \"thin\" | \"light\" | \"regular\" | \"bold\" | \"fill\" | \"duotone\"\n }\n className={cn(iconVariants({ size, weight, color }), className)}\n {...props}\n />\n );\n },\n);\n\nIcon.displayName = \"Icon\";\n\n// Export icon names for TypeScript autocomplete\nexport const iconNames = Object.keys(iconMap) as IconName[];\n\n// Note: For additional icons, import directly from 'phosphor-react' to avoid bundling unused icons\n// Example: import { CustomIcon } from 'phosphor-react'\n"]}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- 'use strict';var chunkOZ3RIKZO_cjs=require('./chunk-OZ3RIKZO.cjs'),a=require('react');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var a__default=/*#__PURE__*/_interopDefault(a);var p=a__default.default.lazy(()=>import('./components/core/charts.cjs').then(t=>({default:t.Chart}))),s=({fallback:t=a__default.default.createElement(chunkOZ3RIKZO_cjs.b,{className:"h-64 w-full"}),...r})=>a__default.default.createElement(a.Suspense,{fallback:t},a__default.default.createElement(p,{...r}));s.displayName="LazyChart";exports.a=s;//# sourceMappingURL=chunk-BSUHBLZO.cjs.map
3
- //# sourceMappingURL=chunk-BSUHBLZO.cjs.map
2
+ 'use strict';var chunk3QVQ2TNE_cjs=require('./chunk-3QVQ2TNE.cjs'),a=require('react');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var a__default=/*#__PURE__*/_interopDefault(a);var p=a__default.default.lazy(()=>import('./components/core/charts.cjs').then(t=>({default:t.Chart}))),s=({fallback:t=a__default.default.createElement(chunk3QVQ2TNE_cjs.b,{className:"h-64 w-full"}),...r})=>a__default.default.createElement(a.Suspense,{fallback:t},a__default.default.createElement(p,{...r}));s.displayName="LazyChart";exports.a=s;//# sourceMappingURL=chunk-BZ5ZCZJX.cjs.map
3
+ //# sourceMappingURL=chunk-BZ5ZCZJX.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/core/charts-lazy.tsx"],"names":["ChartLazy","React","module","LazyChart","fallback","Skeleton","props","Suspense"],"mappings":"0MAwBMA,CAAAA,CAAYC,kBAAAA,CAAM,IAAA,CAAK,IAC3B,OAAO,8BAAU,EAAE,IAAA,CAAMC,CAAAA,GAAY,CACnC,OAAA,CAASA,CAAAA,CAAO,KAClB,EAAE,CACJ,CAAA,CAMaC,CAAAA,CAAsC,CAAC,CAClD,QAAA,CAAAC,EAAWH,kBAAAA,CAAA,aAAA,CAACI,mBAAAA,CAAA,CAAS,SAAA,CAAU,aAAA,CAAc,EAC7C,GAAGC,CACL,CAAA,GAEIL,kBAAAA,CAAA,aAAA,CAACM,UAAAA,CAAA,CAAS,QAAA,CAAUH,CAAAA,CAAAA,CAClBH,kBAAAA,CAAA,aAAA,CAACD,CAAAA,CAAA,CAAW,GAAGM,CAAAA,CAAO,CACxB,EAIJH,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-BSUHBLZO.cjs","sourcesContent":["import React, { Suspense } from \"react\";\nimport { Skeleton } from \"./skeleton\";\n\n/**\n * Lazy-loaded Chart component wrapper\n * Use this for better code splitting when Charts are not immediately needed\n *\n * @example\n * ```tsx\n * import { LazyChart } from '@jarllyng/nostromo/components/core/charts-lazy';\n *\n * function Dashboard() {\n * return (\n * <LazyChart\n * type=\"line\"\n * data={data}\n * dataKeys={['sales', 'revenue']}\n * />\n * );\n * }\n * ```\n */\n\n// Dynamic import for Chart component with recharts\nconst ChartLazy = React.lazy(() =>\n import(\"./charts\").then((module) => ({\n default: module.Chart,\n })),\n);\n\nexport interface LazyChartProps extends React.ComponentProps<typeof ChartLazy> {\n fallback?: React.ReactNode;\n}\n\nexport const LazyChart: React.FC<LazyChartProps> = ({\n fallback = <Skeleton className=\"h-64 w-full\" />,\n ...props\n}) => {\n return (\n <Suspense fallback={fallback}>\n <ChartLazy {...props} />\n </Suspense>\n );\n};\n\nLazyChart.displayName = \"LazyChart\";\n"]}
1
+ {"version":3,"sources":["../src/components/core/charts-lazy.tsx"],"names":["ChartLazy","React","module","LazyChart","fallback","Skeleton","props","Suspense"],"mappings":"0MAwBMA,CAAAA,CAAYC,kBAAAA,CAAM,IAAA,CAAK,IAC3B,OAAO,8BAAU,EAAE,IAAA,CAAMC,CAAAA,GAAY,CACnC,OAAA,CAASA,CAAAA,CAAO,KAClB,EAAE,CACJ,CAAA,CAMaC,CAAAA,CAAsC,CAAC,CAClD,QAAA,CAAAC,EAAWH,kBAAAA,CAAA,aAAA,CAACI,mBAAAA,CAAA,CAAS,SAAA,CAAU,aAAA,CAAc,EAC7C,GAAGC,CACL,CAAA,GAEIL,kBAAAA,CAAA,aAAA,CAACM,UAAAA,CAAA,CAAS,QAAA,CAAUH,CAAAA,CAAAA,CAClBH,kBAAAA,CAAA,aAAA,CAACD,CAAAA,CAAA,CAAW,GAAGM,CAAAA,CAAO,CACxB,EAIJH,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-BZ5ZCZJX.cjs","sourcesContent":["import React, { Suspense } from \"react\";\nimport { Skeleton } from \"./skeleton\";\n\n/**\n * Lazy-loaded Chart component wrapper\n * Use this for better code splitting when Charts are not immediately needed\n *\n * @example\n * ```tsx\n * import { LazyChart } from '@jarllyng/nostromo/components/core/charts-lazy';\n *\n * function Dashboard() {\n * return (\n * <LazyChart\n * type=\"line\"\n * data={data}\n * dataKeys={['sales', 'revenue']}\n * />\n * );\n * }\n * ```\n */\n\n// Dynamic import for Chart component with recharts\nconst ChartLazy = React.lazy(() =>\n import(\"./charts\").then((module) => ({\n default: module.Chart,\n })),\n);\n\nexport interface LazyChartProps extends React.ComponentProps<typeof ChartLazy> {\n fallback?: React.ReactNode;\n}\n\nexport const LazyChart: React.FC<LazyChartProps> = ({\n fallback = <Skeleton className=\"h-64 w-full\" />,\n ...props\n}) => {\n return (\n <Suspense fallback={fallback}>\n <ChartLazy {...props} />\n </Suspense>\n );\n};\n\nLazyChart.displayName = \"LazyChart\";\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ 'use strict';var chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),a=require('react'),classVarianceAuthority=require('class-variance-authority');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var a__namespace=/*#__PURE__*/_interopNamespace(a);var f=classVarianceAuthority.cva("shrink-0 bg-border",{variants:{orientation:{horizontal:"h-[1px] w-full",vertical:"w-[1px] self-stretch h-full"},variant:{default:"bg-border",muted:"bg-muted",subtle:"bg-muted/50"},size:{default:"",sm:"h-px",lg:"h-0.5"}},defaultVariants:{orientation:"horizontal",variant:"default",size:"default"}}),d=a__namespace.forwardRef(({className:o,orientation:t="horizontal",variant:i="default",size:n="default",decorative:r=true,...l},s)=>a__namespace.createElement("div",{ref:s,role:r?"none":"separator",...r?{}:{"aria-orientation":t||void 0},className:chunkITRGJNWL_cjs.a(f({orientation:t,variant:i,size:n}),o),...l}));d.displayName="Separator";exports.a=f;exports.b=d;//# sourceMappingURL=chunk-C7HZAQBX.cjs.map
3
+ //# sourceMappingURL=chunk-C7HZAQBX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/separator.tsx"],"names":["separatorVariants","cva","Separator","a","className","orientation","variant","size","decorative","props","ref","cn"],"mappings":"ufAIA,IAAMA,CAAAA,CAAoBC,0BAAAA,CAAI,oBAAA,CAAsB,CAClD,QAAA,CAAU,CACR,WAAA,CAAa,CACX,UAAA,CAAY,gBAAA,CAMZ,QAAA,CAAU,6BACZ,EACA,OAAA,CAAS,CACP,OAAA,CAAS,WAAA,CACT,KAAA,CAAO,UAAA,CACP,OAAQ,aACV,CAAA,CACA,IAAA,CAAM,CACJ,OAAA,CAAS,EAAA,CACT,GAAI,MAAA,CACJ,EAAA,CAAI,OACN,CACF,CAAA,CACA,eAAA,CAAiB,CACf,WAAA,CAAa,YAAA,CACb,OAAA,CAAS,SAAA,CACT,IAAA,CAAM,SACR,CACF,CAAC,CAAA,CAUKC,CAAAA,CAAkBC,YAAA,CAAA,UAAA,CACtB,CACE,CACE,UAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CAAc,YAAA,CACd,OAAA,CAAAC,CAAAA,CAAU,UACV,IAAA,CAAAC,CAAAA,CAAO,SAAA,CACP,UAAA,CAAAC,CAAAA,CAAa,IAAA,CACb,GAAGC,CACL,CAAA,CACAC,CAAAA,GAGEP,YAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKO,EACL,IAAA,CAAMF,CAAAA,CAAa,MAAA,CAAS,WAAA,CAC3B,GAAIA,CAAAA,CACD,EAAC,CACD,CAAE,kBAAA,CAAoBH,CAAAA,EAAe,MAAU,CAAA,CACnD,UAAWM,mBAAAA,CACTX,CAAAA,CAAkB,CAAE,WAAA,CAAAK,CAAAA,CAAa,OAAA,CAAAC,EAAS,IAAA,CAAAC,CAAK,CAAC,CAAA,CAChDH,CACF,CAAA,CACC,GAAGK,CAAAA,CACN,CAGN,EACAP,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-C7HZAQBX.cjs","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst separatorVariants = cva(\"shrink-0 bg-border\", {\n variants: {\n orientation: {\n horizontal: \"h-[1px] w-full\",\n // self-stretch, not just h-full: `height: 100%` against an auto-height\n // flex row resolves to nothing, and with the usual `items-center` the\n // item does not stretch either - so a vertical separator rendered 1px\n // wide and 0px tall, which looked like the prop did nothing at all.\n // Stretching fills the cross axis; h-full still covers non-flex parents.\n vertical: \"w-[1px] self-stretch h-full\",\n },\n variant: {\n default: \"bg-border\",\n muted: \"bg-muted\",\n subtle: \"bg-muted/50\",\n },\n size: {\n default: \"\",\n sm: \"h-px\",\n lg: \"h-0.5\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n variant: \"default\",\n size: \"default\",\n },\n});\n\nexport interface SeparatorProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"aria-orientation\">,\n VariantProps<typeof separatorVariants> {\n decorative?: boolean;\n \"aria-orientation\"?: \"horizontal\" | \"vertical\";\n}\n\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (\n {\n className,\n orientation = \"horizontal\",\n variant = \"default\",\n size = \"default\",\n decorative = true,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n role={decorative ? \"none\" : \"separator\"}\n {...(decorative\n ? {}\n : { \"aria-orientation\": orientation || undefined })}\n className={cn(\n separatorVariants({ orientation, variant, size }),\n className,\n )}\n {...props}\n />\n );\n },\n);\nSeparator.displayName = \"Separator\";\n\nexport { Separator, separatorVariants };\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {a}from'./chunk-AC2JBXHQ.js';import*as e from'react';import {cva}from'class-variance-authority';var v=cva("peer h-4 w-4 shrink-0 rounded-sm border border-input bg-background shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary transition-all duration-200",{variants:{variant:{default:"border-border hover:border-border data-[state=checked]:bg-primary data-[state=checked]:border-primary",error:"border-destructive focus-visible:ring-destructive data-[state=checked]:bg-destructive data-[state=checked]:border-destructive",success:"border-success-500 focus-visible:ring-success-500 data-[state=checked]:bg-success-500 data-[state=checked]:border-success-500"},size:{default:"h-4 w-4",sm:"h-3 w-3",lg:"h-5 w-5"}},defaultVariants:{variant:"default",size:"default"}}),k=e.forwardRef(({className:o,error:t,helperText:s,label:d,required:c,id:n,variant:b,size:l,...u},p)=>{let m=e.useId(),r=n||m,i=s?`${r}-helper`:void 0,f=t?`${r}-error`:void 0;return e.createElement("div",{className:"space-y-2"},e.createElement("div",{className:"flex items-center space-x-3"},e.createElement("input",{type:"checkbox",className:a(v({variant:t?"error":b||"default",size:l,className:o})),ref:p,id:r,"aria-describedby":a(i,f)||void 0,"aria-invalid":t,required:c,...u}),d&&e.createElement("label",{htmlFor:r,className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},d,c&&e.createElement("span",{className:"text-error-500 ml-1"},"*"))),s&&e.createElement("p",{id:i,className:a("text-sm text-muted-foreground",t&&"text-destructive")},s))});k.displayName="Checkbox";export{v as a,k as b};//# sourceMappingURL=chunk-DNTPD3PJ.js.map
3
+ //# sourceMappingURL=chunk-DNTPD3PJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/checkbox.tsx"],"names":["checkboxVariants","cva","Checkbox","className","error","helperText","label","required","id","variant","size","props","ref","generatedId","checkboxId","helperTextId","errorId","cn"],"mappings":"uGAIA,IAAMA,CAAAA,CAAmBC,GAAAA,CACvB,+WAAA,CACA,CACE,QAAA,CAAU,CACR,QAAS,CACP,OAAA,CACE,wGACF,KAAA,CACE,+HAAA,CACF,OAAA,CACE,+HACJ,EACA,IAAA,CAAM,CACJ,OAAA,CAAS,SAAA,CACT,GAAI,SAAA,CACJ,EAAA,CAAI,SACN,CACF,EACA,eAAA,CAAiB,CACf,QAAS,SAAA,CACT,IAAA,CAAM,SACR,CACF,CACF,CAAA,CA0BMC,CAAAA,CAAiB,aACrB,CACE,CACE,SAAA,CAAAC,CAAAA,CACA,MAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,EACA,QAAA,CAAAC,CAAAA,CACA,GAAAC,CAAAA,CACA,OAAA,CAAAC,EACA,IAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,EACAC,CAAAA,GACG,CACH,IAAMC,CAAAA,CAAoB,SAAM,CAC1BC,CAAAA,CAAaN,CAAAA,EAAMK,CAAAA,CACnBE,EAAeV,CAAAA,CAAa,CAAA,EAAGS,CAAU,CAAA,OAAA,CAAA,CAAY,MAAA,CACrDE,EAAUZ,CAAAA,CAAQ,CAAA,EAAGU,CAAU,CAAA,MAAA,CAAA,CAAW,OAKhD,OACE,CAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,aACb,CAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6BAAA,CAAA,CACb,gBAAC,OAAA,CAAA,CACC,IAAA,CAAK,WACL,SAAA,CAAWG,CAAAA,CACTjB,EAAiB,CAAE,OAAA,CARLI,CAAAA,CAAQ,OAAA,CAAUK,GAAW,SAAA,CAQE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAP,CAAU,CAAC,CAChE,CAAA,CACA,GAAA,CAAKS,EACL,EAAA,CAAIE,CAAAA,CACJ,mBAAkBG,CAAAA,CAAGF,CAAAA,CAAcC,CAAO,CAAA,EAAK,MAAA,CAC/C,cAAA,CAAcZ,CAAAA,CACd,SAAUG,CAAAA,CACT,GAAGI,CAAAA,CACN,CAAA,CACCL,GACC,CAAA,CAAA,aAAA,CAAC,OAAA,CAAA,CACC,OAAA,CAASQ,CAAAA,CACT,UAAU,4FAAA,CAAA,CAETR,CAAAA,CACAC,GAAY,CAAA,CAAA,aAAA,CAAC,MAAA,CAAA,CAAK,UAAU,qBAAA,CAAA,CAAsB,GAAC,CACtD,CAEJ,EACCF,CAAAA,EACC,CAAA,CAAA,aAAA,CAAC,KACC,EAAA,CAAIU,CAAAA,CACJ,UAAWE,CAAAA,CACT,+BAAA,CACAb,CAAAA,EAAS,kBACX,GAECC,CACH,CAEJ,CAEJ,CACF,EACAH,EAAS,WAAA,CAAc,UAAA","file":"chunk-DNTPD3PJ.js","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst checkboxVariants = cva(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-input bg-background shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary transition-all duration-200\",\n {\n variants: {\n variant: {\n default:\n \"border-border hover:border-border data-[state=checked]:bg-primary data-[state=checked]:border-primary\",\n error:\n \"border-destructive focus-visible:ring-destructive data-[state=checked]:bg-destructive data-[state=checked]:border-destructive\",\n success:\n \"border-success-500 focus-visible:ring-success-500 data-[state=checked]:bg-success-500 data-[state=checked]:border-success-500\",\n },\n size: {\n default: \"h-4 w-4\",\n sm: \"h-3 w-3\",\n lg: \"h-5 w-5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface CheckboxProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n VariantProps<typeof checkboxVariants> {\n /**\n * Whether the checkbox is in an error state\n * @default false\n */\n error?: boolean;\n /**\n * Helper text to display below the checkbox\n */\n helperText?: string;\n /**\n * Label text for the checkbox\n */\n label?: string;\n /**\n * Whether the checkbox is required\n * @default false\n */\n required?: boolean;\n}\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n error,\n helperText,\n label,\n required,\n id,\n variant,\n size,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const checkboxId = id || generatedId;\n const helperTextId = helperText ? `${checkboxId}-helper` : undefined;\n const errorId = error ? `${checkboxId}-error` : undefined;\n\n // Determine variant based on error state\n const checkboxVariant = error ? \"error\" : variant || \"default\";\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center space-x-3\">\n <input\n type=\"checkbox\"\n className={cn(\n checkboxVariants({ variant: checkboxVariant, size, className }),\n )}\n ref={ref}\n id={checkboxId}\n aria-describedby={cn(helperTextId, errorId) || undefined}\n aria-invalid={error}\n required={required}\n {...props}\n />\n {label && (\n <label\n htmlFor={checkboxId}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-error-500 ml-1\">*</span>}\n </label>\n )}\n </div>\n {helperText && (\n <p\n id={helperTextId}\n className={cn(\n \"text-sm text-muted-foreground\",\n error && \"text-destructive\",\n )}\n >\n {helperText}\n </p>\n )}\n </div>\n );\n },\n);\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox, checkboxVariants };\n"]}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import {b}from'./chunk-EIXD3Y4R.js';import a,{Suspense}from'react';var p=a.lazy(()=>import('./components/core/charts.js').then(t=>({default:t.Chart}))),s=({fallback:t=a.createElement(b,{className:"h-64 w-full"}),...r})=>a.createElement(Suspense,{fallback:t},a.createElement(p,{...r}));s.displayName="LazyChart";export{s as a};//# sourceMappingURL=chunk-TGPWW7FC.js.map
3
- //# sourceMappingURL=chunk-TGPWW7FC.js.map
2
+ import {b}from'./chunk-QKM5LPRW.js';import a,{Suspense}from'react';var p=a.lazy(()=>import('./components/core/charts.js').then(t=>({default:t.Chart}))),s=({fallback:t=a.createElement(b,{className:"h-64 w-full"}),...r})=>a.createElement(Suspense,{fallback:t},a.createElement(p,{...r}));s.displayName="LazyChart";export{s as a};//# sourceMappingURL=chunk-HRJXPCGF.js.map
3
+ //# sourceMappingURL=chunk-HRJXPCGF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/core/charts-lazy.tsx"],"names":["ChartLazy","React","module","LazyChart","fallback","Skeleton","props","Suspense"],"mappings":"uEAwBMA,CAAAA,CAAYC,CAAAA,CAAM,IAAA,CAAK,IAC3B,OAAO,6BAAU,EAAE,IAAA,CAAMC,CAAAA,GAAY,CACnC,OAAA,CAASA,CAAAA,CAAO,KAClB,EAAE,CACJ,CAAA,CAMaC,CAAAA,CAAsC,CAAC,CAClD,QAAA,CAAAC,EAAWH,CAAAA,CAAA,aAAA,CAACI,CAAAA,CAAA,CAAS,SAAA,CAAU,aAAA,CAAc,EAC7C,GAAGC,CACL,CAAA,GAEIL,CAAAA,CAAA,aAAA,CAACM,QAAAA,CAAA,CAAS,QAAA,CAAUH,CAAAA,CAAAA,CAClBH,CAAAA,CAAA,aAAA,CAACD,CAAAA,CAAA,CAAW,GAAGM,CAAAA,CAAO,CACxB,EAIJH,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-TGPWW7FC.js","sourcesContent":["import React, { Suspense } from \"react\";\nimport { Skeleton } from \"./skeleton\";\n\n/**\n * Lazy-loaded Chart component wrapper\n * Use this for better code splitting when Charts are not immediately needed\n *\n * @example\n * ```tsx\n * import { LazyChart } from '@jarllyng/nostromo/components/core/charts-lazy';\n *\n * function Dashboard() {\n * return (\n * <LazyChart\n * type=\"line\"\n * data={data}\n * dataKeys={['sales', 'revenue']}\n * />\n * );\n * }\n * ```\n */\n\n// Dynamic import for Chart component with recharts\nconst ChartLazy = React.lazy(() =>\n import(\"./charts\").then((module) => ({\n default: module.Chart,\n })),\n);\n\nexport interface LazyChartProps extends React.ComponentProps<typeof ChartLazy> {\n fallback?: React.ReactNode;\n}\n\nexport const LazyChart: React.FC<LazyChartProps> = ({\n fallback = <Skeleton className=\"h-64 w-full\" />,\n ...props\n}) => {\n return (\n <Suspense fallback={fallback}>\n <ChartLazy {...props} />\n </Suspense>\n );\n};\n\nLazyChart.displayName = \"LazyChart\";\n"]}
1
+ {"version":3,"sources":["../src/components/core/charts-lazy.tsx"],"names":["ChartLazy","React","module","LazyChart","fallback","Skeleton","props","Suspense"],"mappings":"uEAwBMA,CAAAA,CAAYC,CAAAA,CAAM,IAAA,CAAK,IAC3B,OAAO,6BAAU,EAAE,IAAA,CAAMC,CAAAA,GAAY,CACnC,OAAA,CAASA,CAAAA,CAAO,KAClB,EAAE,CACJ,CAAA,CAMaC,CAAAA,CAAsC,CAAC,CAClD,QAAA,CAAAC,EAAWH,CAAAA,CAAA,aAAA,CAACI,CAAAA,CAAA,CAAS,SAAA,CAAU,aAAA,CAAc,EAC7C,GAAGC,CACL,CAAA,GAEIL,CAAAA,CAAA,aAAA,CAACM,QAAAA,CAAA,CAAS,QAAA,CAAUH,CAAAA,CAAAA,CAClBH,CAAAA,CAAA,aAAA,CAACD,CAAAA,CAAA,CAAW,GAAGM,CAAAA,CAAO,CACxB,EAIJH,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-HRJXPCGF.js","sourcesContent":["import React, { Suspense } from \"react\";\nimport { Skeleton } from \"./skeleton\";\n\n/**\n * Lazy-loaded Chart component wrapper\n * Use this for better code splitting when Charts are not immediately needed\n *\n * @example\n * ```tsx\n * import { LazyChart } from '@jarllyng/nostromo/components/core/charts-lazy';\n *\n * function Dashboard() {\n * return (\n * <LazyChart\n * type=\"line\"\n * data={data}\n * dataKeys={['sales', 'revenue']}\n * />\n * );\n * }\n * ```\n */\n\n// Dynamic import for Chart component with recharts\nconst ChartLazy = React.lazy(() =>\n import(\"./charts\").then((module) => ({\n default: module.Chart,\n })),\n);\n\nexport interface LazyChartProps extends React.ComponentProps<typeof ChartLazy> {\n fallback?: React.ReactNode;\n}\n\nexport const LazyChart: React.FC<LazyChartProps> = ({\n fallback = <Skeleton className=\"h-64 w-full\" />,\n ...props\n}) => {\n return (\n <Suspense fallback={fallback}>\n <ChartLazy {...props} />\n </Suspense>\n );\n};\n\nLazyChart.displayName = \"LazyChart\";\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ 'use strict';var chunk5PVFLXPO_cjs=require('./chunk-5PVFLXPO.cjs'),chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),a=require('react'),v=require('@radix-ui/react-popover'),classVarianceAuthority=require('class-variance-authority'),dateFns=require('date-fns');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var a__default=/*#__PURE__*/_interopDefault(a);var v__namespace=/*#__PURE__*/_interopNamespace(v);var ye=classVarianceAuthority.cva("inline-block rounded-lg border bg-background shadow-lg",{variants:{variant:{default:"border-border bg-card",outline:"border-2 border-border",ghost:"border-transparent bg-transparent shadow-none"},size:{sm:"p-2",md:"p-3",lg:"p-4"}},defaultVariants:{variant:"default",size:"md"}}),we=classVarianceAuthority.cva("flex items-center justify-center rounded-md font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"hover:bg-muted text-foreground",selected:"bg-primary text-primary-foreground hover:bg-primary/90 font-semibold",range:"bg-primary/10 text-primary hover:bg-primary/20 font-medium",today:"border-2 border-primary text-foreground font-semibold",outside:"text-muted-foreground",disabled:"text-muted-foreground/50 cursor-not-allowed"},size:{sm:"h-7 w-7 text-xs",md:"h-9 w-9 text-sm",lg:"h-11 w-11 text-base"}},defaultVariants:{variant:"default",size:"md"}}),W=n=>dateFns.getDaysInMonth(n),xe=(n,o)=>{let s=dateFns.getDay(dateFns.startOfMonth(n));return o===1?s===0?6:s-1:s},h=(n,o)=>!n||!o?false:dateFns.isSameDay(n,o),Ce=(n,o,s)=>!o&&!s?false:o&&s?dateFns.isWithinInterval(dateFns.startOfDay(n),{start:dateFns.startOfDay(o),end:dateFns.endOfDay(s)}):o?!dateFns.isBefore(dateFns.startOfDay(n),dateFns.startOfDay(o)):s?!dateFns.isAfter(dateFns.startOfDay(n),dateFns.endOfDay(s)):false,_=(n,o,s,I,N)=>!!(o&&dateFns.isBefore(dateFns.startOfDay(n),dateFns.startOfDay(o))||s&&dateFns.isAfter(dateFns.startOfDay(n),dateFns.endOfDay(s))||I?.some(Y=>h(Y,n))||N?.includes(dateFns.getDay(n))),x=(n,o="en-US")=>n?dateFns.format(n,"MMM d, yyyy"):"",ke=(n,o,s="en-US")=>!n&&!o?"":n&&o?`${x(n,s)} - ${x(o,s)}`:n?x(n,s):o?x(o,s):"",Fe=(n,o="en-US")=>n.length===0?"":n.length===1?x(n[0],o):`${n.length} dates selected`,Ne=a__default.default.forwardRef(({mode:n="single",value:o,defaultValue:s,onChange:I,minDate:N,maxDate:Y,disabledDates:A,disabledDays:H,locale:y="en-US",placeholder:X,label:V,error:L,helperText:U,className:Z,inputClassName:R,calendarClassName:ee,variant:te,size:K,showOutsideDays:C=true,firstDayOfWeek:P=1,...ne},re)=>{let[k,F]=a.useState(false),[i,c]=a.useState(new Date),[p,D]=a.useState(null),ae=a.useRef(null),$=a.useRef(new Map),[oe,se]=a.useState(s),j=o!==void 0,l=j?o:oe;a__default.default.useLayoutEffect(()=>{if(k&&!p){let e=new Date;e.setHours(0,0,0,0),D(e);}},[k,p]);let w=e=>{j||se(e),I?.(e);},z=e=>{if(!_(e,N,Y,A,H)){if(n==="single")w(e),F(false);else if(n==="range"){let r=l;if(!r?.from||r.from&&r.to)w({from:e});else {let t=r.from,d=e;d<t?w({from:d,to:t}):w({from:t,to:d}),F(false);}}else if(n==="multiple"){let r=l||[],t=r.findIndex(d=>h(d,e));t>=0?w(r.filter((d,u)=>u!==t)):w([...r,e]);}}},ie=a.useMemo(()=>{if(!l)return "";if(n==="single")return x(l,y);if(n==="range"){let e=l;return ke(e.from,e.to,y)}else return Fe(l,y)},[l,n,y]),le=a.useMemo(()=>{let e=[],r=new Date;r.setHours(0,0,0,0);let t=xe(i,P),d=W(i);if(C&&t>0){let u=new Date(i.getFullYear(),i.getMonth()-1),g=W(u);for(let m=g-t+1;m<=g;m++){let f=new Date(u.getFullYear(),u.getMonth(),m);e.push({date:f,isCurrentMonth:false,isToday:h(f,r)});}}for(let u=1;u<=d;u++){let g=new Date(i.getFullYear(),i.getMonth(),u);e.push({date:g,isCurrentMonth:true,isToday:h(g,r)});}if(C){let u=42-e.length,g=new Date(i.getFullYear(),i.getMonth()+1);for(let m=1;m<=u;m++){let f=new Date(g.getFullYear(),g.getMonth(),m);e.push({date:f,isCurrentMonth:false,isToday:h(f,r)});}}return e},[i,C,P]),ue=()=>{c(new Date(i.getFullYear(),i.getMonth()-1,1));},de=()=>{c(new Date(i.getFullYear(),i.getMonth()+1,1));},fe=()=>{let e=new Date;c(e),D(e);},ge=(e,r)=>{if(e.key==="Enter"||e.key===" "){e.preventDefault(),z(r);return}if(e.key==="ArrowRight"){e.preventDefault();let t=new Date(r);t.setDate(t.getDate()+1),D(t),t.getMonth()!==i.getMonth()&&c(new Date(t.getFullYear(),t.getMonth(),1));return}if(e.key==="ArrowLeft"){e.preventDefault();let t=new Date(r);t.setDate(t.getDate()-1),D(t),t.getMonth()!==i.getMonth()&&c(new Date(t.getFullYear(),t.getMonth(),1));return}if(e.key==="ArrowDown"){e.preventDefault();let t=new Date(r);t.setDate(t.getDate()+7),D(t),t.getMonth()!==i.getMonth()&&c(new Date(t.getFullYear(),t.getMonth(),1));return}if(e.key==="ArrowUp"){e.preventDefault();let t=new Date(r);t.setDate(t.getDate()-7),D(t),t.getMonth()!==i.getMonth()&&c(new Date(t.getFullYear(),t.getMonth(),1));return}if(e.key==="Home"){e.preventDefault();let t=new Date(r.getFullYear(),r.getMonth(),1);D(t);return}if(e.key==="End"){e.preventDefault();let t=new Date(r.getFullYear(),r.getMonth()+1,0);D(t);return}if(e.key==="PageUp"){e.preventDefault();let t=new Date(r.getFullYear(),r.getMonth()-1,r.getDate());D(t),c(new Date(t.getFullYear(),t.getMonth(),1));return}if(e.key==="PageDown"){e.preventDefault();let t=new Date(r.getFullYear(),r.getMonth()+1,r.getDate());D(t),c(new Date(t.getFullYear(),t.getMonth(),1));return}if(e.key==="Escape"){e.preventDefault(),F(false);return}};a.useEffect(()=>{if(p&&k){let e=`${p.getFullYear()}-${p.getMonth()}-${p.getDate()}`,r=$.current.get(e);r&&r.focus();}},[p,k]);let ce=a.useMemo(()=>{let e=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];return P===1?[...e.slice(1),e[0]]:e},[P]),De=i.toLocaleDateString(y,{month:"long",year:"numeric"});return a__default.default.createElement("div",{ref:re,className:chunkITRGJNWL_cjs.a("w-full",Z),...ne},a__default.default.createElement(v__namespace.Root,{open:k,onOpenChange:F},a__default.default.createElement("div",{className:"space-y-2"},V&&a__default.default.createElement("label",{className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},V),a__default.default.createElement(v__namespace.Trigger,{asChild:true},a__default.default.createElement("button",{type:"button",className:chunkITRGJNWL_cjs.a("flex w-full rounded-md border bg-background px-3 py-2 text-sm ring-offset-background","placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2","disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200 text-left",L?"border-error-500 shadow-sm hover:border-error-600 focus-visible:ring-error-500/20 focus-visible:border-error-500":"border-border shadow-sm hover:border-primary focus-visible:ring-ring/20 focus-visible:border-primary","h-10",R),onClick:()=>F(true),"aria-label":V||"Open calendar","aria-invalid":L},ie||a__default.default.createElement("span",{className:"text-muted-foreground"},X||"Select date..."))),U&&a__default.default.createElement("p",{className:chunkITRGJNWL_cjs.a("text-sm text-muted-foreground",L&&"text-error-600")},U)),a__default.default.createElement(v__namespace.Portal,null,a__default.default.createElement(v__namespace.Content,{className:chunkITRGJNWL_cjs.a("z-50 w-auto rounded-lg border bg-popover p-4 shadow-lg","data-[state=open]:animate-in data-[state=closed]:animate-out","data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95","data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2","data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2"),sideOffset:5,align:"start"},a__default.default.createElement("div",{ref:ae,className:chunkITRGJNWL_cjs.a(ye({variant:te,size:K}),ee),role:"application","aria-label":"Calendar"},a__default.default.createElement("div",{className:"flex items-center justify-between mb-4"},a__default.default.createElement("div",{className:"flex items-center gap-2"},a__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",onClick:ue,"aria-label":"Previous month"},a__default.default.createElement("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},a__default.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"}))),a__default.default.createElement("h3",{className:"text-sm font-semibold text-popover-foreground","data-testid":"calendar-month-year"},De),a__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",onClick:de,"aria-label":"Next month"},a__default.default.createElement("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},a__default.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})))),a__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",onClick:fe,className:"text-xs"},"Today")),a__default.default.createElement("div",{className:"grid grid-cols-7 gap-1 mb-2"},ce.map(e=>a__default.default.createElement("div",{key:e,className:"text-center text-xs font-medium text-muted-foreground"},e))),a__default.default.createElement("div",{className:"grid grid-cols-7 gap-1"},le.map((e,r)=>{let t=n==="single"?h(e.date,l):n==="range"?Ce(e.date,l?.from,l?.to):l?.some(f=>h(f,e.date)),d=_(e.date,N,Y,A,H),u=n==="range"&&l?.from&&!l?.to&&e.date>=l.from,g=`${e.date.getFullYear()}-${e.date.getMonth()}-${e.date.getDate()}`,m=p&&h(e.date,p);return a__default.default.createElement("button",{key:`${e.date.getTime()}-${r}`,ref:f=>{f?$.current.set(g,f):$.current.delete(g);},type:"button",onClick:()=>{C&&!e.isCurrentMonth&&c(new Date(e.date.getFullYear(),e.date.getMonth(),1)),z(e.date);},onKeyDown:f=>ge(f,e.date),disabled:d||(C?false:!e.isCurrentMonth),className:chunkITRGJNWL_cjs.a(we({variant:t?"selected":u?"range":e.isToday?"today":e.isCurrentMonth?d?"disabled":"default":"outside",size:K}),!e.isCurrentMonth&&"opacity-50",m&&"ring-2 ring-brand-500 ring-offset-2 z-10"),"aria-label":e.date.toLocaleDateString(y,{weekday:"long",year:"numeric",month:"long",day:"numeric"}),"aria-selected":t,"aria-disabled":d,tabIndex:m?0:-1},e.date.getDate())})),n==="range"&&l?.from&&!l?.to&&a__default.default.createElement("div",{className:"mt-4 pt-4 border-t border-border"},a__default.default.createElement("p",{className:"text-xs text-muted-foreground text-center"},"Select end date")))))))});Ne.displayName="Calendar";exports.a=ye;exports.b=we;exports.c=Ne;//# sourceMappingURL=chunk-JCETHQ55.cjs.map
3
+ //# sourceMappingURL=chunk-JCETHQ55.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/calendar.tsx"],"names":["calendarVariants","cva","calendarDayVariants","getDaysInMonth","date","dateFnsGetDaysInMonth","getFirstDayOfMonth","firstDayOfWeek","firstDay","getDay","startOfMonth","isSameDay","date1","date2","dateFnsIsSameDay","isDateInRange","from","to","isWithinInterval","startOfDay","endOfDay","isBefore","isAfter","isDateDisabled","minDate","maxDate","disabledDates","disabledDays","d","formatDate","_locale","dateFnsFormat","formatDateRange","locale","formatMultipleDates","dates","Calendar","React","mode","value","defaultValue","onChange","placeholder","label","error","helperText","className","inputClassName","calendarClassName","variant","size","showOutsideDays","props","ref","open","setOpen","useState","currentMonth","setCurrentMonth","focusedDate","setFocusedDate","calendarRef","useRef","dayButtonRefs","internalValue","setInternalValue","isControlled","calendarValue","today","handleValueChange","newValue","handleDateClick","rangeValue","multipleValue","dateIndex","_","i","displayValue","useMemo","range","calendarDays","days","daysInMonth","prevMonth","daysInPrevMonth","remainingDays","nextMonth","goToPreviousMonth","goToNextMonth","goToToday","handleKeyDown","nextDate","prevDate","lastDay","useEffect","dateKey","button","dayNames","names","monthYearDisplay","cn","v","Button","day","index","isSelected","isDisabled","isInRange","isFocused","el","e"],"mappings":"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","file":"chunk-JCETHQ55.cjs","sourcesContent":["import React, { useState, useMemo, useRef, useEffect } from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n getDaysInMonth as dateFnsGetDaysInMonth,\n startOfMonth,\n getDay,\n isSameDay as dateFnsIsSameDay,\n isWithinInterval,\n isBefore,\n isAfter,\n format as dateFnsFormat,\n startOfDay,\n endOfDay,\n} from \"date-fns\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\n\n// Calendar variants\nconst calendarVariants = cva(\n \"inline-block rounded-lg border bg-background shadow-lg\",\n {\n variants: {\n variant: {\n default: \"border-border bg-card\",\n outline: \"border-2 border-border\",\n ghost: \"border-transparent bg-transparent shadow-none\",\n },\n size: {\n sm: \"p-2\",\n md: \"p-3\",\n lg: \"p-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\nconst calendarDayVariants = cva(\n \"flex items-center justify-center rounded-md font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"hover:bg-muted text-foreground\",\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary/90 font-semibold\",\n range: \"bg-primary/10 text-primary hover:bg-primary/20 font-medium\",\n today: \"border-2 border-primary text-foreground font-semibold\",\n outside: \"text-muted-foreground\",\n disabled: \"text-muted-foreground/50 cursor-not-allowed\",\n },\n size: {\n sm: \"h-7 w-7 text-xs\",\n md: \"h-9 w-9 text-sm\",\n lg: \"h-11 w-11 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\nexport type CalendarMode = \"single\" | \"range\" | \"multiple\";\n\nexport interface CalendarProps extends VariantProps<typeof calendarVariants> {\n mode?: CalendarMode;\n value?: Date | Date[] | { from?: Date; to?: Date };\n defaultValue?: Date | Date[] | { from?: Date; to?: Date };\n onChange?: (\n value: Date | Date[] | { from?: Date; to?: Date } | undefined,\n ) => void;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n disabledDays?: number[]; // 0 = Sunday, 1 = Monday, etc.\n locale?: string;\n placeholder?: string;\n label?: string;\n error?: boolean;\n helperText?: string;\n className?: string;\n inputClassName?: string;\n calendarClassName?: string;\n showOutsideDays?: boolean;\n firstDayOfWeek?: 0 | 1; // 0 = Sunday, 1 = Monday\n}\n\n// Helper functions using date-fns for robust date manipulation\nconst getDaysInMonth = (date: Date): number => {\n return dateFnsGetDaysInMonth(date);\n};\n\nconst getFirstDayOfMonth = (date: Date, firstDayOfWeek: 0 | 1): number => {\n // Use date-fns getDay for consistent day-of-week calculation\n const firstDay = getDay(startOfMonth(date));\n // Convert Sunday (0) to Monday-first (6) if needed\n // Sunday = 0, Monday = 1, ..., Saturday = 6\n // For Monday-first: Sunday becomes 6, Monday becomes 0, etc.\n return firstDayOfWeek === 1 ? (firstDay === 0 ? 6 : firstDay - 1) : firstDay;\n};\n\nconst isSameDay = (\n date1: Date | undefined,\n date2: Date | undefined,\n): boolean => {\n if (!date1 || !date2) return false;\n return dateFnsIsSameDay(date1, date2);\n};\n\nconst isDateInRange = (date: Date, from?: Date, to?: Date): boolean => {\n if (!from && !to) return false;\n if (from && to) {\n // Use date-fns isWithinInterval for proper date range checking\n return isWithinInterval(startOfDay(date), {\n start: startOfDay(from),\n end: endOfDay(to),\n });\n }\n if (from) return !isBefore(startOfDay(date), startOfDay(from));\n if (to) return !isAfter(startOfDay(date), endOfDay(to));\n return false;\n};\n\nconst isDateDisabled = (\n date: Date,\n minDate?: Date,\n maxDate?: Date,\n disabledDates?: Date[],\n disabledDays?: number[],\n): boolean => {\n if (minDate && isBefore(startOfDay(date), startOfDay(minDate))) return true;\n if (maxDate && isAfter(startOfDay(date), endOfDay(maxDate))) return true;\n if (disabledDates?.some((d) => isSameDay(d, date))) return true;\n if (disabledDays?.includes(getDay(date))) return true;\n return false;\n};\n\nconst formatDate = (\n date: Date | undefined,\n _locale: string = \"en-US\",\n): string => {\n if (!date) return \"\";\n // Use date-fns format for consistent formatting\n // Note: date-fns uses locale objects, but we'll use a simple format for now\n // For full locale support, import locale from 'date-fns/locale'\n // Locale parameter is kept for API compatibility but not yet used\n return dateFnsFormat(date, \"MMM d, yyyy\");\n};\n\nconst formatDateRange = (\n from?: Date,\n to?: Date,\n locale: string = \"en-US\",\n): string => {\n if (!from && !to) return \"\";\n if (from && to) {\n return `${formatDate(from, locale)} - ${formatDate(to, locale)}`;\n }\n if (from) return formatDate(from, locale);\n if (to) return formatDate(to, locale);\n return \"\";\n};\n\nconst formatMultipleDates = (\n dates: Date[],\n _locale: string = \"en-US\",\n): string => {\n if (dates.length === 0) return \"\";\n if (dates.length === 1) return formatDate(dates[0], _locale);\n return `${dates.length} dates selected`;\n};\n\nexport const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>(\n (\n {\n mode = \"single\",\n value,\n defaultValue,\n onChange,\n minDate,\n maxDate,\n disabledDates,\n disabledDays,\n locale = \"en-US\",\n placeholder,\n label,\n error,\n helperText,\n className,\n inputClassName,\n calendarClassName,\n variant,\n size,\n showOutsideDays = true,\n firstDayOfWeek = 1,\n ...props\n },\n ref,\n ) => {\n const [open, setOpen] = useState(false);\n const [currentMonth, setCurrentMonth] = useState(new Date());\n const [focusedDate, setFocusedDate] = useState<Date | null>(null);\n const calendarRef = useRef<HTMLDivElement>(null);\n const dayButtonRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n\n // Controlled vs uncontrolled\n const [internalValue, setInternalValue] = useState<\n Date | Date[] | { from?: Date; to?: Date } | undefined\n >(defaultValue);\n\n const isControlled = value !== undefined;\n const calendarValue = isControlled ? value : internalValue;\n\n // Set focused date when calendar opens\n React.useLayoutEffect(() => {\n if (open && !focusedDate) {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n setFocusedDate(today);\n }\n }, [open, focusedDate]);\n\n // Handle value changes\n const handleValueChange = (\n newValue: Date | Date[] | { from?: Date; to?: Date } | undefined,\n ) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n // Handle date selection\n const handleDateClick = (date: Date) => {\n if (isDateDisabled(date, minDate, maxDate, disabledDates, disabledDays)) {\n return;\n }\n\n if (mode === \"single\") {\n handleValueChange(date);\n setOpen(false);\n } else if (mode === \"range\") {\n const rangeValue = calendarValue as\n { from?: Date; to?: Date } | undefined;\n if (!rangeValue?.from || (rangeValue.from && rangeValue.to)) {\n // Start new range\n handleValueChange({ from: date });\n } else {\n // Complete range\n const from = rangeValue.from;\n const to = date;\n if (to < from) {\n handleValueChange({ from: to, to: from });\n } else {\n handleValueChange({ from, to });\n }\n setOpen(false);\n }\n } else if (mode === \"multiple\") {\n const multipleValue = (calendarValue as Date[]) || [];\n const dateIndex = multipleValue.findIndex((d) => isSameDay(d, date));\n if (dateIndex >= 0) {\n // Remove date\n handleValueChange(multipleValue.filter((_, i) => i !== dateIndex));\n } else {\n // Add date\n handleValueChange([...multipleValue, date]);\n }\n }\n };\n\n // Get display value\n const displayValue = useMemo(() => {\n if (!calendarValue) return \"\";\n\n if (mode === \"single\") {\n return formatDate(calendarValue as Date, locale);\n } else if (mode === \"range\") {\n const range = calendarValue as { from?: Date; to?: Date };\n return formatDateRange(range.from, range.to, locale);\n } else {\n return formatMultipleDates(calendarValue as Date[], locale);\n }\n }, [calendarValue, mode, locale]);\n\n // Generate calendar days\n const calendarDays = useMemo(() => {\n const days: Array<{\n date: Date;\n isCurrentMonth: boolean;\n isToday: boolean;\n }> = [];\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const firstDay = getFirstDayOfMonth(currentMonth, firstDayOfWeek);\n const daysInMonth = getDaysInMonth(currentMonth);\n\n // Previous month days\n if (showOutsideDays && firstDay > 0) {\n const prevMonth = new Date(\n currentMonth.getFullYear(),\n currentMonth.getMonth() - 1,\n );\n const daysInPrevMonth = getDaysInMonth(prevMonth);\n for (\n let i = daysInPrevMonth - firstDay + 1;\n i <= daysInPrevMonth;\n i++\n ) {\n const date = new Date(\n prevMonth.getFullYear(),\n prevMonth.getMonth(),\n i,\n );\n days.push({\n date,\n isCurrentMonth: false,\n isToday: isSameDay(date, today),\n });\n }\n }\n\n // Current month days\n for (let i = 1; i <= daysInMonth; i++) {\n const date = new Date(\n currentMonth.getFullYear(),\n currentMonth.getMonth(),\n i,\n );\n days.push({\n date,\n isCurrentMonth: true,\n isToday: isSameDay(date, today),\n });\n }\n\n // Next month days\n if (showOutsideDays) {\n const remainingDays = 42 - days.length; // 6 weeks * 7 days\n const nextMonth = new Date(\n currentMonth.getFullYear(),\n currentMonth.getMonth() + 1,\n );\n for (let i = 1; i <= remainingDays; i++) {\n const date = new Date(\n nextMonth.getFullYear(),\n nextMonth.getMonth(),\n i,\n );\n days.push({\n date,\n isCurrentMonth: false,\n isToday: isSameDay(date, today),\n });\n }\n }\n\n return days;\n }, [currentMonth, showOutsideDays, firstDayOfWeek]);\n\n // Navigate months\n const goToPreviousMonth = () => {\n setCurrentMonth(\n new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1, 1),\n );\n };\n\n const goToNextMonth = () => {\n setCurrentMonth(\n new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1, 1),\n );\n };\n\n const goToToday = () => {\n const today = new Date();\n setCurrentMonth(today);\n setFocusedDate(today);\n };\n\n // Keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent, date: Date) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleDateClick(date);\n return;\n }\n\n if (e.key === \"ArrowRight\") {\n e.preventDefault();\n const nextDate = new Date(date);\n nextDate.setDate(nextDate.getDate() + 1);\n setFocusedDate(nextDate);\n // Update month if needed\n if (nextDate.getMonth() !== currentMonth.getMonth()) {\n setCurrentMonth(\n new Date(nextDate.getFullYear(), nextDate.getMonth(), 1),\n );\n }\n return;\n }\n\n if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n const prevDate = new Date(date);\n prevDate.setDate(prevDate.getDate() - 1);\n setFocusedDate(prevDate);\n // Update month if needed\n if (prevDate.getMonth() !== currentMonth.getMonth()) {\n setCurrentMonth(\n new Date(prevDate.getFullYear(), prevDate.getMonth(), 1),\n );\n }\n return;\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const nextDate = new Date(date);\n nextDate.setDate(nextDate.getDate() + 7);\n setFocusedDate(nextDate);\n // Update month if needed\n if (nextDate.getMonth() !== currentMonth.getMonth()) {\n setCurrentMonth(\n new Date(nextDate.getFullYear(), nextDate.getMonth(), 1),\n );\n }\n return;\n }\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n const prevDate = new Date(date);\n prevDate.setDate(prevDate.getDate() - 7);\n setFocusedDate(prevDate);\n // Update month if needed\n if (prevDate.getMonth() !== currentMonth.getMonth()) {\n setCurrentMonth(\n new Date(prevDate.getFullYear(), prevDate.getMonth(), 1),\n );\n }\n return;\n }\n\n if (e.key === \"Home\") {\n e.preventDefault();\n const firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\n setFocusedDate(firstDay);\n return;\n }\n\n if (e.key === \"End\") {\n e.preventDefault();\n const lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n setFocusedDate(lastDay);\n return;\n }\n\n if (e.key === \"PageUp\") {\n e.preventDefault();\n const prevMonth = new Date(\n date.getFullYear(),\n date.getMonth() - 1,\n date.getDate(),\n );\n setFocusedDate(prevMonth);\n setCurrentMonth(\n new Date(prevMonth.getFullYear(), prevMonth.getMonth(), 1),\n );\n return;\n }\n\n if (e.key === \"PageDown\") {\n e.preventDefault();\n const nextMonth = new Date(\n date.getFullYear(),\n date.getMonth() + 1,\n date.getDate(),\n );\n setFocusedDate(nextMonth);\n setCurrentMonth(\n new Date(nextMonth.getFullYear(), nextMonth.getMonth(), 1),\n );\n return;\n }\n\n if (e.key === \"Escape\") {\n e.preventDefault();\n setOpen(false);\n return;\n }\n };\n\n // Focus management\n useEffect(() => {\n if (focusedDate && open) {\n const dateKey = `${focusedDate.getFullYear()}-${focusedDate.getMonth()}-${focusedDate.getDate()}`;\n const button = dayButtonRefs.current.get(dateKey);\n if (button) {\n button.focus();\n }\n }\n }, [focusedDate, open]);\n\n // Day names\n const dayNames = useMemo(() => {\n const names = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n if (firstDayOfWeek === 1) {\n return [...names.slice(1), names[0]];\n }\n return names;\n }, [firstDayOfWeek]);\n\n // Month/year display\n const monthYearDisplay = currentMonth.toLocaleDateString(locale, {\n month: \"long\",\n year: \"numeric\",\n });\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n <Popover.Root open={open} onOpenChange={setOpen}>\n <div className=\"space-y-2\">\n {label && (\n <label className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n </label>\n )}\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"flex w-full rounded-md border bg-background px-3 py-2 text-sm ring-offset-background\",\n \"placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200 text-left\",\n error\n ? \"border-error-500 shadow-sm hover:border-error-600 focus-visible:ring-error-500/20 focus-visible:border-error-500\"\n : \"border-border shadow-sm hover:border-primary focus-visible:ring-ring/20 focus-visible:border-primary\",\n \"h-10\",\n inputClassName,\n )}\n // No onFocus handler here. Radix returns focus to the trigger\n // when the popover closes, so opening on focus meant selecting a\n // date closed it and immediately reopened it - the flicker. It\n // also popped the calendar open when tabbing past the field.\n onClick={() => setOpen(true)}\n aria-label={label || \"Open calendar\"}\n aria-invalid={error}\n >\n {displayValue || (\n <span className=\"text-muted-foreground\">\n {placeholder || \"Select date...\"}\n </span>\n )}\n </button>\n </Popover.Trigger>\n {helperText && (\n <p\n className={cn(\n \"text-sm text-muted-foreground\",\n error && \"text-error-600\",\n )}\n >\n {helperText}\n </p>\n )}\n </div>\n\n <Popover.Portal>\n <Popover.Content\n className={cn(\n \"z-50 w-auto rounded-lg border bg-popover p-4 shadow-lg\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n )}\n sideOffset={5}\n align=\"start\"\n >\n <div\n ref={calendarRef}\n className={cn(\n calendarVariants({ variant, size }),\n calendarClassName,\n )}\n role=\"application\"\n aria-label=\"Calendar\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={goToPreviousMonth}\n aria-label=\"Previous month\"\n >\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 19l-7-7 7-7\"\n />\n </svg>\n </Button>\n\n <h3\n className=\"text-sm font-semibold text-popover-foreground\"\n data-testid=\"calendar-month-year\"\n >\n {monthYearDisplay}\n </h3>\n\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={goToNextMonth}\n aria-label=\"Next month\"\n >\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </Button>\n </div>\n\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={goToToday}\n className=\"text-xs\"\n >\n Today\n </Button>\n </div>\n\n {/* Day names */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {dayNames.map((day) => (\n <div\n key={day}\n className=\"text-center text-xs font-medium text-muted-foreground\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {calendarDays.map((day, index) => {\n const isSelected =\n mode === \"single\"\n ? isSameDay(day.date, calendarValue as Date | undefined)\n : mode === \"range\"\n ? isDateInRange(\n day.date,\n (calendarValue as { from?: Date; to?: Date })\n ?.from,\n (calendarValue as { from?: Date; to?: Date })?.to,\n )\n : (calendarValue as Date[])?.some((d) =>\n isSameDay(d, day.date),\n );\n\n const isDisabled = isDateDisabled(\n day.date,\n minDate,\n maxDate,\n disabledDates,\n disabledDays,\n );\n\n const isInRange =\n mode === \"range\" &&\n (calendarValue as { from?: Date; to?: Date })?.from &&\n !(calendarValue as { from?: Date; to?: Date })?.to &&\n day.date >=\n (calendarValue as { from?: Date; to?: Date }).from!;\n\n const dateKey = `${day.date.getFullYear()}-${day.date.getMonth()}-${day.date.getDate()}`;\n const isFocused =\n focusedDate && isSameDay(day.date, focusedDate);\n\n return (\n <button\n key={`${day.date.getTime()}-${index}`}\n ref={(el) => {\n if (el) {\n dayButtonRefs.current.set(dateKey, el);\n } else {\n dayButtonRefs.current.delete(dateKey);\n }\n }}\n type=\"button\"\n onClick={() => {\n if (showOutsideDays && !day.isCurrentMonth) {\n // Navigate to the month of the clicked date\n setCurrentMonth(\n new Date(\n day.date.getFullYear(),\n day.date.getMonth(),\n 1,\n ),\n );\n // Synchronously: React batches both updates into one\n // render. Deferring the selection by a tick showed the\n // new month first and selected a frame later, which\n // read as a flash.\n handleDateClick(day.date);\n } else {\n handleDateClick(day.date);\n }\n }}\n onKeyDown={(e) => handleKeyDown(e, day.date)}\n disabled={\n isDisabled ||\n (showOutsideDays ? false : !day.isCurrentMonth)\n }\n className={cn(\n calendarDayVariants({\n variant: isSelected\n ? \"selected\"\n : isInRange\n ? \"range\"\n : day.isToday\n ? \"today\"\n : !day.isCurrentMonth\n ? \"outside\"\n : isDisabled\n ? \"disabled\"\n : \"default\",\n size,\n }),\n !day.isCurrentMonth && \"opacity-50\",\n isFocused &&\n \"ring-2 ring-brand-500 ring-offset-2 z-10\",\n )}\n aria-label={day.date.toLocaleDateString(locale, {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n })}\n aria-selected={isSelected}\n aria-disabled={isDisabled}\n tabIndex={isFocused ? 0 : -1}\n >\n {day.date.getDate()}\n </button>\n );\n })}\n </div>\n\n {/* Footer for range mode */}\n {mode === \"range\" &&\n (calendarValue as { from?: Date; to?: Date })?.from &&\n !(calendarValue as { from?: Date; to?: Date })?.to && (\n <div className=\"mt-4 pt-4 border-t border-border\">\n <p className=\"text-xs text-muted-foreground text-center\">\n Select end date\n </p>\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n );\n },\n);\n\nCalendar.displayName = \"Calendar\";\n\nexport { calendarVariants, calendarDayVariants };\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {a}from'./chunk-AC2JBXHQ.js';import*as e from'react';import {cva}from'class-variance-authority';var w=cva("fixed left-[50%] top-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background shadow-lg duration-300 transition-all",{variants:{variant:{default:"border-border shadow-lg hover:shadow-xl",elevated:"border-border shadow-xl hover:shadow-2xl",outlined:"border-2 border-border shadow-md hover:border-primary hover:shadow-lg",filled:"border-border bg-muted shadow-md hover:shadow-lg",destructive:"border-error-200 bg-error-50 shadow-lg hover:shadow-xl"},size:{default:"max-w-lg sm:max-w-xl md:max-w-2xl lg:max-w-4xl",sm:"max-w-sm sm:max-w-md",lg:"max-w-2xl sm:max-w-3xl md:max-w-4xl lg:max-w-5xl",xl:"max-w-4xl sm:max-w-5xl md:max-w-6xl lg:max-w-7xl",full:"max-w-[95vw] sm:max-w-[90vw]"},animation:{default:"animate-in fade-in-0 zoom-in-95 duration-300",slide:"animate-in slide-in-from-bottom-4 duration-300",scale:"animate-in zoom-in-95 duration-300",none:""}},defaultVariants:{variant:"default",size:"default",animation:"default"}}),D=cva("fixed inset-0 z-40 transition-all duration-300",{variants:{variant:{default:"bg-black/50 backdrop-blur-sm",subtle:"bg-black/30 backdrop-blur-none",strong:"bg-black/70 backdrop-blur-md",colored:"bg-brand-500/20 backdrop-blur-sm"}},defaultVariants:{variant:"default"}}),x=e.createContext(null);function p(a){let t=e.useContext(x);if(!t)throw new Error(`${a} must be used inside <Dialog>`);return t}var H=({open:a$1,defaultOpen:t=false,onOpenChange:o,children:r,backdropVariant:i="default"})=>{let l=e.useId(),[s,u]=e.useState(t),n=a$1!==void 0,d=n?a$1:s,c=e.useCallback(g=>{n||u(g),o?.(g);},[n,o]);e.useEffect(()=>{if(!d)return;let g=v=>{v.key==="Escape"&&c(false);};return document.addEventListener("keydown",g),document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",g),document.body.style.overflow="unset";}},[d,c]);let f=e.useMemo(()=>({open:d,setOpen:c,titleId:l}),[d,c,l]);return e.createElement(x.Provider,{value:f},r,d&&e.createElement("div",{className:a(D({variant:i})),onClick:()=>c(false),"aria-hidden":"true"}))},h=e.forwardRef(({asChild:a,children:t,onClick:o,...r},i)=>{let{open:l,setOpen:s}=p("DialogTrigger"),u=n=>{o?.(n),n.defaultPrevented||s(true);};return a&&e.isValidElement(t)?e.cloneElement(t,{onClick:u,"aria-expanded":l}):e.createElement("button",{ref:i,type:"button","aria-expanded":l,"aria-haspopup":"dialog",onClick:u,...r},t)});h.displayName="DialogTrigger";var R=e.forwardRef(({className:a$1,children:t,onClose:o,variant:r,size:i,animation:l,...s},u)=>{let{open:n,setOpen:d,titleId:c}=p("DialogContent");if(!n)return null;let f=s["aria-label"]!==void 0||s["aria-labelledby"]!==void 0;return e.createElement("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none"},e.createElement("div",{ref:u,role:"dialog","aria-modal":"true","aria-labelledby":f?void 0:c,className:a(w({variant:r,size:i,animation:l}),"pointer-events-auto p-4 sm:p-6 sm:rounded-lg",a$1),...s},t,e.createElement("button",{type:"button",className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",onClick:o??(()=>d(false))},e.createElement("span",{className:"sr-only"},"Close"),e.createElement("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})))))});R.displayName="DialogContent";var y=e.forwardRef(({className:a$1,...t},o)=>e.createElement("div",{ref:o,className:a("flex flex-col space-y-1.5 text-center sm:text-left",a$1),...t}));y.displayName="DialogHeader";var k=e.forwardRef(({className:a$1,id:t,...o},r)=>{let{titleId:i}=p("DialogTitle");return e.createElement("h2",{ref:r,id:t??i,className:a("text-lg font-semibold leading-none tracking-tight",a$1),...o})});k.displayName="DialogTitle";var C=e.forwardRef(({className:a$1,...t},o)=>e.createElement("p",{ref:o,className:a("text-sm text-muted-foreground",a$1),...t}));C.displayName="DialogDescription";export{w as a,D as b,H as c,h as d,R as e,y as f,k as g,C as h};//# sourceMappingURL=chunk-MY2KMTUS.js.map
3
+ //# sourceMappingURL=chunk-MY2KMTUS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/dialog.tsx"],"names":["dialogVariants","cva","backdropVariants","DialogContext","useDialogContext","component","context","Dialog","controlledOpen","defaultOpen","onOpenChange","children","backdropVariant","titleId","uncontrolledOpen","setUncontrolledOpen","isControlled","open","setOpen","next","handleEscape","e","cn","DialogTrigger","asChild","onClick","props","ref","handleClick","event","DialogContent","className","onClose","variant","size","animation","hasOwnLabel","DialogHeader","DialogTitle","id","DialogDescription"],"mappings":"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","file":"chunk-MY2KMTUS.js","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst dialogVariants = cva(\n \"fixed left-[50%] top-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background shadow-lg duration-300 transition-all\",\n {\n variants: {\n variant: {\n default: \"border-border shadow-lg hover:shadow-xl\",\n elevated: \"border-border shadow-xl hover:shadow-2xl\",\n outlined:\n \"border-2 border-border shadow-md hover:border-primary hover:shadow-lg\",\n filled: \"border-border bg-muted shadow-md hover:shadow-lg\",\n destructive: \"border-error-200 bg-error-50 shadow-lg hover:shadow-xl\",\n },\n size: {\n default: \"max-w-lg sm:max-w-xl md:max-w-2xl lg:max-w-4xl\",\n sm: \"max-w-sm sm:max-w-md\",\n lg: \"max-w-2xl sm:max-w-3xl md:max-w-4xl lg:max-w-5xl\",\n xl: \"max-w-4xl sm:max-w-5xl md:max-w-6xl lg:max-w-7xl\",\n full: \"max-w-[95vw] sm:max-w-[90vw]\",\n },\n animation: {\n default: \"animate-in fade-in-0 zoom-in-95 duration-300\",\n slide: \"animate-in slide-in-from-bottom-4 duration-300\",\n scale: \"animate-in zoom-in-95 duration-300\",\n none: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n animation: \"default\",\n },\n },\n);\n\nconst backdropVariants = cva(\"fixed inset-0 z-40 transition-all duration-300\", {\n variants: {\n variant: {\n default: \"bg-black/50 backdrop-blur-sm\",\n subtle: \"bg-black/30 backdrop-blur-none\",\n strong: \"bg-black/70 backdrop-blur-md\",\n colored: \"bg-brand-500/20 backdrop-blur-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nexport interface DialogProps {\n open?: boolean;\n /** Uncontrolled initial state, for when a DialogTrigger owns the opening. */\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n backdropVariant?: VariantProps<typeof backdropVariants>[\"variant\"];\n}\n\nexport interface DialogContentProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof dialogVariants> {\n onClose?: () => void;\n}\n\nexport interface DialogHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport interface DialogTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {}\n\nexport interface DialogDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\n\ninterface DialogContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n /**\n * Ties `DialogContent`'s `aria-labelledby` to whatever `DialogTitle` renders.\n * Adding `role=\"dialog\"` without this fails axe's aria-dialog-name rule - the\n * role only means something to a screen reader if the node has a name.\n */\n titleId: string;\n}\n\nconst DialogContext = React.createContext<DialogContextValue | null>(null);\n\nfunction useDialogContext(component: string): DialogContextValue {\n const context = React.useContext(DialogContext);\n if (!context) {\n throw new Error(`${component} must be used inside <Dialog>`);\n }\n return context;\n}\n\n/**\n * Dialog root.\n *\n * Renders its children whether or not it is open, and puts the open state on\n * context. It used to return `null` while closed and draw the overlay itself,\n * which made `DialogTrigger` impossible: a trigger nested in the dialog was\n * unmounted exactly when you needed to click it. The overlay moved to\n * `DialogContent`, which is what actually knows it is being shown.\n *\n * Works controlled (`open` + `onOpenChange`) or uncontrolled (`defaultOpen`).\n */\nconst Dialog: React.FC<DialogProps> = ({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n children,\n backdropVariant = \"default\",\n}) => {\n const titleId = React.useId();\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n React.useEffect(() => {\n if (!open) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n document.body.style.overflow = \"hidden\";\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n document.body.style.overflow = \"unset\";\n };\n }, [open, setOpen]);\n\n const context = React.useMemo(\n () => ({ open, setOpen, titleId }),\n [open, setOpen, titleId],\n );\n\n return (\n <DialogContext.Provider value={context}>\n {children}\n {open && (\n <div\n className={cn(backdropVariants({ variant: backdropVariant }))}\n onClick={() => setOpen(false)}\n aria-hidden=\"true\"\n />\n )}\n </DialogContext.Provider>\n );\n};\n\nexport interface DialogTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Render the child element instead of a button, forwarding the click. */\n asChild?: boolean;\n}\n\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, DialogTriggerProps>(\n ({ asChild, children, onClick, ...props }, ref) => {\n const { open, setOpen } = useDialogContext(\"DialogTrigger\");\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented) setOpen(true);\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(\n children as React.ReactElement<{\n onClick?: React.MouseEventHandler;\n \"aria-expanded\"?: boolean;\n }>,\n { onClick: handleClick, \"aria-expanded\": open },\n );\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n onClick={handleClick}\n {...props}\n >\n {children}\n </button>\n );\n },\n);\n\nDialogTrigger.displayName = \"DialogTrigger\";\n\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n (\n { className, children, onClose, variant, size, animation, ...props },\n ref,\n ) => {\n const { open, setOpen, titleId } = useDialogContext(\"DialogContent\");\n\n if (!open) return null;\n\n // A caller-supplied name wins; otherwise point at the DialogTitle.\n const hasOwnLabel =\n props[\"aria-label\"] !== undefined ||\n props[\"aria-labelledby\"] !== undefined;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none\">\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={hasOwnLabel ? undefined : titleId}\n className={cn(\n dialogVariants({ variant, size, animation }),\n \"pointer-events-auto p-4 sm:p-6 sm:rounded-lg\",\n className,\n )}\n {...props}\n >\n {children}\n <button\n type=\"button\"\n className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n onClick={onClose ?? (() => setOpen(false))}\n >\n <span className=\"sr-only\">Close</span>\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n </div>\n );\n },\n);\nDialogContent.displayName = \"DialogContent\";\n\nconst DialogHeader = React.forwardRef<HTMLDivElement, DialogHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className,\n )}\n {...props}\n />\n ),\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, DialogTitleProps>(\n ({ className, id, ...props }, ref) => {\n const { titleId } = useDialogContext(\"DialogTitle\");\n\n return (\n <h2\n ref={ref}\n // Falls back to the shared id so DialogContent's aria-labelledby resolves.\n id={id ?? titleId}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nDialogTitle.displayName = \"DialogTitle\";\n\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n DialogDescriptionProps\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = \"DialogDescription\";\n\nexport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n dialogVariants,\n backdropVariants,\n};\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ 'use strict';var chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),e=require('react'),classVarianceAuthority=require('class-variance-authority');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var e__namespace=/*#__PURE__*/_interopNamespace(e);var w=classVarianceAuthority.cva("fixed left-[50%] top-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background shadow-lg duration-300 transition-all",{variants:{variant:{default:"border-border shadow-lg hover:shadow-xl",elevated:"border-border shadow-xl hover:shadow-2xl",outlined:"border-2 border-border shadow-md hover:border-primary hover:shadow-lg",filled:"border-border bg-muted shadow-md hover:shadow-lg",destructive:"border-error-200 bg-error-50 shadow-lg hover:shadow-xl"},size:{default:"max-w-lg sm:max-w-xl md:max-w-2xl lg:max-w-4xl",sm:"max-w-sm sm:max-w-md",lg:"max-w-2xl sm:max-w-3xl md:max-w-4xl lg:max-w-5xl",xl:"max-w-4xl sm:max-w-5xl md:max-w-6xl lg:max-w-7xl",full:"max-w-[95vw] sm:max-w-[90vw]"},animation:{default:"animate-in fade-in-0 zoom-in-95 duration-300",slide:"animate-in slide-in-from-bottom-4 duration-300",scale:"animate-in zoom-in-95 duration-300",none:""}},defaultVariants:{variant:"default",size:"default",animation:"default"}}),D=classVarianceAuthority.cva("fixed inset-0 z-40 transition-all duration-300",{variants:{variant:{default:"bg-black/50 backdrop-blur-sm",subtle:"bg-black/30 backdrop-blur-none",strong:"bg-black/70 backdrop-blur-md",colored:"bg-brand-500/20 backdrop-blur-sm"}},defaultVariants:{variant:"default"}}),x=e__namespace.createContext(null);function p(a){let t=e__namespace.useContext(x);if(!t)throw new Error(`${a} must be used inside <Dialog>`);return t}var H=({open:a,defaultOpen:t=false,onOpenChange:o,children:r,backdropVariant:i="default"})=>{let l=e__namespace.useId(),[s,u]=e__namespace.useState(t),n=a!==void 0,d=n?a:s,c=e__namespace.useCallback(g=>{n||u(g),o?.(g);},[n,o]);e__namespace.useEffect(()=>{if(!d)return;let g=v=>{v.key==="Escape"&&c(false);};return document.addEventListener("keydown",g),document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",g),document.body.style.overflow="unset";}},[d,c]);let f=e__namespace.useMemo(()=>({open:d,setOpen:c,titleId:l}),[d,c,l]);return e__namespace.createElement(x.Provider,{value:f},r,d&&e__namespace.createElement("div",{className:chunkITRGJNWL_cjs.a(D({variant:i})),onClick:()=>c(false),"aria-hidden":"true"}))},h=e__namespace.forwardRef(({asChild:a,children:t,onClick:o,...r},i)=>{let{open:l,setOpen:s}=p("DialogTrigger"),u=n=>{o?.(n),n.defaultPrevented||s(true);};return a&&e__namespace.isValidElement(t)?e__namespace.cloneElement(t,{onClick:u,"aria-expanded":l}):e__namespace.createElement("button",{ref:i,type:"button","aria-expanded":l,"aria-haspopup":"dialog",onClick:u,...r},t)});h.displayName="DialogTrigger";var R=e__namespace.forwardRef(({className:a,children:t,onClose:o,variant:r,size:i,animation:l,...s},u)=>{let{open:n,setOpen:d,titleId:c}=p("DialogContent");if(!n)return null;let f=s["aria-label"]!==void 0||s["aria-labelledby"]!==void 0;return e__namespace.createElement("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none"},e__namespace.createElement("div",{ref:u,role:"dialog","aria-modal":"true","aria-labelledby":f?void 0:c,className:chunkITRGJNWL_cjs.a(w({variant:r,size:i,animation:l}),"pointer-events-auto p-4 sm:p-6 sm:rounded-lg",a),...s},t,e__namespace.createElement("button",{type:"button",className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",onClick:o??(()=>d(false))},e__namespace.createElement("span",{className:"sr-only"},"Close"),e__namespace.createElement("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},e__namespace.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})))))});R.displayName="DialogContent";var y=e__namespace.forwardRef(({className:a,...t},o)=>e__namespace.createElement("div",{ref:o,className:chunkITRGJNWL_cjs.a("flex flex-col space-y-1.5 text-center sm:text-left",a),...t}));y.displayName="DialogHeader";var k=e__namespace.forwardRef(({className:a,id:t,...o},r)=>{let{titleId:i}=p("DialogTitle");return e__namespace.createElement("h2",{ref:r,id:t??i,className:chunkITRGJNWL_cjs.a("text-lg font-semibold leading-none tracking-tight",a),...o})});k.displayName="DialogTitle";var C=e__namespace.forwardRef(({className:a,...t},o)=>e__namespace.createElement("p",{ref:o,className:chunkITRGJNWL_cjs.a("text-sm text-muted-foreground",a),...t}));C.displayName="DialogDescription";exports.a=w;exports.b=D;exports.c=H;exports.d=h;exports.e=R;exports.f=y;exports.g=k;exports.h=C;//# sourceMappingURL=chunk-NBX6FKCA.cjs.map
3
+ //# sourceMappingURL=chunk-NBX6FKCA.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/dialog.tsx"],"names":["dialogVariants","cva","backdropVariants","DialogContext","e","useDialogContext","component","context","Dialog","controlledOpen","defaultOpen","onOpenChange","children","backdropVariant","titleId","uncontrolledOpen","setUncontrolledOpen","isControlled","open","setOpen","next","handleEscape","cn","DialogTrigger","asChild","onClick","props","ref","handleClick","event","DialogContent","className","onClose","variant","size","animation","hasOwnLabel","DialogHeader","DialogTitle","id","DialogDescription"],"mappings":"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","file":"chunk-NBX6FKCA.cjs","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst dialogVariants = cva(\n \"fixed left-[50%] top-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background shadow-lg duration-300 transition-all\",\n {\n variants: {\n variant: {\n default: \"border-border shadow-lg hover:shadow-xl\",\n elevated: \"border-border shadow-xl hover:shadow-2xl\",\n outlined:\n \"border-2 border-border shadow-md hover:border-primary hover:shadow-lg\",\n filled: \"border-border bg-muted shadow-md hover:shadow-lg\",\n destructive: \"border-error-200 bg-error-50 shadow-lg hover:shadow-xl\",\n },\n size: {\n default: \"max-w-lg sm:max-w-xl md:max-w-2xl lg:max-w-4xl\",\n sm: \"max-w-sm sm:max-w-md\",\n lg: \"max-w-2xl sm:max-w-3xl md:max-w-4xl lg:max-w-5xl\",\n xl: \"max-w-4xl sm:max-w-5xl md:max-w-6xl lg:max-w-7xl\",\n full: \"max-w-[95vw] sm:max-w-[90vw]\",\n },\n animation: {\n default: \"animate-in fade-in-0 zoom-in-95 duration-300\",\n slide: \"animate-in slide-in-from-bottom-4 duration-300\",\n scale: \"animate-in zoom-in-95 duration-300\",\n none: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n animation: \"default\",\n },\n },\n);\n\nconst backdropVariants = cva(\"fixed inset-0 z-40 transition-all duration-300\", {\n variants: {\n variant: {\n default: \"bg-black/50 backdrop-blur-sm\",\n subtle: \"bg-black/30 backdrop-blur-none\",\n strong: \"bg-black/70 backdrop-blur-md\",\n colored: \"bg-brand-500/20 backdrop-blur-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nexport interface DialogProps {\n open?: boolean;\n /** Uncontrolled initial state, for when a DialogTrigger owns the opening. */\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactNode;\n backdropVariant?: VariantProps<typeof backdropVariants>[\"variant\"];\n}\n\nexport interface DialogContentProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof dialogVariants> {\n onClose?: () => void;\n}\n\nexport interface DialogHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport interface DialogTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {}\n\nexport interface DialogDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\n\ninterface DialogContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n /**\n * Ties `DialogContent`'s `aria-labelledby` to whatever `DialogTitle` renders.\n * Adding `role=\"dialog\"` without this fails axe's aria-dialog-name rule - the\n * role only means something to a screen reader if the node has a name.\n */\n titleId: string;\n}\n\nconst DialogContext = React.createContext<DialogContextValue | null>(null);\n\nfunction useDialogContext(component: string): DialogContextValue {\n const context = React.useContext(DialogContext);\n if (!context) {\n throw new Error(`${component} must be used inside <Dialog>`);\n }\n return context;\n}\n\n/**\n * Dialog root.\n *\n * Renders its children whether or not it is open, and puts the open state on\n * context. It used to return `null` while closed and draw the overlay itself,\n * which made `DialogTrigger` impossible: a trigger nested in the dialog was\n * unmounted exactly when you needed to click it. The overlay moved to\n * `DialogContent`, which is what actually knows it is being shown.\n *\n * Works controlled (`open` + `onOpenChange`) or uncontrolled (`defaultOpen`).\n */\nconst Dialog: React.FC<DialogProps> = ({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n children,\n backdropVariant = \"default\",\n}) => {\n const titleId = React.useId();\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n React.useEffect(() => {\n if (!open) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n document.body.style.overflow = \"hidden\";\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n document.body.style.overflow = \"unset\";\n };\n }, [open, setOpen]);\n\n const context = React.useMemo(\n () => ({ open, setOpen, titleId }),\n [open, setOpen, titleId],\n );\n\n return (\n <DialogContext.Provider value={context}>\n {children}\n {open && (\n <div\n className={cn(backdropVariants({ variant: backdropVariant }))}\n onClick={() => setOpen(false)}\n aria-hidden=\"true\"\n />\n )}\n </DialogContext.Provider>\n );\n};\n\nexport interface DialogTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Render the child element instead of a button, forwarding the click. */\n asChild?: boolean;\n}\n\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, DialogTriggerProps>(\n ({ asChild, children, onClick, ...props }, ref) => {\n const { open, setOpen } = useDialogContext(\"DialogTrigger\");\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented) setOpen(true);\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(\n children as React.ReactElement<{\n onClick?: React.MouseEventHandler;\n \"aria-expanded\"?: boolean;\n }>,\n { onClick: handleClick, \"aria-expanded\": open },\n );\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n onClick={handleClick}\n {...props}\n >\n {children}\n </button>\n );\n },\n);\n\nDialogTrigger.displayName = \"DialogTrigger\";\n\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n (\n { className, children, onClose, variant, size, animation, ...props },\n ref,\n ) => {\n const { open, setOpen, titleId } = useDialogContext(\"DialogContent\");\n\n if (!open) return null;\n\n // A caller-supplied name wins; otherwise point at the DialogTitle.\n const hasOwnLabel =\n props[\"aria-label\"] !== undefined ||\n props[\"aria-labelledby\"] !== undefined;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none\">\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={hasOwnLabel ? undefined : titleId}\n className={cn(\n dialogVariants({ variant, size, animation }),\n \"pointer-events-auto p-4 sm:p-6 sm:rounded-lg\",\n className,\n )}\n {...props}\n >\n {children}\n <button\n type=\"button\"\n className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n onClick={onClose ?? (() => setOpen(false))}\n >\n <span className=\"sr-only\">Close</span>\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n </div>\n );\n },\n);\nDialogContent.displayName = \"DialogContent\";\n\nconst DialogHeader = React.forwardRef<HTMLDivElement, DialogHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className,\n )}\n {...props}\n />\n ),\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, DialogTitleProps>(\n ({ className, id, ...props }, ref) => {\n const { titleId } = useDialogContext(\"DialogTitle\");\n\n return (\n <h2\n ref={ref}\n // Falls back to the shared id so DialogContent's aria-labelledby resolves.\n id={id ?? titleId}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nDialogTitle.displayName = \"DialogTitle\";\n\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n DialogDescriptionProps\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = \"DialogDescription\";\n\nexport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n dialogVariants,\n backdropVariants,\n};\n"]}