@tirth_jasoliya/ui 1.0.9 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/data/data-table/data-table-action-bar.cjs +1 -1
- package/dist/components/data/data-table/data-table-action-bar.cjs.map +1 -1
- package/dist/components/data/data-table/data-table-action-bar.js +1 -1
- package/dist/components/data/data-table/data-table-action-bar.js.map +1 -1
- package/dist/components/data/data-table/data-table-pagination.cjs +1 -1
- package/dist/components/data/data-table/data-table-pagination.cjs.map +1 -1
- package/dist/components/data/data-table/data-table-pagination.js +1 -1
- package/dist/components/data/data-table/data-table-pagination.js.map +1 -1
- package/dist/components/data/data-table/data-table-toolbar.cjs +1 -1
- package/dist/components/data/data-table/data-table-toolbar.cjs.map +1 -1
- package/dist/components/data/data-table/data-table-toolbar.d.cts +6 -2
- package/dist/components/data/data-table/data-table-toolbar.d.ts +6 -2
- package/dist/components/data/data-table/data-table-toolbar.js +1 -1
- package/dist/components/data/data-table/data-table-toolbar.js.map +1 -1
- package/dist/components/data/data-table/data-table-types.cjs +1 -1
- package/dist/components/data/data-table/data-table-types.cjs.map +1 -1
- package/dist/components/data/data-table/data-table-types.d.cts +48 -2
- package/dist/components/data/data-table/data-table-types.d.ts +48 -2
- package/dist/components/data/data-table/data-table.cjs +1 -1
- package/dist/components/data/data-table/data-table.cjs.map +1 -1
- package/dist/components/data/data-table/data-table.d.cts +1 -1
- package/dist/components/data/data-table/data-table.d.ts +1 -1
- package/dist/components/data/data-table/data-table.js +1 -1
- package/dist/components/data/data-table/data-table.js.map +1 -1
- package/dist/components/data/data-table/index.cjs +1 -1
- package/dist/components/data/data-table/index.cjs.map +1 -1
- package/dist/components/data/data-table/index.js +1 -1
- package/dist/components/data/data-table/index.js.map +1 -1
- package/dist/components/data/data-template/data-template.cjs +1 -1
- package/dist/components/data/data-template/data-template.cjs.map +1 -1
- package/dist/components/data/data-template/data-template.js +1 -1
- package/dist/components/data/data-template/data-template.js.map +1 -1
- package/dist/components/data/data-template/index.cjs +1 -1
- package/dist/components/data/data-template/index.cjs.map +1 -1
- package/dist/components/data/data-template/index.js +1 -1
- package/dist/components/data/data-template/index.js.map +1 -1
- package/dist/components/date-helper.cjs +3 -0
- package/dist/components/date-helper.cjs.map +1 -0
- package/dist/components/date-helper.d.cts +27 -0
- package/dist/components/date-helper.d.ts +27 -0
- package/dist/components/date-helper.js +3 -0
- package/dist/components/date-helper.js.map +1 -0
- package/dist/components/helper/date-filter.cjs +3 -0
- package/dist/components/helper/date-filter.cjs.map +1 -0
- package/dist/components/helper/date-filter.d.cts +14 -0
- package/dist/components/helper/date-filter.d.ts +14 -0
- package/dist/components/helper/date-filter.js +3 -0
- package/dist/components/helper/date-filter.js.map +1 -0
- package/dist/components/layouts/app-content.cjs +1 -1
- package/dist/components/layouts/app-content.cjs.map +1 -1
- package/dist/components/layouts/app-content.d.cts +2 -2
- package/dist/components/layouts/app-content.d.ts +2 -2
- package/dist/components/layouts/app-content.js +1 -1
- package/dist/components/layouts/app-content.js.map +1 -1
- package/dist/components/layouts/factories.cjs +1 -1
- package/dist/components/layouts/factories.cjs.map +1 -1
- package/dist/components/layouts/factories.js +1 -1
- package/dist/components/layouts/factories.js.map +1 -1
- package/dist/components/layouts/index.cjs +1 -1
- package/dist/components/layouts/index.cjs.map +1 -1
- package/dist/components/layouts/index.js +1 -1
- package/dist/components/layouts/index.js.map +1 -1
- package/dist/components/ui/calendar.cjs +3 -0
- package/dist/components/ui/calendar.cjs.map +1 -0
- package/dist/components/ui/calendar.d.cts +13 -0
- package/dist/components/ui/calendar.d.ts +13 -0
- package/dist/components/ui/calendar.js +3 -0
- package/dist/components/ui/calendar.js.map +1 -0
- package/dist/components/ui/table.cjs +1 -1
- package/dist/components/ui/table.cjs.map +1 -1
- package/dist/components/ui/table.js +1 -1
- package/dist/components/ui/table.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +29 -18
- package/dist/styles.css +0 -2
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
"use strict";var c=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var d=(o,t)=>{for(var r in t)c(o,r,{get:t[r],enumerable:!0})},M=(o,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of g(t))!p.call(o,a)&&a!==r&&c(o,a,{get:()=>t[a],enumerable:!(n=l(t,a))||n.enumerable});return o};var O=o=>M(c({},"__esModule",{value:!0}),o);var b={};d(b,{DateHelper:()=>y});module.exports=O(b);var e=require("date-fns"),y=class{static MONTH_NAMES_SHORT=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];static MONTH_NAMES_FULL=["January","February","March","April","May","June","July","August","September","October","November","December"];static formatDate(t,r={}){let{format:n="short",separator:a="-",locale:i,timeFormat:u="24h",includeTime:h=!1,customFormat:D}=r,s;if(typeof t=="string"?(s=(0,e.parseISO)(t),(0,e.isValid)(s)||(s=new Date(t))):s=new Date(t),!(0,e.isValid)(s))return"";if(D)return(0,e.format)(s,D,{locale:i});switch(n){case"iso":return(0,e.formatISO)(s,{representation:"date"});case"short":return(0,e.format)(s,`dd${a}MM${a}yyyy`,{locale:i});case"medium":return(0,e.format)(s,`dd${a}MMM${a}yyyy`,{locale:i});case"long":return(0,e.format)(s,`dd${a}MMMM${a}yyyy`,{locale:i});case"full":return(0,e.format)(s,"EEEE, MMMM dd, yyyy",{locale:i});case"time":return(0,e.format)(s,u==="12h"?"hh:mm a":"HH:mm",{locale:i});case"datetime":let m=this.formatDate(t,{format:"short",separator:a,locale:i}),f=this.formatDate(t,{format:"time",timeFormat:u,locale:i});return`${m} ${f}`;default:return(0,e.format)(s,`dd${a}MM${a}yyyy`,{locale:i})}}static toLocalISOString(t){let r=typeof t=="string"?(0,e.parseISO)(t):new Date(t);return(0,e.isValid)(r)?(0,e.formatISO)(r,{representation:"date"}):""}static parseDate(t,r){if(r){let a=(0,e.parse)(t,r,new Date);return(0,e.isValid)(a)?a:null}let n=(0,e.parseISO)(t);return(0,e.isValid)(n)?n:null}static startOfDay(t){let r=typeof t=="string"?(0,e.parseISO)(t):new Date(t);return(0,e.startOfDay)(r)}static endOfDay(t){let r=typeof t=="string"?(0,e.parseISO)(t):new Date(t);return(0,e.endOfDay)(r)}static addDays(t,r){let n=typeof t=="string"?(0,e.parseISO)(t):new Date(t);return(0,e.addDays)(n,r)}static subtractDays(t,r){let n=typeof t=="string"?(0,e.parseISO)(t):new Date(t);return(0,e.subDays)(n,r)}static compareDates(t,r){let n=typeof t=="string"?(0,e.parseISO)(t):new Date(t),a=typeof r=="string"?(0,e.parseISO)(r):new Date(r);return(0,e.isBefore)(n,a)?-1:(0,e.isAfter)(n,a)?1:0}static isValidDate(t){if(!t)return!1;let r=typeof t=="string"?(0,e.parseISO)(t):new Date(t);return(0,e.isValid)(r)}static differenceInDays(t,r){let n=typeof t=="string"?(0,e.parseISO)(t):new Date(t),a=typeof r=="string"?(0,e.parseISO)(r):new Date(r);return(0,e.differenceInDays)(n,a)}static getTodayISO(){return this.toLocalISOString(new Date)}};0&&(module.exports={DateHelper});
|
|
3
|
+
//# sourceMappingURL=date-helper.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/date-helper.tsx"],"sourcesContent":["import {\r\n format,\r\n parseISO,\r\n isValid,\r\n formatISO,\r\n parse,\r\n startOfDay,\r\n endOfDay,\r\n addDays,\r\n subDays,\r\n isBefore,\r\n isAfter,\r\n differenceInDays,\r\n Locale\r\n} from 'date-fns';\r\n\r\nexport interface FormatDateOptions {\r\n format?: 'iso' | 'short' | 'medium' | 'long' | 'full' | 'custom' | 'time' | 'datetime';\r\n separator?: string;\r\n locale?: Locale;\r\n timeFormat?: '12h' | '24h';\r\n includeTime?: boolean;\r\n customFormat?: string;\r\n}\r\n\r\nexport class DateHelper {\r\n private static readonly MONTH_NAMES_SHORT = [\r\n 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\r\n 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'\r\n ];\r\n\r\n private static readonly MONTH_NAMES_FULL = [\r\n 'January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'\r\n ];\r\n\r\n /**\r\n * Formats a date according to specified options with timezone safety\r\n * @param input Date input (string, number, or Date object)\r\n * @param options Formatting options\r\n * @returns Formatted date string\r\n */\r\n static formatDate(\r\n input: string | number | Date,\r\n options: FormatDateOptions = {}\r\n ): string {\r\n const {\r\n format: formatType = 'short',\r\n separator = '-',\r\n locale,\r\n timeFormat = '24h',\r\n includeTime = false,\r\n customFormat\r\n } = options;\r\n\r\n let dateObj: Date;\r\n\r\n if (typeof input === 'string') {\r\n dateObj = parseISO(input);\r\n if (!isValid(dateObj)) {\r\n dateObj = new Date(input);\r\n }\r\n } else {\r\n dateObj = new Date(input);\r\n }\r\n\r\n if (!isValid(dateObj)) return '';\r\n\r\n if (customFormat) {\r\n return format(dateObj, customFormat, { locale });\r\n }\r\n\r\n switch (formatType) {\r\n case 'iso':\r\n return formatISO(dateObj, { representation: 'date' });\r\n\r\n case 'short':\r\n return format(dateObj, `dd${separator}MM${separator}yyyy`, { locale });\r\n\r\n case 'medium':\r\n return format(dateObj, `dd${separator}MMM${separator}yyyy`, { locale });\r\n\r\n case 'long':\r\n return format(dateObj, `dd${separator}MMMM${separator}yyyy`, { locale });\r\n\r\n case 'full':\r\n return format(dateObj, 'EEEE, MMMM dd, yyyy', { locale });\r\n\r\n case 'time':\r\n return format(\r\n dateObj,\r\n timeFormat === '12h' ? 'hh:mm a' : 'HH:mm',\r\n { locale }\r\n );\r\n\r\n case 'datetime':\r\n const datePart = this.formatDate(input, { format: 'short', separator, locale });\r\n const timePart = this.formatDate(input, { format: 'time', timeFormat, locale });\r\n return `${datePart} ${timePart}`;\r\n\r\n default:\r\n return format(dateObj, `dd${separator}MM${separator}yyyy`, { locale });\r\n }\r\n }\r\n\r\n /**\r\n * Converts date to local ISO string (timezone safe)\r\n */\r\n static toLocalISOString(date: Date | string): string {\r\n const d = typeof date === 'string' ? parseISO(date) : new Date(date);\r\n if (!isValid(d)) return '';\r\n\r\n return formatISO(d, { representation: 'date' });\r\n }\r\n\r\n /**\r\n * Parses a date string with format validation\r\n */\r\n static parseDate(dateString: string, formatString?: string): Date | null {\r\n if (formatString) {\r\n const parsed = parse(dateString, formatString, new Date());\r\n return isValid(parsed) ? parsed : null;\r\n }\r\n\r\n const parsed = parseISO(dateString);\r\n return isValid(parsed) ? parsed : null;\r\n }\r\n\r\n /**\r\n * Gets start of day (timezone safe)\r\n */\r\n static startOfDay(date: Date | string): Date {\r\n const d = typeof date === 'string' ? parseISO(date) : new Date(date);\r\n return startOfDay(d);\r\n }\r\n\r\n /**\r\n * Gets end of day (timezone safe)\r\n */\r\n static endOfDay(date: Date | string): Date {\r\n const d = typeof date === 'string' ? parseISO(date) : new Date(date);\r\n return endOfDay(d);\r\n }\r\n\r\n /**\r\n * Adds days to a date\r\n */\r\n static addDays(date: Date | string, days: number): Date {\r\n const d = typeof date === 'string' ? parseISO(date) : new Date(date);\r\n return addDays(d, days);\r\n }\r\n\r\n /**\r\n * Subtracts days from a date\r\n */\r\n static subtractDays(date: Date | string, days: number): Date {\r\n const d = typeof date === 'string' ? parseISO(date) : new Date(date);\r\n return subDays(d, days);\r\n }\r\n\r\n /**\r\n * Compares two dates\r\n */\r\n static compareDates(date1: Date | string, date2: Date | string): number {\r\n const d1 = typeof date1 === 'string' ? parseISO(date1) : new Date(date1);\r\n const d2 = typeof date2 === 'string' ? parseISO(date2) : new Date(date2);\r\n\r\n if (isBefore(d1, d2)) return -1;\r\n if (isAfter(d1, d2)) return 1;\r\n return 0;\r\n }\r\n\r\n /**\r\n * Checks if date is valid\r\n */\r\n static isValidDate(date: any): boolean {\r\n if (!date) return false;\r\n const d = typeof date === 'string' ? parseISO(date) : new Date(date);\r\n return isValid(d);\r\n }\r\n\r\n /**\r\n * Gets difference between two dates in days\r\n */\r\n static differenceInDays(date1: Date | string, date2: Date | string): number {\r\n const d1 = typeof date1 === 'string' ? parseISO(date1) : new Date(date1);\r\n const d2 = typeof date2 === 'string' ? parseISO(date2) : new Date(date2);\r\n return differenceInDays(d1, d2);\r\n }\r\n\r\n /**\r\n * Gets current date in local ISO format\r\n */\r\n static getTodayISO(): string {\r\n return this.toLocalISOString(new Date());\r\n }\r\n}"],"mappings":"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","names":["date_helper_exports","__export","DateHelper","__toCommonJS","import_date_fns","input","options","formatType","separator","locale","timeFormat","includeTime","customFormat","dateObj","datePart","timePart","date","d","dateString","formatString","parsed","days","date1","date2","d1","d2"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Locale } from 'date-fns';
|
|
2
|
+
|
|
3
|
+
interface FormatDateOptions {
|
|
4
|
+
format?: 'iso' | 'short' | 'medium' | 'long' | 'full' | 'custom' | 'time' | 'datetime';
|
|
5
|
+
separator?: string;
|
|
6
|
+
locale?: Locale;
|
|
7
|
+
timeFormat?: '12h' | '24h';
|
|
8
|
+
includeTime?: boolean;
|
|
9
|
+
customFormat?: string;
|
|
10
|
+
}
|
|
11
|
+
declare class DateHelper {
|
|
12
|
+
private static readonly MONTH_NAMES_SHORT;
|
|
13
|
+
private static readonly MONTH_NAMES_FULL;
|
|
14
|
+
static formatDate(input: string | number | Date, options?: FormatDateOptions): string;
|
|
15
|
+
static toLocalISOString(date: Date | string): string;
|
|
16
|
+
static parseDate(dateString: string, formatString?: string): Date | null;
|
|
17
|
+
static startOfDay(date: Date | string): Date;
|
|
18
|
+
static endOfDay(date: Date | string): Date;
|
|
19
|
+
static addDays(date: Date | string, days: number): Date;
|
|
20
|
+
static subtractDays(date: Date | string, days: number): Date;
|
|
21
|
+
static compareDates(date1: Date | string, date2: Date | string): number;
|
|
22
|
+
static isValidDate(date: any): boolean;
|
|
23
|
+
static differenceInDays(date1: Date | string, date2: Date | string): number;
|
|
24
|
+
static getTodayISO(): string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { DateHelper, type FormatDateOptions };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Locale } from 'date-fns';
|
|
2
|
+
|
|
3
|
+
interface FormatDateOptions {
|
|
4
|
+
format?: 'iso' | 'short' | 'medium' | 'long' | 'full' | 'custom' | 'time' | 'datetime';
|
|
5
|
+
separator?: string;
|
|
6
|
+
locale?: Locale;
|
|
7
|
+
timeFormat?: '12h' | '24h';
|
|
8
|
+
includeTime?: boolean;
|
|
9
|
+
customFormat?: string;
|
|
10
|
+
}
|
|
11
|
+
declare class DateHelper {
|
|
12
|
+
private static readonly MONTH_NAMES_SHORT;
|
|
13
|
+
private static readonly MONTH_NAMES_FULL;
|
|
14
|
+
static formatDate(input: string | number | Date, options?: FormatDateOptions): string;
|
|
15
|
+
static toLocalISOString(date: Date | string): string;
|
|
16
|
+
static parseDate(dateString: string, formatString?: string): Date | null;
|
|
17
|
+
static startOfDay(date: Date | string): Date;
|
|
18
|
+
static endOfDay(date: Date | string): Date;
|
|
19
|
+
static addDays(date: Date | string, days: number): Date;
|
|
20
|
+
static subtractDays(date: Date | string, days: number): Date;
|
|
21
|
+
static compareDates(date1: Date | string, date2: Date | string): number;
|
|
22
|
+
static isValidDate(date: any): boolean;
|
|
23
|
+
static differenceInDays(date1: Date | string, date2: Date | string): number;
|
|
24
|
+
static getTodayISO(): string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { DateHelper, type FormatDateOptions };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
import{format as o,parseISO as s,isValid as c,formatISO as D,parse as g,startOfDay as p,endOfDay as d,addDays as M,subDays as O,isBefore as b,isAfter as h,differenceInDays as w}from"date-fns";var m=class{static MONTH_NAMES_SHORT=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];static MONTH_NAMES_FULL=["January","February","March","April","May","June","July","August","September","October","November","December"];static formatDate(t,e={}){let{format:a="short",separator:r="-",locale:i,timeFormat:y="24h",includeTime:$=!1,customFormat:u}=e,n;if(typeof t=="string"?(n=s(t),c(n)||(n=new Date(t))):n=new Date(t),!c(n))return"";if(u)return o(n,u,{locale:i});switch(a){case"iso":return D(n,{representation:"date"});case"short":return o(n,`dd${r}MM${r}yyyy`,{locale:i});case"medium":return o(n,`dd${r}MMM${r}yyyy`,{locale:i});case"long":return o(n,`dd${r}MMMM${r}yyyy`,{locale:i});case"full":return o(n,"EEEE, MMMM dd, yyyy",{locale:i});case"time":return o(n,y==="12h"?"hh:mm a":"HH:mm",{locale:i});case"datetime":let f=this.formatDate(t,{format:"short",separator:r,locale:i}),l=this.formatDate(t,{format:"time",timeFormat:y,locale:i});return`${f} ${l}`;default:return o(n,`dd${r}MM${r}yyyy`,{locale:i})}}static toLocalISOString(t){let e=typeof t=="string"?s(t):new Date(t);return c(e)?D(e,{representation:"date"}):""}static parseDate(t,e){if(e){let r=g(t,e,new Date);return c(r)?r:null}let a=s(t);return c(a)?a:null}static startOfDay(t){let e=typeof t=="string"?s(t):new Date(t);return p(e)}static endOfDay(t){let e=typeof t=="string"?s(t):new Date(t);return d(e)}static addDays(t,e){let a=typeof t=="string"?s(t):new Date(t);return M(a,e)}static subtractDays(t,e){let a=typeof t=="string"?s(t):new Date(t);return O(a,e)}static compareDates(t,e){let a=typeof t=="string"?s(t):new Date(t),r=typeof e=="string"?s(e):new Date(e);return b(a,r)?-1:h(a,r)?1:0}static isValidDate(t){if(!t)return!1;let e=typeof t=="string"?s(t):new Date(t);return c(e)}static differenceInDays(t,e){let a=typeof t=="string"?s(t):new Date(t),r=typeof e=="string"?s(e):new Date(e);return w(a,r)}static getTodayISO(){return this.toLocalISOString(new Date)}};export{m as DateHelper};
|
|
3
|
+
//# sourceMappingURL=date-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/date-helper.tsx"],"sourcesContent":["import {\r\n format,\r\n parseISO,\r\n isValid,\r\n formatISO,\r\n parse,\r\n startOfDay,\r\n endOfDay,\r\n addDays,\r\n subDays,\r\n isBefore,\r\n isAfter,\r\n differenceInDays,\r\n Locale\r\n} from 'date-fns';\r\n\r\nexport interface FormatDateOptions {\r\n format?: 'iso' | 'short' | 'medium' | 'long' | 'full' | 'custom' | 'time' | 'datetime';\r\n separator?: string;\r\n locale?: Locale;\r\n timeFormat?: '12h' | '24h';\r\n includeTime?: boolean;\r\n customFormat?: string;\r\n}\r\n\r\nexport class DateHelper {\r\n private static readonly MONTH_NAMES_SHORT = [\r\n 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\r\n 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'\r\n ];\r\n\r\n private static readonly MONTH_NAMES_FULL = [\r\n 'January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'\r\n ];\r\n\r\n /**\r\n * Formats a date according to specified options with timezone safety\r\n * @param input Date input (string, number, or Date object)\r\n * @param options Formatting options\r\n * @returns Formatted date string\r\n */\r\n static formatDate(\r\n input: string | number | Date,\r\n options: FormatDateOptions = {}\r\n ): string {\r\n const {\r\n format: formatType = 'short',\r\n separator = '-',\r\n locale,\r\n timeFormat = '24h',\r\n includeTime = false,\r\n customFormat\r\n } = options;\r\n\r\n let dateObj: Date;\r\n\r\n if (typeof input === 'string') {\r\n dateObj = parseISO(input);\r\n if (!isValid(dateObj)) {\r\n dateObj = new Date(input);\r\n }\r\n } else {\r\n dateObj = new Date(input);\r\n }\r\n\r\n if (!isValid(dateObj)) return '';\r\n\r\n if (customFormat) {\r\n return format(dateObj, customFormat, { locale });\r\n }\r\n\r\n switch (formatType) {\r\n case 'iso':\r\n return formatISO(dateObj, { representation: 'date' });\r\n\r\n case 'short':\r\n return format(dateObj, `dd${separator}MM${separator}yyyy`, { locale });\r\n\r\n case 'medium':\r\n return format(dateObj, `dd${separator}MMM${separator}yyyy`, { locale });\r\n\r\n case 'long':\r\n return format(dateObj, `dd${separator}MMMM${separator}yyyy`, { locale });\r\n\r\n case 'full':\r\n return format(dateObj, 'EEEE, MMMM dd, yyyy', { locale });\r\n\r\n case 'time':\r\n return format(\r\n dateObj,\r\n timeFormat === '12h' ? 'hh:mm a' : 'HH:mm',\r\n { locale }\r\n );\r\n\r\n case 'datetime':\r\n const datePart = this.formatDate(input, { format: 'short', separator, locale });\r\n const timePart = this.formatDate(input, { format: 'time', timeFormat, locale });\r\n return `${datePart} ${timePart}`;\r\n\r\n default:\r\n return format(dateObj, `dd${separator}MM${separator}yyyy`, { locale });\r\n }\r\n }\r\n\r\n /**\r\n * Converts date to local ISO string (timezone safe)\r\n */\r\n static toLocalISOString(date: Date | string): string {\r\n const d = typeof date === 'string' ? parseISO(date) : new Date(date);\r\n if (!isValid(d)) return '';\r\n\r\n return formatISO(d, { representation: 'date' });\r\n }\r\n\r\n /**\r\n * Parses a date string with format validation\r\n */\r\n static parseDate(dateString: string, formatString?: string): Date | null {\r\n if (formatString) {\r\n const parsed = parse(dateString, formatString, new Date());\r\n return isValid(parsed) ? parsed : null;\r\n }\r\n\r\n const parsed = parseISO(dateString);\r\n return isValid(parsed) ? parsed : null;\r\n }\r\n\r\n /**\r\n * Gets start of day (timezone safe)\r\n */\r\n static startOfDay(date: Date | string): Date {\r\n const d = typeof date === 'string' ? parseISO(date) : new Date(date);\r\n return startOfDay(d);\r\n }\r\n\r\n /**\r\n * Gets end of day (timezone safe)\r\n */\r\n static endOfDay(date: Date | string): Date {\r\n const d = typeof date === 'string' ? parseISO(date) : new Date(date);\r\n return endOfDay(d);\r\n }\r\n\r\n /**\r\n * Adds days to a date\r\n */\r\n static addDays(date: Date | string, days: number): Date {\r\n const d = typeof date === 'string' ? parseISO(date) : new Date(date);\r\n return addDays(d, days);\r\n }\r\n\r\n /**\r\n * Subtracts days from a date\r\n */\r\n static subtractDays(date: Date | string, days: number): Date {\r\n const d = typeof date === 'string' ? parseISO(date) : new Date(date);\r\n return subDays(d, days);\r\n }\r\n\r\n /**\r\n * Compares two dates\r\n */\r\n static compareDates(date1: Date | string, date2: Date | string): number {\r\n const d1 = typeof date1 === 'string' ? parseISO(date1) : new Date(date1);\r\n const d2 = typeof date2 === 'string' ? parseISO(date2) : new Date(date2);\r\n\r\n if (isBefore(d1, d2)) return -1;\r\n if (isAfter(d1, d2)) return 1;\r\n return 0;\r\n }\r\n\r\n /**\r\n * Checks if date is valid\r\n */\r\n static isValidDate(date: any): boolean {\r\n if (!date) return false;\r\n const d = typeof date === 'string' ? parseISO(date) : new Date(date);\r\n return isValid(d);\r\n }\r\n\r\n /**\r\n * Gets difference between two dates in days\r\n */\r\n static differenceInDays(date1: Date | string, date2: Date | string): number {\r\n const d1 = typeof date1 === 'string' ? parseISO(date1) : new Date(date1);\r\n const d2 = typeof date2 === 'string' ? parseISO(date2) : new Date(date2);\r\n return differenceInDays(d1, d2);\r\n }\r\n\r\n /**\r\n * Gets current date in local ISO format\r\n */\r\n static getTodayISO(): string {\r\n return this.toLocalISOString(new Date());\r\n }\r\n}"],"mappings":"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","names":["format","parseISO","isValid","formatISO","parse","startOfDay","endOfDay","addDays","subDays","isBefore","isAfter","differenceInDays","DateHelper","input","options","formatType","separator","locale","timeFormat","includeTime","customFormat","dateObj","datePart","timePart","date","d","dateString","formatString","parsed","days","date1","date2","d1","d2"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
"use strict";var H=Object.create;var C=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var X=Object.getOwnPropertyNames;var G=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var K=(t,a)=>{for(var o in a)C(t,o,{get:a[o],enumerable:!0})},R=(t,a,o,n)=>{if(a&&typeof a=="object"||typeof a=="function")for(let i of X(a))!J.call(t,i)&&i!==o&&C(t,i,{get:()=>a[i],enumerable:!(n=W(a,i))||n.enumerable});return t};var Q=(t,a,o)=>(o=t!=null?H(G(t)):{},R(a||!t||!t.__esModule?C(o,"default",{value:t,enumerable:!0}):o,t)),U=t=>R(C({},"__esModule",{value:!0}),t);var E={};K(E,{DateFilter:()=>Z});module.exports=U(E);var y=require("react"),F=require("lucide-react"),b=require("date-fns");var x=require("radix-ui");var D=require("clsx"),M=require("tailwind-merge");function e(...t){return(0,M.twMerge)((0,D.clsx)(t))}var w=require("react/jsx-runtime");function B({...t}){return(0,w.jsx)(x.Popover.Root,{"data-slot":"popover",...t})}function V({...t}){return(0,w.jsx)(x.Popover.Trigger,{"data-slot":"popover-trigger",...t})}function S({className:t,align:a="center",sideOffset:o=4,...n}){return(0,w.jsx)(x.Popover.Portal,{children:(0,w.jsx)(x.Popover.Content,{"data-slot":"popover-content",align:a,sideOffset:o,className:e("bg-popover text-popover-foreground 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 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",t),...n})})}var T=require("radix-ui"),O=require("class-variance-authority");var A=require("react/jsx-runtime"),_=(0,O.cva)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9"}},defaultVariants:{variant:"default",size:"default"}});function g({className:t,variant:a,size:o,asChild:n=!1,...i}){let u=n?T.Slot.Slot:"button";return(0,A.jsx)(u,{"data-slot":"button",className:e(_({variant:a,size:o,className:t}),"transition-none"),...i})}var k=Q(require("react"),1),v=require("lucide-react"),P=require("react-day-picker");var p=require("react/jsx-runtime");function I({className:t,classNames:a,showOutsideDays:o=!0,captionLayout:n="label",buttonVariant:i="ghost",formatters:u,components:f,...z}){let r=(0,P.getDefaultClassNames)();return(0,p.jsx)(P.DayPicker,{showOutsideDays:o,className:e("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,t),captionLayout:n,formatters:{formatMonthDropdown:s=>s.toLocaleString("default",{month:"short"}),...u},classNames:{root:e("w-fit",r.root),months:e("flex gap-4 flex-col md:flex-row relative",r.months),month:e("flex flex-col w-full gap-4",r.month),nav:e("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",r.nav),button_previous:e(_({variant:i}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",r.button_previous),button_next:e(_({variant:i}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",r.button_next),month_caption:e("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",r.month_caption),dropdowns:e("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",r.dropdowns),dropdown_root:e("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",r.dropdown_root),dropdown:e("absolute bg-popover inset-0 opacity-0",r.dropdown),caption_label:e("select-none font-medium",n==="label"?"text-sm":"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",r.caption_label),table:"w-full border-collapse",weekdays:e("flex",r.weekdays),weekday:e("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",r.weekday),week:e("flex w-full mt-2",r.week),week_number_header:e("select-none w-(--cell-size)",r.week_number_header),week_number:e("text-[0.8rem] select-none text-muted-foreground",r.week_number),day:e("relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",r.day),range_start:e("rounded-l-md bg-accent",r.range_start),range_middle:e("rounded-none",r.range_middle),range_end:e("rounded-r-md bg-accent",r.range_end),today:e("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",r.today),outside:e("text-muted-foreground aria-selected:text-muted-foreground",r.outside),disabled:e("text-muted-foreground opacity-50",r.disabled),hidden:e("invisible",r.hidden),...a},components:{Root:({className:s,rootRef:c,...m})=>(0,p.jsx)("div",{"data-slot":"calendar",ref:c,className:e(s),...m}),Chevron:({className:s,orientation:c,...m})=>c==="left"?(0,p.jsx)(v.ChevronLeftIcon,{className:e("size-4",s),...m}):c==="right"?(0,p.jsx)(v.ChevronRightIcon,{className:e("size-4",s),...m}):(0,p.jsx)(v.ChevronDownIcon,{className:e("size-4",s),...m}),DayButton:Y,WeekNumber:({children:s,...c})=>(0,p.jsx)("td",{...c,children:(0,p.jsx)("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:s})}),...f},...z})}function Y({className:t,day:a,modifiers:o,...n}){let i=(0,P.getDefaultClassNames)(),u=k.useRef(null);return k.useEffect(()=>{o.focused&&u.current?.focus()},[o.focused]),(0,p.jsx)(g,{ref:u,variant:"ghost",size:"icon","data-day":a.date.toLocaleDateString(),"data-selected-single":o.selected&&!o.range_start&&!o.range_end&&!o.range_middle,"data-range-start":o.range_start,"data-range-end":o.range_end,"data-range-middle":o.range_middle,className:e("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",i.day,t),...n})}var l=require("react/jsx-runtime");function Z({value:t,onChange:a,placeholder:o,mode:n,externalSearch:i,onExternalChange:u,onlyExternal:f=!1}){let[z,r]=(0,y.useState)(!1),[s,c]=(0,y.useState)(t),[m,h]=(0,y.useState)(t);(0,y.useEffect)(()=>{f||h(t)},[t,f]);let L=()=>{f||a(s),h(s),i&&u&&u(s),r(!1)},$=()=>{c(m),r(!1)},j=()=>{let d=n==="single"?null:{from:null,to:null};c(d),f||a(d),h(d),i&&u&&u(d),r(!1)},N=()=>{let d=f?m:t;return d?n==="single"?(0,b.format)(d,"PPP"):d.from&&d.to?`${(0,b.format)(d.from,"MMM dd")} - ${(0,b.format)(d.to,"MMM dd, yyyy")}`:d.from?`From ${(0,b.format)(d.from,"MMM dd, yyyy")}`:d.to?`To ${(0,b.format)(d.to,"MMM dd, yyyy")}`:o:o},q=d=>{c(n==="single"?d:d||{from:null,to:null})};return(0,l.jsxs)(B,{open:z,onOpenChange:r,children:[(0,l.jsx)(V,{className:"h-8",asChild:!0,children:(0,l.jsxs)(g,{variant:"outline",className:e("w-full justify-start text-left font-normal h-9",!N()&&"text-muted-foreground"),children:[(0,l.jsx)(F.Calendar,{className:"mr-2 h-4 w-4"}),N()]})}),(0,l.jsxs)(S,{className:"w-auto p-0",align:"start",children:[(0,l.jsx)("div",{className:"p-3",children:(0,l.jsx)(I,{mode:n,selected:s,onSelect:q,numberOfMonths:n==="range"?2:1,className:"rounded-md border",...n==="range"&&{required:!0}})}),(0,l.jsxs)("div",{className:"flex items-center justify-between p-3 border-t",children:[(0,l.jsx)(g,{variant:"ghost",size:"sm",onClick:j,children:"Clear"}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)(g,{variant:"outline",size:"sm",onClick:$,children:"Cancel"}),(0,l.jsx)(g,{size:"sm",onClick:L,disabled:n==="range"&&(!s?.from||!s?.to),children:"Apply"})]})]})]})]})}0&&(module.exports={DateFilter});
|
|
3
|
+
//# sourceMappingURL=date-filter.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/helper/date-filter.tsx","../../../src/components/ui/popover.tsx","../../../src/lib/utils.ts","../../../src/components/ui/button.tsx","../../../src/components/ui/calendar.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\r\nimport { Calendar as CalendarIcon, Check, X } from \"lucide-react\";\r\nimport { format } from \"date-fns\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover.js\";\r\nimport { Button } from \"../ui/button.js\";\r\nimport { cn } from \"../../lib/utils.js\";\r\nimport { Calendar } from \"../ui/calendar.js\";\r\n\r\ntype DateFilterProps = {\r\n value: any;\r\n onChange: (value: any) => void;\r\n placeholder: string;\r\n mode: \"single\" | \"range\";\r\n externalSearch?: boolean;\r\n onExternalChange?: (value: any) => void;\r\n onlyExternal?: boolean;\r\n}\r\n\r\nexport function DateFilter({\r\n value,\r\n onChange,\r\n placeholder,\r\n mode,\r\n externalSearch,\r\n onExternalChange,\r\n onlyExternal = false,\r\n}: DateFilterProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [tempValue, setTempValue] = useState(value);\r\n const [displayValue, setDisplayValue] = useState(value);\r\n\r\n useEffect(() => {\r\n if (!onlyExternal) {\r\n setDisplayValue(value);\r\n }\r\n }, [value, onlyExternal]);\r\n\r\n const handleApply = () => {\r\n if (!onlyExternal) {\r\n onChange(tempValue);\r\n setDisplayValue(tempValue);\r\n } else {\r\n // For onlyExternal, update the display value but don't call onChange\r\n setDisplayValue(tempValue);\r\n }\r\n\r\n if (externalSearch && onExternalChange) {\r\n onExternalChange(tempValue);\r\n }\r\n setIsOpen(false);\r\n };\r\n\r\n const handleCancel = () => {\r\n setTempValue(displayValue); // Use displayValue instead of value\r\n setIsOpen(false);\r\n };\r\n\r\n const handleClear = () => {\r\n const newValue = mode === \"single\" ? null : { from: null, to: null };\r\n setTempValue(newValue);\r\n\r\n if (!onlyExternal) {\r\n onChange(newValue);\r\n setDisplayValue(newValue);\r\n } else {\r\n // For onlyExternal, update the display value but don't call onChange\r\n setDisplayValue(newValue);\r\n }\r\n\r\n if (externalSearch && onExternalChange) {\r\n onExternalChange(newValue);\r\n }\r\n setIsOpen(false);\r\n };\r\n\r\n const displayText = () => {\r\n const valueToDisplay = onlyExternal ? displayValue : value;\r\n\r\n if (!valueToDisplay) return placeholder;\r\n\r\n if (mode === \"single\") {\r\n return format(valueToDisplay, \"PPP\");\r\n }\r\n\r\n if (valueToDisplay.from && valueToDisplay.to) {\r\n return `${format(valueToDisplay.from, \"MMM dd\")} - ${format(valueToDisplay.to, \"MMM dd, yyyy\")}`;\r\n }\r\n\r\n if (valueToDisplay.from) {\r\n return `From ${format(valueToDisplay.from, \"MMM dd, yyyy\")}`;\r\n }\r\n\r\n if (valueToDisplay.to) {\r\n return `To ${format(valueToDisplay.to, \"MMM dd, yyyy\")}`;\r\n }\r\n\r\n return placeholder;\r\n };\r\n\r\n const handleCalendarSelect = (selectedValue: any) => {\r\n if (mode === \"single\") {\r\n setTempValue(selectedValue);\r\n } else {\r\n setTempValue(selectedValue || { from: null, to: null });\r\n }\r\n };\r\n\r\n return (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger className=\"h-8\" asChild>\r\n <Button\r\n variant=\"outline\"\r\n className={cn(\r\n \"w-full justify-start text-left font-normal h-9\",\r\n !displayText() && \"text-muted-foreground\"\r\n )}\r\n >\r\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\r\n {displayText()}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\r\n <div className=\"p-3\">\r\n <Calendar\r\n mode={mode}\r\n selected={tempValue}\r\n onSelect={handleCalendarSelect}\r\n numberOfMonths={mode === \"range\" ? 2 : 1}\r\n className=\"rounded-md border\"\r\n {...(mode === \"range\" && { required: true })}\r\n />\r\n </div>\r\n <div className=\"flex items-center justify-between p-3 border-t\">\r\n <Button variant=\"ghost\" size=\"sm\" onClick={handleClear}>\r\n Clear\r\n </Button>\r\n <div className=\"flex gap-2\">\r\n <Button variant=\"outline\" size=\"sm\" onClick={handleCancel}>\r\n Cancel\r\n </Button>\r\n <Button\r\n size=\"sm\"\r\n onClick={handleApply}\r\n disabled={mode === \"range\" && (!tempValue?.from || !tempValue?.to)}\r\n >\r\n Apply\r\n </Button>\r\n </div>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n}","import * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground 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 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\nimport { Slot as SlotPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\"\n\nimport { cn } from \"../../lib/utils.js\"\nimport { Button, buttonVariants } from \"../ui/button.jsx\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-md bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n today: cn(\n \"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"size-4\", className)}\n {...props}\n />\n )\n }\n\n return (\n <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n"],"mappings":"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","names":["date_filter_exports","__export","DateFilter","__toCommonJS","import_react","import_lucide_react","import_date_fns","import_radix_ui","import_clsx","import_tailwind_merge","cn","inputs","import_jsx_runtime","Popover","props","PopoverPrimitive","PopoverTrigger","PopoverContent","className","align","sideOffset","cn","import_radix_ui","import_class_variance_authority","import_jsx_runtime","buttonVariants","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","React","import_lucide_react","import_react_day_picker","import_jsx_runtime","Calendar","className","classNames","showOutsideDays","captionLayout","buttonVariant","formatters","components","props","defaultClassNames","cn","date","buttonVariants","rootRef","orientation","CalendarDayButton","children","day","modifiers","ref","Button","import_jsx_runtime","DateFilter","value","onChange","placeholder","mode","externalSearch","onExternalChange","onlyExternal","isOpen","setIsOpen","tempValue","setTempValue","displayValue","setDisplayValue","handleApply","handleCancel","handleClear","newValue","displayText","valueToDisplay","handleCalendarSelect","selectedValue","Popover","PopoverTrigger","Button","cn","CalendarIcon","PopoverContent","Calendar"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type DateFilterProps = {
|
|
4
|
+
value: any;
|
|
5
|
+
onChange: (value: any) => void;
|
|
6
|
+
placeholder: string;
|
|
7
|
+
mode: "single" | "range";
|
|
8
|
+
externalSearch?: boolean;
|
|
9
|
+
onExternalChange?: (value: any) => void;
|
|
10
|
+
onlyExternal?: boolean;
|
|
11
|
+
};
|
|
12
|
+
declare function DateFilter({ value, onChange, placeholder, mode, externalSearch, onExternalChange, onlyExternal, }: DateFilterProps): react_jsx_runtime.JSX.Element;
|
|
13
|
+
|
|
14
|
+
export { DateFilter };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type DateFilterProps = {
|
|
4
|
+
value: any;
|
|
5
|
+
onChange: (value: any) => void;
|
|
6
|
+
placeholder: string;
|
|
7
|
+
mode: "single" | "range";
|
|
8
|
+
externalSearch?: boolean;
|
|
9
|
+
onExternalChange?: (value: any) => void;
|
|
10
|
+
onlyExternal?: boolean;
|
|
11
|
+
};
|
|
12
|
+
declare function DateFilter({ value, onChange, placeholder, mode, externalSearch, onExternalChange, onlyExternal, }: DateFilterProps): react_jsx_runtime.JSX.Element;
|
|
13
|
+
|
|
14
|
+
export { DateFilter };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
import{useEffect as X,useState as _}from"react";import{Calendar as G}from"lucide-react";import{format as b}from"date-fns";import{Popover as h}from"radix-ui";import{clsx as O}from"clsx";import{twMerge as A}from"tailwind-merge";function e(...r){return A(O(r))}import{jsx as x}from"react/jsx-runtime";function z({...r}){return x(h.Root,{"data-slot":"popover",...r})}function N({...r}){return x(h.Trigger,{"data-slot":"popover-trigger",...r})}function R({className:r,align:l="center",sideOffset:a=4,...d}){return x(h.Portal,{children:x(h.Content,{"data-slot":"popover-content",align:l,sideOffset:a,className:e("bg-popover text-popover-foreground 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 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",r),...d})})}import{Slot as I}from"radix-ui";import{cva as F}from"class-variance-authority";import{jsx as L}from"react/jsx-runtime";var w=F("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9"}},defaultVariants:{variant:"default",size:"default"}});function f({className:r,variant:l,size:a,asChild:d=!1,...u}){let s=d?I.Slot:"button";return L(s,{"data-slot":"button",className:e(w({variant:l,size:a,className:r}),"transition-none"),...u})}import*as P from"react";import{ChevronDownIcon as $,ChevronLeftIcon as j,ChevronRightIcon as q}from"lucide-react";import{DayPicker as H,getDefaultClassNames as D}from"react-day-picker";import{jsx as p}from"react/jsx-runtime";function M({className:r,classNames:l,showOutsideDays:a=!0,captionLayout:d="label",buttonVariant:u="ghost",formatters:s,components:m,...C}){let t=D();return p(H,{showOutsideDays:a,className:e("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,r),captionLayout:d,formatters:{formatMonthDropdown:n=>n.toLocaleString("default",{month:"short"}),...s},classNames:{root:e("w-fit",t.root),months:e("flex gap-4 flex-col md:flex-row relative",t.months),month:e("flex flex-col w-full gap-4",t.month),nav:e("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",t.nav),button_previous:e(w({variant:u}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",t.button_previous),button_next:e(w({variant:u}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",t.button_next),month_caption:e("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",t.month_caption),dropdowns:e("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",t.dropdowns),dropdown_root:e("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",t.dropdown_root),dropdown:e("absolute bg-popover inset-0 opacity-0",t.dropdown),caption_label:e("select-none font-medium",d==="label"?"text-sm":"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",t.caption_label),table:"w-full border-collapse",weekdays:e("flex",t.weekdays),weekday:e("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",t.weekday),week:e("flex w-full mt-2",t.week),week_number_header:e("select-none w-(--cell-size)",t.week_number_header),week_number:e("text-[0.8rem] select-none text-muted-foreground",t.week_number),day:e("relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",t.day),range_start:e("rounded-l-md bg-accent",t.range_start),range_middle:e("rounded-none",t.range_middle),range_end:e("rounded-r-md bg-accent",t.range_end),today:e("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",t.today),outside:e("text-muted-foreground aria-selected:text-muted-foreground",t.outside),disabled:e("text-muted-foreground opacity-50",t.disabled),hidden:e("invisible",t.hidden),...l},components:{Root:({className:n,rootRef:i,...c})=>p("div",{"data-slot":"calendar",ref:i,className:e(n),...c}),Chevron:({className:n,orientation:i,...c})=>i==="left"?p(j,{className:e("size-4",n),...c}):i==="right"?p(q,{className:e("size-4",n),...c}):p($,{className:e("size-4",n),...c}),DayButton:W,WeekNumber:({children:n,...i})=>p("td",{...i,children:p("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:n})}),...m},...C})}function W({className:r,day:l,modifiers:a,...d}){let u=D(),s=P.useRef(null);return P.useEffect(()=>{a.focused&&s.current?.focus()},[a.focused]),p(f,{ref:s,variant:"ghost",size:"icon","data-day":l.date.toLocaleDateString(),"data-selected-single":a.selected&&!a.range_start&&!a.range_end&&!a.range_middle,"data-range-start":a.range_start,"data-range-end":a.range_end,"data-range-middle":a.range_middle,className:e("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",u.day,r),...d})}import{jsx as g,jsxs as y}from"react/jsx-runtime";function we({value:r,onChange:l,placeholder:a,mode:d,externalSearch:u,onExternalChange:s,onlyExternal:m=!1}){let[C,t]=_(!1),[n,i]=_(r),[c,v]=_(r);X(()=>{m||v(r)},[r,m]);let B=()=>{m||l(n),v(n),u&&s&&s(n),t(!1)},V=()=>{i(c),t(!1)},S=()=>{let o=d==="single"?null:{from:null,to:null};i(o),m||l(o),v(o),u&&s&&s(o),t(!1)},k=()=>{let o=m?c:r;return o?d==="single"?b(o,"PPP"):o.from&&o.to?`${b(o.from,"MMM dd")} - ${b(o.to,"MMM dd, yyyy")}`:o.from?`From ${b(o.from,"MMM dd, yyyy")}`:o.to?`To ${b(o.to,"MMM dd, yyyy")}`:a:a},T=o=>{i(d==="single"?o:o||{from:null,to:null})};return y(z,{open:C,onOpenChange:t,children:[g(N,{className:"h-8",asChild:!0,children:y(f,{variant:"outline",className:e("w-full justify-start text-left font-normal h-9",!k()&&"text-muted-foreground"),children:[g(G,{className:"mr-2 h-4 w-4"}),k()]})}),y(R,{className:"w-auto p-0",align:"start",children:[g("div",{className:"p-3",children:g(M,{mode:d,selected:n,onSelect:T,numberOfMonths:d==="range"?2:1,className:"rounded-md border",...d==="range"&&{required:!0}})}),y("div",{className:"flex items-center justify-between p-3 border-t",children:[g(f,{variant:"ghost",size:"sm",onClick:S,children:"Clear"}),y("div",{className:"flex gap-2",children:[g(f,{variant:"outline",size:"sm",onClick:V,children:"Cancel"}),g(f,{size:"sm",onClick:B,disabled:d==="range"&&(!n?.from||!n?.to),children:"Apply"})]})]})]})]})}export{we as DateFilter};
|
|
3
|
+
//# sourceMappingURL=date-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/helper/date-filter.tsx","../../../src/components/ui/popover.tsx","../../../src/lib/utils.ts","../../../src/components/ui/button.tsx","../../../src/components/ui/calendar.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\r\nimport { Calendar as CalendarIcon, Check, X } from \"lucide-react\";\r\nimport { format } from \"date-fns\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover.js\";\r\nimport { Button } from \"../ui/button.js\";\r\nimport { cn } from \"../../lib/utils.js\";\r\nimport { Calendar } from \"../ui/calendar.js\";\r\n\r\ntype DateFilterProps = {\r\n value: any;\r\n onChange: (value: any) => void;\r\n placeholder: string;\r\n mode: \"single\" | \"range\";\r\n externalSearch?: boolean;\r\n onExternalChange?: (value: any) => void;\r\n onlyExternal?: boolean;\r\n}\r\n\r\nexport function DateFilter({\r\n value,\r\n onChange,\r\n placeholder,\r\n mode,\r\n externalSearch,\r\n onExternalChange,\r\n onlyExternal = false,\r\n}: DateFilterProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [tempValue, setTempValue] = useState(value);\r\n const [displayValue, setDisplayValue] = useState(value);\r\n\r\n useEffect(() => {\r\n if (!onlyExternal) {\r\n setDisplayValue(value);\r\n }\r\n }, [value, onlyExternal]);\r\n\r\n const handleApply = () => {\r\n if (!onlyExternal) {\r\n onChange(tempValue);\r\n setDisplayValue(tempValue);\r\n } else {\r\n // For onlyExternal, update the display value but don't call onChange\r\n setDisplayValue(tempValue);\r\n }\r\n\r\n if (externalSearch && onExternalChange) {\r\n onExternalChange(tempValue);\r\n }\r\n setIsOpen(false);\r\n };\r\n\r\n const handleCancel = () => {\r\n setTempValue(displayValue); // Use displayValue instead of value\r\n setIsOpen(false);\r\n };\r\n\r\n const handleClear = () => {\r\n const newValue = mode === \"single\" ? null : { from: null, to: null };\r\n setTempValue(newValue);\r\n\r\n if (!onlyExternal) {\r\n onChange(newValue);\r\n setDisplayValue(newValue);\r\n } else {\r\n // For onlyExternal, update the display value but don't call onChange\r\n setDisplayValue(newValue);\r\n }\r\n\r\n if (externalSearch && onExternalChange) {\r\n onExternalChange(newValue);\r\n }\r\n setIsOpen(false);\r\n };\r\n\r\n const displayText = () => {\r\n const valueToDisplay = onlyExternal ? displayValue : value;\r\n\r\n if (!valueToDisplay) return placeholder;\r\n\r\n if (mode === \"single\") {\r\n return format(valueToDisplay, \"PPP\");\r\n }\r\n\r\n if (valueToDisplay.from && valueToDisplay.to) {\r\n return `${format(valueToDisplay.from, \"MMM dd\")} - ${format(valueToDisplay.to, \"MMM dd, yyyy\")}`;\r\n }\r\n\r\n if (valueToDisplay.from) {\r\n return `From ${format(valueToDisplay.from, \"MMM dd, yyyy\")}`;\r\n }\r\n\r\n if (valueToDisplay.to) {\r\n return `To ${format(valueToDisplay.to, \"MMM dd, yyyy\")}`;\r\n }\r\n\r\n return placeholder;\r\n };\r\n\r\n const handleCalendarSelect = (selectedValue: any) => {\r\n if (mode === \"single\") {\r\n setTempValue(selectedValue);\r\n } else {\r\n setTempValue(selectedValue || { from: null, to: null });\r\n }\r\n };\r\n\r\n return (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger className=\"h-8\" asChild>\r\n <Button\r\n variant=\"outline\"\r\n className={cn(\r\n \"w-full justify-start text-left font-normal h-9\",\r\n !displayText() && \"text-muted-foreground\"\r\n )}\r\n >\r\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\r\n {displayText()}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\r\n <div className=\"p-3\">\r\n <Calendar\r\n mode={mode}\r\n selected={tempValue}\r\n onSelect={handleCalendarSelect}\r\n numberOfMonths={mode === \"range\" ? 2 : 1}\r\n className=\"rounded-md border\"\r\n {...(mode === \"range\" && { required: true })}\r\n />\r\n </div>\r\n <div className=\"flex items-center justify-between p-3 border-t\">\r\n <Button variant=\"ghost\" size=\"sm\" onClick={handleClear}>\r\n Clear\r\n </Button>\r\n <div className=\"flex gap-2\">\r\n <Button variant=\"outline\" size=\"sm\" onClick={handleCancel}>\r\n Cancel\r\n </Button>\r\n <Button\r\n size=\"sm\"\r\n onClick={handleApply}\r\n disabled={mode === \"range\" && (!tempValue?.from || !tempValue?.to)}\r\n >\r\n Apply\r\n </Button>\r\n </div>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n}","import * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground 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 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\nimport { Slot as SlotPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\"\n\nimport { cn } from \"../../lib/utils.js\"\nimport { Button, buttonVariants } from \"../ui/button.jsx\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-md bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n today: cn(\n \"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"size-4\", className)}\n {...props}\n />\n )\n }\n\n return (\n <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n"],"mappings":"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","names":["useEffect","useState","CalendarIcon","format","PopoverPrimitive","clsx","twMerge","cn","inputs","jsx","Popover","props","PopoverPrimitive","PopoverTrigger","PopoverContent","className","align","sideOffset","cn","SlotPrimitive","cva","jsx","buttonVariants","cva","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","React","ChevronDownIcon","ChevronLeftIcon","ChevronRightIcon","DayPicker","getDefaultClassNames","jsx","Calendar","className","classNames","showOutsideDays","captionLayout","buttonVariant","formatters","components","props","defaultClassNames","getDefaultClassNames","DayPicker","cn","date","buttonVariants","rootRef","orientation","ChevronLeftIcon","ChevronRightIcon","ChevronDownIcon","CalendarDayButton","children","day","modifiers","ref","Button","jsx","jsxs","DateFilter","value","onChange","placeholder","mode","externalSearch","onExternalChange","onlyExternal","isOpen","setIsOpen","useState","tempValue","setTempValue","displayValue","setDisplayValue","useEffect","handleApply","handleCancel","handleClear","newValue","displayText","valueToDisplay","format","handleCalendarSelect","selectedValue","Popover","PopoverTrigger","Button","cn","CalendarIcon","PopoverContent","Calendar"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client"
|
|
2
|
-
"use strict";var
|
|
2
|
+
"use strict";var Q=Object.create;var P=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var Z=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var $=(e,o)=>{for(var s in o)P(e,s,{get:o[s],enumerable:!0})},z=(e,o,s,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let p of Y(o))!_.call(e,p)&&p!==s&&P(e,p,{get:()=>o[p],enumerable:!(n=U(o,p))||n.enumerable});return e};var j=(e,o,s)=>(s=e!=null?Q(Z(e)):{},z(o||!e||!e.__esModule?P(s,"default",{value:e,enumerable:!0}):s,e)),ee=e=>z(P({},"__esModule",{value:!0}),e);var re={};$(re,{AppContent:()=>ne});module.exports=ee(re);var M=require("clsx"),B=require("tailwind-merge");function a(...e){return(0,B.twMerge)((0,M.clsx)(e))}var c=j(require("react"),1);var v=require("radix-ui"),D=require("lucide-react");var r=require("react/jsx-runtime");function F({...e}){return(0,r.jsx)(v.Dialog.Root,{"data-slot":"sheet",...e})}function O({...e}){return(0,r.jsx)(v.Dialog.Portal,{"data-slot":"sheet-portal",...e})}function te({className:e,...o}){return(0,r.jsx)(v.Dialog.Overlay,{"data-slot":"sheet-overlay",className:a("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",e),...o})}function I({className:e,children:o,side:s="right",...n}){return(0,r.jsxs)(O,{children:[(0,r.jsx)(te,{}),(0,r.jsxs)(v.Dialog.Content,{"data-slot":"sheet-content",className:a("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",s==="right"&&"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",s==="left"&&"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",s==="top"&&"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",s==="bottom"&&"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",e),...n,children:[o,(0,r.jsxs)(v.Dialog.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none",children:[(0,r.jsx)(D.XIcon,{className:"size-4"}),(0,r.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}var t=require("react/jsx-runtime"),V=(0,c.createContext)(!1),N={"one-half":["w-1/2","w-1/2"],"one-third":["w-1/3","w-2/3"],"two-third":["w-2/3","w-1/3"],"one-fourth":["w-1/4","w-3/4"],"three-fourth":["w-3/4","w-1/4"],"one-fifth":["w-1/5","w-4/5"],"four-fifth":["w-4/5","w-1/5"]},C={none:"p-0",tight:"p-2",default:"p-4",loose:"p-6"},oe=(e,o)=>{let[s,n]=N[o];return{container:"inset-y-0 z-50 transition-all duration-500 ease-in-out",content:a("h-full bg-background transition-all duration-500 ease-in-out",e==="right"?"border-l":"border-r"),transform:e==="right"?"translate-x-full":"-translate-x-full",transformOpen:"translate-x-0",contentPushClass:e==="right"?n:s,sheetPushClass:e==="right"?s:n}},ae="flex flex-col overflow-hidden rounded-2xl relative",se={default:"bg-background",card:"bg-background shadow-sm border",border:"bg-background border-2",transparent:"bg-transparent"},ne=e=>{let{children:o,className:s,variant:n="default",layout:p="full",header:k,footer:A,headerClassName:q,contentClassName:b,footerClassName:E,parentContainer:i=!1,padding:u=i?"none":"tight"}=e,H=(0,c.useContext)(V),[X,G]=(0,c.useState)(!1),w=c.default.useCallback(f=>(0,t.jsx)("div",{className:a("flex-1 overflow-auto h-full no-scrollbar",i&&"flex",!i&&C[u],b),children:f}),[u,i,b]),J=()=>{switch(p){case"split":{let{splitRatio:f="three-fourth",reverse:m=!1}=e;if(!Array.isArray(o)||o.length!==2)return(0,t.jsx)("div",{className:"flex items-center justify-center h-full text-red-500",children:'Error: AppContent with layout="split" requires exactly 2 children'});let[l,S]=N[f],[g,y]=m?[o[1],o[0]]:[o[0],o[1]],[x,R]=m?[S,l]:[l,S];return(0,t.jsxs)("div",{className:"flex h-full gap-2",children:[(0,t.jsx)("div",{className:a(x,"overflow-auto"),children:w(g)}),(0,t.jsx)("div",{className:a(R,"overflow-auto"),children:w(y)})]})}case"with-sheet":{let{sheetContent:f,sheetWidth:m="four-fifth",sheetSide:l="right",sheetMode:S="container",sheetClassName:g,isSheetOpen:y,onSheetOpenChange:x,disableOverlay:R=!0,showSheetOverlay:K=!0}=e,W=y!==void 0&&x,d=W?y:X,L=W?x:G;if(S==="container"){let h=oe(l,m),T=N[m][0];return R?(0,t.jsxs)("div",{className:a("flex relative flex-1 overflow-hidden",b),children:[(0,t.jsx)("div",{className:a("h-full overflow-auto transition-all duration-500",d?h.contentPushClass:"w-full",d&&"overflow-y-auto overflow-x-hidden"),children:(0,t.jsx)("div",{className:a("h-full",!i&&C[u]),children:o})}),(0,t.jsx)("div",{className:a(h.container,"transition-all duration-500 ease-in-out h-full",T,d&&["left","right"].includes(l)?a(h.sheetPushClass,"overflow-y-auto"):d?h.transformOpen:a(h.transform,"hidden"),"overflow-y-auto"),children:(0,t.jsx)("div",{className:a(h.content,g,"h-full"),children:f})})]}):(0,t.jsxs)("div",{className:a("flex relative flex-1 overflow-hidden",b),children:[(0,t.jsx)("div",{className:a("h-full overflow-auto w-full transition-all duration-500 relative z-10"),children:(0,t.jsx)("div",{className:a("h-full",!i&&C[u]),children:o})}),(0,t.jsxs)("div",{className:a("absolute inset-0 z-20",!d&&"pointer-events-none"),children:[K&&(0,t.jsx)("div",{className:a("absolute inset-0 bg-black/50 transition-opacity duration-500",d?"opacity-100":"opacity-0 pointer-events-none"),onClick:()=>L(!1)}),(0,t.jsx)("div",{className:a(h.container,"transition-all duration-500 backdrop-blur-2xl ease-in-out h-full absolute",T,d?"translate-x-0 opacity-100":a(l==="right"?"translate-x-full":"-translate-x-full","opacity-0 pointer-events-none"),"overflow-y-auto"),style:{[l]:0},children:(0,t.jsx)("div",{className:a(h.content,g,"h-full"),children:f})})]})]})}return(0,t.jsxs)(t.Fragment,{children:[o,(0,t.jsx)(F,{open:d,onOpenChange:L,children:(0,t.jsx)(O,{children:(0,t.jsx)(I,{side:l,className:a("fixed bg-background border sm:max-w-full","transition-all duration-500 ease-in-out",N[m][0],g),children:f})})})]})}default:return w(o)}};return(0,t.jsx)(V.Provider,{value:!0,children:(0,t.jsxs)("div",{className:a(ae,se[n],C[u],H&&"flex-1",i&&"h-full",!i&&"rounded-2xl",s),children:[k&&(0,t.jsx)("div",{className:a("border-b",q,n==="card"&&!i&&"rounded-t-2xl",n==="border"&&"border-b-2",C[u]),children:k}),J(),A&&(0,t.jsx)("div",{className:a("border-t",E,n==="card"&&!i&&"rounded-b-2xl",n==="border"&&"border-t-2",C[u]),children:A})]})})};0&&(module.exports={AppContent});
|
|
3
3
|
//# sourceMappingURL=app-content.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/layouts/app-content.tsx","../../../src/lib/utils.ts","../../../src/components/ui/sheet.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils.js\"\r\nimport React, { useState, createContext, useContext } from \"react\"\r\nimport {\r\n Sheet,\r\n SheetTrigger,\r\n SheetContent,\r\n SheetPortal,\r\n SheetOverlay\r\n} from \"../../components/ui/sheet.jsx\"\r\n\r\nconst AppContentContext = createContext(false)\r\n\r\ntype SplitRatio = \"one-half\" | \"one-third\" | \"two-third\" | \"one-fourth\" | \"three-fourth\" | \"one-fifth\" | \"four-fifth\"\r\n\r\ntype SheetSide = \"right\" | \"bottom\" | \"left\" | \"top\"\r\ntype SheetMode = \"fullscreen\" | \"container\"\r\n\r\ntype BaseAppContentProps = {\r\n children: React.ReactNode\r\n className?: string\r\n variant?: \"default\" | \"card\" | \"border\" | \"transparent\"\r\n header?: React.ReactNode\r\n footer?: React.ReactNode\r\n headerClassName?: string\r\n footerClassName?: string\r\n parentContainer?: boolean\r\n padding?: \"none\" | \"tight\" | \"default\" | \"loose\"\r\n}\r\n\r\ntype FullLayoutProps = BaseAppContentProps & {\r\n layout?: \"full\"\r\n}\r\n\r\ntype SplitLayoutProps = BaseAppContentProps & {\r\n layout: \"split\"\r\n splitRatio?: SplitRatio\r\n reverse?: boolean\r\n}\r\n\r\ntype SheetOptions = {\r\n sheetContent: React.ReactNode\r\n sheetWidth?: SplitRatio\r\n sheetSide?: SheetSide\r\n sheetMode?: SheetMode\r\n onSheetClose?: () => void\r\n showSheetOverlay?: boolean\r\n sheetClassName?: string\r\n isSheetOpen?: boolean\r\n onSheetOpenChange?: (open: boolean) => void\r\n sheetTrigger?: React.ReactNode\r\n disableOverlay?: boolean\r\n}\r\n\r\ntype WithSheetLayoutProps = BaseAppContentProps & {\r\n layout: \"with-sheet\"\r\n} & SheetOptions\r\n\r\nexport type AppContentProps = FullLayoutProps | SplitLayoutProps | WithSheetLayoutProps\r\n\r\nconst splitRatioClasses: Record<SplitRatio, [string, string]> = {\r\n \"one-half\": [\"w-1/2\", \"w-1/2\"],\r\n \"one-third\": [\"w-1/3\", \"w-2/3\"],\r\n \"two-third\": [\"w-2/3\", \"w-1/3\"],\r\n \"one-fourth\": [\"w-1/4\", \"w-3/4\"],\r\n \"three-fourth\": [\"w-3/4\", \"w-1/4\"],\r\n \"one-fifth\": [\"w-1/5\", \"w-4/5\"],\r\n \"four-fifth\": [\"w-4/5\", \"w-1/5\"],\r\n}\r\n\r\nconst paddingClasses = {\r\n none: \"p-0\",\r\n tight: \"p-2\",\r\n default: \"p-4\",\r\n loose: \"p-6\",\r\n}\r\n\r\nconst getContainerSheetClasses = (side: SheetSide, width: SplitRatio) => {\r\n const [contentWidth, sheetWidth] = splitRatioClasses[width]\r\n\r\n return {\r\n container: \"inset-y-0 z-50 transition-all duration-500 ease-in-out\",\r\n content: cn(\r\n \"h-full bg-background transition-all duration-500 ease-in-out\",\r\n side === \"right\" ? \"border-l\" : \"border-r\"\r\n ),\r\n transform: side === \"right\" ? \"translate-x-full\" : \"-translate-x-full\",\r\n transformOpen: \"translate-x-0\",\r\n contentPushClass: side === \"right\" ? contentWidth : sheetWidth,\r\n sheetPushClass: side === \"right\" ? sheetWidth : contentWidth,\r\n }\r\n}\r\n\r\nconst baseClasses = \"flex flex-col overflow-hidden rounded-2xl relative\"\r\nconst variantClasses = {\r\n default: \"bg-background\",\r\n card: \"bg-background shadow-sm border\",\r\n border: \"bg-background border-2\",\r\n transparent: \"bg-transparent\",\r\n}\r\n\r\nexport const AppContent = (props: AppContentProps) => {\r\n const {\r\n children,\r\n className,\r\n variant = \"default\",\r\n layout = \"full\",\r\n header,\r\n footer,\r\n headerClassName,\r\n footerClassName,\r\n parentContainer = false,\r\n padding = parentContainer ? \"none\" : \"tight\",\r\n } = props\r\n\r\n const isNested = useContext(AppContentContext)\r\n const [internalSheetOpen, setInternalSheetOpen] = useState(false)\r\n\r\n const contentWrapper = React.useCallback(\r\n (content: React.ReactNode) => (\r\n <div className={cn(\r\n \"flex-1 overflow-auto h-full no-scrollbar\",\r\n parentContainer && \"flex\",\r\n !parentContainer && paddingClasses[padding]\r\n )}>\r\n {content}\r\n </div>\r\n ),\r\n [padding, parentContainer]\r\n )\r\n\r\n const renderContent = () => {\r\n switch (layout) {\r\n case \"split\": {\r\n const { splitRatio = \"three-fourth\", reverse = false } = props as SplitLayoutProps\r\n if (!Array.isArray(children) || children.length !== 2) {\r\n return (\r\n <div className=\"flex items-center justify-center h-full text-red-500\">\r\n Error: AppContent with layout=\"split\" requires exactly 2 children\r\n </div>\r\n )\r\n }\r\n\r\n const [leftClass, rightClass] = splitRatioClasses[splitRatio]\r\n const [firstChild, secondChild] = reverse ? [children[1], children[0]] : [children[0], children[1]]\r\n const [firstClass, secondClass] = reverse ? [rightClass, leftClass] : [leftClass, rightClass]\r\n\r\n return (\r\n <div className=\"flex h-full gap-2\">\r\n <div className={cn(firstClass, \"overflow-auto\")}>\r\n {contentWrapper(firstChild)}\r\n </div>\r\n <div className={cn(secondClass, \"overflow-auto\")}>\r\n {contentWrapper(secondChild)}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n case \"with-sheet\": {\r\n const {\r\n sheetContent,\r\n sheetWidth = \"four-fifth\",\r\n sheetSide = \"right\",\r\n sheetMode = \"container\",\r\n sheetTrigger,\r\n sheetClassName,\r\n isSheetOpen,\r\n onSheetOpenChange,\r\n showSheetOverlay = true,\r\n disableOverlay = true,\r\n } = props as WithSheetLayoutProps\r\n\r\n const isControlled = isSheetOpen !== undefined\r\n const sheetOpen = isControlled ? isSheetOpen : internalSheetOpen\r\n const setSheetOpen = isControlled ? onSheetOpenChange : setInternalSheetOpen\r\n\r\n if (sheetMode === \"container\") {\r\n const sheetClasses = getContainerSheetClasses(sheetSide, sheetWidth)\r\n\r\n return (\r\n <div className={cn(\r\n \"flex relative flex-1 overflow-hidden\",\r\n sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n )}>\r\n {/* Main content area */}\r\n <div className={cn(\r\n \"h-full overflow-auto transition-all duration-500\",\r\n sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n ? sheetClasses.contentPushClass\r\n : \"w-full\",\r\n sheetOpen && disableOverlay && \"overflow-y-auto overflow-x-hidden\"\r\n )}>\r\n {sheetTrigger && (\r\n <div onClick={() => setSheetOpen?.(!sheetOpen)}>\r\n {sheetTrigger}\r\n </div>\r\n )}\r\n <div className={cn(\"h-full\", !parentContainer && paddingClasses[padding])}>\r\n {children}\r\n </div>\r\n </div>\r\n\r\n {/* Container sheet */}\r\n <div\r\n className={cn(\r\n sheetClasses.container,\r\n \"transition-all duration-500 ease-in-out\",\r\n sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n ? cn(sheetClasses.sheetPushClass, \"overflow-y-auto\")\r\n : sheetOpen\r\n ? sheetClasses.transformOpen\r\n : cn(sheetClasses.transform, \"hidden\"),\r\n \"overflow-y-auto\"\r\n )}\r\n >\r\n <div className={cn(sheetClasses.content, sheetClassName, \"h-full\")}>\r\n {sheetContent}\r\n </div>\r\n </div>\r\n\r\n {/* Container overlay */}\r\n {sheetOpen && showSheetOverlay && !disableOverlay && (\r\n <div\r\n className={cn(\r\n \"absolute inset-0 bg-secondary/20 z-40\",\r\n \"transition-opacity duration-500 ease-in-out\",\r\n \"opacity-0\",\r\n sheetOpen ? \"opacity-100\" : \"opacity-0\"\r\n )}\r\n onClick={() => setSheetOpen?.(false)}\r\n />\r\n )}\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>\r\n {sheetTrigger && <SheetTrigger asChild>{sheetTrigger}</SheetTrigger>}\r\n <SheetPortal>\r\n {showSheetOverlay && <SheetOverlay className=\"fixed inset-0 bg-secondary/50 z-50\" />}\r\n <SheetContent\r\n side={sheetSide}\r\n className={cn(\r\n \"fixed bg-background border\",\r\n \"transition-all duration-500 ease-in-out\",\r\n splitRatioClasses[sheetWidth][1],\r\n sheetClassName\r\n )}\r\n >\r\n {sheetContent}\r\n </SheetContent>\r\n </SheetPortal>\r\n </Sheet>\r\n )\r\n }\r\n\r\n default:\r\n return contentWrapper(children)\r\n }\r\n }\r\n\r\n return (\r\n <AppContentContext.Provider value={true}>\r\n <div className={cn(\r\n baseClasses,\r\n variantClasses[variant],\r\n paddingClasses[padding],\r\n isNested && \"flex-1\",\r\n parentContainer && \"h-full\",\r\n !parentContainer && \"rounded-2xl\",\r\n className\r\n )}>\r\n {header && (\r\n <div\r\n className={cn(\r\n \"border-b\",\r\n headerClassName,\r\n variant === \"card\" && !parentContainer && \"rounded-t-2xl\",\r\n variant === \"border\" && \"border-b-2\",\r\n paddingClasses[padding]\r\n )}\r\n >\r\n {header}\r\n </div>\r\n )}\r\n {renderContent()}\r\n {footer && (\r\n <div\r\n className={cn(\r\n \"border-t\",\r\n footerClassName,\r\n variant === \"card\" && !parentContainer && \"rounded-b-2xl\",\r\n variant === \"border\" && \"border-t-2\",\r\n paddingClasses[padding]\r\n )}\r\n >\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n </AppContentContext.Provider>\r\n )\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// import { cn } from \"@/lib/utils\"\r\n// import React, { useState, createContext, useContext } from \"react\"\r\n// import {\r\n// Sheet,\r\n// SheetTrigger,\r\n// SheetContent,\r\n// SheetPortal,\r\n// SheetOverlay\r\n// } from \"@/components/ui/sheet\"\r\n\r\n// const AppContentContext = createContext(false)\r\n\r\n// type SplitRatio = \"one-half\" | \"one-third\" | \"two-third\" | \"one-fourth\" | \"three-fourth\" | \"one-fifth\" | \"four-fifth\"\r\n\r\n// type SheetSide = \"right\" | \"bottom\" | \"left\" | \"top\"\r\n// type SheetMode = \"fullscreen\" | \"container\"\r\n\r\n// type BaseAppContentProps = {\r\n// children: React.ReactNode\r\n// className?: string\r\n// variant?: \"default\" | \"card\" | \"border\" | \"transparent\"\r\n// header?: React.ReactNode\r\n// footer?: React.ReactNode\r\n// headerClassName?: string\r\n// footerClassName?: string\r\n// parentContainer?: boolean\r\n// padding?: \"none\" | \"tight\" | \"default\" | \"loose\"\r\n// }\r\n\r\n// type FullLayoutProps = BaseAppContentProps & {\r\n// layout?: \"full\"\r\n// }\r\n\r\n// type SplitLayoutProps = BaseAppContentProps & {\r\n// layout: \"split\"\r\n// splitRatio?: SplitRatio\r\n// reverse?: boolean\r\n// }\r\n\r\n// type SheetOptions = {\r\n// sheetContent: React.ReactNode\r\n// sheetWidth?: SplitRatio\r\n// sheetSide?: SheetSide\r\n// sheetMode?: SheetMode\r\n// onSheetClose?: () => void\r\n// showSheetOverlay?: boolean\r\n// sheetClassName?: string\r\n// isSheetOpen?: boolean\r\n// onSheetOpenChange?: (open: boolean) => void\r\n// sheetTrigger?: React.ReactNode\r\n// disableOverlay?: boolean\r\n// }\r\n\r\n// type WithSheetLayoutProps = BaseAppContentProps & {\r\n// layout: \"with-sheet\"\r\n// } & SheetOptions\r\n\r\n// type AppContentProps = FullLayoutProps | SplitLayoutProps | WithSheetLayoutProps\r\n\r\n// const splitRatioClasses: Record<SplitRatio, [string, string]> = {\r\n// \"one-half\": [\"w-1/2\", \"w-1/2\"],\r\n// \"one-third\": [\"w-1/3\", \"w-2/3\"],\r\n// \"two-third\": [\"w-2/3\", \"w-1/3\"],\r\n// \"one-fourth\": [\"w-1/4\", \"w-3/4\"],\r\n// \"three-fourth\": [\"w-3/4\", \"w-1/4\"],\r\n// \"one-fifth\": [\"w-1/5\", \"w-4/5\"],\r\n// \"four-fifth\": [\"w-4/5\", \"w-1/5\"],\r\n// }\r\n\r\n// const paddingClasses = {\r\n// none: \"p-0\",\r\n// tight: \"p-2\",\r\n// default: \"p-4\",\r\n// loose: \"p-6\",\r\n// }\r\n\r\n// const getContainerSheetClasses = (side: SheetSide, width: SplitRatio) => {\r\n// const [contentWidth, sheetWidth] = splitRatioClasses[width]\r\n\r\n// return {\r\n// container: \"inset-y-0 z-50\",\r\n// content: cn(\"h-full bg-background\", side === \"right\" ? \"border-l\" : \"border-r\"),\r\n// transform: side === \"right\" ? \"translate-x-full\" : \"-translate-x-full\",\r\n// transformOpen: \"translate-x-0\",\r\n// contentPushClass: side === \"right\" ? contentWidth : sheetWidth,\r\n// sheetPushClass: side === \"right\" ? sheetWidth : contentWidth,\r\n// }\r\n// }\r\n\r\n// const baseClasses = \"flex flex-col overflow-hidden rounded-2xl relative\"\r\n// const variantClasses = {\r\n// default: \"bg-background\",\r\n// card: \"bg-background shadow-sm border\",\r\n// border: \"bg-background border-2\",\r\n// transparent: \"bg-transparent\",\r\n// }\r\n\r\n// export const AppContent = (props: AppContentProps) => {\r\n// const {\r\n// children,\r\n// className,\r\n// variant = \"default\",\r\n// layout = \"full\",\r\n// header,\r\n// footer,\r\n// headerClassName,\r\n// footerClassName,\r\n// parentContainer = false,\r\n// padding = parentContainer ? \"none\" : \"tight\",\r\n// } = props\r\n\r\n// const isNested = useContext(AppContentContext)\r\n// const [internalSheetOpen, setInternalSheetOpen] = useState(false)\r\n\r\n// const contentWrapper = React.useCallback(\r\n// (content: React.ReactNode) => (\r\n// <div className={cn(\r\n// \"flex-1 overflow-auto h-full\",\r\n// !parentContainer && paddingClasses[padding]\r\n// )}>\r\n// {content}\r\n// </div>\r\n// ),\r\n// [padding, parentContainer]\r\n// )\r\n\r\n// const renderContent = () => {\r\n// switch (layout) {\r\n// case \"split\": {\r\n// const { splitRatio = \"three-fourth\", reverse = false } = props as SplitLayoutProps\r\n// if (!Array.isArray(children) || children.length !== 2) {\r\n// return (\r\n// <div className=\"flex items-center justify-center h-full text-red-500\">\r\n// Error: AppContent with layout=\"split\" requires exactly 2 children\r\n// </div>\r\n// )\r\n// }\r\n\r\n// const [leftClass, rightClass] = splitRatioClasses[splitRatio]\r\n// const [firstChild, secondChild] = reverse ? [children[1], children[0]] : [children[0], children[1]]\r\n// const [firstClass, secondClass] = reverse ? [rightClass, leftClass] : [leftClass, rightClass]\r\n\r\n// return (\r\n// <div className=\"flex h-full gap-4\">\r\n// <div className={cn(firstClass, \"overflow-auto\")}>\r\n// {contentWrapper(firstChild)}\r\n// </div>\r\n// <div className={cn(secondClass, \"overflow-auto\")}>\r\n// {contentWrapper(secondChild)}\r\n// </div>\r\n// </div>\r\n// )\r\n// }\r\n\r\n// case \"with-sheet\": {\r\n// const {\r\n// sheetContent,\r\n// sheetWidth = \"four-fifth\",\r\n// sheetSide = \"right\",\r\n// sheetMode = \"container\",\r\n// sheetTrigger,\r\n// sheetClassName,\r\n// isSheetOpen,\r\n// onSheetOpenChange,\r\n// showSheetOverlay = true,\r\n// disableOverlay = false,\r\n// } = props as WithSheetLayoutProps\r\n\r\n// const isControlled = isSheetOpen !== undefined\r\n// const sheetOpen = isControlled ? isSheetOpen : internalSheetOpen\r\n// const setSheetOpen = isControlled ? onSheetOpenChange : setInternalSheetOpen\r\n\r\n// if (sheetMode === \"container\") {\r\n// const sheetClasses = getContainerSheetClasses(sheetSide, sheetWidth)\r\n\r\n// return (\r\n// <div className={cn(\r\n// \"flex relative flex-1 overflow-hidden\",\r\n// sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n// )}>\r\n// {/* Main content area */}\r\n// <div className={cn(\r\n// \"h-full overflow-auto transition-all duration-500\",\r\n// sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n// ? sheetClasses.contentPushClass\r\n// : \"w-full\",\r\n// sheetOpen && disableOverlay && \"overflow-y-auto overflow-x-hidden\"\r\n// )}>\r\n// {sheetTrigger && (\r\n// <div onClick={() => setSheetOpen?.(!sheetOpen)}>\r\n// {sheetTrigger}\r\n// </div>\r\n// )}\r\n// <div className={cn(!parentContainer && paddingClasses[padding])}>\r\n// {children}\r\n// </div>\r\n// </div>\r\n\r\n// {/* Container sheet */}\r\n// <div\r\n// className={cn(\r\n// sheetClasses.container,\r\n// \"transition-all duration-500 ease-out\",\r\n// sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n// ? cn(sheetClasses.sheetPushClass, \"overflow-y-auto\")\r\n// : sheetOpen\r\n// ? sheetClasses.transformOpen\r\n// : cn(sheetClasses.transform, \"hidden\"),\r\n// \"overflow-y-auto\"\r\n// )}\r\n// >\r\n// <div className={cn(sheetClasses.content, sheetClassName, \"h-full\")}>\r\n// {sheetContent}\r\n// </div>\r\n// </div>\r\n\r\n// {/* Container overlay */}\r\n// {sheetOpen && showSheetOverlay && !disableOverlay && (\r\n// <div\r\n// className={cn(\"absolute inset-0 bg-secondary/20 z-40\")}\r\n// onClick={() => setSheetOpen?.(false)}\r\n// />\r\n// )}\r\n// </div>\r\n// )\r\n// }\r\n\r\n// return (\r\n// <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>\r\n// {sheetTrigger && <SheetTrigger asChild>{sheetTrigger}</SheetTrigger>}\r\n// <SheetPortal>\r\n// {showSheetOverlay && <SheetOverlay className=\"fixed inset-0 bg-secondary/50 z-50\" />}\r\n// <SheetContent\r\n// side={sheetSide}\r\n// className={cn(\r\n// \"fixed bg-background border\",\r\n// splitRatioClasses[sheetWidth][1],\r\n// sheetClassName\r\n// )}\r\n// >\r\n// {sheetContent}\r\n// </SheetContent>\r\n// </SheetPortal>\r\n// </Sheet>\r\n// )\r\n// }\r\n\r\n// default:\r\n// return contentWrapper(children)\r\n// }\r\n// }\r\n\r\n// return (\r\n// <AppContentContext.Provider value={true}>\r\n// <div className={cn(\r\n// baseClasses,\r\n// variantClasses[variant],\r\n// paddingClasses[padding],\r\n// isNested && \"flex-1\",\r\n// parentContainer && \"h-full\",\r\n// !parentContainer && \"rounded-2xl\",\r\n// className\r\n// )}>\r\n// {header && (\r\n// <div\r\n// className={cn(\r\n// \"border-b\",\r\n// headerClassName,\r\n// variant === \"card\" && !parentContainer && \"rounded-t-2xl\",\r\n// variant === \"border\" && \"border-b-2\",\r\n// paddingClasses[padding]\r\n// )}\r\n// >\r\n// {header}\r\n// </div>\r\n// )}\r\n// {renderContent()}\r\n// {footer && (\r\n// <div\r\n// className={cn(\r\n// \"border-t\",\r\n// footerClassName,\r\n// variant === \"card\" && !parentContainer && \"rounded-b-2xl\",\r\n// variant === \"border\" && \"border-t-2\",\r\n// paddingClasses[padding]\r\n// )}\r\n// >\r\n// {footer}\r\n// </div>\r\n// )}\r\n// </div>\r\n// </AppContentContext.Provider>\r\n// )\r\n// }\r\n\r\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\nimport { XIcon } from \"lucide-react\"\nimport { cn } from \"../../lib/utils.js\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetOverlay,\n SheetPortal,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n"],"mappings":"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","names":["app_content_exports","__export","AppContent","__toCommonJS","import_clsx","import_tailwind_merge","cn","inputs","import_react","import_radix_ui","import_lucide_react","import_jsx_runtime","Sheet","props","SheetPrimitive","SheetTrigger","SheetPortal","props","SheetPrimitive","SheetOverlay","className","cn","SheetContent","children","side","import_jsx_runtime","AppContentContext","splitRatioClasses","paddingClasses","getContainerSheetClasses","side","width","contentWidth","sheetWidth","cn","baseClasses","variantClasses","AppContent","props","children","className","variant","layout","header","footer","headerClassName","footerClassName","parentContainer","padding","isNested","internalSheetOpen","setInternalSheetOpen","contentWrapper","React","content","renderContent","splitRatio","reverse","leftClass","rightClass","firstChild","secondChild","firstClass","secondClass","sheetContent","sheetSide","sheetMode","sheetTrigger","sheetClassName","isSheetOpen","onSheetOpenChange","showSheetOverlay","disableOverlay","isControlled","sheetOpen","setSheetOpen","sheetClasses","Sheet","SheetTrigger","SheetPortal","SheetOverlay","SheetContent"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/layouts/app-content.tsx","../../../src/lib/utils.ts","../../../src/components/ui/sheet.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils.js\"\r\nimport React, { useState, createContext, useContext } from \"react\"\r\nimport {\r\n Sheet,\r\n SheetTrigger,\r\n SheetContent,\r\n SheetPortal,\r\n SheetOverlay\r\n} from \"../../components/ui/sheet.jsx\"\r\n\r\nconst AppContentContext = createContext(false)\r\n\r\ntype SplitRatio = \"one-half\" | \"one-third\" | \"two-third\" | \"one-fourth\" | \"three-fourth\" | \"one-fifth\" | \"four-fifth\"\r\n\r\ntype SheetSide = \"right\" | \"bottom\" | \"left\" | \"top\"\r\ntype SheetMode = \"fullscreen\" | \"container\"\r\n\r\ntype BaseAppContentProps = {\r\n children: React.ReactNode\r\n className?: string\r\n variant?: \"default\" | \"card\" | \"border\" | \"transparent\"\r\n header?: React.ReactNode\r\n footer?: React.ReactNode\r\n contentClassName?: string\r\n headerClassName?: string\r\n footerClassName?: string\r\n parentContainer?: boolean\r\n padding?: \"none\" | \"tight\" | \"default\" | \"loose\"\r\n}\r\n\r\ntype FullLayoutProps = BaseAppContentProps & {\r\n layout?: \"full\"\r\n}\r\n\r\ntype SplitLayoutProps = BaseAppContentProps & {\r\n layout: \"split\"\r\n splitRatio?: SplitRatio\r\n reverse?: boolean\r\n}\r\n\r\ntype SheetOptions = {\r\n sheetContent: React.ReactNode\r\n sheetWidth?: SplitRatio\r\n sheetSide?: SheetSide\r\n sheetMode?: SheetMode\r\n onSheetClose?: () => void\r\n sheetClassName?: string\r\n isSheetOpen?: boolean\r\n onSheetOpenChange?: (open: boolean) => void\r\n // sheetTrigger?: React.ReactNode\r\n disableOverlay?: boolean\r\n showSheetOverlay?: boolean\r\n}\r\n\r\ntype WithSheetLayoutProps = BaseAppContentProps & {\r\n layout: \"with-sheet\"\r\n} & SheetOptions\r\n\r\nexport type AppContentProps = FullLayoutProps | SplitLayoutProps | WithSheetLayoutProps\r\n\r\nconst splitRatioClasses: Record<SplitRatio, [string, string]> = {\r\n \"one-half\": [\"w-1/2\", \"w-1/2\"],\r\n \"one-third\": [\"w-1/3\", \"w-2/3\"],\r\n \"two-third\": [\"w-2/3\", \"w-1/3\"],\r\n \"one-fourth\": [\"w-1/4\", \"w-3/4\"],\r\n \"three-fourth\": [\"w-3/4\", \"w-1/4\"],\r\n \"one-fifth\": [\"w-1/5\", \"w-4/5\"],\r\n \"four-fifth\": [\"w-4/5\", \"w-1/5\"],\r\n}\r\n\r\nconst paddingClasses = {\r\n none: \"p-0\",\r\n tight: \"p-2\",\r\n default: \"p-4\",\r\n loose: \"p-6\",\r\n}\r\n\r\nconst getContainerSheetClasses = (side: SheetSide, width: SplitRatio) => {\r\n const [contentWidth, sheetWidth] = splitRatioClasses[width]\r\n\r\n return {\r\n container: \"inset-y-0 z-50 transition-all duration-500 ease-in-out\",\r\n content: cn(\r\n \"h-full bg-background transition-all duration-500 ease-in-out\",\r\n side === \"right\" ? \"border-l\" : \"border-r\"\r\n ),\r\n transform: side === \"right\" ? \"translate-x-full\" : \"-translate-x-full\",\r\n transformOpen: \"translate-x-0\",\r\n contentPushClass: side === \"right\" ? sheetWidth : contentWidth,\r\n sheetPushClass: side === \"right\" ? contentWidth : sheetWidth,\r\n }\r\n}\r\n\r\nconst baseClasses = \"flex flex-col overflow-hidden rounded-2xl relative\"\r\nconst variantClasses = {\r\n default: \"bg-background\",\r\n card: \"bg-background shadow-sm border\",\r\n border: \"bg-background border-2\",\r\n transparent: \"bg-transparent\",\r\n}\r\n\r\nexport const AppContent = (props: AppContentProps) => {\r\n const {\r\n children,\r\n className,\r\n variant = \"default\",\r\n layout = \"full\",\r\n header,\r\n footer,\r\n headerClassName,\r\n contentClassName,\r\n footerClassName,\r\n parentContainer = false,\r\n padding = parentContainer ? \"none\" : \"tight\",\r\n } = props\r\n\r\n const isNested = useContext(AppContentContext)\r\n const [internalSheetOpen, setInternalSheetOpen] = useState(false)\r\n\r\n const contentWrapper = React.useCallback(\r\n (content: React.ReactNode) => (\r\n <div className={cn(\r\n \"flex-1 overflow-auto h-full no-scrollbar\",\r\n parentContainer && \"flex\",\r\n !parentContainer && paddingClasses[padding],\r\n contentClassName\r\n )}>\r\n {content}\r\n </div>\r\n ),\r\n [padding, parentContainer, contentClassName]\r\n )\r\n\r\n const renderContent = () => {\r\n switch (layout) {\r\n case \"split\": {\r\n const { splitRatio = \"three-fourth\", reverse = false } = props as SplitLayoutProps\r\n if (!Array.isArray(children) || children.length !== 2) {\r\n return (\r\n <div className=\"flex items-center justify-center h-full text-red-500\">\r\n Error: AppContent with layout=\"split\" requires exactly 2 children\r\n </div>\r\n )\r\n }\r\n\r\n const [leftClass, rightClass] = splitRatioClasses[splitRatio]\r\n const [firstChild, secondChild] = reverse ? [children[1], children[0]] : [children[0], children[1]]\r\n const [firstClass, secondClass] = reverse ? [rightClass, leftClass] : [leftClass, rightClass]\r\n\r\n return (\r\n <div className=\"flex h-full gap-2\">\r\n <div className={cn(firstClass, \"overflow-auto\")}>\r\n {contentWrapper(firstChild)}\r\n </div>\r\n <div className={cn(secondClass, \"overflow-auto\")}>\r\n {contentWrapper(secondChild)}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n case \"with-sheet\": {\r\n const {\r\n sheetContent,\r\n sheetWidth = \"four-fifth\",\r\n sheetSide = \"right\",\r\n sheetMode = \"container\",\r\n sheetClassName,\r\n isSheetOpen,\r\n onSheetOpenChange,\r\n disableOverlay = true,\r\n showSheetOverlay = true,\r\n } = props as WithSheetLayoutProps;\r\n\r\n const isControlled = isSheetOpen !== undefined && onSheetOpenChange;\r\n const sheetOpen = isControlled ? isSheetOpen : internalSheetOpen;\r\n const setSheetOpen = isControlled ? onSheetOpenChange : setInternalSheetOpen;\r\n\r\n if (sheetMode === \"container\") {\r\n const sheetClasses = getContainerSheetClasses(sheetSide, sheetWidth);\r\n const sheetWidthClass = splitRatioClasses[sheetWidth][0];\r\n\r\n // Separate rendering for overlay mode vs push mode\r\n if (disableOverlay) {\r\n // Push mode - sheet pushes content\r\n return (\r\n <div className={cn(\"flex relative flex-1 overflow-hidden\", contentClassName)}>\r\n {/* Main content area */}\r\n <div className={cn(\r\n \"h-full overflow-auto transition-all duration-500\",\r\n sheetOpen\r\n ? sheetClasses.contentPushClass\r\n : \"w-full\",\r\n sheetOpen && \"overflow-y-auto overflow-x-hidden\"\r\n )}>\r\n <div className={cn(\"h-full\", !parentContainer && paddingClasses[padding])}>\r\n {children}\r\n </div>\r\n </div>\r\n\r\n {/* Container sheet */}\r\n <div\r\n className={cn(\r\n sheetClasses.container,\r\n \"transition-all duration-500 ease-in-out h-full\",\r\n sheetWidthClass,\r\n sheetOpen && [\"left\", \"right\"].includes(sheetSide)\r\n ? cn(sheetClasses.sheetPushClass, \"overflow-y-auto\")\r\n : sheetOpen\r\n ? sheetClasses.transformOpen\r\n : cn(sheetClasses.transform, \"hidden\"),\r\n \"overflow-y-auto\"\r\n )}\r\n >\r\n <div className={cn(sheetClasses.content, sheetClassName, \"h-full\")}>\r\n {sheetContent}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n } else {\r\n // Overlay mode - sheet overlays content with dark background\r\n return (\r\n <div className={cn(\"flex relative flex-1 overflow-hidden\", contentClassName)}>\r\n {/* Main content area (always full width) */}\r\n <div className={cn(\r\n \"h-full overflow-auto w-full transition-all duration-500 relative z-10\"\r\n )}>\r\n <div className={cn(\"h-full\", !parentContainer && paddingClasses[padding])}>\r\n {children}\r\n </div>\r\n </div>\r\n\r\n {/* Container for sheet and overlay */}\r\n <div className={cn(\r\n \"absolute inset-0 z-20\",\r\n !sheetOpen && \"pointer-events-none\"\r\n )}>\r\n {/* Overlay layer */}\r\n {showSheetOverlay && (\r\n <div\r\n className={cn(\r\n \"absolute inset-0 bg-black/50 transition-opacity duration-500\",\r\n sheetOpen ? \"opacity-100\" : \"opacity-0 pointer-events-none\"\r\n )}\r\n onClick={() => setSheetOpen(false)}\r\n />\r\n )}\r\n\r\n {/* Container sheet */}\r\n <div\r\n className={cn(\r\n sheetClasses.container,\r\n \"transition-all duration-500 backdrop-blur-2xl ease-in-out h-full absolute\",\r\n sheetWidthClass,\r\n sheetOpen\r\n ? \"translate-x-0 opacity-100\"\r\n : cn(\r\n sheetSide === \"right\" ? \"translate-x-full\" : \"-translate-x-full\",\r\n \"opacity-0 pointer-events-none\"\r\n ),\r\n \"overflow-y-auto\"\r\n )}\r\n style={{ [sheetSide]: 0 }}\r\n >\r\n <div className={cn(sheetClasses.content, sheetClassName, \"h-full\")}>\r\n {sheetContent}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {children}\r\n <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>\r\n <SheetPortal>\r\n <SheetContent\r\n side={sheetSide}\r\n className={cn(\r\n \"fixed bg-background border sm:max-w-full\",\r\n \"transition-all duration-500 ease-in-out\",\r\n splitRatioClasses[sheetWidth][0],\r\n sheetClassName\r\n )}\r\n >\r\n {sheetContent}\r\n </SheetContent>\r\n </SheetPortal>\r\n </Sheet>\r\n </>\r\n );\r\n }\r\n\r\n default:\r\n return contentWrapper(children)\r\n }\r\n }\r\n\r\n return (\r\n <AppContentContext.Provider value={true}>\r\n <div className={cn(\r\n baseClasses,\r\n variantClasses[variant],\r\n paddingClasses[padding],\r\n isNested && \"flex-1\",\r\n parentContainer && \"h-full\",\r\n !parentContainer && \"rounded-2xl\",\r\n className\r\n )}>\r\n {header && (\r\n <div\r\n className={cn(\r\n \"border-b\",\r\n headerClassName,\r\n variant === \"card\" && !parentContainer && \"rounded-t-2xl\",\r\n variant === \"border\" && \"border-b-2\",\r\n paddingClasses[padding]\r\n )}\r\n >\r\n {header}\r\n </div>\r\n )}\r\n {renderContent()}\r\n {footer && (\r\n <div\r\n className={cn(\r\n \"border-t\",\r\n footerClassName,\r\n variant === \"card\" && !parentContainer && \"rounded-b-2xl\",\r\n variant === \"border\" && \"border-t-2\",\r\n paddingClasses[padding]\r\n )}\r\n >\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n </AppContentContext.Provider>\r\n )\r\n}\r\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\nimport { XIcon } from \"lucide-react\"\nimport { cn } from \"../../lib/utils.js\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetOverlay,\n SheetPortal,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n"],"mappings":"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","names":["app_content_exports","__export","AppContent","__toCommonJS","import_clsx","import_tailwind_merge","cn","inputs","import_react","import_radix_ui","import_lucide_react","import_jsx_runtime","Sheet","props","SheetPrimitive","SheetPortal","props","SheetPrimitive","SheetOverlay","className","cn","SheetContent","children","side","import_jsx_runtime","AppContentContext","splitRatioClasses","paddingClasses","getContainerSheetClasses","side","width","contentWidth","sheetWidth","cn","baseClasses","variantClasses","AppContent","props","children","className","variant","layout","header","footer","headerClassName","contentClassName","footerClassName","parentContainer","padding","isNested","internalSheetOpen","setInternalSheetOpen","contentWrapper","React","content","renderContent","splitRatio","reverse","leftClass","rightClass","firstChild","secondChild","firstClass","secondClass","sheetContent","sheetSide","sheetMode","sheetClassName","isSheetOpen","onSheetOpenChange","disableOverlay","showSheetOverlay","isControlled","sheetOpen","setSheetOpen","sheetClasses","sheetWidthClass","Sheet","SheetPortal","SheetContent"]}
|
|
@@ -10,6 +10,7 @@ type BaseAppContentProps = {
|
|
|
10
10
|
variant?: "default" | "card" | "border" | "transparent";
|
|
11
11
|
header?: React__default.ReactNode;
|
|
12
12
|
footer?: React__default.ReactNode;
|
|
13
|
+
contentClassName?: string;
|
|
13
14
|
headerClassName?: string;
|
|
14
15
|
footerClassName?: string;
|
|
15
16
|
parentContainer?: boolean;
|
|
@@ -29,12 +30,11 @@ type SheetOptions = {
|
|
|
29
30
|
sheetSide?: SheetSide;
|
|
30
31
|
sheetMode?: SheetMode;
|
|
31
32
|
onSheetClose?: () => void;
|
|
32
|
-
showSheetOverlay?: boolean;
|
|
33
33
|
sheetClassName?: string;
|
|
34
34
|
isSheetOpen?: boolean;
|
|
35
35
|
onSheetOpenChange?: (open: boolean) => void;
|
|
36
|
-
sheetTrigger?: React__default.ReactNode;
|
|
37
36
|
disableOverlay?: boolean;
|
|
37
|
+
showSheetOverlay?: boolean;
|
|
38
38
|
};
|
|
39
39
|
type WithSheetLayoutProps = BaseAppContentProps & {
|
|
40
40
|
layout: "with-sheet";
|