@clubmed/trident-ui 2.0.0-beta.40 → 2.0.0-beta.42
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/README.md +8 -0
- package/chunks/DateField.js +2 -2
- package/chunks/DateField.js.map +1 -1
- package/chunks/Range.js +2 -2
- package/chunks/Range.js.map +1 -1
- package/examples/checkbox-demo.js +2 -2
- package/examples/checkbox-demo.js.map +1 -1
- package/examples/countdown-demo.d.ts +1 -0
- package/examples/countdown-demo.js +39 -0
- package/examples/countdown-demo.js.map +1 -0
- package/examples/floating-label-text-field-demo.d.ts +1 -0
- package/examples/floating-label-text-field-demo.js +32 -0
- package/examples/floating-label-text-field-demo.js.map +1 -0
- package/examples/radio-demo.js +3 -3
- package/examples/radio-demo.js.map +1 -1
- package/examples/switch-demo.js +1 -1
- package/examples/switch-demo.js.map +1 -1
- package/package.json +1 -1
- package/styles/theme.css +0 -2
- package/ui/Countdown.d.ts +16 -0
- package/ui/Countdown.js +61 -0
- package/ui/Countdown.js.map +1 -0
- package/ui/FlipCard.d.ts +7 -0
- package/ui/FlipCard.js +59 -0
- package/ui/FlipCard.js.map +1 -0
- package/ui/forms/CheckboxSelect.d.ts +1 -1
- package/ui/forms/CheckboxSelect.js +4 -4
- package/ui/forms/CheckboxSelect.js.map +1 -1
- package/ui/forms/Filter.d.ts +2 -1
- package/ui/forms/Filter.js +7 -4
- package/ui/forms/Filter.js.map +1 -1
- package/ui/forms/FloatingLabelTextField.d.ts +12 -0
- package/ui/forms/FloatingLabelTextField.js +132 -0
- package/ui/forms/FloatingLabelTextField.js.map +1 -0
- package/ui/forms/FormControl.d.ts +1 -1
- package/ui/forms/FormControl.js.map +1 -1
- package/ui/forms/NumberField.d.ts +2 -2
- package/ui/forms/NumberField.js +7 -8
- package/ui/forms/NumberField.js.map +1 -1
- package/ui/forms/PhoneField.js.map +1 -1
- package/ui/forms/PhoneFieldFullInput.d.ts +1 -1
- package/ui/forms/PhoneFieldFullInput.js +19 -25
- package/ui/forms/PhoneFieldFullInput.js.map +1 -1
- package/ui/forms/PhoneFieldSplitInput.d.ts +1 -1
- package/ui/forms/PhoneFieldSplitInput.js +40 -42
- package/ui/forms/PhoneFieldSplitInput.js.map +1 -1
- package/ui/forms/Range.d.ts +1 -1
- package/ui/forms/Select.js +1 -2
- package/ui/forms/Select.js.map +1 -1
- package/ui/forms/Switch.d.ts +2 -1
- package/ui/forms/Switch.js +3 -1
- package/ui/forms/Switch.js.map +1 -1
- package/ui/forms/TextField.js +2 -3
- package/ui/forms/TextField.js.map +1 -1
- package/ui/forms/checkboxes/Checkbox.d.ts +2 -1
- package/ui/forms/checkboxes/Checkbox.js +15 -12
- package/ui/forms/checkboxes/Checkbox.js.map +1 -1
- package/ui/forms/checkboxes/Checkboxes.js +3 -3
- package/ui/forms/checkboxes/Checkboxes.js.map +1 -1
- package/ui/forms/password/Password.js +1 -2
- package/ui/forms/password/Password.js.map +1 -1
- package/ui/forms/radios/Radio.d.ts +2 -1
- package/ui/forms/radios/Radio.js +6 -3
- package/ui/forms/radios/Radio.js.map +1 -1
- package/ui/forms/radios/RadioGroup.js +5 -6
- package/ui/forms/radios/RadioGroup.js.map +1 -1
- package/ui/hooks/useValue.d.ts +3 -4
- package/ui/hooks/useValue.js +11 -11
- package/ui/hooks/useValue.js.map +1 -1
- package/ui/tabs/Tabs.js.map +1 -1
package/README.md
CHANGED
|
@@ -245,6 +245,14 @@ function App() {
|
|
|
245
245
|
3. Replace any import paths containing `atoms` or `molecules` with the `ui` path segment.
|
|
246
246
|
4. irectories in paths are now in to lower case. (e.g.: `molecules/Buttons/Button` -> `ui/buttons/button`).
|
|
247
247
|
5. Use icons directly from `@clubmed/trident-icons`.
|
|
248
|
+
6. Update form callbacks to the unified v2 signature:
|
|
249
|
+
`onChange(event, value)`.
|
|
250
|
+
- v1 patterns like `onChange={(name, value) => ...}` must become
|
|
251
|
+
`onChange={(event, value) => ...}`.
|
|
252
|
+
- When you still need the field name, read it from
|
|
253
|
+
`event.currentTarget.name`.
|
|
254
|
+
- For checkbox-like components, replace direct event reads
|
|
255
|
+
(`event.target.checked`) with the second argument (`value`).
|
|
248
256
|
|
|
249
257
|
> At this point, check if you haven't any issue with paths and components before moving to the next step.
|
|
250
258
|
|
package/chunks/DateField.js
CHANGED
|
@@ -188,12 +188,11 @@ var W = (e) => e ? typeof e == "string" ? e : b(new Date(e)) ? C(new Date(e), {
|
|
|
188
188
|
isDisabled: T,
|
|
189
189
|
validationStatus: y
|
|
190
190
|
}), { setValue: z, value: B } = r({
|
|
191
|
-
name: h,
|
|
192
191
|
formatter: W,
|
|
193
192
|
initialValue: k,
|
|
194
193
|
onChange: (e, t) => M?.(e, t ? w(t) : null)
|
|
195
194
|
}), V = W(A), H = W(j), U = (e) => {
|
|
196
|
-
z(e.target.value);
|
|
195
|
+
z(e.target.value, e.nativeEvent);
|
|
197
196
|
}, K = () => {
|
|
198
197
|
F.current?.showPicker();
|
|
199
198
|
}, q = i(() => {
|
|
@@ -253,6 +252,7 @@ var W = (e) => e ? typeof e == "string" ? e : b(new Date(e)) ? C(new Date(e), {
|
|
|
253
252
|
"border-green": !T && R === "success"
|
|
254
253
|
}),
|
|
255
254
|
id: m,
|
|
255
|
+
name: h,
|
|
256
256
|
disabled: T,
|
|
257
257
|
required: E,
|
|
258
258
|
ref: F,
|
package/chunks/DateField.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateField.js","names":[],"sources":["../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constants.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructFrom.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/toDate.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isDate.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isValid.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceInMilliseconds.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/addLeadingZeros.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatISO.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parseISO.js","../../lib/ui/forms/DateField.tsx"],"sourcesContent":["/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n *\n * @returns The number of milliseconds\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport function differenceInMilliseconds(laterDate, earlierDate) {\n return +toDate(laterDate) - +toDate(earlierDate);\n}\n\n// Fallback for modularized imports:\nexport default differenceInMilliseconds;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"./_lib/addLeadingZeros.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link formatISO} function options.\n */\n\n/**\n * @name formatISO\n * @category Common Helpers\n * @summary Format the date according to the ISO 8601 standard (https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm).\n *\n * @description\n * Return the formatted date string in ISO 8601 format. Options may be passed to control the parts and notations of the date.\n *\n * @param date - The original date\n * @param options - An object with options.\n *\n * @returns The formatted date string (in local time zone)\n *\n * @throws `date` must not be Invalid Date\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18T19:00:52Z'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601, short format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })\n * //=> '20190918T190052'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, date only:\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })\n * //=> '2019-09-18'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, time only (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })\n * //=> '19:00:52Z'\n */\nexport function formatISO(date, options) {\n const date_ = toDate(date, options?.in);\n\n if (isNaN(+date_)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n const format = options?.format ?? \"extended\";\n const representation = options?.representation ?? \"complete\";\n\n let result = \"\";\n let tzOffset = \"\";\n\n const dateDelimiter = format === \"extended\" ? \"-\" : \"\";\n const timeDelimiter = format === \"extended\" ? \":\" : \"\";\n\n // Representation is either 'date' or 'complete'\n if (representation !== \"time\") {\n const day = addLeadingZeros(date_.getDate(), 2);\n const month = addLeadingZeros(date_.getMonth() + 1, 2);\n const year = addLeadingZeros(date_.getFullYear(), 4);\n\n // yyyyMMdd or yyyy-MM-dd.\n result = `${year}${dateDelimiter}${month}${dateDelimiter}${day}`;\n }\n\n // Representation is either 'time' or 'complete'\n if (representation !== \"date\") {\n // Add the timezone.\n const offset = date_.getTimezoneOffset();\n\n if (offset !== 0) {\n const absoluteOffset = Math.abs(offset);\n const hourOffset = addLeadingZeros(Math.trunc(absoluteOffset / 60), 2);\n const minuteOffset = addLeadingZeros(absoluteOffset % 60, 2);\n // If less than 0, the sign is +, because it is ahead of time.\n const sign = offset < 0 ? \"+\" : \"-\";\n\n tzOffset = `${sign}${hourOffset}:${minuteOffset}`;\n } else {\n tzOffset = \"Z\";\n }\n\n const hour = addLeadingZeros(date_.getHours(), 2);\n const minute = addLeadingZeros(date_.getMinutes(), 2);\n const second = addLeadingZeros(date_.getSeconds(), 2);\n\n // If there's also date, separate it with time with 'T'\n const separator = result === \"\" ? \"\" : \"T\";\n\n // Creates a time string consisting of hour, minute, and second, separated by delimiters, if defined.\n const time = [hour, minute, second].join(timeDelimiter);\n\n // HHmmss or HH:mm:ss.\n result = `${result}${separator}${time}${tzOffset}`;\n }\n\n return result;\n}\n\n// Fallback for modularized imports:\nexport default formatISO;\n","import {\n millisecondsInHour,\n millisecondsInMinute,\n} from \"./constants.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function parseISO(argument, options) {\n const invalidDate = () => constructFrom(options?.in, NaN);\n\n const additionalDigits = options?.additionalDigits ?? 2;\n const dateStrings = splitDateString(argument);\n\n let date;\n if (dateStrings.date) {\n const parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n\n if (!date || isNaN(+date)) return invalidDate();\n\n const timestamp = +date;\n let time = 0;\n let offset;\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n if (isNaN(time)) return invalidDate();\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n if (isNaN(offset)) return invalidDate();\n } else {\n const tmpDate = new Date(timestamp + time);\n const result = toDate(0, options?.in);\n result.setFullYear(\n tmpDate.getUTCFullYear(),\n tmpDate.getUTCMonth(),\n tmpDate.getUTCDate(),\n );\n result.setHours(\n tmpDate.getUTCHours(),\n tmpDate.getUTCMinutes(),\n tmpDate.getUTCSeconds(),\n tmpDate.getUTCMilliseconds(),\n );\n return result;\n }\n\n return toDate(timestamp + time + offset, options?.in);\n}\n\nconst patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/,\n};\n\nconst dateRegex =\n /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nconst timeRegex =\n /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nconst timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n const dateStrings = {};\n const array = dateString.split(patterns.dateTimeDelimiter);\n let timeString;\n\n // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n if (array.length > 2) {\n return dateStrings;\n }\n\n if (/:/.test(array[0])) {\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(\n dateStrings.date.length,\n dateString.length,\n );\n }\n }\n\n if (timeString) {\n const token = patterns.timezone.exec(timeString);\n if (token) {\n dateStrings.time = timeString.replace(token[1], \"\");\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n\n return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n const regex = new RegExp(\n \"^(?:(\\\\d{4}|[+-]\\\\d{\" +\n (4 + additionalDigits) +\n \"})|(\\\\d{2}|[+-]\\\\d{\" +\n (2 + additionalDigits) +\n \"})$)\",\n );\n\n const captures = dateString.match(regex);\n // Invalid ISO-formatted year\n if (!captures) return { year: NaN, restDateString: \"\" };\n\n const year = captures[1] ? parseInt(captures[1]) : null;\n const century = captures[2] ? parseInt(captures[2]) : null;\n\n // either year or century is null, not both\n return {\n year: century === null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length),\n };\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return new Date(NaN);\n\n const captures = dateString.match(dateRegex);\n // Invalid ISO-formatted string\n if (!captures) return new Date(NaN);\n\n const isWeekDate = !!captures[4];\n const dayOfYear = parseDateUnit(captures[1]);\n const month = parseDateUnit(captures[2]) - 1;\n const day = parseDateUnit(captures[3]);\n const week = parseDateUnit(captures[4]);\n const dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n const date = new Date(0);\n if (\n !validateDate(year, month, day) ||\n !validateDayOfYearDate(year, dayOfYear)\n ) {\n return new Date(NaN);\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\n\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n const captures = timeString.match(timeRegex);\n if (!captures) return NaN; // Invalid ISO-formatted time\n\n const hours = parseTimeUnit(captures[1]);\n const minutes = parseTimeUnit(captures[2]);\n const seconds = parseTimeUnit(captures[3]);\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n\n return (\n hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000\n );\n}\n\nfunction parseTimeUnit(value) {\n return (value && parseFloat(value.replace(\",\", \".\"))) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n if (timezoneString === \"Z\") return 0;\n\n const captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n\n const sign = captures[1] === \"+\" ? -1 : 1;\n const hours = parseInt(captures[2]);\n const minutes = (captures[3] && parseInt(captures[3])) || 0;\n\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n\n return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n const date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n const fourthOfJanuaryDay = date.getUTCDay() || 7;\n const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nconst daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n\nfunction validateDate(year, month, date) {\n return (\n month >= 0 &&\n month <= 11 &&\n date >= 1 &&\n date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n );\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n\n return (\n seconds >= 0 &&\n seconds < 60 &&\n minutes >= 0 &&\n minutes < 60 &&\n hours >= 0 &&\n hours < 25\n );\n}\n\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}\n\n// Fallback for modularized imports:\nexport default parseISO;\n","import clsx from 'clsx';\nimport { differenceInMilliseconds, formatISO, isValid, parseISO } from 'date-fns';\nimport { type ChangeEvent, useCallback, useEffect, useId, useRef, useState } from 'react';\nimport { Icon, type IconicNames, type IconicTypes } from '@clubmed/trident-icons';\n\nimport { useValue } from '../hooks/useValue';\nimport { useInternalStatus } from '../hooks/useInternalStatus';\nimport { FormControl, type FormControlProps } from './FormControl';\n\ninterface DateFieldProps extends Omit<FormControlProps<Date | null>, 'max' | 'min'> {\n description?: string;\n /**\n * Open datepicker text\n */\n openDatepicker?: string;\n id?: string;\n icon?: IconicNames;\n iconType?: IconicTypes;\n errorMessage?: string;\n dataTestId?: string;\n /**\n * Minimum Date allowed\n */\n min?: Date | undefined;\n /**\n * Maximum Date allowed\n */\n max?: Date | undefined;\n}\n\nconst formatDate = (value: Date | number | string | undefined | null): string => {\n if (!value) {\n return '';\n }\n\n // Already an ISO date string (YYYY-MM-DD) coming back through the useValue\n // formatter chain — return it as-is, otherwise `new Date(isoString)` would\n // parse it as UTC midnight and `formatISO(..., 'date')` (local time) would\n // shift the calendar day in negative-UTC timezones.\n if (typeof value === 'string') {\n return value;\n }\n\n if (!isValid(new Date(value))) {\n return '';\n }\n\n return formatISO(new Date(value), { representation: 'date' });\n};\n\nconst validateDateRange = (date: string, min?: Date, max?: Date): boolean => {\n if (!date) {\n return true;\n }\n\n const normalizeDate = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\n // parseISO interprets a bare YYYY-MM-DD as local midnight, while `new Date(date)`\n // would interpret it as UTC midnight and silently shift the calendar day in\n // negative-UTC timezones.\n const inputDate = parseISO(date);\n const normalizedInputDate = normalizeDate(inputDate);\n\n if (min && normalizedInputDate < normalizeDate(min)) {\n return false;\n }\n if (max && normalizedInputDate > normalizeDate(max)) {\n return false;\n }\n\n return true;\n};\n\nexport const DateField = (props: DateFieldProps) => {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n label,\n description,\n openDatepicker,\n validationStatus = 'default',\n icon = 'CalendarDefault',\n iconType,\n errorMessage,\n disabled = false,\n required = false,\n hideRequiredStar,\n dataTestId = 'DateField',\n value: initialValue,\n min: initialMin,\n max: initialMax,\n onChange,\n className,\n ...rest\n } = props;\n\n // NO LOGIC IS IMPLEMENTED YET HERE\n // THIS IS A VISUAL COMPONENT ONLY\n const ref = useRef<HTMLInputElement>(null);\n const [isFocused, setIsFocused] = useState<boolean>(false);\n\n const internalStatus = useInternalStatus({\n isDisabled: disabled,\n validationStatus,\n });\n\n const { setValue, value } = useValue<string, Date | number | undefined | null>({\n name,\n formatter: formatDate as never,\n initialValue,\n onChange: (name, value) => onChange?.(name, value ? parseISO(value) : null),\n });\n\n const min = formatDate(initialMin);\n const max = formatDate(initialMax);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n setValue(event.target.value);\n };\n\n const handleClickPicker = () => {\n ref.current?.showPicker();\n };\n\n const handleOutOfRangeDate = useCallback(() => {\n const currentDate = parseISO(value);\n\n if (initialMin && initialMax) {\n const distanceToMin = Math.abs(differenceInMilliseconds(currentDate, initialMin));\n const distanceToMax = Math.abs(differenceInMilliseconds(currentDate, initialMax));\n setValue(distanceToMin <= distanceToMax ? min : max);\n return;\n }\n\n if (initialMin) {\n setValue(min);\n return;\n }\n\n if (initialMax) {\n setValue(max);\n return;\n }\n }, [initialMax, initialMin, max, min, setValue, value]);\n\n useEffect(() => {\n const isValid = validateDateRange(value, initialMin, initialMax);\n if (!isValid && !isFocused) {\n handleOutOfRangeDate();\n }\n }, [handleOutOfRangeDate, initialMax, initialMin, isFocused, value]);\n\n return (\n <FormControl\n id={id}\n label={label}\n description={description}\n dataName=\"DateField\"\n dataTestId={dataTestId}\n disabled={disabled}\n required={required}\n hideRequiredStar={hideRequiredStar}\n validationStatus={validationStatus}\n errorMessage={errorMessage}\n className={className}\n >\n <div className=\"relative\" role=\"group\">\n <input\n {...rest}\n type=\"date\"\n className={clsx(\n 'text-b3 rounded-pill date-field min-h-[50px] w-full border px-20 py-12 ps-[52px] font-normal outline-none',\n {\n 'border-middleGrey focus:border-black active:border-black':\n internalStatus === 'default',\n 'pe-[52px]': internalStatus === 'error' || internalStatus === 'success',\n 'bg-pearl border-middleGrey': disabled,\n 'bg-white text-black': !disabled,\n 'border-red': !disabled && internalStatus === 'error',\n 'border-green': !disabled && internalStatus === 'success',\n },\n )}\n id={id}\n disabled={disabled}\n required={required}\n ref={ref}\n value={value}\n min={min}\n max={max}\n onChange={handleChange}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n />\n <div\n className={clsx(\n 'pointer-events-none absolute inset-0 flex items-center justify-between px-20 py-12',\n {\n 'text-grey': disabled,\n 'text-red': !disabled && internalStatus === 'error',\n 'text-green': !disabled && internalStatus === 'success',\n },\n )}\n >\n <button className=\"pointer-events-auto leading-none\" onClick={handleClickPicker}>\n <Icon name={icon} iconType={iconType} width=\"24px\" />\n <span className=\"sr-only\">\n {openDatepicker}\n {/* REPLACE THAT WITH SOMETHING LIKE \"OPEN DATEPICKER\" SOONER RATHER THAN LATER PLZ */}\n </span>\n </button>\n <span className=\"ms-auto flex gap-x-8\">\n {internalStatus === 'error' && <Icon name=\"CrossDefault\" width=\"24px\" />}\n {internalStatus === 'success' && <Icon name=\"CheckDefault\" width=\"24px\" />}\n </span>\n </div>\n </div>\n </FormControl>\n );\n};\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateField.js","names":[],"sources":["../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constants.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructFrom.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/toDate.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isDate.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isValid.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceInMilliseconds.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/addLeadingZeros.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatISO.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/parseISO.js","../../lib/ui/forms/DateField.tsx"],"sourcesContent":["/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n *\n * @returns The number of milliseconds\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport function differenceInMilliseconds(laterDate, earlierDate) {\n return +toDate(laterDate) - +toDate(earlierDate);\n}\n\n// Fallback for modularized imports:\nexport default differenceInMilliseconds;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"./_lib/addLeadingZeros.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link formatISO} function options.\n */\n\n/**\n * @name formatISO\n * @category Common Helpers\n * @summary Format the date according to the ISO 8601 standard (https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm).\n *\n * @description\n * Return the formatted date string in ISO 8601 format. Options may be passed to control the parts and notations of the date.\n *\n * @param date - The original date\n * @param options - An object with options.\n *\n * @returns The formatted date string (in local time zone)\n *\n * @throws `date` must not be Invalid Date\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18T19:00:52Z'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601, short format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })\n * //=> '20190918T190052'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, date only:\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })\n * //=> '2019-09-18'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, time only (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })\n * //=> '19:00:52Z'\n */\nexport function formatISO(date, options) {\n const date_ = toDate(date, options?.in);\n\n if (isNaN(+date_)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n const format = options?.format ?? \"extended\";\n const representation = options?.representation ?? \"complete\";\n\n let result = \"\";\n let tzOffset = \"\";\n\n const dateDelimiter = format === \"extended\" ? \"-\" : \"\";\n const timeDelimiter = format === \"extended\" ? \":\" : \"\";\n\n // Representation is either 'date' or 'complete'\n if (representation !== \"time\") {\n const day = addLeadingZeros(date_.getDate(), 2);\n const month = addLeadingZeros(date_.getMonth() + 1, 2);\n const year = addLeadingZeros(date_.getFullYear(), 4);\n\n // yyyyMMdd or yyyy-MM-dd.\n result = `${year}${dateDelimiter}${month}${dateDelimiter}${day}`;\n }\n\n // Representation is either 'time' or 'complete'\n if (representation !== \"date\") {\n // Add the timezone.\n const offset = date_.getTimezoneOffset();\n\n if (offset !== 0) {\n const absoluteOffset = Math.abs(offset);\n const hourOffset = addLeadingZeros(Math.trunc(absoluteOffset / 60), 2);\n const minuteOffset = addLeadingZeros(absoluteOffset % 60, 2);\n // If less than 0, the sign is +, because it is ahead of time.\n const sign = offset < 0 ? \"+\" : \"-\";\n\n tzOffset = `${sign}${hourOffset}:${minuteOffset}`;\n } else {\n tzOffset = \"Z\";\n }\n\n const hour = addLeadingZeros(date_.getHours(), 2);\n const minute = addLeadingZeros(date_.getMinutes(), 2);\n const second = addLeadingZeros(date_.getSeconds(), 2);\n\n // If there's also date, separate it with time with 'T'\n const separator = result === \"\" ? \"\" : \"T\";\n\n // Creates a time string consisting of hour, minute, and second, separated by delimiters, if defined.\n const time = [hour, minute, second].join(timeDelimiter);\n\n // HHmmss or HH:mm:ss.\n result = `${result}${separator}${time}${tzOffset}`;\n }\n\n return result;\n}\n\n// Fallback for modularized imports:\nexport default formatISO;\n","import {\n millisecondsInHour,\n millisecondsInMinute,\n} from \"./constants.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function parseISO(argument, options) {\n const invalidDate = () => constructFrom(options?.in, NaN);\n\n const additionalDigits = options?.additionalDigits ?? 2;\n const dateStrings = splitDateString(argument);\n\n let date;\n if (dateStrings.date) {\n const parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n\n if (!date || isNaN(+date)) return invalidDate();\n\n const timestamp = +date;\n let time = 0;\n let offset;\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n if (isNaN(time)) return invalidDate();\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n if (isNaN(offset)) return invalidDate();\n } else {\n const tmpDate = new Date(timestamp + time);\n const result = toDate(0, options?.in);\n result.setFullYear(\n tmpDate.getUTCFullYear(),\n tmpDate.getUTCMonth(),\n tmpDate.getUTCDate(),\n );\n result.setHours(\n tmpDate.getUTCHours(),\n tmpDate.getUTCMinutes(),\n tmpDate.getUTCSeconds(),\n tmpDate.getUTCMilliseconds(),\n );\n return result;\n }\n\n return toDate(timestamp + time + offset, options?.in);\n}\n\nconst patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/,\n};\n\nconst dateRegex =\n /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nconst timeRegex =\n /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nconst timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n const dateStrings = {};\n const array = dateString.split(patterns.dateTimeDelimiter);\n let timeString;\n\n // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n if (array.length > 2) {\n return dateStrings;\n }\n\n if (/:/.test(array[0])) {\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(\n dateStrings.date.length,\n dateString.length,\n );\n }\n }\n\n if (timeString) {\n const token = patterns.timezone.exec(timeString);\n if (token) {\n dateStrings.time = timeString.replace(token[1], \"\");\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n\n return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n const regex = new RegExp(\n \"^(?:(\\\\d{4}|[+-]\\\\d{\" +\n (4 + additionalDigits) +\n \"})|(\\\\d{2}|[+-]\\\\d{\" +\n (2 + additionalDigits) +\n \"})$)\",\n );\n\n const captures = dateString.match(regex);\n // Invalid ISO-formatted year\n if (!captures) return { year: NaN, restDateString: \"\" };\n\n const year = captures[1] ? parseInt(captures[1]) : null;\n const century = captures[2] ? parseInt(captures[2]) : null;\n\n // either year or century is null, not both\n return {\n year: century === null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length),\n };\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return new Date(NaN);\n\n const captures = dateString.match(dateRegex);\n // Invalid ISO-formatted string\n if (!captures) return new Date(NaN);\n\n const isWeekDate = !!captures[4];\n const dayOfYear = parseDateUnit(captures[1]);\n const month = parseDateUnit(captures[2]) - 1;\n const day = parseDateUnit(captures[3]);\n const week = parseDateUnit(captures[4]);\n const dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n const date = new Date(0);\n if (\n !validateDate(year, month, day) ||\n !validateDayOfYearDate(year, dayOfYear)\n ) {\n return new Date(NaN);\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\n\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n const captures = timeString.match(timeRegex);\n if (!captures) return NaN; // Invalid ISO-formatted time\n\n const hours = parseTimeUnit(captures[1]);\n const minutes = parseTimeUnit(captures[2]);\n const seconds = parseTimeUnit(captures[3]);\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n\n return (\n hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000\n );\n}\n\nfunction parseTimeUnit(value) {\n return (value && parseFloat(value.replace(\",\", \".\"))) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n if (timezoneString === \"Z\") return 0;\n\n const captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n\n const sign = captures[1] === \"+\" ? -1 : 1;\n const hours = parseInt(captures[2]);\n const minutes = (captures[3] && parseInt(captures[3])) || 0;\n\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n\n return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n const date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n const fourthOfJanuaryDay = date.getUTCDay() || 7;\n const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nconst daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n\nfunction validateDate(year, month, date) {\n return (\n month >= 0 &&\n month <= 11 &&\n date >= 1 &&\n date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n );\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n\n return (\n seconds >= 0 &&\n seconds < 60 &&\n minutes >= 0 &&\n minutes < 60 &&\n hours >= 0 &&\n hours < 25\n );\n}\n\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}\n\n// Fallback for modularized imports:\nexport default parseISO;\n","import clsx from 'clsx';\nimport { differenceInMilliseconds, formatISO, isValid, parseISO } from 'date-fns';\nimport { type ChangeEvent, useCallback, useEffect, useId, useRef, useState } from 'react';\nimport { Icon, type IconicNames, type IconicTypes } from '@clubmed/trident-icons';\n\nimport { useValue } from '../hooks/useValue';\nimport { useInternalStatus } from '../hooks/useInternalStatus';\nimport { FormControl, type FormControlProps } from './FormControl';\n\ninterface DateFieldProps extends Omit<FormControlProps<Date | null>, 'max' | 'min'> {\n description?: string;\n /**\n * Open datepicker text\n */\n openDatepicker?: string;\n id?: string;\n icon?: IconicNames;\n iconType?: IconicTypes;\n errorMessage?: string;\n dataTestId?: string;\n /**\n * Minimum Date allowed\n */\n min?: Date | undefined;\n /**\n * Maximum Date allowed\n */\n max?: Date | undefined;\n}\n\nconst formatDate = (value: Date | number | string | undefined | null): string => {\n if (!value) {\n return '';\n }\n\n // Already an ISO date string (YYYY-MM-DD) coming back through the useValue\n // formatter chain — return it as-is, otherwise `new Date(isoString)` would\n // parse it as UTC midnight and `formatISO(..., 'date')` (local time) would\n // shift the calendar day in negative-UTC timezones.\n if (typeof value === 'string') {\n return value;\n }\n\n if (!isValid(new Date(value))) {\n return '';\n }\n\n return formatISO(new Date(value), { representation: 'date' });\n};\n\nconst validateDateRange = (date: string, min?: Date, max?: Date): boolean => {\n if (!date) {\n return true;\n }\n\n const normalizeDate = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\n // parseISO interprets a bare YYYY-MM-DD as local midnight, while `new Date(date)`\n // would interpret it as UTC midnight and silently shift the calendar day in\n // negative-UTC timezones.\n const inputDate = parseISO(date);\n const normalizedInputDate = normalizeDate(inputDate);\n\n if (min && normalizedInputDate < normalizeDate(min)) {\n return false;\n }\n if (max && normalizedInputDate > normalizeDate(max)) {\n return false;\n }\n\n return true;\n};\n\nexport const DateField = (props: DateFieldProps) => {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n label,\n description,\n openDatepicker,\n validationStatus = 'default',\n icon = 'CalendarDefault',\n iconType,\n errorMessage,\n disabled = false,\n required = false,\n hideRequiredStar,\n dataTestId = 'DateField',\n value: initialValue,\n min: initialMin,\n max: initialMax,\n onChange,\n className,\n ...rest\n } = props;\n\n // NO LOGIC IS IMPLEMENTED YET HERE\n // THIS IS A VISUAL COMPONENT ONLY\n const ref = useRef<HTMLInputElement>(null);\n const [isFocused, setIsFocused] = useState<boolean>(false);\n\n const internalStatus = useInternalStatus({\n isDisabled: disabled,\n validationStatus,\n });\n\n const { setValue, value } = useValue<string, Date | number | undefined | null>({\n formatter: formatDate as never,\n initialValue,\n onChange: (event, fieldValue) => onChange?.(event, fieldValue ? parseISO(fieldValue) : null),\n });\n\n const min = formatDate(initialMin);\n const max = formatDate(initialMax);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n setValue(event.target.value, event.nativeEvent);\n };\n\n const handleClickPicker = () => {\n ref.current?.showPicker();\n };\n\n const handleOutOfRangeDate = useCallback(() => {\n const currentDate = parseISO(value);\n\n if (initialMin && initialMax) {\n const distanceToMin = Math.abs(differenceInMilliseconds(currentDate, initialMin));\n const distanceToMax = Math.abs(differenceInMilliseconds(currentDate, initialMax));\n setValue(distanceToMin <= distanceToMax ? min : max);\n return;\n }\n\n if (initialMin) {\n setValue(min);\n return;\n }\n\n if (initialMax) {\n setValue(max);\n return;\n }\n }, [initialMax, initialMin, max, min, setValue, value]);\n\n useEffect(() => {\n const isValid = validateDateRange(value, initialMin, initialMax);\n if (!isValid && !isFocused) {\n handleOutOfRangeDate();\n }\n }, [handleOutOfRangeDate, initialMax, initialMin, isFocused, value]);\n\n return (\n <FormControl\n id={id}\n label={label}\n description={description}\n dataName=\"DateField\"\n dataTestId={dataTestId}\n disabled={disabled}\n required={required}\n hideRequiredStar={hideRequiredStar}\n validationStatus={validationStatus}\n errorMessage={errorMessage}\n className={className}\n >\n <div className=\"relative\" role=\"group\">\n <input\n {...rest}\n type=\"date\"\n className={clsx(\n 'text-b3 rounded-pill date-field min-h-[50px] w-full border px-20 py-12 ps-[52px] font-normal outline-none',\n {\n 'border-middleGrey focus:border-black active:border-black':\n internalStatus === 'default',\n 'pe-[52px]': internalStatus === 'error' || internalStatus === 'success',\n 'bg-pearl border-middleGrey': disabled,\n 'bg-white text-black': !disabled,\n 'border-red': !disabled && internalStatus === 'error',\n 'border-green': !disabled && internalStatus === 'success',\n },\n )}\n id={id}\n name={name}\n disabled={disabled}\n required={required}\n ref={ref}\n value={value}\n min={min}\n max={max}\n onChange={handleChange}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n />\n <div\n className={clsx(\n 'pointer-events-none absolute inset-0 flex items-center justify-between px-20 py-12',\n {\n 'text-grey': disabled,\n 'text-red': !disabled && internalStatus === 'error',\n 'text-green': !disabled && internalStatus === 'success',\n },\n )}\n >\n <button className=\"pointer-events-auto leading-none\" onClick={handleClickPicker}>\n <Icon name={icon} iconType={iconType} width=\"24px\" />\n <span className=\"sr-only\">\n {openDatepicker}\n {/* REPLACE THAT WITH SOMETHING LIKE \"OPEN DATEPICKER\" SOONER RATHER THAN LATER PLZ */}\n </span>\n </button>\n <span className=\"ms-auto flex gap-x-8\">\n {internalStatus === 'error' && <Icon name=\"CrossDefault\" width=\"24px\" />}\n {internalStatus === 'success' && <Icon name=\"CheckDefault\" width=\"24px\" />}\n </span>\n </div>\n </div>\n </FormControl>\n );\n};\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8],"mappings":"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"}
|
package/chunks/Range.js
CHANGED
|
@@ -124,8 +124,8 @@ var m = [
|
|
|
124
124
|
let i = r(), { ariaLabel: a, className: l, dataTestId: d = "range", id: f = i, name: p = f, singleCursorMode: m = !1, min: h = 0, options: g = [], step: _ = 1, readOnly: v, disabled: y, onChange: b, ...x } = n, [S, C] = o(g.length - 1), [w, T] = o(h), [E, { width: D }] = u({ polyfill: t }), O = (e) => {
|
|
125
125
|
if (!v) {
|
|
126
126
|
e.persist();
|
|
127
|
-
let t = Number(e.target.value);
|
|
128
|
-
|
|
127
|
+
let t = Number(e.target.value), n = e.target.id[e.target.id.length - 1];
|
|
128
|
+
n === "a" ? C(t) : T(t), b && b(e.nativeEvent, n === "a" ? [t, w] : [S, t]);
|
|
129
129
|
}
|
|
130
130
|
};
|
|
131
131
|
return /* @__PURE__ */ c("div", {
|
package/chunks/Range.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Range.js","names":["T","p","M","u"],"sources":["../../../../node_modules/.pnpm/react-use-measure@2.1.7_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-use-measure/dist/index.js","../../lib/ui/forms/Range.tsx"],"sourcesContent":["import{useState as T,useRef as p,useEffect as u,useMemo as M}from\"react\";function g(n,t){let o;return(...i)=>{window.clearTimeout(o),o=window.setTimeout(()=>n(...i),t)}}function j({debounce:n,scroll:t,polyfill:o,offsetSize:i}={debounce:0,scroll:!1,offsetSize:!1}){const a=o||(typeof window==\"undefined\"?class{}:window.ResizeObserver);if(!a)throw new Error(\"This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills\");const[c,h]=T({left:0,top:0,width:0,height:0,bottom:0,right:0,x:0,y:0}),e=p({element:null,scrollContainers:null,resizeObserver:null,lastBounds:c,orientationHandler:null}),d=n?typeof n==\"number\"?n:n.scroll:null,f=n?typeof n==\"number\"?n:n.resize:null,w=p(!1);u(()=>(w.current=!0,()=>void(w.current=!1)));const[z,m,s]=M(()=>{const r=()=>{if(!e.current.element)return;const{left:y,top:C,width:H,height:O,bottom:S,right:x,x:B,y:R}=e.current.element.getBoundingClientRect(),l={left:y,top:C,width:H,height:O,bottom:S,right:x,x:B,y:R};e.current.element instanceof HTMLElement&&i&&(l.height=e.current.element.offsetHeight,l.width=e.current.element.offsetWidth),Object.freeze(l),w.current&&!D(e.current.lastBounds,l)&&h(e.current.lastBounds=l)};return[r,f?g(r,f):r,d?g(r,d):r]},[h,i,d,f]);function v(){e.current.scrollContainers&&(e.current.scrollContainers.forEach(r=>r.removeEventListener(\"scroll\",s,!0)),e.current.scrollContainers=null),e.current.resizeObserver&&(e.current.resizeObserver.disconnect(),e.current.resizeObserver=null),e.current.orientationHandler&&(\"orientation\"in screen&&\"removeEventListener\"in screen.orientation?screen.orientation.removeEventListener(\"change\",e.current.orientationHandler):\"onorientationchange\"in window&&window.removeEventListener(\"orientationchange\",e.current.orientationHandler))}function b(){e.current.element&&(e.current.resizeObserver=new a(s),e.current.resizeObserver.observe(e.current.element),t&&e.current.scrollContainers&&e.current.scrollContainers.forEach(r=>r.addEventListener(\"scroll\",s,{capture:!0,passive:!0})),e.current.orientationHandler=()=>{s()},\"orientation\"in screen&&\"addEventListener\"in screen.orientation?screen.orientation.addEventListener(\"change\",e.current.orientationHandler):\"onorientationchange\"in window&&window.addEventListener(\"orientationchange\",e.current.orientationHandler))}const L=r=>{!r||r===e.current.element||(v(),e.current.element=r,e.current.scrollContainers=E(r),b())};return X(s,!!t),W(m),u(()=>{v(),b()},[t,s,m]),u(()=>v,[]),[L,c,z]}function W(n){u(()=>{const t=n;return window.addEventListener(\"resize\",t),()=>void window.removeEventListener(\"resize\",t)},[n])}function X(n,t){u(()=>{if(t){const o=n;return window.addEventListener(\"scroll\",o,{capture:!0,passive:!0}),()=>void window.removeEventListener(\"scroll\",o,!0)}},[n,t])}function E(n){const t=[];if(!n||n===document.body)return t;const{overflow:o,overflowX:i,overflowY:a}=window.getComputedStyle(n);return[o,i,a].some(c=>c===\"auto\"||c===\"scroll\")&&t.push(n),[...t,...E(n.parentElement)]}const k=[\"x\",\"y\",\"top\",\"bottom\",\"left\",\"right\",\"width\",\"height\"],D=(n,t)=>k.every(o=>n[o]===t[o]);export{j as default};\n//# sourceMappingURL=index.js.map\n","import { ResizeObserver } from '@juggle/resize-observer';\nimport clsx from 'clsx';\nimport {\n type ChangeEvent,\n type CSSProperties,\n type InputHTMLAttributes,\n useId,\n useState,\n} from 'react';\n\nimport useMeasure from 'react-use-measure';\n\ninterface RangeProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange'> {\n /**\n * Aria label\n * @default 'Range'\n * */\n ariaLabel?: string;\n /**\n * Additional class names\n * */\n className?: string;\n /**\n * Data test id\n * */\n dataTestId?: string;\n /**\n * Single cursor mode\n * @default false\n * */\n singleCursorMode?: boolean;\n /**\n * Min value\n * @default 0\n * */\n min?: number;\n /**\n * On change\n * */\n onChange?: (name: string, value: number[]) => void;\n /**\n * Options\n * @default []\n * */\n options: { value: number; label: string }[];\n}\n\nexport const Range = (props: RangeProps) => {\n const internalId = useId();\n\n const {\n ariaLabel,\n className,\n dataTestId = 'range',\n id = internalId,\n name = id,\n singleCursorMode = false,\n min = 0,\n options = [],\n step = 1,\n readOnly,\n disabled,\n onChange,\n ...rest\n } = props;\n\n const [valueA, setValueA] = useState(options.length - 1);\n const [valueB, setValueB] = useState(min);\n const [containerRef, { width }] = useMeasure({ polyfill: ResizeObserver });\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (!readOnly) {\n e.persist();\n const inputValue = Number(e.target.value);\n const inputId = e.target.id[e.target.id.length - 1];\n\n if (inputId === 'a') {\n setValueA(inputValue);\n } else {\n setValueB(inputValue);\n }\n\n if (onChange) {\n onChange(name, [valueA, valueB]);\n }\n }\n };\n\n return (\n <div\n style={\n {\n '--min': min,\n '--max': options.length - 1,\n '--inputWidth': `${width}px`,\n '--inputHeight': '4px',\n '--thumbWidth': '32px',\n '--usefulWidth': 'calc(var(--inputWidth) - var(--thumbWidth))',\n '--valueA': valueA,\n '--valueB': valueB,\n } as CSSProperties\n }\n className={clsx('relative w-full', className)}\n data-testid={dataTestId}\n data-name=\"Range\"\n ref={containerRef}\n >\n <div className=\"input-range-container\">\n <input\n {...rest}\n aria-label={ariaLabel}\n className=\"input-range\"\n id={`${id}-a`}\n max={options.length - 1}\n min={min}\n name={name}\n onChange={handleChange}\n disabled={disabled}\n step={step}\n type=\"range\"\n value={valueA}\n />\n {!singleCursorMode && (\n <input\n {...rest}\n aria-label={ariaLabel}\n className=\"input-range\"\n disabled={disabled}\n id={`${id}-b`}\n max={options.length - 1}\n min={min}\n name={name}\n onChange={handleChange}\n step={step}\n type=\"range\"\n value={valueB}\n />\n )}\n </div>\n <output\n htmlFor={`${id}-a`}\n style={{ '--value': valueA } as CSSProperties}\n className=\"input-range-output\"\n >\n {options[valueA].label}\n </output>\n {!singleCursorMode && (\n <output\n htmlFor={`${id}-b`}\n style={{ '--value': valueB } as CSSProperties}\n className=\"input-range-output\"\n >\n {options[valueB].label}\n </output>\n )}\n </div>\n );\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Range.js","names":["T","p","M","u"],"sources":["../../../../node_modules/.pnpm/react-use-measure@2.1.7_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-use-measure/dist/index.js","../../lib/ui/forms/Range.tsx"],"sourcesContent":["import{useState as T,useRef as p,useEffect as u,useMemo as M}from\"react\";function g(n,t){let o;return(...i)=>{window.clearTimeout(o),o=window.setTimeout(()=>n(...i),t)}}function j({debounce:n,scroll:t,polyfill:o,offsetSize:i}={debounce:0,scroll:!1,offsetSize:!1}){const a=o||(typeof window==\"undefined\"?class{}:window.ResizeObserver);if(!a)throw new Error(\"This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills\");const[c,h]=T({left:0,top:0,width:0,height:0,bottom:0,right:0,x:0,y:0}),e=p({element:null,scrollContainers:null,resizeObserver:null,lastBounds:c,orientationHandler:null}),d=n?typeof n==\"number\"?n:n.scroll:null,f=n?typeof n==\"number\"?n:n.resize:null,w=p(!1);u(()=>(w.current=!0,()=>void(w.current=!1)));const[z,m,s]=M(()=>{const r=()=>{if(!e.current.element)return;const{left:y,top:C,width:H,height:O,bottom:S,right:x,x:B,y:R}=e.current.element.getBoundingClientRect(),l={left:y,top:C,width:H,height:O,bottom:S,right:x,x:B,y:R};e.current.element instanceof HTMLElement&&i&&(l.height=e.current.element.offsetHeight,l.width=e.current.element.offsetWidth),Object.freeze(l),w.current&&!D(e.current.lastBounds,l)&&h(e.current.lastBounds=l)};return[r,f?g(r,f):r,d?g(r,d):r]},[h,i,d,f]);function v(){e.current.scrollContainers&&(e.current.scrollContainers.forEach(r=>r.removeEventListener(\"scroll\",s,!0)),e.current.scrollContainers=null),e.current.resizeObserver&&(e.current.resizeObserver.disconnect(),e.current.resizeObserver=null),e.current.orientationHandler&&(\"orientation\"in screen&&\"removeEventListener\"in screen.orientation?screen.orientation.removeEventListener(\"change\",e.current.orientationHandler):\"onorientationchange\"in window&&window.removeEventListener(\"orientationchange\",e.current.orientationHandler))}function b(){e.current.element&&(e.current.resizeObserver=new a(s),e.current.resizeObserver.observe(e.current.element),t&&e.current.scrollContainers&&e.current.scrollContainers.forEach(r=>r.addEventListener(\"scroll\",s,{capture:!0,passive:!0})),e.current.orientationHandler=()=>{s()},\"orientation\"in screen&&\"addEventListener\"in screen.orientation?screen.orientation.addEventListener(\"change\",e.current.orientationHandler):\"onorientationchange\"in window&&window.addEventListener(\"orientationchange\",e.current.orientationHandler))}const L=r=>{!r||r===e.current.element||(v(),e.current.element=r,e.current.scrollContainers=E(r),b())};return X(s,!!t),W(m),u(()=>{v(),b()},[t,s,m]),u(()=>v,[]),[L,c,z]}function W(n){u(()=>{const t=n;return window.addEventListener(\"resize\",t),()=>void window.removeEventListener(\"resize\",t)},[n])}function X(n,t){u(()=>{if(t){const o=n;return window.addEventListener(\"scroll\",o,{capture:!0,passive:!0}),()=>void window.removeEventListener(\"scroll\",o,!0)}},[n,t])}function E(n){const t=[];if(!n||n===document.body)return t;const{overflow:o,overflowX:i,overflowY:a}=window.getComputedStyle(n);return[o,i,a].some(c=>c===\"auto\"||c===\"scroll\")&&t.push(n),[...t,...E(n.parentElement)]}const k=[\"x\",\"y\",\"top\",\"bottom\",\"left\",\"right\",\"width\",\"height\"],D=(n,t)=>k.every(o=>n[o]===t[o]);export{j as default};\n//# sourceMappingURL=index.js.map\n","import { ResizeObserver } from '@juggle/resize-observer';\nimport clsx from 'clsx';\nimport {\n type ChangeEvent,\n type CSSProperties,\n type InputHTMLAttributes,\n useId,\n useState,\n} from 'react';\n\nimport useMeasure from 'react-use-measure';\n\ninterface RangeProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange'> {\n /**\n * Aria label\n * @default 'Range'\n * */\n ariaLabel?: string;\n /**\n * Additional class names\n * */\n className?: string;\n /**\n * Data test id\n * */\n dataTestId?: string;\n /**\n * Single cursor mode\n * @default false\n * */\n singleCursorMode?: boolean;\n /**\n * Min value\n * @default 0\n * */\n min?: number;\n /**\n * On change\n * */\n onChange?: (event: Event, value: number[]) => void;\n /**\n * Options\n * @default []\n * */\n options: { value: number; label: string }[];\n}\n\nexport const Range = (props: RangeProps) => {\n const internalId = useId();\n\n const {\n ariaLabel,\n className,\n dataTestId = 'range',\n id = internalId,\n name = id,\n singleCursorMode = false,\n min = 0,\n options = [],\n step = 1,\n readOnly,\n disabled,\n onChange,\n ...rest\n } = props;\n\n const [valueA, setValueA] = useState(options.length - 1);\n const [valueB, setValueB] = useState(min);\n const [containerRef, { width }] = useMeasure({ polyfill: ResizeObserver });\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (!readOnly) {\n e.persist();\n const inputValue = Number(e.target.value);\n const inputId = e.target.id[e.target.id.length - 1];\n\n if (inputId === 'a') {\n setValueA(inputValue);\n } else {\n setValueB(inputValue);\n }\n\n if (onChange) {\n onChange(e.nativeEvent, inputId === 'a' ? [inputValue, valueB] : [valueA, inputValue]);\n }\n }\n };\n\n return (\n <div\n style={\n {\n '--min': min,\n '--max': options.length - 1,\n '--inputWidth': `${width}px`,\n '--inputHeight': '4px',\n '--thumbWidth': '32px',\n '--usefulWidth': 'calc(var(--inputWidth) - var(--thumbWidth))',\n '--valueA': valueA,\n '--valueB': valueB,\n } as CSSProperties\n }\n className={clsx('relative w-full', className)}\n data-testid={dataTestId}\n data-name=\"Range\"\n ref={containerRef}\n >\n <div className=\"input-range-container\">\n <input\n {...rest}\n aria-label={ariaLabel}\n className=\"input-range\"\n id={`${id}-a`}\n max={options.length - 1}\n min={min}\n name={name}\n onChange={handleChange}\n disabled={disabled}\n step={step}\n type=\"range\"\n value={valueA}\n />\n {!singleCursorMode && (\n <input\n {...rest}\n aria-label={ariaLabel}\n className=\"input-range\"\n disabled={disabled}\n id={`${id}-b`}\n max={options.length - 1}\n min={min}\n name={name}\n onChange={handleChange}\n step={step}\n type=\"range\"\n value={valueB}\n />\n )}\n </div>\n <output\n htmlFor={`${id}-a`}\n style={{ '--value': valueA } as CSSProperties}\n className=\"input-range-output\"\n >\n {options[valueA].label}\n </output>\n {!singleCursorMode && (\n <output\n htmlFor={`${id}-b`}\n style={{ '--value': valueB } as CSSProperties}\n className=\"input-range-output\"\n >\n {options[valueB].label}\n </output>\n )}\n </div>\n );\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -11,8 +11,8 @@ function r() {
|
|
|
11
11
|
name: "terms",
|
|
12
12
|
value: "accepted",
|
|
13
13
|
checked: r,
|
|
14
|
-
onChange: (e) => {
|
|
15
|
-
i(
|
|
14
|
+
onChange: (e, t) => {
|
|
15
|
+
i(t), o(t ? "" : "This field is required");
|
|
16
16
|
},
|
|
17
17
|
validationStatus: a ? "error" : "default",
|
|
18
18
|
errorMessage: a,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox-demo.js","names":[],"sources":["../../lib/examples/checkbox-demo.tsx"],"sourcesContent":["'use client';\n\nimport { Checkbox } from '@/ui/forms/checkboxes/Checkbox';\nimport { useState } from 'react';\n\nexport default function CheckboxDemo() {\n const [checked, setChecked] = useState(false);\n const [error, setError] = useState('This field is required');\n\n return (\n <div className=\"space-y-4\">\n <Checkbox\n name=\"terms\"\n value=\"accepted\"\n checked={checked}\n onChange={(
|
|
1
|
+
{"version":3,"file":"checkbox-demo.js","names":[],"sources":["../../lib/examples/checkbox-demo.tsx"],"sourcesContent":["'use client';\n\nimport { Checkbox } from '@/ui/forms/checkboxes/Checkbox';\nimport { useState } from 'react';\n\nexport default function CheckboxDemo() {\n const [checked, setChecked] = useState(false);\n const [error, setError] = useState('This field is required');\n\n return (\n <div className=\"space-y-4\">\n <Checkbox\n name=\"terms\"\n value=\"accepted\"\n checked={checked}\n onChange={(_, value) => {\n setChecked(value);\n setError(value ? '' : 'This field is required');\n }}\n validationStatus={error ? 'error' : 'default'}\n errorMessage={error}\n >\n I agree to the terms and conditions\n </Checkbox>\n </div>\n );\n}\n"],"mappings":";;;;;AAKA,SAAwB,IAAe;CACrC,IAAM,CAAC,GAAS,KAAc,EAAS,GAAM,EACvC,CAAC,GAAO,KAAY,EAAS,yBAAyB;AAE5D,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD;GACE,MAAK;GACL,OAAM;GACG;GACT,WAAW,GAAG,MAAU;AAEtB,IADA,EAAW,EAAM,EACjB,EAAS,IAAQ,KAAK,yBAAyB;;GAEjD,kBAAkB,IAAQ,UAAU;GACpC,cAAc;aACf;GAEU,CAAA;EACP,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function CountdownDemo(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Countdown as e } from "../ui/Countdown.js";
|
|
3
|
+
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
4
|
+
//#region lib/examples/countdown-demo.tsx
|
|
5
|
+
var r = {
|
|
6
|
+
days: "days",
|
|
7
|
+
hours: "hours",
|
|
8
|
+
minutes: "minutes",
|
|
9
|
+
seconds: "seconds"
|
|
10
|
+
}, i = /* @__PURE__ */ new Date();
|
|
11
|
+
i.setDate(i.getDate() + 1);
|
|
12
|
+
var a = /* @__PURE__ */ new Date();
|
|
13
|
+
a.setDate(a.getDate() + 7);
|
|
14
|
+
function o() {
|
|
15
|
+
return /* @__PURE__ */ n("div", {
|
|
16
|
+
className: "flex flex-col gap-8",
|
|
17
|
+
children: [/* @__PURE__ */ t(e, {
|
|
18
|
+
countdown: {
|
|
19
|
+
to: i.toISOString(),
|
|
20
|
+
labels: r
|
|
21
|
+
},
|
|
22
|
+
theme: "saffron"
|
|
23
|
+
}), /* @__PURE__ */ t("div", {
|
|
24
|
+
className: "bg-ultramarine p-6 rounded-16",
|
|
25
|
+
children: /* @__PURE__ */ t(e, {
|
|
26
|
+
countdown: {
|
|
27
|
+
to: a.toISOString(),
|
|
28
|
+
labels: r
|
|
29
|
+
},
|
|
30
|
+
theme: "white",
|
|
31
|
+
className: "text-white"
|
|
32
|
+
})
|
|
33
|
+
})]
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { o as default };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=countdown-demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"countdown-demo.js","names":[],"sources":["../../lib/examples/countdown-demo.tsx"],"sourcesContent":["'use client';\n\nimport { Countdown } from '@/ui/Countdown';\n\nconst labels = {\n days: 'days',\n hours: 'hours',\n minutes: 'minutes',\n seconds: 'seconds',\n};\n\nconst tomorrow = new Date();\ntomorrow.setDate(tomorrow.getDate() + 1);\n\nconst nextWeek = new Date();\nnextWeek.setDate(nextWeek.getDate() + 7);\n\nexport default function CountdownDemo() {\n return (\n <div className=\"flex flex-col gap-8\">\n <Countdown countdown={{ to: tomorrow.toISOString(), labels }} theme=\"saffron\" />\n <div className=\"bg-ultramarine p-6 rounded-16\">\n <Countdown\n countdown={{ to: nextWeek.toISOString(), labels }}\n theme=\"white\"\n className=\"text-white\"\n />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;AAIA,IAAM,IAAS;CACb,MAAM;CACN,OAAO;CACP,SAAS;CACT,SAAS;CACV,EAEK,oBAAW,IAAI,MAAM;AAC3B,EAAS,QAAQ,EAAS,SAAS,GAAG,EAAE;AAExC,IAAM,oBAAW,IAAI,MAAM;AAC3B,EAAS,QAAQ,EAAS,SAAS,GAAG,EAAE;AAExC,SAAwB,IAAgB;AACtC,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,GAAD;GAAW,WAAW;IAAE,IAAI,EAAS,aAAa;IAAE;IAAQ;GAAE,OAAM;GAAY,CAAA,EAChF,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,GAAD;IACE,WAAW;KAAE,IAAI,EAAS,aAAa;KAAE;KAAQ;IACjD,OAAM;IACN,WAAU;IACV,CAAA;GACE,CAAA,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function FloatingLabelTextFieldDemo(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { FloatingLabelTextField as e } from "../ui/forms/FloatingLabelTextField.js";
|
|
3
|
+
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
4
|
+
//#region lib/examples/floating-label-text-field-demo.tsx
|
|
5
|
+
function r() {
|
|
6
|
+
return /* @__PURE__ */ n("div", {
|
|
7
|
+
className: "flex flex-col gap-16 w-full max-w-[496px]",
|
|
8
|
+
children: [
|
|
9
|
+
/* @__PURE__ */ t(e, { label: "Select" }),
|
|
10
|
+
/* @__PURE__ */ t(e, {
|
|
11
|
+
label: "Select",
|
|
12
|
+
value: "First value of the list",
|
|
13
|
+
hasDropdown: !0
|
|
14
|
+
}),
|
|
15
|
+
/* @__PURE__ */ t(e, {
|
|
16
|
+
label: "Select",
|
|
17
|
+
value: "First value of the list",
|
|
18
|
+
validationStatus: "error",
|
|
19
|
+
errorMessage: "Please select a value",
|
|
20
|
+
hasDropdown: !0
|
|
21
|
+
}),
|
|
22
|
+
/* @__PURE__ */ t(e, {
|
|
23
|
+
label: "Select",
|
|
24
|
+
disabled: !0
|
|
25
|
+
})
|
|
26
|
+
]
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { r as default };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=floating-label-text-field-demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floating-label-text-field-demo.js","names":[],"sources":["../../lib/examples/floating-label-text-field-demo.tsx"],"sourcesContent":["'use client';\n\nimport { FloatingLabelTextField } from '@/ui/forms/FloatingLabelTextField';\n\nexport default function FloatingLabelTextFieldDemo() {\n return (\n <div className=\"flex flex-col gap-16 w-full max-w-[496px]\">\n <FloatingLabelTextField label=\"Select\" />\n\n <FloatingLabelTextField label=\"Select\" value=\"First value of the list\" hasDropdown />\n\n <FloatingLabelTextField\n label=\"Select\"\n value=\"First value of the list\"\n validationStatus=\"error\"\n errorMessage=\"Please select a value\"\n hasDropdown\n />\n\n <FloatingLabelTextField label=\"Select\" disabled />\n </div>\n );\n}\n"],"mappings":";;;;AAIA,SAAwB,IAA6B;AACnD,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD,EAAwB,OAAM,UAAW,CAAA;GAEzC,kBAAC,GAAD;IAAwB,OAAM;IAAS,OAAM;IAA0B,aAAA;IAAc,CAAA;GAErF,kBAAC,GAAD;IACE,OAAM;IACN,OAAM;IACN,kBAAiB;IACjB,cAAa;IACb,aAAA;IACA,CAAA;GAEF,kBAAC,GAAD;IAAwB,OAAM;IAAS,UAAA;IAAW,CAAA"}
|
package/examples/radio-demo.js
CHANGED
|
@@ -12,21 +12,21 @@ function i() {
|
|
|
12
12
|
name: "option",
|
|
13
13
|
value: "option1",
|
|
14
14
|
checked: i === "option1",
|
|
15
|
-
onChange: (e) => a(
|
|
15
|
+
onChange: (e, t) => a(t),
|
|
16
16
|
children: "Option 1"
|
|
17
17
|
}),
|
|
18
18
|
/* @__PURE__ */ n(e, {
|
|
19
19
|
name: "option",
|
|
20
20
|
value: "option2",
|
|
21
21
|
checked: i === "option2",
|
|
22
|
-
onChange: (e) => a(
|
|
22
|
+
onChange: (e, t) => a(t),
|
|
23
23
|
children: "Option 2"
|
|
24
24
|
}),
|
|
25
25
|
/* @__PURE__ */ n(e, {
|
|
26
26
|
name: "option",
|
|
27
27
|
value: "option3",
|
|
28
28
|
checked: i === "option3",
|
|
29
|
-
onChange: (e) => a(
|
|
29
|
+
onChange: (e, t) => a(t),
|
|
30
30
|
children: "Option 3"
|
|
31
31
|
})
|
|
32
32
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radio-demo.js","names":[],"sources":["../../lib/examples/radio-demo.tsx"],"sourcesContent":["'use client';\n\nimport { Radio } from '@/ui/forms/radios/Radio';\nimport { useState } from 'react';\n\nexport default function RadioDemo() {\n const [selectedValue, setSelectedValue] = useState<string>('');\n\n return (\n <div className=\"flex flex-col gap-8\">\n <Radio\n name=\"option\"\n value=\"option1\"\n checked={selectedValue === 'option1'}\n onChange={(
|
|
1
|
+
{"version":3,"file":"radio-demo.js","names":[],"sources":["../../lib/examples/radio-demo.tsx"],"sourcesContent":["'use client';\n\nimport { Radio } from '@/ui/forms/radios/Radio';\nimport { useState } from 'react';\n\nexport default function RadioDemo() {\n const [selectedValue, setSelectedValue] = useState<string>('');\n\n return (\n <div className=\"flex flex-col gap-8\">\n <Radio\n name=\"option\"\n value=\"option1\"\n checked={selectedValue === 'option1'}\n onChange={(_, value) => setSelectedValue(value)}\n >\n Option 1\n </Radio>\n <Radio\n name=\"option\"\n value=\"option2\"\n checked={selectedValue === 'option2'}\n onChange={(_, value) => setSelectedValue(value)}\n >\n Option 2\n </Radio>\n <Radio\n name=\"option\"\n value=\"option3\"\n checked={selectedValue === 'option3'}\n onChange={(_, value) => setSelectedValue(value)}\n >\n Option 3\n </Radio>\n </div>\n );\n}\n"],"mappings":";;;;;AAKA,SAAwB,IAAY;CAClC,IAAM,CAAC,GAAe,KAAoB,EAAiB,GAAG;AAE9D,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD;IACE,MAAK;IACL,OAAM;IACN,SAAS,MAAkB;IAC3B,WAAW,GAAG,MAAU,EAAiB,EAAM;cAChD;IAEO,CAAA;GACR,kBAAC,GAAD;IACE,MAAK;IACL,OAAM;IACN,SAAS,MAAkB;IAC3B,WAAW,GAAG,MAAU,EAAiB,EAAM;cAChD;IAEO,CAAA;GACR,kBAAC,GAAD;IACE,MAAK;IACL,OAAM;IACN,SAAS,MAAkB;IAC3B,WAAW,GAAG,MAAU,EAAiB,EAAM;cAChD;IAEO,CAAA"}
|
package/examples/switch-demo.js
CHANGED
|
@@ -9,7 +9,7 @@ function i() {
|
|
|
9
9
|
className: "flex items-center gap-3",
|
|
10
10
|
children: [/* @__PURE__ */ n(e, {
|
|
11
11
|
checked: i,
|
|
12
|
-
onChange: (e) => a(
|
|
12
|
+
onChange: (e, t) => a(t)
|
|
13
13
|
}), /* @__PURE__ */ n("span", {
|
|
14
14
|
className: "text-b2 font-semibold",
|
|
15
15
|
children: "Enable notifications"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch-demo.js","names":[],"sources":["../../lib/examples/switch-demo.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { Switch } from '@/ui/forms/Switch';\n\nexport default function SwitchDemo() {\n const [isEnabled, setIsEnabled] = useState(false);\n\n return (\n <div className=\"flex items-center gap-3\">\n <Switch checked={isEnabled} onChange={(
|
|
1
|
+
{"version":3,"file":"switch-demo.js","names":[],"sources":["../../lib/examples/switch-demo.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { Switch } from '@/ui/forms/Switch';\n\nexport default function SwitchDemo() {\n const [isEnabled, setIsEnabled] = useState(false);\n\n return (\n <div className=\"flex items-center gap-3\">\n <Switch checked={isEnabled} onChange={(_, checked) => setIsEnabled(checked)} />\n <span className=\"text-b2 font-semibold\">Enable notifications</span>\n </div>\n );\n}\n"],"mappings":";;;;;AAKA,SAAwB,IAAa;CACnC,IAAM,CAAC,GAAW,KAAgB,EAAS,GAAM;AAEjD,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,GAAD;GAAQ,SAAS;GAAW,WAAW,GAAG,MAAY,EAAa,EAAA;GAAY,CAAA,EAC/E,kBAAC,QAAD;GAAM,WAAU;aAAwB;GAA2B,CAAA,CAAA"}
|
package/package.json
CHANGED
package/styles/theme.css
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ComponentProps } from 'react';
|
|
2
|
+
import { Theme } from './types/Theme';
|
|
3
|
+
export interface CountdownLabels {
|
|
4
|
+
days: string;
|
|
5
|
+
hours: string;
|
|
6
|
+
minutes: string;
|
|
7
|
+
seconds: string;
|
|
8
|
+
}
|
|
9
|
+
export interface CountdownProps extends Omit<ComponentProps<'div'>, 'children'> {
|
|
10
|
+
countdown: {
|
|
11
|
+
labels: CountdownLabels;
|
|
12
|
+
to: string;
|
|
13
|
+
};
|
|
14
|
+
theme?: Theme;
|
|
15
|
+
}
|
|
16
|
+
export declare function Countdown({ className, countdown, theme, ...props }: CountdownProps): import("react/jsx-runtime").JSX.Element;
|
package/ui/Countdown.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as e } from "../chunks/clsx.js";
|
|
3
|
+
import { FlipCard as t } from "./FlipCard.js";
|
|
4
|
+
import { useEffect as n, useState as r } from "react";
|
|
5
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
6
|
+
//#region lib/ui/Countdown.tsx
|
|
7
|
+
var o = 1e3, s = o * 60, c = s * 60, l = c * 24, u = (e) => Math.max(Math.floor(e / l), 0), d = (e) => Math.max(Math.floor(e % l / c), 0), f = (e) => Math.max(Math.floor(e % c / s), 0), p = (e) => Math.max(Math.floor(e % s / o), 0);
|
|
8
|
+
function m({ className: n, countdown: r, theme: o = "white", ...s }) {
|
|
9
|
+
let { to: c, labels: l } = r, [u, d, f, p] = h(c), m = [
|
|
10
|
+
[u, l.days],
|
|
11
|
+
[d, l.hours],
|
|
12
|
+
[f, l.minutes],
|
|
13
|
+
[p, l.seconds]
|
|
14
|
+
];
|
|
15
|
+
return /* @__PURE__ */ i("div", {
|
|
16
|
+
"data-name": "Countdown",
|
|
17
|
+
role: "timer",
|
|
18
|
+
...s,
|
|
19
|
+
dir: "ltr",
|
|
20
|
+
className: e("flex gap-x-4", n),
|
|
21
|
+
children: m.map(([e, n], r) => {
|
|
22
|
+
let s = m.slice(0, r).every(([e]) => e === 0), c = e === 0 && s ? "black" : o;
|
|
23
|
+
return /* @__PURE__ */ a("div", {
|
|
24
|
+
className: "space-y-4",
|
|
25
|
+
children: [/* @__PURE__ */ i("div", {
|
|
26
|
+
className: "flex flex-row items-center gap-x-2 px-2",
|
|
27
|
+
children: e.toString().padStart(2, "0").split("").map((e, n) => /* @__PURE__ */ i(t, {
|
|
28
|
+
theme: c,
|
|
29
|
+
value: parseInt(e)
|
|
30
|
+
}, n))
|
|
31
|
+
}), /* @__PURE__ */ i("span", {
|
|
32
|
+
className: "text-b5 block max-w-58 truncate text-center",
|
|
33
|
+
children: n
|
|
34
|
+
})]
|
|
35
|
+
}, n);
|
|
36
|
+
})
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function h(e) {
|
|
40
|
+
let t = new Date(e).getTime(), i = t - Date.now(), [a, o] = r(() => u(i)), [s, c] = r(() => d(i)), [l, m] = r(() => f(i)), [h, g] = r(() => p(i));
|
|
41
|
+
return n(() => {
|
|
42
|
+
let e = setInterval(() => {
|
|
43
|
+
let n = t - Date.now();
|
|
44
|
+
if (n < 0) {
|
|
45
|
+
clearInterval(e);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
o(u(n)), c(d(n)), m(f(n)), g(p(n));
|
|
49
|
+
}, 1e3);
|
|
50
|
+
return () => clearInterval(e);
|
|
51
|
+
}, [t]), [
|
|
52
|
+
a,
|
|
53
|
+
s,
|
|
54
|
+
l,
|
|
55
|
+
h
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
export { m as Countdown };
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=Countdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Countdown.js","names":[],"sources":["../../lib/ui/Countdown.tsx"],"sourcesContent":["'use client';\nimport type { ComponentProps } from 'react';\nimport { useEffect, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { FlipCard } from './FlipCard';\nimport type { Theme } from './types/Theme';\n\nexport interface CountdownLabels {\n days: string;\n hours: string;\n minutes: string;\n seconds: string;\n}\n\nexport interface CountdownProps extends Omit<ComponentProps<'div'>, 'children'> {\n countdown: {\n labels: CountdownLabels;\n to: string;\n };\n theme?: Theme;\n}\n\nconst ONE_SEC = 1000;\nconst ONE_MIN = ONE_SEC * 60;\nconst ONE_HOUR = ONE_MIN * 60;\nconst ONE_DAY = ONE_HOUR * 24;\n\nconst getDay = (distance: number) => Math.max(Math.floor(distance / ONE_DAY), 0);\nconst getHour = (distance: number) => Math.max(Math.floor((distance % ONE_DAY) / ONE_HOUR), 0);\nconst getMinute = (distance: number) => Math.max(Math.floor((distance % ONE_HOUR) / ONE_MIN), 0);\nconst getSecond = (distance: number) => Math.max(Math.floor((distance % ONE_MIN) / ONE_SEC), 0);\n\nexport function Countdown({ className, countdown, theme = 'white', ...props }: CountdownProps) {\n const { to, labels } = countdown;\n const [days, hours, minutes, seconds] = useCountdown(to);\n\n const structure: [number, string][] = [\n [days, labels.days],\n [hours, labels.hours],\n [minutes, labels.minutes],\n [seconds, labels.seconds],\n ];\n\n return (\n <div\n data-name=\"Countdown\"\n role=\"timer\"\n {...props}\n dir=\"ltr\"\n className={clsx('flex gap-x-4', className)}\n >\n {structure.map(([division, label], index) => {\n const areAllPreviousZero = structure.slice(0, index).every(([d]) => d === 0);\n const divisionTheme = division === 0 && areAllPreviousZero ? 'black' : theme;\n\n return (\n <div className=\"space-y-4\" key={label}>\n <div className=\"flex flex-row items-center gap-x-2 px-2\">\n {division\n .toString()\n .padStart(2, '0')\n .split('')\n .map((digit, i) => (\n <FlipCard key={i} theme={divisionTheme} value={parseInt(digit)} />\n ))}\n </div>\n <span className=\"text-b5 block max-w-58 truncate text-center\">{label}</span>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction useCountdown(to: string): [number, number, number, number] {\n const toMs = new Date(to).getTime();\n const distance = toMs - Date.now();\n const [days, setDays] = useState(() => getDay(distance));\n const [hours, setHours] = useState(() => getHour(distance));\n const [minutes, setMinutes] = useState(() => getMinute(distance));\n const [seconds, setSeconds] = useState(() => getSecond(distance));\n\n useEffect(() => {\n const interval = setInterval(() => {\n const dist = toMs - Date.now();\n if (dist < 0) {\n clearInterval(interval);\n return;\n }\n setDays(getDay(dist));\n setHours(getHour(dist));\n setMinutes(getMinute(dist));\n setSeconds(getSecond(dist));\n }, 1000);\n\n return () => clearInterval(interval);\n }, [toMs]);\n\n return [days, hours, minutes, seconds];\n}\n"],"mappings":";;;;;;AAuBA,IAAM,IAAU,KACV,IAAU,IAAU,IACpB,IAAW,IAAU,IACrB,IAAU,IAAW,IAErB,KAAU,MAAqB,KAAK,IAAI,KAAK,MAAM,IAAW,EAAQ,EAAE,EAAE,EAC1E,KAAW,MAAqB,KAAK,IAAI,KAAK,MAAO,IAAW,IAAW,EAAS,EAAE,EAAE,EACxF,KAAa,MAAqB,KAAK,IAAI,KAAK,MAAO,IAAW,IAAY,EAAQ,EAAE,EAAE,EAC1F,KAAa,MAAqB,KAAK,IAAI,KAAK,MAAO,IAAW,IAAW,EAAQ,EAAE,EAAE;AAE/F,SAAgB,EAAU,EAAE,cAAW,cAAW,WAAQ,SAAS,GAAG,KAAyB;CAC7F,IAAM,EAAE,OAAI,cAAW,GACjB,CAAC,GAAM,GAAO,GAAS,KAAW,EAAa,EAAG,EAElD,IAAgC;EACpC,CAAC,GAAM,EAAO,KAAK;EACnB,CAAC,GAAO,EAAO,MAAM;EACrB,CAAC,GAAS,EAAO,QAAQ;EACzB,CAAC,GAAS,EAAO,QAAA;EAClB;AAED,QACE,kBAAC,OAAD;EACE,aAAU;EACV,MAAK;EACL,GAAI;EACJ,KAAI;EACJ,WAAW,EAAK,gBAAgB,EAAU;YAEzC,EAAU,KAAK,CAAC,GAAU,IAAQ,MAAU;GAC3C,IAAM,IAAqB,EAAU,MAAM,GAAG,EAAM,CAAC,OAAO,CAAC,OAAO,MAAM,EAAE,EACtE,IAAgB,MAAa,KAAK,IAAqB,UAAU;AAEvE,UACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eACZ,EACE,UAAU,CACV,SAAS,GAAG,IAAI,CAChB,MAAM,GAAG,CACT,KAAK,GAAO,MACX,kBAAC,GAAD;MAAkB,OAAO;MAAe,OAAO,SAAS,EAAA;MAAU,EAAnD,EAAmD,CAAA;KAElE,CAAA,EACN,kBAAC,QAAD;KAAM,WAAU;eAA+C;KAAa,CAAA,CAAA;MAV9C,EAW1B;;EAGN,CAAA;;AAIV,SAAS,EAAa,GAA8C;CAClE,IAAM,IAAO,IAAI,KAAK,EAAG,CAAC,SAAS,EAC7B,IAAW,IAAO,KAAK,KAAK,EAC5B,CAAC,GAAM,KAAW,QAAe,EAAO,EAAS,CAAC,EAClD,CAAC,GAAO,KAAY,QAAe,EAAQ,EAAS,CAAC,EACrD,CAAC,GAAS,KAAc,QAAe,EAAU,EAAS,CAAC,EAC3D,CAAC,GAAS,KAAc,QAAe,EAAU,EAAS,CAAC;AAkBjE,QAhBA,QAAgB;EACd,IAAM,IAAW,kBAAkB;GACjC,IAAM,IAAO,IAAO,KAAK,KAAK;AAC9B,OAAI,IAAO,GAAG;AACZ,kBAAc,EAAS;AACvB;;AAKF,GAHA,EAAQ,EAAO,EAAK,CAAC,EACrB,EAAS,EAAQ,EAAK,CAAC,EACvB,EAAW,EAAU,EAAK,CAAC,EAC3B,EAAW,EAAU,EAAK,CAAC;KAC1B,IAAK;AAER,eAAa,cAAc,EAAS;IACnC,CAAC,EAAK,CAAC,EAEH;EAAC;EAAM;EAAO;EAAS;EAAQ"}
|
package/ui/FlipCard.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ComponentProps } from 'react';
|
|
2
|
+
import { Theme } from './types/Theme';
|
|
3
|
+
export interface FlipCardProps extends Omit<ComponentProps<'div'>, 'children'> {
|
|
4
|
+
theme?: Theme;
|
|
5
|
+
value: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function FlipCard({ className, theme, value, ...props }: FlipCardProps): import("react/jsx-runtime").JSX.Element;
|