{"version":3,"sources":["../../../node_modules/lodash/lodash.js","../src/presets/lister/runtime/session/store.ts","../src/presets/lister/runtime/session/inflight.ts","../src/presets/lister/runtime/session/filters.ts","../src/presets/lister/runtime/session/permissions.ts","../src/presets/lister/runtime/engine/http.ts","../src/presets/lister/utils/path.ts","../src/presets/lister/runtime/engine/extract.ts","../src/presets/lister/runtime/engine/map.ts","../src/presets/lister/runtime/engine/fetch.ts","../src/presets/lister/runtime/engine/engine.ts","../src/presets/lister/runtime/engine/details.ts","../src/presets/lister/runtime/engine/search.ts","../src/presets/lister/runtime/session/filter-options.ts","../src/presets/lister/runtime/session/runtime.ts","../src/presets/lister/provider.tsx","../../../node_modules/clsx/dist/clsx.mjs","../../../node_modules/tailwind-merge/src/lib/utils.ts","../../../node_modules/tailwind-merge/src/lib/class-group-utils.ts","../../../node_modules/tailwind-merge/src/lib/lru-cache.ts","../../../node_modules/tailwind-merge/src/lib/parse-class-name.ts","../../../node_modules/tailwind-merge/src/lib/sort-modifiers.ts","../../../node_modules/tailwind-merge/src/lib/config-utils.ts","../../../node_modules/tailwind-merge/src/lib/merge-classlist.ts","../../../node_modules/tailwind-merge/src/lib/tw-join.ts","../../../node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../../../node_modules/tailwind-merge/src/lib/from-theme.ts","../../../node_modules/tailwind-merge/src/lib/validators.ts","../../../node_modules/tailwind-merge/src/lib/default-config.ts","../../../node_modules/tailwind-merge/src/lib/tw-merge.ts","../src/lib/utils.ts","../src/presets/ui/separator.tsx","../src/variants/registry.ts","../src/presets/ui/input-mask.tsx","../src/presets/ui/input.tsx","../src/presets/shadcn-variants/text.tsx","../src/variants/core/text.tsx","../src/presets/ui/number.tsx","../../../node_modules/shared/src/utils.ts","../../../node_modules/lucide-react/src/defaultAttributes.ts","../../../node_modules/lucide-react/src/Icon.ts","../../../node_modules/lucide-react/src/createLucideIcon.ts","../../../node_modules/lucide-react/src/icons/calendar.ts","../../../node_modules/lucide-react/src/icons/check.ts","../../../node_modules/lucide-react/src/icons/chevron-down.ts","../../../node_modules/lucide-react/src/icons/chevron-left.ts","../../../node_modules/lucide-react/src/icons/chevron-right.ts","../../../node_modules/lucide-react/src/icons/chevron-up.ts","../../../node_modules/lucide-react/src/icons/circle-alert.ts","../../../node_modules/lucide-react/src/icons/circle-check.ts","../../../node_modules/lucide-react/src/icons/circle.ts","../../../node_modules/lucide-react/src/icons/cloud-upload.ts","../../../node_modules/lucide-react/src/icons/code-xml.ts","../../../node_modules/lucide-react/src/icons/eye-off.ts","../../../node_modules/lucide-react/src/icons/eye.ts","../../../node_modules/lucide-react/src/icons/file.ts","../../../node_modules/lucide-react/src/icons/folder-open.ts","../../../node_modules/lucide-react/src/icons/folder-up.ts","../../../node_modules/lucide-react/src/icons/folder.ts","../../../node_modules/lucide-react/src/icons/funnel.ts","../../../node_modules/lucide-react/src/icons/globe.ts","../../../node_modules/lucide-react/src/icons/grip-vertical.ts","../../../node_modules/lucide-react/src/icons/image.ts","../../../node_modules/lucide-react/src/icons/info.ts","../../../node_modules/lucide-react/src/icons/layout-grid.ts","../../../node_modules/lucide-react/src/icons/loader-circle.ts","../../../node_modules/lucide-react/src/icons/map-pin.ts","../../../node_modules/lucide-react/src/icons/minus.ts","../../../node_modules/lucide-react/src/icons/palette.ts","../../../node_modules/lucide-react/src/icons/pen-line.ts","../../../node_modules/lucide-react/src/icons/plus.ts","../../../node_modules/lucide-react/src/icons/refresh-cw.ts","../../../node_modules/lucide-react/src/icons/search.ts","../../../node_modules/lucide-react/src/icons/sliders-horizontal.ts","../../../node_modules/lucide-react/src/icons/square-split-vertical.ts","../../../node_modules/lucide-react/src/icons/tag.ts","../../../node_modules/lucide-react/src/icons/trash-2.ts","../../../node_modules/lucide-react/src/icons/upload.ts","../../../node_modules/lucide-react/src/icons/x.ts","../src/presets/shadcn-variants/number.tsx","../src/variants/core/number.tsx","../src/presets/ui/select.tsx","../src/lib/get-global-countries.ts","../src/lib/register-global.ts","../src/presets/shadcn-variants/phone.tsx","../src/variants/core/phone.tsx","../src/presets/shadcn-variants/color.tsx","../src/variants/core/color.tsx","../src/presets/shadcn-variants/password.tsx","../src/variants/core/password.tsx","../src/presets/ui/popover.tsx","../../../node_modules/@date-fns/tz/tzName/index.js","../../../node_modules/@date-fns/tz/tzOffset/index.js","../../../node_modules/@date-fns/tz/date/mini.js","../../../node_modules/@date-fns/tz/date/index.js","../../../node_modules/date-fns/constants.js","../../../node_modules/date-fns/constructFrom.js","../../../node_modules/date-fns/toDate.js","../../../node_modules/date-fns/addDays.js","../../../node_modules/date-fns/addMonths.js","../../../node_modules/date-fns/_lib/defaultOptions.js","../../../node_modules/date-fns/startOfWeek.js","../../../node_modules/date-fns/startOfISOWeek.js","../../../node_modules/date-fns/getISOWeekYear.js","../../../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","../../../node_modules/date-fns/_lib/normalizeDates.js","../../../node_modules/date-fns/startOfDay.js","../../../node_modules/date-fns/differenceInCalendarDays.js","../../../node_modules/date-fns/startOfISOWeekYear.js","../../../node_modules/date-fns/addWeeks.js","../../../node_modules/date-fns/addYears.js","../../../node_modules/date-fns/max.js","../../../node_modules/date-fns/min.js","../../../node_modules/date-fns/isSameDay.js","../../../node_modules/date-fns/isDate.js","../../../node_modules/date-fns/isValid.js","../../../node_modules/date-fns/differenceInCalendarMonths.js","../../../node_modules/date-fns/endOfMonth.js","../../../node_modules/date-fns/_lib/normalizeInterval.js","../../../node_modules/date-fns/eachMonthOfInterval.js","../../../node_modules/date-fns/startOfMonth.js","../../../node_modules/date-fns/endOfYear.js","../../../node_modules/date-fns/startOfYear.js","../../../node_modules/date-fns/eachYearOfInterval.js","../../../node_modules/date-fns/endOfWeek.js","../../../node_modules/date-fns/endOfISOWeek.js","../../../node_modules/date-fns/locale/en-US/_lib/formatDistance.js","../../../node_modules/date-fns/locale/_lib/buildFormatLongFn.js","../../../node_modules/date-fns/locale/en-US/_lib/formatLong.js","../../../node_modules/date-fns/locale/en-US/_lib/formatRelative.js","../../../node_modules/date-fns/locale/_lib/buildLocalizeFn.js","../../../node_modules/date-fns/locale/en-US/_lib/localize.js","../../../node_modules/date-fns/locale/_lib/buildMatchFn.js","../../../node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","../../../node_modules/date-fns/locale/en-US/_lib/match.js","../../../node_modules/date-fns/locale/en-US.js","../../../node_modules/date-fns/getDayOfYear.js","../../../node_modules/date-fns/getISOWeek.js","../../../node_modules/date-fns/getWeekYear.js","../../../node_modules/date-fns/startOfWeekYear.js","../../../node_modules/date-fns/getWeek.js","../../../node_modules/date-fns/_lib/addLeadingZeros.js","../../../node_modules/date-fns/_lib/format/lightFormatters.js","../../../node_modules/date-fns/_lib/format/formatters.js","../../../node_modules/date-fns/_lib/format/longFormatters.js","../../../node_modules/date-fns/_lib/protectedTokens.js","../../../node_modules/date-fns/format.js","../../../node_modules/date-fns/getDaysInMonth.js","../../../node_modules/date-fns/getMonth.js","../../../node_modules/date-fns/getYear.js","../../../node_modules/date-fns/isAfter.js","../../../node_modules/date-fns/isBefore.js","../../../node_modules/date-fns/isSameMonth.js","../../../node_modules/date-fns/isSameYear.js","../../../node_modules/date-fns/setMonth.js","../../../node_modules/date-fns/setYear.js","../../../node_modules/react-day-picker/dist/esm/helpers/getBroadcastWeeksInMonth.js","../../../node_modules/react-day-picker/dist/esm/helpers/startOfBroadcastWeek.js","../../../node_modules/react-day-picker/dist/esm/helpers/endOfBroadcastWeek.js","../../../node_modules/react-day-picker/dist/esm/locale/en-US.js","../../../node_modules/react-day-picker/dist/esm/classes/DateLib.js","../../../node_modules/react-day-picker/dist/esm/classes/CalendarDay.js","../../../node_modules/react-day-picker/dist/esm/classes/CalendarMonth.js","../../../node_modules/react-day-picker/dist/esm/classes/CalendarWeek.js","../../../node_modules/react-day-picker/dist/esm/components/custom-components.js","../../../node_modules/react-day-picker/dist/esm/components/Button.js","../../../node_modules/react-day-picker/dist/esm/components/CaptionLabel.js","../../../node_modules/react-day-picker/dist/esm/components/Chevron.js","../../../node_modules/react-day-picker/dist/esm/components/Day.js","../../../node_modules/react-day-picker/dist/esm/components/DayButton.js","../../../node_modules/react-day-picker/dist/esm/UI.js","../../../node_modules/react-day-picker/dist/esm/components/Dropdown.js","../../../node_modules/react-day-picker/dist/esm/components/DropdownNav.js","../../../node_modules/react-day-picker/dist/esm/components/Footer.js","../../../node_modules/react-day-picker/dist/esm/components/Month.js","../../../node_modules/react-day-picker/dist/esm/components/MonthCaption.js","../../../node_modules/react-day-picker/dist/esm/components/MonthGrid.js","../../../node_modules/react-day-picker/dist/esm/components/Months.js","../../../node_modules/react-day-picker/dist/esm/useDayPicker.js","../../../node_modules/react-day-picker/dist/esm/components/MonthsDropdown.js","../../../node_modules/react-day-picker/dist/esm/components/Nav.js","../../../node_modules/react-day-picker/dist/esm/components/NextMonthButton.js","../../../node_modules/react-day-picker/dist/esm/components/Option.js","../../../node_modules/react-day-picker/dist/esm/components/PreviousMonthButton.js","../../../node_modules/react-day-picker/dist/esm/components/Root.js","../../../node_modules/react-day-picker/dist/esm/components/Select.js","../../../node_modules/react-day-picker/dist/esm/components/Week.js","../../../node_modules/react-day-picker/dist/esm/components/Weekday.js","../../../node_modules/react-day-picker/dist/esm/components/Weekdays.js","../../../node_modules/react-day-picker/dist/esm/components/WeekNumber.js","../../../node_modules/react-day-picker/dist/esm/components/WeekNumberHeader.js","../../../node_modules/react-day-picker/dist/esm/components/Weeks.js","../../../node_modules/react-day-picker/dist/esm/components/YearsDropdown.js","../../../node_modules/react-day-picker/dist/esm/utils/rangeIncludesDate.js","../../../node_modules/react-day-picker/dist/esm/utils/typeguards.js","../../../node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.js","../../../node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.js","../../../node_modules/react-day-picker/dist/esm/helpers/getClassNamesForModifiers.js","../../../node_modules/react-day-picker/dist/esm/helpers/getComponents.js","../../../node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.js","../../../node_modules/react-day-picker/dist/esm/helpers/getDefaultClassNames.js","../../../node_modules/react-day-picker/dist/esm/formatters/index.js","../../../node_modules/react-day-picker/dist/esm/formatters/formatCaption.js","../../../node_modules/react-day-picker/dist/esm/formatters/formatDay.js","../../../node_modules/react-day-picker/dist/esm/formatters/formatMonthDropdown.js","../../../node_modules/react-day-picker/dist/esm/formatters/formatWeekdayName.js","../../../node_modules/react-day-picker/dist/esm/formatters/formatWeekNumber.js","../../../node_modules/react-day-picker/dist/esm/formatters/formatWeekNumberHeader.js","../../../node_modules/react-day-picker/dist/esm/formatters/formatYearDropdown.js","../../../node_modules/react-day-picker/dist/esm/helpers/getFormatters.js","../../../node_modules/react-day-picker/dist/esm/labels/index.js","../../../node_modules/react-day-picker/dist/esm/labels/labelDayButton.js","../../../node_modules/react-day-picker/dist/esm/labels/labelGrid.js","../../../node_modules/react-day-picker/dist/esm/labels/labelGridcell.js","../../../node_modules/react-day-picker/dist/esm/labels/labelMonthDropdown.js","../../../node_modules/react-day-picker/dist/esm/labels/labelNav.js","../../../node_modules/react-day-picker/dist/esm/labels/labelNext.js","../../../node_modules/react-day-picker/dist/esm/labels/labelPrevious.js","../../../node_modules/react-day-picker/dist/esm/labels/labelWeekday.js","../../../node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.js","../../../node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.js","../../../node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.js","../../../node_modules/react-day-picker/dist/esm/helpers/getLabels.js","../../../node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.js","../../../node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.js","../../../node_modules/react-day-picker/dist/esm/helpers/getWeekdays.js","../../../node_modules/react-day-picker/dist/esm/helpers/getYearOptions.js","../../../node_modules/react-day-picker/dist/esm/useAnimation.js","../../../node_modules/react-day-picker/dist/esm/helpers/getDates.js","../../../node_modules/react-day-picker/dist/esm/helpers/getDays.js","../../../node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.js","../../../node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.js","../../../node_modules/react-day-picker/dist/esm/helpers/getMonths.js","../../../node_modules/react-day-picker/dist/esm/helpers/getNavMonth.js","../../../node_modules/react-day-picker/dist/esm/helpers/getNextMonth.js","../../../node_modules/react-day-picker/dist/esm/helpers/getPreviousMonth.js","../../../node_modules/react-day-picker/dist/esm/helpers/getWeeks.js","../../../node_modules/react-day-picker/dist/esm/helpers/useControlledValue.js","../../../node_modules/react-day-picker/dist/esm/useCalendar.js","../../../node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.js","../../../node_modules/react-day-picker/dist/esm/helpers/getFocusableDate.js","../../../node_modules/react-day-picker/dist/esm/helpers/getNextFocus.js","../../../node_modules/react-day-picker/dist/esm/useFocus.js","../../../node_modules/react-day-picker/dist/esm/selection/useMulti.js","../../../node_modules/react-day-picker/dist/esm/utils/addToRange.js","../../../node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.js","../../../node_modules/react-day-picker/dist/esm/utils/rangeOverlaps.js","../../../node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.js","../../../node_modules/react-day-picker/dist/esm/selection/useRange.js","../../../node_modules/react-day-picker/dist/esm/selection/useSingle.js","../../../node_modules/react-day-picker/dist/esm/useSelection.js","../../../node_modules/react-day-picker/dist/esm/utils/toTimeZone.js","../../../node_modules/react-day-picker/dist/esm/utils/convertMatchersToTimeZone.js","../../../node_modules/react-day-picker/dist/esm/DayPicker.js","../../../node_modules/class-variance-authority/dist/index.mjs","../src/presets/ui/button.tsx","../src/presets/ui/calendar.tsx","../src/presets/ui/time-dropdowns.tsx","../src/presets/shadcn-variants/date.tsx","../src/variants/core/date.tsx","../src/presets/ui/textarea.tsx","../src/presets/shadcn-variants/chips.tsx","../src/variants/core/chips.tsx","../src/presets/shadcn-variants/textarea.tsx","../src/variants/core/textarea.tsx","../src/presets/ui/switch.tsx","../src/presets/shadcn-variants/toggle.tsx","../src/variants/core/toggle.tsx","../src/lib/group-layout.ts","../src/presets/ui/badge.tsx","../src/presets/ui/radio-group.tsx","../src/lib/normalise-options.ts","../src/presets/shadcn-variants/radio.tsx","../src/variants/core/radio.tsx","../src/presets/ui/checkbox.tsx","../src/presets/shadcn-variants/checkbox.tsx","../src/variants/core/checkbox.tsx","../src/presets/ui/scroll-area.tsx","../src/presets/shadcn-variants/select.tsx","../src/variants/core/select.tsx","../src/variants/helpers/selection-summary.tsx","../src/presets/shadcn-variants/multiselect.tsx","../src/variants/core/multiselect.tsx","../src/presets/ui/slider.tsx","../src/presets/shadcn-variants/slider.tsx","../src/variants/core/slider.tsx","../src/presets/ui/dialog.tsx","../src/presets/shadcn-variants/keyvalue.tsx","../src/variants/core/keyvalue.tsx","../src/presets/shadcn-variants/custom.tsx","../src/variants/core/custom.tsx","../src/presets/shadcn-variants/treeselect.tsx","../src/variants/core/treeselect.tsx","../src/presets/shadcn-variants/file.tsx","../src/variants/core/file.tsx","../src/presets/ui/toggle.tsx","../src/presets/ui/toggle-group.tsx","../src/presets/ui/tooltip.tsx","../src/presets/shadcn-variants/toggle-group.tsx","../src/variants/core/toggle-group.tsx","../src/presets/shadcn-variants/editor.tsx","../src/variants/core/editor.ts","../src/lib/json-editor/glob.ts","../src/lib/json-editor/filters.ts","../src/lib/json-editor/layout.ts","../src/lib/json-editor/routes.ts","../src/lib/json-editor/tree.ts","../src/presets/shadcn-variants/json-editor/main.tsx","../../../node_modules/object-property-assigner/build/index.esm.js","../../../node_modules/object-property-extractor/build/index.esm.js","../../../node_modules/json-edit-react/build/index.esm.js","../src/presets/shadcn-variants/json-editor/raw-panel.tsx","../src/presets/shadcn-variants/json-editor/editor.tsx","../src/presets/shadcn-variants/json-editor/index.tsx","../src/variants/core/json-editor.tsx","../src/presets/shadcn-variants/lister/utils.tsx","../src/presets/shadcn-variants/lister/patch.ts","../src/presets/lister/ui/option-list.tsx","../src/presets/lister/ui/footer-bar.tsx","../src/presets/shadcn-variants/lister/popover.tsx","../src/presets/lister/runtime/session/key.ts","../src/presets/shadcn-variants/lister/inner.tsx","../src/presets/shadcn-variants/lister/index.tsx","../src/presets/shadcn-variants/lister.tsx","../src/variants/core/lister.tsx","../src/presets/shadcn-variants/icon.tsx","../src/presets/shadcn-variants/image-icon.tsx","../src/variants/core/image-icon.tsx","../src/variants/core/icon.tsx","../src/variants/index.ts","../src/presets/ui/label.tsx","../src/presets/ui/field.tsx","../src/input/input-layout-graph.ts","../src/core/context.ts","../src/core/hooks/use-core-context.ts","../src/core/hooks/use-field.ts","../src/core/hooks/use-optional-field.ts","../src/input/input-field.tsx","../src/presets/lister/ui/filter-ui.tsx","../src/presets/lister/ui/search.tsx","../src/presets/lister/ui/header.tsx","../src/presets/lister/lister-ui.tsx","../src/presets/lister/hooks/use-lister.ts","../src/presets/lister/hooks/use-data.ts"],"names":["exports","module","undefined","e","collection","n","runInContext","_","Array","Date","Error","Function","Math","Object","RegExp","String","TypeError","Buffer","Symbol","Uint8Array","Map","Promise","Set","isObjectLike","result","iteratee","size","values","key","setTimeout","includes","object","isKey","isPlainObject","indexOf","set","clearTimeout","index","ary","othValue","map","match","transform","findIndex","uniq","toArray","parent","clone","keyBy","isDate","isEmpty","isInteger","isNaN","isNumber","findKey","pick","clamp","parseInt","chain","max","min","value","s","f","p","w","m","_a","c","v","opt","raw","o","x","q","l","k","t","_b","_c","_d","_e","a","b","cur","next","React","concatArrays","array1","array2","combinedArray","length","i","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","className","startsWith","endsWith","getGroupIdForArbitraryProperty","classParts","split","startIndex","getGroupRecursive","getConflictingClassGroupIds","hasPostfixModifier","modifierConflicts","baseConflicts","classPartObject","classPathsLength","currentClassPart","nextClassPartObject","get","classRest","join","slice","validatorsLength","validatorObj","content","colonIndex","property","theme","classGroups","processClassGroups","group","processClassesRecursively","classGroup","len","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","entries","path","current","parts","part","func","createLruCache","maxCacheSize","cacheSize","cache","create","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","prefix","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","fullPrefix","parseClassNameOriginal","createSortModifiers","modifierWeights","orderSensitiveModifiers","forEach","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","has","sort","createConfigUtils","sortModifiers","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","classGroupsInConflict","classNames","trim","originalClassName","substring","variantModifier","modifierId","classId","conflictGroups","twJoin","classLists","argument","resolvedValue","string","toValue","mix","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","reduce","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","args","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","test","Number","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","testLabel","testValue","exec","shouldMatchNoLabel","label","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","span","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleBgPosition","position","scaleBgRepeat","repeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","animate","aspect","blur","breakpoint","color","container","ease","font","leading","perspective","radius","shadow","spacing","text","tracking","columns","box","display","sr","float","clear","isolation","overflow","overscroll","inset","start","end","top","right","bottom","left","visibility","z","basis","flex","grow","shrink","order","col","row","gap","justify","items","baseline","self","px","py","ps","pe","pt","pr","pb","pl","mx","my","ms","me","mt","mr","mb","ml","screen","h","list","placeholder","decoration","indent","align","whitespace","break","wrap","hyphens","bg","linear","to","radial","conic","from","via","rounded","border","divide","outline","ring","opacity","mask","closest","farthest","filter","brightness","contrast","grayscale","invert","saturate","sepia","table","caption","transition","duration","delay","backface","rotate","scale","skew","origin","translate","accent","appearance","caret","scheme","cursor","resize","scroll","snap","touch","select","fill","stroke","twMerge","jsx","React2","slotChar","j","React3","Input","React4","ShadcnTextVariant","modelValue","stripAffixes","re","trimmed","React5","forwardRef","createElement","__iconNode","File","sanitizeNumberish","ShadcnNumberVariant","jsxs","validateText","Icon","registry","React7","ShadcnPhoneVariant","DEFAULT_COUNTRIES","React8","ShadcnColorVariant","React9","ShadcnPasswordVariant","format","defaultOptions","localize","formatLong","enUS","y","options","Root","Select","UI","DayFlag","SelectionState","Animation","createContext","useContext","labelPrevious","labelNext","useCallback","differenceInCalendarDays","isSameDay","isAfter","isSameMonth","startOfMonth","isBefore","endOfMonth","days","defaultLabel","formatters","startOfYear","endOfYear","eachMonthOfInterval","getMonth","eachYearOfInterval","getYear","useRef","useLayoutEffect","addDays","differenceInCalendarMonths","endOfBroadcastWeek","endOfISOWeek","endOfWeek","startOfBroadcastWeek","startOfISOWeek","startOfWeek","weekDays","addMonths","getISOWeek","getWeek","weeks","week","startOfDay","addYears","useState","useEffect","useMemo","months","previousMonth","nextMonth","FocusTargetPriority","addWeeks","useFocus","locale","dateLib","formatCaption","formatDay","formatMonthDropdown","formatWeekNumber","formatWeekNumberHeader","formatWeekdayName","formatYearDropdown","labelDayButton","labelGridcell","labelGrid","labelMonthDropdown","labelNav","labelWeekday","labelWeekNumber","labelWeekNumberHeader","labelYearDropdown","style","cx","variants","param","Button","Calendar","props","React37","React38","pad2","React39","ShadcnDateVariant","detail","resolveSizeDensityClasses","resolveBasePadding","React40","Textarea","React41","ShadcnChipsVariant","Fragment","React42","ShadcnTextareaVariant","React43","ShadcnToggleVariant","toggle_default","Slot","capitalizeFirst","React44","paddingForDensity","labelTextSize","descriptionTextSize","normalizeItems","isEqualValue","React45","React46","ShadcnSelectVariant","React47","normalizeOptions","triggerHeight","triggerPadding","React48","ShadcnMultiSelectVariant","Virtuoso","React49","React50","ShadcnSliderVariant","g","React51","ShadcnKeyValueVariant","React52","ShadcnCustomVariant","React53","ShadcnTreeSelectVariant","treeselect_default","React54","ShadcnFileVariant","React55","React56","React57","React58","r","A","X","D","C","O","S","N","T","E","P","R","K","I","V","d","F","L","B","G","Y","H","U","$","Z","J","Q","ee","te","ne","oe","ie","se","be","ve","je","Ee","we","De","Ce","Oe","ke","Se","Ne","Te","xe","W","ce","he","ye","fe","u","ae","le","de","ue","ge","React59","prettifyLabel","React60","React61","ShadcnJsonEditorVariant","React62","React63","React64","lister_default","chipHeight","pickerBtnSize","densityTokens","mergeHandlers","React65","ShadcnIconVariant","fileId","normaliseFileLike","normaliseFromFiles","formatSizeDefault","React66","ShadcnImageIconVariant","Label","React68","message","loading","React69","React70","field","React71","asArray","React72","React73","override","_f","_g","_h","_i","inflightKey"],"mappings":"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","file":"extra.mjs","sourcesContent":["/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.23';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            };\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n\n      // Prevent prototype pollution, see: https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n      var index = -1,\n          length = path.length;\n\n      if (!length) {\n        return true;\n      }\n\n      var isRootPrimitive = object == null || (typeof object !== 'object' && typeof object !== 'function');\n\n      while (++index < length) {\n        var key = path[index];\n\n        // skip non-string keys (e.g., Symbols, numbers)\n        if (typeof key !== 'string') {\n          continue;\n        }\n\n        // Always block \"__proto__\" anywhere in the path if it's not expected\n        if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n          return false;\n        }\n\n        // Block \"constructor.prototype\" chains\n        if (key === 'constructor' &&\n            (index + 1) < length &&\n            typeof path[index + 1] === 'string' &&\n            path[index + 1] === 'prototype') {\n\n          // Allow ONLY when the path starts at a primitive root, e.g., _.unset(0, 'constructor.prototype.a')\n          if (isRootPrimitive && index === 0) {\n            continue;\n          }\n\n          return false;\n        }\n      }\n\n      var obj = parent(object, path);\n      return obj == null || delete obj[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","// packages/form-palette/src/presets/lister/runtime/session/store.ts\r\n\r\nimport type { ListerSessionId, ListerStoreState } from \"../../types\";\r\n\r\ntype Listener = () => void;\r\n\r\nexport function createSessionStore(initial?: Partial<ListerStoreState>) {\r\n    let state: ListerStoreState = {\r\n        order: [],\r\n        activeId: undefined,\r\n        sessions: {},\r\n        ...(initial ?? {}),\r\n    };\r\n\r\n    const listeners = new Set<Listener>();\r\n\r\n    function notify() {\r\n        for (const fn of listeners) fn();\r\n    }\r\n\r\n    function getState() {\r\n        return state;\r\n    }\r\n\r\n    function setState(next: ListerStoreState) {\r\n        state = next;\r\n        notify();\r\n    }\r\n\r\n    function patch(mutator: (prev: ListerStoreState) => ListerStoreState) {\r\n        setState(mutator(state));\r\n    }\r\n\r\n    function subscribe(fn: Listener) {\r\n        listeners.add(fn);\r\n        return () => listeners.delete(fn);\r\n    }\r\n\r\n    function has(sessionId: ListerSessionId) {\r\n        return Boolean(state.sessions[sessionId]);\r\n    }\r\n\r\n    function getSession(sessionId: ListerSessionId) {\r\n        return state.sessions[sessionId] as any;\r\n    }\r\n\r\n    function setSession(\r\n        sessionId: ListerSessionId,\r\n        mutator: (prev: any) => any,\r\n    ) {\r\n        const prev = state.sessions[sessionId];\r\n        if (!prev) return;\r\n\r\n        patch((s) => ({\r\n            ...s,\r\n            sessions: {\r\n                ...s.sessions,\r\n                [sessionId]: mutator(prev),\r\n            },\r\n        }));\r\n    }\r\n\r\n    function upsertSession(sessionId: ListerSessionId, session: any) {\r\n        patch((s) => ({\r\n            ...s,\r\n            activeId: sessionId,\r\n            order: s.order.includes(sessionId)\r\n                ? s.order\r\n                : [...s.order, sessionId],\r\n            sessions: { ...s.sessions, [sessionId]: session },\r\n        }));\r\n    }\r\n\r\n    function focus(sessionId: ListerSessionId) {\r\n        if (!state.sessions[sessionId]) return;\r\n        patch((s) => ({ ...s, activeId: sessionId }));\r\n    }\r\n\r\n    function remove(sessionId: ListerSessionId) {\r\n        patch((s) => {\r\n            const { [sessionId]: _, ...rest } = s.sessions;\r\n\r\n            const nextOrder = s.order.filter((id) => id !== sessionId);\r\n            const nextActive =\r\n                s.activeId === sessionId ? nextOrder.at(-1) : s.activeId;\r\n\r\n            return {\r\n                ...s,\r\n                order: nextOrder,\r\n                activeId: nextActive,\r\n                sessions: rest,\r\n            };\r\n        });\r\n    }\r\n\r\n    return {\r\n        getState,\r\n        setState,\r\n        patch,\r\n        subscribe,\r\n\r\n        has,\r\n        getSession,\r\n        setSession,\r\n        upsertSession,\r\n        focus,\r\n        remove,\r\n    };\r\n}\r\n","// packages/form-palette/src/presets/lister/runtime/session/inflight.ts\r\n\r\nimport type { ListerSessionId } from \"../../types\";\r\n\r\nexport type InFlight = {\r\n    requestId: string;\r\n    controller?: AbortController;\r\n    debounceTimer?: any;\r\n};\r\n\r\nexport function createInFlight(remoteDebounceMs: number) {\r\n    const map = new Map<ListerSessionId, InFlight>();\r\n\r\n    function abort(sessionId: ListerSessionId) {\r\n        const f = map.get(sessionId);\r\n        if (!f) return;\r\n\r\n        if (f.debounceTimer) {\r\n            clearTimeout(f.debounceTimer);\r\n            f.debounceTimer = undefined;\r\n        }\r\n\r\n        if (f.controller) {\r\n            try {\r\n                f.controller.abort();\r\n            } catch {\r\n                // ignore\r\n            }\r\n            f.controller = undefined;\r\n        }\r\n    }\r\n\r\n    function begin(sessionId: ListerSessionId, requestId: string) {\r\n        abort(sessionId);\r\n\r\n        const controller =\r\n            typeof AbortController !== \"undefined\"\r\n                ? new AbortController()\r\n                : undefined;\r\n\r\n        map.set(sessionId, { requestId, controller });\r\n\r\n        return {\r\n            requestId,\r\n            signal: controller?.signal,\r\n        };\r\n    }\r\n\r\n    function isLatest(sessionId: ListerSessionId, requestId: string) {\r\n        const f = map.get(sessionId);\r\n        return Boolean(f && f.requestId === requestId);\r\n    }\r\n\r\n    function schedule(\r\n        sessionId: ListerSessionId,\r\n        requestId: string,\r\n        fn: () => void,\r\n    ) {\r\n        abort(sessionId);\r\n\r\n        const controller =\r\n            typeof AbortController !== \"undefined\"\r\n                ? new AbortController()\r\n                : undefined;\r\n\r\n        const entry: InFlight = { requestId, controller };\r\n        entry.debounceTimer = setTimeout(fn, remoteDebounceMs);\r\n\r\n        map.set(sessionId, entry);\r\n    }\r\n\r\n    function clear(sessionId: ListerSessionId) {\r\n        abort(sessionId);\r\n        map.delete(sessionId);\r\n    }\r\n\r\n    return { abort, begin, isLatest, schedule, clear };\r\n}\r\n","// packages/form-palette/src/presets/lister/runtime/session/filters.ts\r\n\r\nimport type { ListerFilterSpec } from \"../../types\";\r\n\r\n/**\r\n * Effective filters for fetching:\r\n * - if spec.merge exists => spec.merge(base, patch)\r\n * - else => shallow merge\r\n */\r\nexport function computeEffectiveFilters<TFilters>(\r\n    base: TFilters | undefined,\r\n    patch: Partial<TFilters> | undefined,\r\n    spec: ListerFilterSpec<TFilters> | undefined,\r\n): TFilters | undefined {\r\n    const p = (patch ?? {}) as any;\r\n\r\n    if (spec?.merge) return spec.merge(base, p);\r\n\r\n    if (base == null) return p as TFilters;\r\n\r\n    if (typeof base === \"object\" && base) {\r\n        return { ...(base as any), ...(p as any) } as TFilters;\r\n    }\r\n\r\n    return p as TFilters;\r\n}\r\n","// packages/form-palette/src/presets/lister/runtime/session/permissions.ts\r\n\r\nimport type { ListerPermissionCtx, ListerProviderHost } from \"../../types\";\r\n\r\nfunction stripBang(p: string) {\r\n    return p.endsWith(\"!\") ? p.slice(0, -1) : p;\r\n}\r\n\r\nfunction isMandatory(p: string) {\r\n    return p.endsWith(\"!\");\r\n}\r\n\r\n/**\r\n * Semantics:\r\n * - mandatory permissions (ending with \"!\") => all must pass\r\n * - optional permissions => if any exist, at least one must pass\r\n * - none => allow\r\n */\r\nexport function canOpenLister(\r\n    host: ListerProviderHost,\r\n    permissions: string[] | undefined,\r\n    ctx: ListerPermissionCtx,\r\n): boolean {\r\n    if (!permissions || permissions.length === 0) return true;\r\n\r\n    const mandatory = permissions.filter(isMandatory).map(stripBang);\r\n    const optional = permissions.filter((p) => !isMandatory(p)).map(stripBang);\r\n\r\n    for (const perm of mandatory) {\r\n        if (!host.can([perm], ctx)) return false;\r\n    }\r\n\r\n    if (optional.length > 0) {\r\n        return optional.some((perm) => host.can([perm], ctx));\r\n    }\r\n\r\n    return true;\r\n}\r\n","// packages/form-palette/src/presets/lister/runtime/engine/http.ts\n\nexport type HttpMethod = \"GET\" | \"POST\";\n\nexport type HttpReq = {\n    endpoint: string;\n    method?: HttpMethod;\n    params?: any;\n    body?: any;\n    headers?: Record<string, string>;\n    signal?: AbortSignal;\n    requestId?: string;\n};\n\nexport type ListerHttpClient = (req: HttpReq) => Promise<any>;\n\nfunction getAxios(): any {\n    const w = globalThis as any;\n    return w?.axios ?? w?.window?.axios ?? null;\n}\n\n/**\n * Default client:\n * - prefers global `axios` (host apps commonly provide it)\n * - falls back to dynamic import if not present\n */\nexport const defaultHttpClient: ListerHttpClient = async (req) => {\n    const axios0 = getAxios();\n    const axios =\n        axios0 ??\n        (await import(\"axios\")\n            .then((m) => (m as any).default ?? m)\n            .catch(() => null));\n\n    if (!axios) {\n        throw new Error(\"HTTP_CLIENT_MISSING\");\n    }\n\n    const method = (req.method ?? \"GET\") as HttpMethod;\n\n    const headers: Record<string, string> = {\n        ...(req.headers ?? {}),\n    };\n\n    if (req.requestId) headers[\"X-Lister-Request-Id\"] = req.requestId;\n\n    const res = await axios.request({\n        url: req.endpoint,\n        method,\n        params: req.params,\n        data: req.body,\n        headers,\n        // axios (modern) supports AbortSignal\n        signal: req.signal,\n    });\n\n    return res?.data ?? res;\n};\n","// resources/js/context/lister/utils/path.ts\n\n/**\n * Very small dot-path getter.\n * Supports:\n * - \"a.b.c\"\n * - \".a.b\" (leading dot ok)\n * - \"a[0].b\" (basic bracket index)\n */\nexport function getPath(obj: any, path: string): any {\n    if (!path) return obj;\n    let p = path.trim();\n    if (p.startsWith('.')) p = p.slice(1);\n\n    // convert bracket notation into dots: a[0].b -> a.0.b\n    p = p.replace(/\\[(\\d+)\\]/g, '.$1');\n\n    const parts = p.split('.').filter(Boolean);\n    let cur: any = obj;\n\n    for (const key of parts) {\n        if (cur == null) return undefined;\n        cur = cur[key as any];\n    }\n\n    return cur;\n}\n","// packages/form-palette/src/presets/lister/runtime/engine/extract.ts\n\nimport type { Selector } from \"../../types\";\nimport { getPath } from \"../../utils/path\";\n\ntype ExtractMeta = {\n    selector?: unknown;\n    valueType?: string;\n};\n\nfunction makeExtractError(meta: ExtractMeta) {\n    const err = new Error(\"EXTRACT_NOT_ARRAY\");\n    (err as any).meta = meta;\n    return err;\n}\n\n/**\n * Extracts an array from an HTTP response body.\n *\n * Rules:\n * - selector fn: selector(body)\n * - selector string: getPath(body, selector)\n * - selector missing: prefers body.data, else body\n * - MUST return array, else throws Error(\"EXTRACT_NOT_ARRAY\")\n */\nexport function extractArray<T>(body: any, selector?: Selector<T>): T[] {\n    let out: any;\n\n    if (typeof selector === \"function\") {\n        out = selector(body);\n    } else if (typeof selector === \"string\" && selector.trim() !== \"\") {\n        out = getPath(body, selector);\n    } else {\n        // default selector: body.data if present, else body\n        out = body?.data ?? body;\n    }\n\n    if (!Array.isArray(out)) {\n        throw makeExtractError({\n            selector,\n            valueType: out === null ? \"null\" : typeof out,\n        });\n    }\n\n    return out as T[];\n}\n","// packages/form-palette/src/presets/lister/runtime/engine/map.ts\n\nimport type {\n    ListerId,\n    ListerMapping,\n    ListerOption,\n    Resolver,\n} from \"../../types\";\n\nexport function resolveWith<TRaw, T, TCtx>(\n    raw: TRaw,\n    resolver: Resolver<TRaw, T, TCtx>,\n    ctx: TCtx,\n): T {\n    if (typeof resolver === \"function\") return (resolver as any)(raw, ctx);\n    return (raw as any)?.[resolver as any] as T;\n}\n\n/**\n * Maps raw list to options list using mapping rules.\n *\n * Fallbacks:\n * - label: raw.label ?? String(value)\n * - disabled: false\n */\nexport function mapOptions<TRaw, TValue extends ListerId, TMeta, TCtx>(\n    rawList: TRaw[],\n    mapping: ListerMapping<TRaw, TValue, TMeta, TCtx>,\n    ctx: TCtx,\n): Array<ListerOption<TRaw, TValue, TMeta>> {\n    const out: Array<ListerOption<TRaw, TValue, TMeta>> = [];\n\n    for (const raw of rawList ?? []) {\n        let value: any = resolveWith(raw, mapping.optionValue as any, ctx);\n\n        // tolerate odd values (legacy didn’t throw). Prefer stable IDs.\n        if (value === undefined || value === null) continue;\n        if (typeof value !== \"string\" && typeof value !== \"number\") {\n            value = String(value);\n        }\n\n        const label =\n            mapping.optionLabel != null\n                ? resolveWith(raw, mapping.optionLabel as any, ctx)\n                : ((raw as any)?.label ?? String(value));\n\n        const meta = mapping.optionMeta\n            ? resolveWith(raw, mapping.optionMeta as any, ctx)\n            : undefined;\n\n        const disabled = mapping.optionDisabled\n            ? !!resolveWith(raw, mapping.optionDisabled as any, ctx)\n            : false;\n        const icon = mapping.optionIcon\n            ? resolveWith(raw, mapping.optionIcon as any, ctx)\n            : null;\n\n        out.push({\n            value,\n            label: label as any,\n            raw,\n            meta: meta as any,\n            disabled,\n            icon,\n        });\n    }\n\n    return out;\n}\n","// packages/form-palette/src/presets/lister/runtime/engine/fetch.ts\n\nimport type {\n    ListerDefinition,\n    ListerId,\n    ListerOption,\n    ListerSearchPayload,\n} from \"../../types\";\n\nimport { extractArray } from \"./extract\";\nimport { mapOptions } from \"./map\";\nimport type { HttpReq, ListerHttpClient } from \"./http\";\n\nexport type ListerFetchOpts<TCtx = any> = {\n    query?: string;\n    search?: ListerSearchPayload;\n    cursor?: string | null;\n\n    /** request control */\n    signal?: AbortSignal;\n    requestId?: string;\n\n    /** mapping context override */\n    ctx?: TCtx;\n};\n\nexport async function fetchListerList<\n    TRaw,\n    TValue extends ListerId,\n    TFilters,\n    TMeta,\n    TCtx,\n>(args: {\n    def: ListerDefinition<TRaw, TValue, TFilters, TMeta, TCtx>;\n    http: ListerHttpClient;\n    filters?: TFilters;\n    opts?: ListerFetchOpts<TCtx>;\n}): Promise<{\n    rawList: TRaw[];\n    optionsList: Array<ListerOption<TRaw, TValue, TMeta>>;\n    responseBody: any;\n    requestId?: string;\n}> {\n    const { def, http, filters } = args;\n    const opts = args.opts ?? {};\n\n    const query = opts.query ?? \"\";\n    const search = opts.search;\n\n    const src = def.source;\n    const method = (src.method ?? \"GET\") as \"GET\" | \"POST\";\n\n    const built = src.buildRequest?.({\n        filters,\n        query,\n        cursor: opts.cursor ?? null,\n    });\n\n    // ⚠️ Compatibility: default query param key is `search`\n    const baseParams = built?.params ?? {\n        ...(filters ?? ({} as any)),\n        search: query,\n    };\n\n    const params = search ? { ...baseParams, ...search } : baseParams;\n\n    const req: HttpReq = {\n        endpoint: src.endpoint,\n        method,\n        params,\n        body: built?.body ?? {},\n        headers: built?.headers,\n        signal: opts.signal,\n        requestId: opts.requestId,\n    };\n\n    const responseBody = await http(req);\n\n    const rawList = extractArray<TRaw>(responseBody, def.selector);\n\n    const ctx = (opts.ctx ?? ({ query, filters } as any)) as TCtx;\n\n    const optionsList = mapOptions<TRaw, TValue, TMeta, TCtx>(\n        rawList,\n        def.mapping,\n        ctx,\n    );\n\n    return { rawList, optionsList, responseBody, requestId: opts.requestId };\n}\n","// packages/form-palette/src/presets/lister/runtime/engine/engine.ts\n\nimport type {\n    ListerDefinition,\n    ListerId,\n    ListerSearchPayload,\n} from \"../../types\";\nimport { defaultHttpClient, type ListerHttpClient } from \"./http\";\nimport { fetchListerList, type ListerFetchOpts } from \"./fetch\";\n\nexport type ListerEngine = {\n    http: ListerHttpClient;\n\n    fetch: <TRaw, TValue extends ListerId, TFilters, TMeta, TCtx>(args: {\n        def: ListerDefinition<TRaw, TValue, TFilters, TMeta, TCtx>;\n        filters?: TFilters;\n        opts?: ListerFetchOpts<TCtx> & { search?: ListerSearchPayload };\n    }) => ReturnType<\n        typeof fetchListerList<TRaw, TValue, TFilters, TMeta, TCtx>\n    >;\n};\n\nfunction fallbackId(): string {\n    return `lister_${Date.now()}_${Math.random().toString(16).slice(2)}`;\n}\n\nexport function createRequestId(): string {\n    const c = (globalThis as any)?.crypto;\n    if (c?.randomUUID) return `lister_${c.randomUUID()}`;\n    return fallbackId();\n}\n\nexport function createListerEngine(config?: {\n    http?: ListerHttpClient;\n}): ListerEngine {\n    const http = config?.http ?? defaultHttpClient;\n\n    return {\n        http,\n        fetch: async ({ def, filters, opts }) => {\n            const requestId = opts?.requestId ?? createRequestId();\n            return fetchListerList({\n                def,\n                http,\n                filters,\n                opts: { ...(opts ?? {}), requestId },\n            });\n        },\n    };\n}\n","// packages/form-palette/src/presets/lister/runtime/engine/details.ts\n\nimport type {\n    ListerDetails,\n    ListerId,\n    ListerMode,\n    ListerOption,\n    ListerRawForMode,\n    ListerValueForMode,\n} from \"../../types\";\n\nfunction toArray<T>(v: T | T[] | null | undefined): T[] {\n    if (v == null) return [];\n    return Array.isArray(v) ? v : [v];\n}\n\n/**\n * Recommended ordering: preserve selection order (draftValue order).\n */\nexport function buildDetails<\n    TRaw,\n    TValue extends ListerId,\n    TMeta,\n    TMode extends ListerMode,\n>(args: {\n    mode: TMode;\n    draftValue: ListerValueForMode<TValue, TMode>;\n    optionsList: Array<ListerOption<TRaw, TValue, TMeta>>;\n    action: ListerDetails<TRaw, TValue, TMeta, TMode>[\"action\"];\n}): ListerDetails<TRaw, TValue, TMeta, TMode> {\n    const { mode, draftValue, optionsList, action } = args;\n\n    const byValue = new Map<TValue, ListerOption<TRaw, TValue, TMeta>>();\n    for (const opt of optionsList) byValue.set(opt.value, opt);\n\n    if (mode === \"multiple\") {\n        const values = toArray(draftValue as TValue[]);\n        const options = values\n            .map((v) => byValue.get(v))\n            .filter(Boolean) as Array<ListerOption<TRaw, TValue, TMeta>>;\n        const raw = options.map((o) => o.raw).filter(Boolean) as TRaw[];\n\n        return {\n            action,\n            options: options as any,\n            raw: raw as ListerRawForMode<TRaw, TMode>,\n        } as any;\n    }\n\n    // single\n    const v = draftValue as TValue | null;\n    const opt = v == null ? null : (byValue.get(v) ?? null);\n    const raw = opt?.raw ?? null;\n\n    return {\n        action,\n        options: opt as any,\n        raw: raw as any,\n    } as any;\n}\n","// packages/form-palette/src/presets/lister/runtime/engine/search.ts\r\n\r\nimport type {\r\n    ListerId,\r\n    ListerOption,\r\n    ListerSearchPayload,\r\n    ListerSearchTarget,\r\n} from \"../../types\";\r\n\r\nexport function buildSearchPayloadFromTarget(\r\n    target?: ListerSearchTarget | null,\r\n): ListerSearchPayload | undefined {\r\n    if (!target) return undefined;\r\n\r\n    if (target.mode === \"all\") return { searchAll: true };\r\n\r\n    if (target.mode === \"subject\") {\r\n        const subject = (target.subject ?? \"\").trim();\r\n        return subject ? { subject } : undefined;\r\n    }\r\n\r\n    if (target.mode === \"only\") {\r\n        const only = Array.isArray(target.only)\r\n            ? target.only.filter((x) => x != null)\r\n            : [];\r\n        return only.length ? { searchOnly: only } : undefined;\r\n    }\r\n\r\n    return undefined;\r\n}\r\n\r\n/**\r\n * Backwards-compatible local filtering helper.\r\n *\r\n * - If `search` is omitted: behaves exactly like before (label contains).\r\n * - If `search.subject`: matches query against raw[subject].\r\n * - If `search.searchOnly`: matches query against any raw[key] in that list.\r\n * - If `search.searchAll`: matches query against any primitive-ish raw field.\r\n */\r\nexport function filterOptionsLocal<TRaw, TValue extends ListerId, TMeta>(\r\n    options: Array<ListerOption<TRaw, TValue, TMeta>>,\r\n    query: string,\r\n    search?: ListerSearchPayload,\r\n): Array<ListerOption<TRaw, TValue, TMeta>> {\r\n    const q = (query ?? \"\").trim().toLowerCase();\r\n    if (!q) return options;\r\n\r\n    const toText = (v: any): string => {\r\n        if (v == null) return \"\";\r\n        if (typeof v === \"string\") return v;\r\n        if (typeof v === \"number\") return String(v);\r\n        if (typeof v === \"boolean\") return v ? \"true\" : \"false\";\r\n        if (Array.isArray(v)) return v.map(toText).filter(Boolean).join(\" \");\r\n        return \"\";\r\n    };\r\n\r\n    const labelText = (o: ListerOption<TRaw, TValue, TMeta>): string => {\r\n        const l = o.label;\r\n        if (typeof l === \"string\") return l;\r\n        if (typeof l === \"number\") return String(l);\r\n        if (typeof (o.raw as any)?.label === \"string\") return (o.raw as any).label;\r\n        return String(o.value);\r\n    };\r\n\r\n    const rawFieldText = (o: ListerOption<TRaw, TValue, TMeta>, key: string|number): string => {\r\n        const raw = o.raw as any;\r\n        if (!raw || typeof raw !== \"object\") return \"\";\r\n        return toText(raw[key]);\r\n    };\r\n\r\n    const rawAllText = (o: ListerOption<TRaw, TValue, TMeta>): string => {\r\n        const raw = o.raw as any;\r\n        if (!raw || typeof raw !== \"object\") return \"\";\r\n        const out: string[] = [];\r\n        for (const k of Object.keys(raw)) {\r\n            const t = toText(raw[k]);\r\n            if (t) out.push(t);\r\n        }\r\n        return out.join(\" \");\r\n    };\r\n\r\n    return options.filter((o) => {\r\n        // default legacy behavior\r\n        if (!search || (!search.subject && !search.searchOnly && !search.searchAll)) {\r\n            return labelText(o).toLowerCase().includes(q);\r\n        }\r\n\r\n        if (search.subject) {\r\n            const txt = rawFieldText(o, search.subject);\r\n            return txt.toLowerCase().includes(q);\r\n        }\r\n\r\n        if (Array.isArray(search.searchOnly) && search.searchOnly.length) {\r\n            for (const key of search.searchOnly) {\r\n                const txt = rawFieldText(o, key);\r\n                if (txt && txt.toLowerCase().includes(q)) return true;\r\n            }\r\n            return false;\r\n        }\r\n\r\n        // searchAll = scan raw primitives, fallback to label too\r\n        if (search.searchAll) {\r\n            const txt = rawAllText(o);\r\n            if (txt && txt.toLowerCase().includes(q)) return true;\r\n            return labelText(o).toLowerCase().includes(q);\r\n        }\r\n\r\n        return labelText(o).toLowerCase().includes(q);\r\n    });\r\n}","import type { ListerFilterApply, ListerFilterOption } from \"../../types\";\r\n\r\nexport type ResolvedFilterNode<TFilters> = {\r\n    id: string;\r\n    option: ListerFilterOption<TFilters>;\r\n    kind: \"group\" | \"value\" | \"input\";\r\n    disabled?: boolean;\r\n\r\n    /** resolved (inherited) */\r\n    bindKey?: string;\r\n\r\n    /** for kind=\"value\" */\r\n    dbValue?: any;\r\n\r\n    apply?: ListerFilterApply<TFilters, any>;\r\n};\r\n\r\nfunction hasExplicitId(opt: any): boolean {\r\n    return opt != null && opt.id != null;\r\n}\r\n\r\nfunction getOptId(opt: any): string | number {\r\n    if (opt?.id != null) return opt.id;\r\n    if (opt?.value != null) return opt.value;\r\n    if (opt?.label != null) return String(opt.label);\r\n    return \"node\";\r\n}\r\n\r\nfunction getNodeId<TFilters>(\r\n    opt: ListerFilterOption<TFilters>,\r\n    parentNodeId?: string,\r\n): string {\r\n    if (hasExplicitId(opt)) return String((opt as any).id);\r\n\r\n    const base = String(getOptId(opt as any));\r\n    return parentNodeId ? `${parentNodeId}.${base}` : base;\r\n}\r\n\r\nfunction getOptKind(opt: any): \"group\" | \"value\" | \"input\" {\r\n    return (opt?.kind ?? \"group\") as any;\r\n}\r\n\r\nfunction getOptDisabled(opt: any): boolean {\r\n    return Boolean(opt?.disabled);\r\n}\r\n\r\nfunction getOptApply<TFilters>(opt: ListerFilterOption<TFilters>) {\r\n    return (opt as any)?.apply as ListerFilterApply<TFilters, any> | undefined;\r\n}\r\n\r\nfunction getOptDbValue(opt: any) {\r\n    return opt?.value;\r\n}\r\n\r\n/**\r\n * Index options by node id and resolve inherited bindKey.\r\n */\r\nexport function indexFilterOptions<TFilters>(\r\n    options: Array<ListerFilterOption<TFilters>>,\r\n): Record<string, ResolvedFilterNode<TFilters>> {\r\n    const out: Record<string, ResolvedFilterNode<TFilters>> = {};\r\n\r\n    const walk = (\r\n        list: Array<ListerFilterOption<TFilters>>,\r\n        inheritedBindKey?: string,\r\n        parentNodeId?: string,\r\n    ) => {\r\n        for (const opt of list) {\r\n            const nodeId = getNodeId(opt, parentNodeId);\r\n            const kind = getOptKind(opt);\r\n            const disabled = getOptDisabled(opt);\r\n\r\n            const localBindKey = (opt as any)?.bindKey as string | undefined;\r\n            const resolvedBindKey = localBindKey ?? inheritedBindKey;\r\n\r\n            const apply = getOptApply(opt);\r\n            const dbValue =\r\n                kind === \"value\" ? getOptDbValue(opt as any) : undefined;\r\n\r\n            out[nodeId] = {\r\n                option: opt,\r\n                id: nodeId,\r\n                kind,\r\n                disabled,\r\n                bindKey: resolvedBindKey ?? apply?.key,\r\n                dbValue,\r\n                apply,\r\n            };\r\n\r\n            const children = (opt as any)?.children as\r\n                | Array<ListerFilterOption<TFilters>>\r\n                | undefined;\r\n\r\n            if (Array.isArray(children) && children.length) {\r\n                // if parent had explicit id, children should not be prefixed by it\r\n                const nextParentId = hasExplicitId(opt) ? parentNodeId : nodeId;\r\n                walk(children, resolvedBindKey, nextParentId);\r\n            }\r\n        }\r\n    };\r\n\r\n    walk(options);\r\n    return out;\r\n}\r\n","// packages/form-palette/src/presets/lister/runtime/session/runtime.ts\r\n\r\nimport type {\r\n    ListerApi,\r\n    ListerChangeEvent,\r\n    ListerDefinition,\r\n    ListerDetails,\r\n    ListerFilterCtx,\r\n    ListerFilterOption,\r\n    ListerFilterSpec,\r\n    ListerMode,\r\n    ListerOpenOptions,\r\n    ListerOpenReason,\r\n    ListerOpenResult,\r\n    ListerPermissionCtx,\r\n    ListerProviderHost,\r\n    ListerRuntimeState,\r\n    ListerSearchMode,\r\n    ListerSearchTarget,\r\n    ListerSessionId,\r\n    ListerStoreState,\r\n    PresetMap,\r\n} from \"../../types\";\r\n\r\nimport { createSessionStore } from \"./store\";\r\nimport { createInFlight } from \"./inflight\";\r\nimport { computeEffectiveFilters } from \"./filters\";\r\nimport { canOpenLister } from \"./permissions\";\r\n\r\nimport {\r\n    createListerEngine,\r\n    createRequestId,\r\n    type ListerEngine,\r\n} from \"../engine/engine\";\r\nimport { buildDetails as buildDetailsPayload } from \"../engine/details\";\r\nimport {\r\n    buildSearchPayloadFromTarget,\r\n    filterOptionsLocal,\r\n} from \"../engine/search\";\r\nimport { indexFilterOptions } from \"./filter-options\";\r\n\r\nexport type CreateListerRuntimeOptions<P extends PresetMap> = {\r\n    host: ListerProviderHost;\r\n\r\n    /** Provide your own engine (for tests / custom http). */\r\n    engine?: ListerEngine;\r\n\r\n    /** Initial preset map (kind => definition). */\r\n    presets?: P;\r\n\r\n    /** Debounce used when searchMode is remote/hybrid and query changes. */\r\n    remoteDebounceMs?: number;\r\n\r\n    now?: () => number;\r\n    makeSessionId?: () => string;\r\n};\r\n\r\nexport type ListerRuntime<P extends PresetMap> = {\r\n    engine: ListerEngine;\r\n    api: ListerApi<P>;\r\n\r\n    getState(): ListerStoreState;\r\n    subscribe(fn: () => void): () => void;\r\n\r\n    actions: {\r\n        focus(sessionId: ListerSessionId): void;\r\n\r\n        close(sessionId: ListerSessionId): void;\r\n        cancel(sessionId: ListerSessionId): void;\r\n        apply(sessionId: ListerSessionId): void;\r\n\r\n        clear(sessionId: ListerSessionId): void;\r\n        toggle(sessionId: ListerSessionId, value: any): void;\r\n        select(sessionId: ListerSessionId, value: any): void;\r\n        deselect(sessionId: ListerSessionId, value: any): void;\r\n\r\n        setQuery(sessionId: ListerSessionId, query: string): void;\r\n        setSearchTarget(\r\n            sessionId: ListerSessionId,\r\n            target?: ListerSearchTarget,\r\n        ): void;\r\n        setSearchMode(sessionId: ListerSessionId, mode: ListerSearchMode): void;\r\n\r\n        setFiltersPatch(sessionId: ListerSessionId, patch: any): void;\r\n        mergeFiltersPatch(sessionId: ListerSessionId, patch: any): void;\r\n        getFilterCtx<TFilters>(id: ListerSessionId): ListerFilterCtx<TFilters>;\r\n        applyFilterOption(id: ListerSessionId, optionId: string | number): void;\r\n\r\n        refresh(sessionId: ListerSessionId): void;\r\n    };\r\n\r\n    selectors: {\r\n        effectiveFilters(sessionId: ListerSessionId): any;\r\n        visibleOptions(sessionId: ListerSessionId): any[];\r\n        detailsPayload(\r\n            sessionId: ListerSessionId,\r\n            action: ListerDetails<any, any, any, any>[\"action\"],\r\n        ): any;\r\n    };\r\n};\r\n\r\nfunction isMultiple(mode: ListerMode) {\r\n    return mode === \"multiple\";\r\n}\r\n\r\nfunction normalizeDraftForMode(mode: ListerMode, value: any) {\r\n    return isMultiple(mode)\r\n        ? Array.isArray(value)\r\n            ? value\r\n            : []\r\n        : (value ?? null);\r\n}\r\n\r\nfunction makeChangeEvent(): ListerChangeEvent {\r\n    let prevented = false;\r\n    return {\r\n        get defaultPrevented() {\r\n            return prevented;\r\n        },\r\n        preventDefault() {\r\n            prevented = true;\r\n        },\r\n    };\r\n}\r\n\r\ntype OwnerPrefs = {\r\n    filtersPatch: any;\r\n    selectedFilterValues: any[];\r\n};\r\n\r\nexport function createListerRuntime<P extends PresetMap>(\r\n    opts: CreateListerRuntimeOptions<P>,\r\n): ListerRuntime<P> {\r\n    const ownerPrefs = new Map<string, OwnerPrefs>();\r\n\r\n    function prefsKey(ownerKey?: string, kind?: string, endpoint?: string) {\r\n        if (!ownerKey) return null;\r\n        // avoid collisions if you reuse ownerKey across different listers\r\n        return `${ownerKey}::${kind ?? \"\"}::${endpoint ?? \"\"}`;\r\n    }\r\n\r\n    function readPrefs(key: string | null): OwnerPrefs | undefined {\r\n        if (!key) return undefined;\r\n        return ownerPrefs.get(key);\r\n    }\r\n\r\n    function writePrefs(key: string | null, next: Partial<OwnerPrefs>) {\r\n        if (!key) return;\r\n        const prev = ownerPrefs.get(key) ?? {\r\n            filtersPatch: {},\r\n            selectedFilterValues: [],\r\n        };\r\n\r\n        ownerPrefs.set(key, {\r\n            filtersPatch:\r\n                next.filtersPatch !== undefined\r\n                    ? next.filtersPatch\r\n                    : prev.filtersPatch,\r\n            selectedFilterValues:\r\n                next.selectedFilterValues !== undefined\r\n                    ? next.selectedFilterValues\r\n                    : prev.selectedFilterValues,\r\n        });\r\n    }\r\n\r\n    const now = opts.now ?? (() => Date.now());\r\n    const makeSessionId =\r\n        opts.makeSessionId ??\r\n        (() => `l_${Math.random().toString(36).slice(2)}_${now()}`);\r\n\r\n    const store = createSessionStore();\r\n    const inflight = createInFlight(Math.max(0, opts.remoteDebounceMs ?? 250));\r\n\r\n    // headless engine (http + fetch pipeline)\r\n    const engine = opts.engine ?? createListerEngine();\r\n\r\n    // preset registry (kind -> def)\r\n    const presetMap: Record<string, ListerDefinition<any, any, any, any>> = {\r\n        ...(opts.presets ?? ({} as any)),\r\n    };\r\n\r\n    function getDef(defOrKind: any) {\r\n        if (typeof defOrKind === \"string\") return presetMap[defOrKind];\r\n        return defOrKind as ListerDefinition<any, any, any, any>;\r\n    }\r\n\r\n    function getSession(sessionId: ListerSessionId) {\r\n        return store.getSession(sessionId) as\r\n            | ListerRuntimeState<any, any, any, any, any>\r\n            | undefined;\r\n    }\r\n\r\n    function patchSession(\r\n        sessionId: ListerSessionId,\r\n        patch: Partial<ListerRuntimeState<any, any, any, any, any>>,\r\n    ) {\r\n        store.setSession(sessionId, (prev) => ({ ...prev, ...(patch ?? {}) }));\r\n    }\r\n\r\n    function updateSession(\r\n        sessionId: ListerSessionId,\r\n        mutator: (prev: any) => any,\r\n    ) {\r\n        store.setSession(sessionId, mutator);\r\n    }\r\n\r\n    async function refreshSession(sessionId: ListerSessionId) {\r\n        const s = getSession(sessionId);\r\n        if (!s?.definition) return;\r\n\r\n        const requestId = createRequestId();\r\n        const { signal } = inflight.begin(sessionId, requestId);\r\n\r\n        // flags\r\n        store.setSession(sessionId, (prev) => ({\r\n            ...prev,\r\n            errorCode: undefined,\r\n            loading: prev.rawList.length === 0,\r\n            refreshing: prev.rawList.length > 0,\r\n        }));\r\n\r\n        const next = getSession(sessionId);\r\n        if (!next?.definition) return;\r\n\r\n        const effective = computeEffectiveFilters(\r\n            next.filters,\r\n            next.filtersPatch,\r\n            next.filtersSpec as any,\r\n        );\r\n\r\n        store.setSession(sessionId, (p) => ({\r\n            ...p,\r\n            effectiveFilters: effective as any,\r\n        }));\r\n\r\n        const searchPayload = buildSearchPayloadFromTarget(next.searchTarget);\r\n\r\n        try {\r\n            const res = await engine.fetch({\r\n                def: next.definition as any,\r\n                filters: effective as any,\r\n                opts: {\r\n                    query: next.query,\r\n                    search: searchPayload as any,\r\n                    signal,\r\n                    requestId,\r\n                },\r\n            });\r\n\r\n            if (!inflight.isLatest(sessionId, requestId)) return;\r\n\r\n            // preserve selection (no fancy reconciliation yet; we can add refreshMode later)\r\n            store.setSession(sessionId, (p) => ({\r\n                ...p,\r\n                loading: false,\r\n                refreshing: false,\r\n                rawList: res.rawList as any,\r\n                optionsList: res.optionsList as any,\r\n            }));\r\n        } catch (e: any) {\r\n            if (!inflight.isLatest(sessionId, requestId)) return;\r\n\r\n            const msg = String(e?.message ?? e);\r\n            const aborted =\r\n                e?.name === \"AbortError\" ||\r\n                msg.toLowerCase().includes(\"aborted\") ||\r\n                msg.toLowerCase().includes(\"canceled\") ||\r\n                msg.toLowerCase().includes(\"cancelled\");\r\n\r\n            store.setSession(sessionId, (p) => ({\r\n                ...p,\r\n                loading: false,\r\n                refreshing: false,\r\n                errorCode: aborted\r\n                    ? p.errorCode\r\n                    : (\"lister.fetch_failed\" as any),\r\n            }));\r\n        }\r\n    }\r\n\r\n    function resolveAndDispose(\r\n        sessionId: ListerSessionId,\r\n        reason: ListerOpenReason,\r\n        errorCode?: string,\r\n    ) {\r\n        const s = getSession(sessionId);\r\n        if (!s) return;\r\n\r\n        const finalValue =\r\n            reason === \"cancel\" || (reason === \"close\" && s.confirm)\r\n                ? s.initialDraftValue\r\n                : s.draftValue;\r\n\r\n        const details = buildDetailsPayload({\r\n            mode: s.mode as any,\r\n            draftValue: finalValue as any,\r\n            optionsList: s.optionsList as any,\r\n            action: reason as any,\r\n        });\r\n\r\n        const res: ListerOpenResult<any, any, any, any> = {\r\n            reason,\r\n            value: finalValue as any,\r\n            details: {\r\n                ...(details as any),\r\n                errorCode,\r\n                sessionId,\r\n            } as any,\r\n        };\r\n\r\n        try {\r\n            s._resolve?.(res as any);\r\n        } finally {\r\n            inflight.clear(sessionId);\r\n            writePrefs(\r\n                prefsKey(s.ownerKey, s.kind, s.definition?.source?.endpoint),\r\n                {\r\n                    filtersPatch: s.filtersPatch ?? {},\r\n                    selectedFilterValues: s.selectedFilterValues ?? [],\r\n                },\r\n            );\r\n            store.remove(sessionId);\r\n        }\r\n    }\r\n\r\n    function commitDraft(\r\n        sessionId: ListerSessionId,\r\n        nextValue: any,\r\n        action: \"select\" | \"deselect\" | \"clear\" | \"init\",\r\n    ) {\r\n        const s = getSession(sessionId);\r\n        if (!s) return;\r\n\r\n        const next = normalizeDraftForMode(s.mode as any, nextValue);\r\n\r\n        const details = buildDetailsPayload({\r\n            mode: s.mode as any,\r\n            draftValue: next as any,\r\n            optionsList: s.optionsList as any,\r\n            action,\r\n        });\r\n\r\n        const ev = makeChangeEvent();\r\n\r\n        if (s.onChange) {\r\n            try {\r\n                s.onChange(next as any, details as any, ev);\r\n            } catch {\r\n                // swallow; host may log at a higher level\r\n            }\r\n        }\r\n\r\n        if (ev.defaultPrevented) return;\r\n\r\n        store.setSession(sessionId, (p) => ({ ...p, draftValue: next as any }));\r\n\r\n        // single + confirm=false => auto-apply on select/clear\r\n        const after = getSession(sessionId);\r\n        if (!after) return;\r\n\r\n        if (!isMultiple(after.mode as any) && !after.confirm) {\r\n            if (action === \"select\" || action === \"clear\") {\r\n                resolveAndDispose(sessionId, \"apply\");\r\n            }\r\n        }\r\n    }\r\n\r\n    function scheduleRemoteRefresh(sessionId: ListerSessionId) {\r\n        const requestId = createRequestId();\r\n        inflight.schedule(\r\n            sessionId,\r\n            requestId,\r\n            () => void refreshSession(sessionId),\r\n        );\r\n    }\r\n\r\n    const api: ListerApi<P> = {\r\n        async fetch(a: any, b?: any, c?: any): Promise<any> {\r\n            const def = getDef(a);\r\n            if (!def) return { raw: [], options: [] };\r\n\r\n            const filters = typeof a === \"string\" ? b : b;\r\n            const query = (c as any)?.query ?? \"\";\r\n\r\n            const res = await engine.fetch({\r\n                def: def as any,\r\n                filters: filters as any,\r\n                opts: { query },\r\n            });\r\n\r\n            return { raw: res.rawList, options: res.optionsList };\r\n        },\r\n\r\n        async open(a: any, b?: any, c?: any): Promise<any> {\r\n            const kind = typeof a === \"string\" ? a : undefined;\r\n            const def = getDef(a);\r\n\r\n            if (!def) {\r\n                return {\r\n                    reason: \"error\",\r\n                    value: null,\r\n                    details: {\r\n                        action: \"error\",\r\n                        errorCode: \"preset_not_found\",\r\n                        options: null,\r\n                        raw: null,\r\n                    },\r\n                };\r\n            }\r\n\r\n            const filters = (b as any) ?? undefined;\r\n            const openOpts = c as any as\r\n                | ListerOpenOptions<any, any, any, any, any>\r\n                | undefined;\r\n\r\n            const mode: ListerMode = (openOpts?.mode ?? \"single\") as any;\r\n            const confirm =\r\n                mode === \"multiple\"\r\n                    ? true\r\n                    : Boolean(openOpts?.confirm ?? false);\r\n\r\n            const sessionId = makeSessionId();\r\n            const ownerKey = (openOpts as any)?.ownerKey as string | undefined;\r\n\r\n            const pKey = prefsKey(ownerKey, kind, def.source?.endpoint);\r\n            const prefs = readPrefs(pKey);\r\n\r\n            const seedFiltersPatch = prefs?.filtersPatch ?? {};\r\n            const seedSelected = prefs?.selectedFilterValues ?? [];\r\n\r\n            const permCtx: ListerPermissionCtx = {\r\n                kind,\r\n                endpoint: def.source?.endpoint,\r\n                filters,\r\n                sessionId,\r\n                ownerKey,\r\n            };\r\n\r\n            if (!canOpenLister(opts.host, openOpts?.permissions, permCtx)) {\r\n                return {\r\n                    reason: \"denied\",\r\n                    value:\r\n                        openOpts?.defaultValue ??\r\n                        (mode === \"multiple\" ? [] : null),\r\n                    details: {\r\n                        action: \"denied\",\r\n                        errorCode: \"access_denied\",\r\n                        options: null,\r\n                        raw: null,\r\n                        sessionId,\r\n                    },\r\n                };\r\n            }\r\n\r\n            const seed =\r\n                openOpts?.defaultValue ??\r\n                (mode === \"multiple\" ? ([] as any[]) : null);\r\n\r\n            const session: ListerRuntimeState<any, any, any, any, any> = {\r\n                sessionId,\r\n                createdAt: now(),\r\n                ownerKey,\r\n                // identity\r\n                isOpen: true,\r\n                kind,\r\n                definition: def as any,\r\n\r\n                // config\r\n                mode: mode as any,\r\n                confirm: confirm as any,\r\n                title: def.title ?? openOpts?.title,\r\n\r\n                // search\r\n                searchMode: (openOpts?.searchMode ??\r\n                    \"remote\") as ListerSearchMode,\r\n                query: String(openOpts?.initialQuery ?? \"\"),\r\n\r\n                searchTarget: undefined,\r\n                searchSpec: (def as any).search,\r\n\r\n                // filters\r\n                filters,\r\n                filtersSpec: openOpts?.filtersSpec,\r\n                filtersPatch: seedFiltersPatch, // ✅ was {}\r\n                effectiveFilters: undefined,\r\n\r\n                selectedFilterValues: seedSelected, // ✅ add this field if not present\r\n\r\n                // data\r\n                loading: false,\r\n                refreshing: false,\r\n                errorCode: undefined,\r\n                rawList: [],\r\n                optionsList: [],\r\n\r\n                // selection\r\n                draftValue: normalizeDraftForMode(mode, seed) as any,\r\n                initialDraftValue: normalizeDraftForMode(mode, seed) as any,\r\n\r\n                // callbacks\r\n                onChange: openOpts?.onChange,\r\n\r\n                // internal resolver\r\n                _resolve: undefined,\r\n            } as any;\r\n\r\n            return await new Promise((resolve) => {\r\n                (session as any)._resolve = resolve;\r\n\r\n                store.upsertSession(sessionId, session);\r\n                void refreshSession(sessionId);\r\n            });\r\n        },\r\n\r\n        registerPreset(kind: string, def: any) {\r\n            presetMap[kind] = def;\r\n        },\r\n\r\n        getPreset(kind: string) {\r\n            return presetMap[kind] as any;\r\n        },\r\n    } as any;\r\n\r\n    const getFilterCtx = <TFilters>(\r\n        id: ListerSessionId,\r\n    ): ListerFilterCtx<TFilters> => {\r\n        const refresh = () => void refreshSession(id);\r\n\r\n        const get = (key: any) => {\r\n            const s = getSession(id) as any;\r\n            const cur = (s?.effectiveFilters ?? s?.filters) as any;\r\n            return cur?.[key];\r\n        };\r\n\r\n        const commitPatch = (\r\n            updater: (prev: Partial<TFilters>) => Partial<TFilters>,\r\n        ) => {\r\n            let shouldFetch = true;\r\n\r\n            updateSession(id, (s: any) => {\r\n                const spec: ListerFilterSpec<TFilters> | undefined =\r\n                    s.filtersSpec;\r\n                const base: TFilters | undefined = s.filters;\r\n\r\n                const nextPatch = updater(\r\n                    (s.filtersPatch ?? {}) as Partial<TFilters>,\r\n                );\r\n                const nextEffective = computeEffectiveFilters<TFilters>(\r\n                    base,\r\n                    nextPatch,\r\n                    spec,\r\n                );\r\n\r\n                shouldFetch =\r\n                    spec?.autoFetch !== false && s.searchMode !== \"local\";\r\n\r\n                return {\r\n                    ...s,\r\n                    filtersPatch: nextPatch,\r\n                    effectiveFilters: nextEffective,\r\n                };\r\n            });\r\n\r\n            const sNow = getSession(id) as any;\r\n            writePrefs(\r\n                prefsKey(\r\n                    sNow?.ownerKey,\r\n                    sNow?.kind,\r\n                    sNow?.definition?.source?.endpoint,\r\n                ),\r\n                { filtersPatch: sNow?.filtersPatch ?? {} },\r\n            );\r\n            if (shouldFetch) queueMicrotask(refresh);\r\n        };\r\n\r\n        const s = getSession(id) as any;\r\n\r\n        return {\r\n            base: s?.filters as any,\r\n            patch: ((s?.filtersPatch as any) ?? {}) as any,\r\n            effective: (s?.effectiveFilters ?? s?.filters) as any,\r\n\r\n            set(key: any, value: any) {\r\n                commitPatch((p) => ({ ...(p as any), [key]: value }));\r\n            },\r\n\r\n            merge(patch: any) {\r\n                commitPatch((p) => ({ ...(p as any), ...(patch as any) }));\r\n            },\r\n\r\n            unset(key: any) {\r\n                commitPatch((p) => {\r\n                    const next = { ...(p as any) };\r\n                    delete next[key];\r\n                    return next;\r\n                });\r\n            },\r\n\r\n            clear() {\r\n                patchSession(id, { selectedFilterValues: [] as any });\r\n                commitPatch(() => ({}) as any);\r\n            },\r\n\r\n            refresh,\r\n            get,\r\n        };\r\n    };\r\n\r\n    const applyFilterOption = (\r\n        id: ListerSessionId,\r\n        optionId: string | number,\r\n    ) => {\r\n        const s = getSession(id) as any;\r\n        const spec: ListerFilterSpec<any> | undefined = s?.filtersSpec;\r\n        if (!s || !spec?.options?.length) return;\r\n\r\n        const index = indexFilterOptions<any>(\r\n            spec.options as Array<ListerFilterOption<any>>,\r\n        );\r\n        const node = index[String(optionId)];\r\n        if (!node || node.disabled) return;\r\n\r\n        const isValueKind = node.kind === \"value\";\r\n        const hasApply = !!node.apply;\r\n        if (!isValueKind && !hasApply) return;\r\n\r\n        const key = (node.bindKey ?? node.apply?.key) as string | undefined;\r\n        if (!key) return;\r\n\r\n        const ctx = getFilterCtx<any>(id);\r\n\r\n        const mode = (node.apply?.mode ?? \"replace\") as\r\n            | \"replace\"\r\n            | \"merge\"\r\n            | \"unset\";\r\n        const toggleable = node.apply?.toggleable ?? true;\r\n\r\n        const prevSelected: Array<string | number> = Array.isArray(\r\n            s.selectedFilterValues,\r\n        )\r\n            ? [...(s.selectedFilterValues as any)]\r\n            : [];\r\n\r\n        const isSelected = prevSelected.includes(optionId);\r\n        const shouldRemove = mode === \"unset\" || (toggleable && isSelected);\r\n\r\n        const nextSelected = shouldRemove\r\n            ? prevSelected.filter((x) => x !== optionId)\r\n            : isSelected\r\n                ? prevSelected\r\n                : [...prevSelected, optionId];\r\n\r\n        patchSession(id, { selectedFilterValues: nextSelected });\r\n        const sNow = getSession(id) as any;\r\n        writePrefs(\r\n            prefsKey(\r\n                sNow?.ownerKey,\r\n                sNow?.kind,\r\n                sNow?.definition?.source?.endpoint,\r\n            ),\r\n            { selectedFilterValues: nextSelected },\r\n        );\r\n\r\n        const valuesForKey: any[] = [];\r\n        for (const sid of nextSelected) {\r\n            const n = index[String(sid)];\r\n            if (!n || n.disabled) continue;\r\n\r\n            const nKey = (n.bindKey ?? n.apply?.key) as string | undefined;\r\n            if (!nKey || nKey !== key) continue;\r\n\r\n            const v =\r\n                n.apply && (n.apply as any).value !== undefined\r\n                    ? (n.apply as any).value\r\n                    : n.dbValue;\r\n\r\n            if (v === undefined) continue;\r\n            valuesForKey.push(v);\r\n        }\r\n\r\n        if (!valuesForKey.length) {\r\n            ctx.unset(key as any);\r\n            return;\r\n        }\r\n\r\n        const nextVal =\r\n            valuesForKey.length === 1 ? valuesForKey[0] : valuesForKey;\r\n        if (mode === \"merge\") ctx.merge({ [key]: nextVal } as any);\r\n        else ctx.set(key as any, nextVal);\r\n    };\r\n    // then expose on actions\r\n    const actions: ListerRuntime<P>[\"actions\"] = {\r\n        getFilterCtx,\r\n        applyFilterOption,\r\n        focus(sessionId) {\r\n            store.focus(sessionId);\r\n        },\r\n\r\n        close(sessionId) {\r\n            resolveAndDispose(sessionId, \"close\");\r\n        },\r\n        cancel(sessionId) {\r\n            resolveAndDispose(sessionId, \"cancel\");\r\n        },\r\n        apply(sessionId) {\r\n            resolveAndDispose(sessionId, \"apply\");\r\n        },\r\n\r\n        clear(sessionId) {\r\n            const s = getSession(sessionId);\r\n            if (!s) return;\r\n            commitDraft(sessionId, s.mode === \"multiple\" ? [] : null, \"clear\");\r\n        },\r\n\r\n        toggle(sessionId, value) {\r\n            const s = getSession(sessionId);\r\n            if (!s) return;\r\n\r\n            if (!isMultiple(s.mode as any)) {\r\n                const cur = s.draftValue ?? null;\r\n                const next = cur === value ? null : value;\r\n                commitDraft(sessionId, next, next == null ? \"clear\" : \"select\");\r\n                return;\r\n            }\r\n\r\n            const cur = Array.isArray(s.draftValue) ? s.draftValue : [];\r\n            const has = cur.includes(value);\r\n            const next = has ? cur.filter((v) => v !== value) : [...cur, value];\r\n            commitDraft(sessionId, next, has ? \"deselect\" : \"select\");\r\n        },\r\n\r\n        select(sessionId, value) {\r\n            const s = getSession(sessionId);\r\n            if (!s) return;\r\n\r\n            if (!isMultiple(s.mode as any)) {\r\n                commitDraft(sessionId, value, \"select\");\r\n                return;\r\n            }\r\n\r\n            const cur = Array.isArray(s.draftValue) ? s.draftValue : [];\r\n            if (cur.includes(value)) return;\r\n            commitDraft(sessionId, [...cur, value], \"select\");\r\n        },\r\n\r\n        deselect(sessionId, value) {\r\n            const s = getSession(sessionId);\r\n            if (!s) return;\r\n\r\n            if (!isMultiple(s.mode as any)) {\r\n                if (s.draftValue === value)\r\n                    commitDraft(sessionId, null, \"clear\");\r\n                return;\r\n            }\r\n\r\n            const cur = Array.isArray(s.draftValue) ? s.draftValue : [];\r\n            if (!cur.includes(value)) return;\r\n            commitDraft(\r\n                sessionId,\r\n                cur.filter((v) => v !== value),\r\n                \"deselect\",\r\n            );\r\n        },\r\n\r\n        setQuery(sessionId, query) {\r\n            const s = getSession(sessionId);\r\n            if (!s) return;\r\n\r\n            store.setSession(sessionId, (p) => ({\r\n                ...p,\r\n                query: String(query ?? \"\"),\r\n            }));\r\n\r\n            const next = getSession(sessionId);\r\n            if (!next) return;\r\n\r\n            if (next.searchMode === \"remote\" || next.searchMode === \"hybrid\") {\r\n                scheduleRemoteRefresh(sessionId);\r\n            } else {\r\n                // local mode doesn't need fetch\r\n                store.setSession(sessionId, (p) => ({ ...p }));\r\n            }\r\n        },\r\n\r\n        setSearchTarget(sessionId, target) {\r\n            const s = getSession(sessionId);\r\n            if (!s) return;\r\n\r\n            store.setSession(sessionId, (p) => ({\r\n                ...p,\r\n                searchTarget: target ?? undefined,\r\n            }));\r\n\r\n            const next = getSession(sessionId);\r\n            if (!next) return;\r\n\r\n            if (next.searchMode === \"remote\" || next.searchMode === \"hybrid\") {\r\n                scheduleRemoteRefresh(sessionId);\r\n            }\r\n        },\r\n\r\n        setSearchMode(sessionId: ListerSessionId, mode: ListerSearchMode) {\r\n            patchSession(sessionId, { searchMode: mode });\r\n        },\r\n\r\n        setFiltersPatch(sessionId, patch) {\r\n            const s = getSession(sessionId);\r\n            if (!s) return;\r\n\r\n            store.setSession(sessionId, (p) => ({\r\n                ...p,\r\n                filtersPatch: patch ?? {},\r\n            }));\r\n\r\n            // default: auto-fetch unless spec says otherwise\r\n            const next = getSession(sessionId);\r\n            const autoFetch = (next?.filtersSpec as any)?.autoFetch;\r\n            if (autoFetch !== false) void refreshSession(sessionId);\r\n        },\r\n\r\n        mergeFiltersPatch(sessionId, patch) {\r\n            const s = getSession(sessionId);\r\n            if (!s) return;\r\n\r\n            store.setSession(sessionId, (p) => ({\r\n                ...p,\r\n                filtersPatch: { ...(p.filtersPatch ?? {}), ...(patch ?? {}) },\r\n            }));\r\n\r\n            const next = getSession(sessionId);\r\n            const autoFetch = (next?.filtersSpec as any)?.autoFetch;\r\n            if (autoFetch !== false) void refreshSession(sessionId);\r\n        },\r\n\r\n        refresh(sessionId) {\r\n            void refreshSession(sessionId);\r\n        },\r\n    };\r\n\r\n    const selectors: ListerRuntime<P>[\"selectors\"] = {\r\n        effectiveFilters(sessionId) {\r\n            const s = getSession(sessionId);\r\n            if (!s) return undefined;\r\n\r\n            return (\r\n                s.effectiveFilters ??\r\n                computeEffectiveFilters(\r\n                    s.filters,\r\n                    s.filtersPatch,\r\n                    s.filtersSpec,\r\n                )\r\n            );\r\n        },\r\n\r\n        visibleOptions(sessionId) {\r\n            const s = getSession(sessionId);\r\n            if (!s) return [];\r\n\r\n            const list = s.optionsList ?? [];\r\n\r\n            if (s.searchMode === \"local\" || s.searchMode === \"hybrid\") {\r\n                const payload = buildSearchPayloadFromTarget(s.searchTarget);\r\n                return filterOptionsLocal(list as any, s.query, payload as any);\r\n            }\r\n\r\n            return list as any;\r\n        },\r\n\r\n        detailsPayload(sessionId, action) {\r\n            const s = getSession(sessionId);\r\n            if (!s) return undefined;\r\n\r\n            return buildDetailsPayload({\r\n                mode: s.mode as any,\r\n                draftValue: s.draftValue as any,\r\n                optionsList: s.optionsList as any,\r\n                action: action as any,\r\n            });\r\n        },\r\n    };\r\n\r\n    return {\r\n        engine,\r\n        api,\r\n        getState: store.getState,\r\n        subscribe: store.subscribe,\r\n        actions,\r\n        selectors,\r\n    };\r\n}\r\n","import * as React from \"react\";\r\n\r\nimport type { PresetMap } from \"@/presets/lister/types\";\r\nimport {\r\n    createListerRuntime,\r\n    type CreateListerRuntimeOptions,\r\n    type ListerRuntime,\r\n} from \"@/presets/lister/runtime/session/runtime\";\r\n\r\n/**\r\n * Context for Lister runtime bridge.\r\n */\r\nexport const ListerContext = React.createContext<ListerRuntime<any> | null>(\r\n    null,\r\n);\r\n\r\nexport type ListerProviderProps<P extends PresetMap> = React.PropsWithChildren<\r\n    CreateListerRuntimeOptions<P>\r\n>;\r\n\r\n/**\r\n * ListerProvider — creates a singleton runtime and exposes it via React context.\r\n *\r\n * Responsibilities:\r\n * - instantiate `createListerRuntime` once per provider\r\n * - subscribe to runtime store (if needed by descendants)\r\n * - expose `api`, `actions`, `selectors`, and `state`\r\n */\r\nexport function ListerProvider<P extends PresetMap>({\r\n    children,\r\n    ...opts\r\n}: ListerProviderProps<P>) {\r\n    const runtimeRef = React.useRef<ListerRuntime<P> | null>(null);\r\n    const [, forceUpdate] = React.useReducer((x) => x + 1, 0);\r\n\r\n    if (!runtimeRef.current) {\r\n        runtimeRef.current = createListerRuntime<P>(opts);\r\n    }\r\n\r\n    React.useEffect(() => {\r\n        const runtime = runtimeRef.current;\r\n        if (!runtime) return;\r\n\r\n        // React bridge: re-render context consumers when store changes\r\n        const unsub = runtime.subscribe(() => {\r\n            forceUpdate();\r\n        });\r\n\r\n        return () => unsub();\r\n    }, []);\r\n\r\n    return (\r\n        <ListerContext.Provider value={runtimeRef.current}>\r\n            {children}\r\n        </ListerContext.Provider>\r\n    );\r\n}\r\n\r\n/**\r\n * Helper: get current runtime or throw\r\n */\r\nexport function useListerRuntime<P extends PresetMap>(): ListerRuntime<P> {\r\n    const ctx = React.useContext(ListerContext);\r\n    if (!ctx)\r\n        throw new Error(\r\n            \"useListerRuntime must be used within <ListerProvider>\",\r\n        );\r\n    return ctx as ListerRuntime<P>;\r\n}\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nexport const concatArrays = <T, U>(\n    array1: readonly T[],\n    array2: readonly U[],\n): readonly (T | U)[] => {\n    // Pre-allocate for better V8 optimization\n    const combinedArray: (T | U)[] = new Array(array1.length + array2.length)\n    for (let i = 0; i < array1.length; i++) {\n        combinedArray[i] = array1[i]!\n    }\n    for (let i = 0; i < array2.length; i++) {\n        combinedArray[array1.length + i] = array2[i]!\n    }\n    return combinedArray\n}\n","import {\n    AnyClassGroupIds,\n    AnyConfig,\n    AnyThemeGroupIds,\n    ClassGroup,\n    ClassValidator,\n    Config,\n    ThemeGetter,\n    ThemeObject,\n} from './types'\nimport { concatArrays } from './utils'\n\nexport interface ClassPartObject {\n    nextPart: Map<string, ClassPartObject>\n    validators: ClassValidatorObject[] | null\n    classGroupId: AnyClassGroupIds | undefined // Always define optional props for consistent shape\n}\n\ninterface ClassValidatorObject {\n    classGroupId: AnyClassGroupIds\n    validator: ClassValidator\n}\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (\n    classGroupId: AnyClassGroupIds,\n    validator: ClassValidator,\n): ClassValidatorObject => ({\n    classGroupId,\n    validator,\n})\n\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (\n    nextPart: Map<string, ClassPartObject> = new Map(),\n    validators: ClassValidatorObject[] | null = null,\n    classGroupId?: AnyClassGroupIds,\n): ClassPartObject => ({\n    nextPart,\n    validators,\n    classGroupId,\n})\n\nconst CLASS_PART_SEPARATOR = '-'\n\nconst EMPTY_CONFLICTS: readonly AnyClassGroupIds[] = []\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..'\n\nexport const createClassGroupUtils = (config: AnyConfig) => {\n    const classMap = createClassMap(config)\n    const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n    const getClassGroupId = (className: string) => {\n        if (className.startsWith('[') && className.endsWith(']')) {\n            return getGroupIdForArbitraryProperty(className)\n        }\n\n        const classParts = className.split(CLASS_PART_SEPARATOR)\n        // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n        const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0\n        return getGroupRecursive(classParts, startIndex, classMap)\n    }\n\n    const getConflictingClassGroupIds = (\n        classGroupId: AnyClassGroupIds,\n        hasPostfixModifier: boolean,\n    ): readonly AnyClassGroupIds[] => {\n        if (hasPostfixModifier) {\n            const modifierConflicts = conflictingClassGroupModifiers[classGroupId]\n            const baseConflicts = conflictingClassGroups[classGroupId]\n\n            if (modifierConflicts) {\n                if (baseConflicts) {\n                    // Merge base conflicts with modifier conflicts\n                    return concatArrays(baseConflicts, modifierConflicts)\n                }\n                // Only modifier conflicts\n                return modifierConflicts\n            }\n            // Fall back to without postfix if no modifier conflicts\n            return baseConflicts || EMPTY_CONFLICTS\n        }\n\n        return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS\n    }\n\n    return {\n        getClassGroupId,\n        getConflictingClassGroupIds,\n    }\n}\n\nconst getGroupRecursive = (\n    classParts: string[],\n    startIndex: number,\n    classPartObject: ClassPartObject,\n): AnyClassGroupIds | undefined => {\n    const classPathsLength = classParts.length - startIndex\n    if (classPathsLength === 0) {\n        return classPartObject.classGroupId\n    }\n\n    const currentClassPart = classParts[startIndex]!\n    const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n\n    if (nextClassPartObject) {\n        const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject)\n        if (result) return result\n    }\n\n    const validators = classPartObject.validators\n    if (validators === null) {\n        return undefined\n    }\n\n    // Build classRest string efficiently by joining from startIndex onwards\n    const classRest =\n        startIndex === 0\n            ? classParts.join(CLASS_PART_SEPARATOR)\n            : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR)\n    const validatorsLength = validators.length\n\n    for (let i = 0; i < validatorsLength; i++) {\n        const validatorObj = validators[i]!\n        if (validatorObj.validator(classRest)) {\n            return validatorObj.classGroupId\n        }\n    }\n\n    return undefined\n}\n\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = (className: string): AnyClassGroupIds | undefined =>\n    className.slice(1, -1).indexOf(':') === -1\n        ? undefined\n        : (() => {\n              const content = className.slice(1, -1)\n              const colonIndex = content.indexOf(':')\n              const property = content.slice(0, colonIndex)\n              return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined\n          })()\n\n/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<AnyClassGroupIds, AnyThemeGroupIds>) => {\n    const { theme, classGroups } = config\n    return processClassGroups(classGroups, theme)\n}\n\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (\n    classGroups: Record<AnyClassGroupIds, ClassGroup<AnyThemeGroupIds>>,\n    theme: ThemeObject<AnyThemeGroupIds>,\n): ClassPartObject => {\n    const classMap = createClassPartObject()\n\n    for (const classGroupId in classGroups) {\n        const group = classGroups[classGroupId]!\n        processClassesRecursively(group, classMap, classGroupId, theme)\n    }\n\n    return classMap\n}\n\nconst processClassesRecursively = (\n    classGroup: ClassGroup<AnyThemeGroupIds>,\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n    theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n    const len = classGroup.length\n    for (let i = 0; i < len; i++) {\n        const classDefinition = classGroup[i]!\n        processClassDefinition(classDefinition, classPartObject, classGroupId, theme)\n    }\n}\n\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (\n    classDefinition: ClassGroup<AnyThemeGroupIds>[number],\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n    theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n    if (typeof classDefinition === 'string') {\n        processStringDefinition(classDefinition, classPartObject, classGroupId)\n        return\n    }\n\n    if (typeof classDefinition === 'function') {\n        processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme)\n        return\n    }\n\n    processObjectDefinition(\n        classDefinition as Record<string, ClassGroup<AnyThemeGroupIds>>,\n        classPartObject,\n        classGroupId,\n        theme,\n    )\n}\n\nconst processStringDefinition = (\n    classDefinition: string,\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n) => {\n    const classPartObjectToEdit =\n        classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n    classPartObjectToEdit.classGroupId = classGroupId\n}\n\nconst processFunctionDefinition = (\n    classDefinition: Function,\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n    theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n    if (isThemeGetter(classDefinition)) {\n        processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme)\n        return\n    }\n\n    if (classPartObject.validators === null) {\n        classPartObject.validators = []\n    }\n    classPartObject.validators.push(\n        createClassValidatorObject(classGroupId, classDefinition as ClassValidator),\n    )\n}\n\nconst processObjectDefinition = (\n    classDefinition: Record<string, ClassGroup<AnyThemeGroupIds>>,\n    classPartObject: ClassPartObject,\n    classGroupId: AnyClassGroupIds,\n    theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n    const entries = Object.entries(classDefinition)\n    const len = entries.length\n    for (let i = 0; i < len; i++) {\n        const [key, value] = entries[i]!\n        processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme)\n    }\n}\n\nconst getPart = (classPartObject: ClassPartObject, path: string): ClassPartObject => {\n    let current = classPartObject\n    const parts = path.split(CLASS_PART_SEPARATOR)\n    const len = parts.length\n\n    for (let i = 0; i < len; i++) {\n        const part = parts[i]!\n\n        let next = current.nextPart.get(part)\n        if (!next) {\n            next = createClassPartObject()\n            current.nextPart.set(part, next)\n        }\n        current = next\n    }\n\n    return current\n}\n\n// Type guard maintains monomorphic check\nconst isThemeGetter = (func: Function): func is ThemeGetter =>\n    'isThemeGetter' in func && (func as ThemeGetter).isThemeGetter === true\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key extends string, Value> {\n    get(key: Key): Value | undefined\n    set(key: Key, value: Value): void\n}\n\n// LRU cache implementation using plain objects for simplicity\nexport const createLruCache = <Key extends string, Value>(\n    maxCacheSize: number,\n): LruCache<Key, Value> => {\n    if (maxCacheSize < 1) {\n        return {\n            get: () => undefined,\n            set: () => {},\n        }\n    }\n\n    let cacheSize = 0\n    let cache: Record<Key, Value> = Object.create(null)\n    let previousCache: Record<Key, Value> = Object.create(null)\n\n    const update = (key: Key, value: Value) => {\n        cache[key] = value\n        cacheSize++\n\n        if (cacheSize > maxCacheSize) {\n            cacheSize = 0\n            previousCache = cache\n            cache = Object.create(null)\n        }\n    }\n\n    return {\n        get(key) {\n            let value = cache[key]\n\n            if (value !== undefined) {\n                return value\n            }\n            if ((value = previousCache[key]) !== undefined) {\n                update(key, value)\n                return value\n            }\n        },\n        set(key, value) {\n            if (key in cache) {\n                cache[key] = value\n            } else {\n                update(key, value)\n            }\n        },\n    }\n}\n","import { AnyConfig, ParsedClassName } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\n\nconst MODIFIER_SEPARATOR = ':'\nconst EMPTY_MODIFIERS: string[] = []\n\n// Pre-allocated result object shape for consistency\nconst createResultObject = (\n    modifiers: string[],\n    hasImportantModifier: boolean,\n    baseClassName: string,\n    maybePostfixModifierPosition?: number,\n    isExternal?: boolean,\n): ParsedClassName => ({\n    modifiers,\n    hasImportantModifier,\n    baseClassName,\n    maybePostfixModifierPosition,\n    isExternal,\n})\n\nexport const createParseClassName = (config: AnyConfig) => {\n    const { prefix, experimentalParseClassName } = config\n\n    /**\n     * Parse class name into parts.\n     *\n     * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n     * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n     */\n    let parseClassName = (className: string): ParsedClassName => {\n        // Use simple array with push for better performance\n        const modifiers: string[] = []\n\n        let bracketDepth = 0\n        let parenDepth = 0\n        let modifierStart = 0\n        let postfixModifierPosition: number | undefined\n\n        const len = className.length\n        for (let index = 0; index < len; index++) {\n            const currentCharacter = className[index]!\n\n            if (bracketDepth === 0 && parenDepth === 0) {\n                if (currentCharacter === MODIFIER_SEPARATOR) {\n                    modifiers.push(className.slice(modifierStart, index))\n                    modifierStart = index + 1\n                    continue\n                }\n\n                if (currentCharacter === '/') {\n                    postfixModifierPosition = index\n                    continue\n                }\n            }\n\n            if (currentCharacter === '[') bracketDepth++\n            else if (currentCharacter === ']') bracketDepth--\n            else if (currentCharacter === '(') parenDepth++\n            else if (currentCharacter === ')') parenDepth--\n        }\n\n        const baseClassNameWithImportantModifier =\n            modifiers.length === 0 ? className : className.slice(modifierStart)\n\n        // Inline important modifier check\n        let baseClassName = baseClassNameWithImportantModifier\n        let hasImportantModifier = false\n\n        if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n            baseClassName = baseClassNameWithImportantModifier.slice(0, -1)\n            hasImportantModifier = true\n        } else if (\n            /**\n             * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n             * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n             */\n            baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n        ) {\n            baseClassName = baseClassNameWithImportantModifier.slice(1)\n            hasImportantModifier = true\n        }\n\n        const maybePostfixModifierPosition =\n            postfixModifierPosition && postfixModifierPosition > modifierStart\n                ? postfixModifierPosition - modifierStart\n                : undefined\n\n        return createResultObject(\n            modifiers,\n            hasImportantModifier,\n            baseClassName,\n            maybePostfixModifierPosition,\n        )\n    }\n\n    if (prefix) {\n        const fullPrefix = prefix + MODIFIER_SEPARATOR\n        const parseClassNameOriginal = parseClassName\n        parseClassName = (className: string) =>\n            className.startsWith(fullPrefix)\n                ? parseClassNameOriginal(className.slice(fullPrefix.length))\n                : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true)\n    }\n\n    if (experimentalParseClassName) {\n        const parseClassNameOriginal = parseClassName\n        parseClassName = (className: string) =>\n            experimentalParseClassName({ className, parseClassName: parseClassNameOriginal })\n    }\n\n    return parseClassName\n}\n","import { AnyConfig } from './types'\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nexport const createSortModifiers = (config: AnyConfig) => {\n    // Pre-compute weights for all known modifiers for O(1) comparison\n    const modifierWeights = new Map<string, number>()\n\n    // Assign weights to sensitive modifiers (highest priority, but preserve order)\n    config.orderSensitiveModifiers.forEach((mod, index) => {\n        modifierWeights.set(mod, 1000000 + index) // High weights for sensitive mods\n    })\n\n    return (modifiers: readonly string[]): string[] => {\n        const result: string[] = []\n        let currentSegment: string[] = []\n\n        // Process modifiers in one pass\n        for (let i = 0; i < modifiers.length; i++) {\n            const modifier = modifiers[i]!\n\n            // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n            const isArbitrary = modifier[0] === '['\n            const isOrderSensitive = modifierWeights.has(modifier)\n\n            if (isArbitrary || isOrderSensitive) {\n                // Sort and flush current segment alphabetically\n                if (currentSegment.length > 0) {\n                    currentSegment.sort()\n                    result.push(...currentSegment)\n                    currentSegment = []\n                }\n                result.push(modifier)\n            } else {\n                // Regular modifier - add to current segment for batch sorting\n                currentSegment.push(modifier)\n            }\n        }\n\n        // Sort and add any remaining segment items\n        if (currentSegment.length > 0) {\n            currentSegment.sort()\n            result.push(...currentSegment)\n        }\n\n        return result\n    }\n}\n","import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { createSortModifiers } from './sort-modifiers'\nimport { AnyConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: AnyConfig) => ({\n    cache: createLruCache<string, string>(config.cacheSize),\n    parseClassName: createParseClassName(config),\n    sortModifiers: createSortModifiers(config),\n    ...createClassGroupUtils(config),\n})\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n    const { parseClassName, getClassGroupId, getConflictingClassGroupIds, sortModifiers } =\n        configUtils\n\n    /**\n     * Set of classGroupIds in following format:\n     * `{importantModifier}{variantModifiers}{classGroupId}`\n     * @example 'float'\n     * @example 'hover:focus:bg-color'\n     * @example 'md:!pr'\n     */\n    const classGroupsInConflict: string[] = []\n    const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n    let result = ''\n\n    for (let index = classNames.length - 1; index >= 0; index -= 1) {\n        const originalClassName = classNames[index]!\n\n        const {\n            isExternal,\n            modifiers,\n            hasImportantModifier,\n            baseClassName,\n            maybePostfixModifierPosition,\n        } = parseClassName(originalClassName)\n\n        if (isExternal) {\n            result = originalClassName + (result.length > 0 ? ' ' + result : result)\n            continue\n        }\n\n        let hasPostfixModifier = !!maybePostfixModifierPosition\n        let classGroupId = getClassGroupId(\n            hasPostfixModifier\n                ? baseClassName.substring(0, maybePostfixModifierPosition)\n                : baseClassName,\n        )\n\n        if (!classGroupId) {\n            if (!hasPostfixModifier) {\n                // Not a Tailwind class\n                result = originalClassName + (result.length > 0 ? ' ' + result : result)\n                continue\n            }\n\n            classGroupId = getClassGroupId(baseClassName)\n\n            if (!classGroupId) {\n                // Not a Tailwind class\n                result = originalClassName + (result.length > 0 ? ' ' + result : result)\n                continue\n            }\n\n            hasPostfixModifier = false\n        }\n\n        // Fast path: skip sorting for empty or single modifier\n        const variantModifier =\n            modifiers.length === 0\n                ? ''\n                : modifiers.length === 1\n                  ? modifiers[0]!\n                  : sortModifiers(modifiers).join(':')\n\n        const modifierId = hasImportantModifier\n            ? variantModifier + IMPORTANT_MODIFIER\n            : variantModifier\n\n        const classId = modifierId + classGroupId\n\n        if (classGroupsInConflict.indexOf(classId) > -1) {\n            // Tailwind class omitted due to conflict\n            continue\n        }\n\n        classGroupsInConflict.push(classId)\n\n        const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier)\n        for (let i = 0; i < conflictGroups.length; ++i) {\n            const group = conflictGroups[i]!\n            classGroupsInConflict.push(modifierId + group)\n        }\n\n        // Tailwind class not in conflict\n        result = originalClassName + (result.length > 0 ? ' ' + result : result)\n    }\n\n    return result\n}\n","/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = ClassNameValue[]\n\nexport const twJoin = (...classLists: ClassNameValue[]): string => {\n    let index = 0\n    let argument: ClassNameValue\n    let resolvedValue: string\n    let string = ''\n\n    while (index < classLists.length) {\n        if ((argument = classLists[index++])) {\n            if ((resolvedValue = toValue(argument))) {\n                string && (string += ' ')\n                string += resolvedValue\n            }\n        }\n    }\n    return string\n}\n\nconst toValue = (mix: ClassNameArray | string): string => {\n    // Fast path for strings\n    if (typeof mix === 'string') {\n        return mix\n    }\n\n    let resolvedValue: string\n    let string = ''\n\n    for (let k = 0; k < mix.length; k++) {\n        if (mix[k]) {\n            if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n                string && (string += ' ')\n                string += resolvedValue\n            }\n        }\n    }\n\n    return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { AnyConfig } from './types'\n\ntype CreateConfigFirst = () => AnyConfig\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createTailwindMerge = (\n    createConfigFirst: CreateConfigFirst,\n    ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge => {\n    let configUtils: ConfigUtils\n    let cacheGet: ConfigUtils['cache']['get']\n    let cacheSet: ConfigUtils['cache']['set']\n    let functionToCall: (classList: string) => string\n\n    const initTailwindMerge = (classList: string) => {\n        const config = createConfigRest.reduce(\n            (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n            createConfigFirst() as AnyConfig,\n        )\n\n        configUtils = createConfigUtils(config)\n        cacheGet = configUtils.cache.get\n        cacheSet = configUtils.cache.set\n        functionToCall = tailwindMerge\n\n        return tailwindMerge(classList)\n    }\n\n    const tailwindMerge = (classList: string) => {\n        const cachedResult = cacheGet(classList)\n\n        if (cachedResult) {\n            return cachedResult\n        }\n\n        const result = mergeClassList(classList, configUtils)\n        cacheSet(classList, result)\n\n        return result\n    }\n\n    functionToCall = initTailwindMerge\n\n    return (...args: ClassNameValue[]) => functionToCall(twJoin(...args))\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nconst fallbackThemeArr: ThemeObject<DefaultThemeGroupIds>[DefaultThemeGroupIds] = []\n\nexport const fromTheme = <\n    AdditionalThemeGroupIds extends string = never,\n    DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(\n    key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>,\n): ThemeGetter => {\n    const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n        theme[key] || fallbackThemeArr\n\n    themeGetter.isThemeGetter = true as const\n\n    return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i\nconst fractionRegex = /^\\d+\\/\\d+$/\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n    /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/\nconst imageRegex =\n    /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isFraction = (value: string) => fractionRegex.test(value)\n\nexport const isNumber = (value: string) => !!value && !Number.isNaN(Number(value))\n\nexport const isInteger = (value: string) => !!value && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nexport const isAny = () => true\n\nconst isLengthOnly = (value: string) =>\n    // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n    // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n    // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n    lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n\nexport const isAnyNonArbitrary = (value: string) =>\n    !isArbitraryValue(value) && !isArbitraryVariable(value)\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, isLabelSize, isNever)\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n    getIsArbitraryValue(value, isLabelLength, isLengthOnly)\n\nexport const isArbitraryNumber = (value: string) =>\n    getIsArbitraryValue(value, isLabelNumber, isNumber)\n\nexport const isArbitraryPosition = (value: string) =>\n    getIsArbitraryValue(value, isLabelPosition, isNever)\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, isLabelImage, isImage)\n\nexport const isArbitraryShadow = (value: string) =>\n    getIsArbitraryValue(value, isLabelShadow, isShadow)\n\nexport const isArbitraryVariable = (value: string) => arbitraryVariableRegex.test(value)\n\nexport const isArbitraryVariableLength = (value: string) =>\n    getIsArbitraryVariable(value, isLabelLength)\n\nexport const isArbitraryVariableFamilyName = (value: string) =>\n    getIsArbitraryVariable(value, isLabelFamilyName)\n\nexport const isArbitraryVariablePosition = (value: string) =>\n    getIsArbitraryVariable(value, isLabelPosition)\n\nexport const isArbitraryVariableSize = (value: string) => getIsArbitraryVariable(value, isLabelSize)\n\nexport const isArbitraryVariableImage = (value: string) =>\n    getIsArbitraryVariable(value, isLabelImage)\n\nexport const isArbitraryVariableShadow = (value: string) =>\n    getIsArbitraryVariable(value, isLabelShadow, true)\n\n// Helpers\n\nconst getIsArbitraryValue = (\n    value: string,\n    testLabel: (label: string) => boolean,\n    testValue: (value: string) => boolean,\n) => {\n    const result = arbitraryValueRegex.exec(value)\n\n    if (result) {\n        if (result[1]) {\n            return testLabel(result[1])\n        }\n\n        return testValue(result[2]!)\n    }\n\n    return false\n}\n\nconst getIsArbitraryVariable = (\n    value: string,\n    testLabel: (label: string) => boolean,\n    shouldMatchNoLabel = false,\n) => {\n    const result = arbitraryVariableRegex.exec(value)\n\n    if (result) {\n        if (result[1]) {\n            return testLabel(result[1])\n        }\n        return shouldMatchNoLabel\n    }\n\n    return false\n}\n\n// Labels\n\nconst isLabelPosition = (label: string) => label === 'position' || label === 'percentage'\n\nconst isLabelImage = (label: string) => label === 'image' || label === 'url'\n\nconst isLabelSize = (label: string) => label === 'length' || label === 'size' || label === 'bg-size'\n\nconst isLabelLength = (label: string) => label === 'length'\n\nconst isLabelNumber = (label: string) => label === 'number'\n\nconst isLabelFamilyName = (label: string) => label === 'family-name'\n\nconst isLabelShadow = (label: string) => label === 'shadow'\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n    isAny,\n    isAnyNonArbitrary,\n    isArbitraryImage,\n    isArbitraryLength,\n    isArbitraryNumber,\n    isArbitraryPosition,\n    isArbitraryShadow,\n    isArbitrarySize,\n    isArbitraryValue,\n    isArbitraryVariable,\n    isArbitraryVariableFamilyName,\n    isArbitraryVariableImage,\n    isArbitraryVariableLength,\n    isArbitraryVariablePosition,\n    isArbitraryVariableShadow,\n    isArbitraryVariableSize,\n    isFraction,\n    isInteger,\n    isNumber,\n    isPercent,\n    isTshirtSize,\n} from './validators'\n\nexport const getDefaultConfig = () => {\n    /**\n     * Theme getters for theme variable namespaces\n     * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n     */\n    /***/\n\n    const themeColor = fromTheme('color')\n    const themeFont = fromTheme('font')\n    const themeText = fromTheme('text')\n    const themeFontWeight = fromTheme('font-weight')\n    const themeTracking = fromTheme('tracking')\n    const themeLeading = fromTheme('leading')\n    const themeBreakpoint = fromTheme('breakpoint')\n    const themeContainer = fromTheme('container')\n    const themeSpacing = fromTheme('spacing')\n    const themeRadius = fromTheme('radius')\n    const themeShadow = fromTheme('shadow')\n    const themeInsetShadow = fromTheme('inset-shadow')\n    const themeTextShadow = fromTheme('text-shadow')\n    const themeDropShadow = fromTheme('drop-shadow')\n    const themeBlur = fromTheme('blur')\n    const themePerspective = fromTheme('perspective')\n    const themeAspect = fromTheme('aspect')\n    const themeEase = fromTheme('ease')\n    const themeAnimate = fromTheme('animate')\n\n    /**\n     * Helpers to avoid repeating the same scales\n     *\n     * We use functions that create a new array every time they're called instead of static arrays.\n     * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n     */\n    /***/\n\n    const scaleBreak = () =>\n        ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n    const scalePosition = () =>\n        [\n            'center',\n            'top',\n            'bottom',\n            'left',\n            'right',\n            'top-left',\n            // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n            'left-top',\n            'top-right',\n            // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n            'right-top',\n            'bottom-right',\n            // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n            'right-bottom',\n            'bottom-left',\n            // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n            'left-bottom',\n        ] as const\n    const scalePositionWithArbitrary = () =>\n        [...scalePosition(), isArbitraryVariable, isArbitraryValue] as const\n    const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n    const scaleOverscroll = () => ['auto', 'contain', 'none'] as const\n    const scaleUnambiguousSpacing = () =>\n        [isArbitraryVariable, isArbitraryValue, themeSpacing] as const\n    const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()] as const\n    const scaleGridTemplateColsRows = () =>\n        [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue] as const\n    const scaleGridColRowStartAndEnd = () =>\n        [\n            'auto',\n            { span: ['full', isInteger, isArbitraryVariable, isArbitraryValue] },\n            isInteger,\n            isArbitraryVariable,\n            isArbitraryValue,\n        ] as const\n    const scaleGridColRowStartOrEnd = () =>\n        [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] as const\n    const scaleGridAutoColsRows = () =>\n        ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue] as const\n    const scaleAlignPrimaryAxis = () =>\n        [\n            'start',\n            'end',\n            'center',\n            'between',\n            'around',\n            'evenly',\n            'stretch',\n            'baseline',\n            'center-safe',\n            'end-safe',\n        ] as const\n    const scaleAlignSecondaryAxis = () =>\n        ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'] as const\n    const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()] as const\n    const scaleSizing = () =>\n        [\n            isFraction,\n            'auto',\n            'full',\n            'dvw',\n            'dvh',\n            'lvw',\n            'lvh',\n            'svw',\n            'svh',\n            'min',\n            'max',\n            'fit',\n            ...scaleUnambiguousSpacing(),\n        ] as const\n    const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue] as const\n    const scaleBgPosition = () =>\n        [\n            ...scalePosition(),\n            isArbitraryVariablePosition,\n            isArbitraryPosition,\n            { position: [isArbitraryVariable, isArbitraryValue] },\n        ] as const\n    const scaleBgRepeat = () => ['no-repeat', { repeat: ['', 'x', 'y', 'space', 'round'] }] as const\n    const scaleBgSize = () =>\n        [\n            'auto',\n            'cover',\n            'contain',\n            isArbitraryVariableSize,\n            isArbitrarySize,\n            { size: [isArbitraryVariable, isArbitraryValue] },\n        ] as const\n    const scaleGradientStopPosition = () =>\n        [isPercent, isArbitraryVariableLength, isArbitraryLength] as const\n    const scaleRadius = () =>\n        [\n            // Deprecated since Tailwind CSS v4.0.0\n            '',\n            'none',\n            'full',\n            themeRadius,\n            isArbitraryVariable,\n            isArbitraryValue,\n        ] as const\n    const scaleBorderWidth = () =>\n        ['', isNumber, isArbitraryVariableLength, isArbitraryLength] as const\n    const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'] as const\n    const scaleBlendMode = () =>\n        [\n            'normal',\n            'multiply',\n            'screen',\n            'overlay',\n            'darken',\n            'lighten',\n            'color-dodge',\n            'color-burn',\n            'hard-light',\n            'soft-light',\n            'difference',\n            'exclusion',\n            'hue',\n            'saturation',\n            'color',\n            'luminosity',\n        ] as const\n    const scaleMaskImagePosition = () =>\n        [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition] as const\n    const scaleBlur = () =>\n        [\n            // Deprecated since Tailwind CSS v4.0.0\n            '',\n            'none',\n            themeBlur,\n            isArbitraryVariable,\n            isArbitraryValue,\n        ] as const\n    const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n    const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n    const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue] as const\n    const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()] as const\n\n    return {\n        cacheSize: 500,\n        theme: {\n            animate: ['spin', 'ping', 'pulse', 'bounce'],\n            aspect: ['video'],\n            blur: [isTshirtSize],\n            breakpoint: [isTshirtSize],\n            color: [isAny],\n            container: [isTshirtSize],\n            'drop-shadow': [isTshirtSize],\n            ease: ['in', 'out', 'in-out'],\n            font: [isAnyNonArbitrary],\n            'font-weight': [\n                'thin',\n                'extralight',\n                'light',\n                'normal',\n                'medium',\n                'semibold',\n                'bold',\n                'extrabold',\n                'black',\n            ],\n            'inset-shadow': [isTshirtSize],\n            leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n            perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n            radius: [isTshirtSize],\n            shadow: [isTshirtSize],\n            spacing: ['px', isNumber],\n            text: [isTshirtSize],\n            'text-shadow': [isTshirtSize],\n            tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest'],\n        },\n        classGroups: {\n            // --------------\n            // --- Layout ---\n            // --------------\n\n            /**\n             * Aspect Ratio\n             * @see https://tailwindcss.com/docs/aspect-ratio\n             */\n            aspect: [\n                {\n                    aspect: [\n                        'auto',\n                        'square',\n                        isFraction,\n                        isArbitraryValue,\n                        isArbitraryVariable,\n                        themeAspect,\n                    ],\n                },\n            ],\n            /**\n             * Container\n             * @see https://tailwindcss.com/docs/container\n             * @deprecated since Tailwind CSS v4.0.0\n             */\n            container: ['container'],\n            /**\n             * Columns\n             * @see https://tailwindcss.com/docs/columns\n             */\n            columns: [\n                { columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer] },\n            ],\n            /**\n             * Break After\n             * @see https://tailwindcss.com/docs/break-after\n             */\n            'break-after': [{ 'break-after': scaleBreak() }],\n            /**\n             * Break Before\n             * @see https://tailwindcss.com/docs/break-before\n             */\n            'break-before': [{ 'break-before': scaleBreak() }],\n            /**\n             * Break Inside\n             * @see https://tailwindcss.com/docs/break-inside\n             */\n            'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n            /**\n             * Box Decoration Break\n             * @see https://tailwindcss.com/docs/box-decoration-break\n             */\n            'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n            /**\n             * Box Sizing\n             * @see https://tailwindcss.com/docs/box-sizing\n             */\n            box: [{ box: ['border', 'content'] }],\n            /**\n             * Display\n             * @see https://tailwindcss.com/docs/display\n             */\n            display: [\n                'block',\n                'inline-block',\n                'inline',\n                'flex',\n                'inline-flex',\n                'table',\n                'inline-table',\n                'table-caption',\n                'table-cell',\n                'table-column',\n                'table-column-group',\n                'table-footer-group',\n                'table-header-group',\n                'table-row-group',\n                'table-row',\n                'flow-root',\n                'grid',\n                'inline-grid',\n                'contents',\n                'list-item',\n                'hidden',\n            ],\n            /**\n             * Screen Reader Only\n             * @see https://tailwindcss.com/docs/display#screen-reader-only\n             */\n            sr: ['sr-only', 'not-sr-only'],\n            /**\n             * Floats\n             * @see https://tailwindcss.com/docs/float\n             */\n            float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n            /**\n             * Clear\n             * @see https://tailwindcss.com/docs/clear\n             */\n            clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\n            /**\n             * Isolation\n             * @see https://tailwindcss.com/docs/isolation\n             */\n            isolation: ['isolate', 'isolation-auto'],\n            /**\n             * Object Fit\n             * @see https://tailwindcss.com/docs/object-fit\n             */\n            'object-fit': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n            /**\n             * Object Position\n             * @see https://tailwindcss.com/docs/object-position\n             */\n            'object-position': [{ object: scalePositionWithArbitrary() }],\n            /**\n             * Overflow\n             * @see https://tailwindcss.com/docs/overflow\n             */\n            overflow: [{ overflow: scaleOverflow() }],\n            /**\n             * Overflow X\n             * @see https://tailwindcss.com/docs/overflow\n             */\n            'overflow-x': [{ 'overflow-x': scaleOverflow() }],\n            /**\n             * Overflow Y\n             * @see https://tailwindcss.com/docs/overflow\n             */\n            'overflow-y': [{ 'overflow-y': scaleOverflow() }],\n            /**\n             * Overscroll Behavior\n             * @see https://tailwindcss.com/docs/overscroll-behavior\n             */\n            overscroll: [{ overscroll: scaleOverscroll() }],\n            /**\n             * Overscroll Behavior X\n             * @see https://tailwindcss.com/docs/overscroll-behavior\n             */\n            'overscroll-x': [{ 'overscroll-x': scaleOverscroll() }],\n            /**\n             * Overscroll Behavior Y\n             * @see https://tailwindcss.com/docs/overscroll-behavior\n             */\n            'overscroll-y': [{ 'overscroll-y': scaleOverscroll() }],\n            /**\n             * Position\n             * @see https://tailwindcss.com/docs/position\n             */\n            position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n            /**\n             * Top / Right / Bottom / Left\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            inset: [{ inset: scaleInset() }],\n            /**\n             * Right / Left\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            'inset-x': [{ 'inset-x': scaleInset() }],\n            /**\n             * Top / Bottom\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            'inset-y': [{ 'inset-y': scaleInset() }],\n            /**\n             * Start\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            start: [{ start: scaleInset() }],\n            /**\n             * End\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            end: [{ end: scaleInset() }],\n            /**\n             * Top\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            top: [{ top: scaleInset() }],\n            /**\n             * Right\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            right: [{ right: scaleInset() }],\n            /**\n             * Bottom\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            bottom: [{ bottom: scaleInset() }],\n            /**\n             * Left\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            left: [{ left: scaleInset() }],\n            /**\n             * Visibility\n             * @see https://tailwindcss.com/docs/visibility\n             */\n            visibility: ['visible', 'invisible', 'collapse'],\n            /**\n             * Z-Index\n             * @see https://tailwindcss.com/docs/z-index\n             */\n            z: [{ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] }],\n\n            // ------------------------\n            // --- Flexbox and Grid ---\n            // ------------------------\n\n            /**\n             * Flex Basis\n             * @see https://tailwindcss.com/docs/flex-basis\n             */\n            basis: [\n                {\n                    basis: [\n                        isFraction,\n                        'full',\n                        'auto',\n                        themeContainer,\n                        ...scaleUnambiguousSpacing(),\n                    ],\n                },\n            ],\n            /**\n             * Flex Direction\n             * @see https://tailwindcss.com/docs/flex-direction\n             */\n            'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n            /**\n             * Flex Wrap\n             * @see https://tailwindcss.com/docs/flex-wrap\n             */\n            'flex-wrap': [{ flex: ['nowrap', 'wrap', 'wrap-reverse'] }],\n            /**\n             * Flex\n             * @see https://tailwindcss.com/docs/flex\n             */\n            flex: [{ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue] }],\n            /**\n             * Flex Grow\n             * @see https://tailwindcss.com/docs/flex-grow\n             */\n            grow: [{ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Flex Shrink\n             * @see https://tailwindcss.com/docs/flex-shrink\n             */\n            shrink: [{ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Order\n             * @see https://tailwindcss.com/docs/order\n             */\n            order: [\n                {\n                    order: [\n                        isInteger,\n                        'first',\n                        'last',\n                        'none',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Grid Template Columns\n             * @see https://tailwindcss.com/docs/grid-template-columns\n             */\n            'grid-cols': [{ 'grid-cols': scaleGridTemplateColsRows() }],\n            /**\n             * Grid Column Start / End\n             * @see https://tailwindcss.com/docs/grid-column\n             */\n            'col-start-end': [{ col: scaleGridColRowStartAndEnd() }],\n            /**\n             * Grid Column Start\n             * @see https://tailwindcss.com/docs/grid-column\n             */\n            'col-start': [{ 'col-start': scaleGridColRowStartOrEnd() }],\n            /**\n             * Grid Column End\n             * @see https://tailwindcss.com/docs/grid-column\n             */\n            'col-end': [{ 'col-end': scaleGridColRowStartOrEnd() }],\n            /**\n             * Grid Template Rows\n             * @see https://tailwindcss.com/docs/grid-template-rows\n             */\n            'grid-rows': [{ 'grid-rows': scaleGridTemplateColsRows() }],\n            /**\n             * Grid Row Start / End\n             * @see https://tailwindcss.com/docs/grid-row\n             */\n            'row-start-end': [{ row: scaleGridColRowStartAndEnd() }],\n            /**\n             * Grid Row Start\n             * @see https://tailwindcss.com/docs/grid-row\n             */\n            'row-start': [{ 'row-start': scaleGridColRowStartOrEnd() }],\n            /**\n             * Grid Row End\n             * @see https://tailwindcss.com/docs/grid-row\n             */\n            'row-end': [{ 'row-end': scaleGridColRowStartOrEnd() }],\n            /**\n             * Grid Auto Flow\n             * @see https://tailwindcss.com/docs/grid-auto-flow\n             */\n            'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n            /**\n             * Grid Auto Columns\n             * @see https://tailwindcss.com/docs/grid-auto-columns\n             */\n            'auto-cols': [{ 'auto-cols': scaleGridAutoColsRows() }],\n            /**\n             * Grid Auto Rows\n             * @see https://tailwindcss.com/docs/grid-auto-rows\n             */\n            'auto-rows': [{ 'auto-rows': scaleGridAutoColsRows() }],\n            /**\n             * Gap\n             * @see https://tailwindcss.com/docs/gap\n             */\n            gap: [{ gap: scaleUnambiguousSpacing() }],\n            /**\n             * Gap X\n             * @see https://tailwindcss.com/docs/gap\n             */\n            'gap-x': [{ 'gap-x': scaleUnambiguousSpacing() }],\n            /**\n             * Gap Y\n             * @see https://tailwindcss.com/docs/gap\n             */\n            'gap-y': [{ 'gap-y': scaleUnambiguousSpacing() }],\n            /**\n             * Justify Content\n             * @see https://tailwindcss.com/docs/justify-content\n             */\n            'justify-content': [{ justify: [...scaleAlignPrimaryAxis(), 'normal'] }],\n            /**\n             * Justify Items\n             * @see https://tailwindcss.com/docs/justify-items\n             */\n            'justify-items': [{ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal'] }],\n            /**\n             * Justify Self\n             * @see https://tailwindcss.com/docs/justify-self\n             */\n            'justify-self': [{ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n            /**\n             * Align Content\n             * @see https://tailwindcss.com/docs/align-content\n             */\n            'align-content': [{ content: ['normal', ...scaleAlignPrimaryAxis()] }],\n            /**\n             * Align Items\n             * @see https://tailwindcss.com/docs/align-items\n             */\n            'align-items': [{ items: [...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] }],\n            /**\n             * Align Self\n             * @see https://tailwindcss.com/docs/align-self\n             */\n            'align-self': [\n                { self: ['auto', ...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] },\n            ],\n            /**\n             * Place Content\n             * @see https://tailwindcss.com/docs/place-content\n             */\n            'place-content': [{ 'place-content': scaleAlignPrimaryAxis() }],\n            /**\n             * Place Items\n             * @see https://tailwindcss.com/docs/place-items\n             */\n            'place-items': [{ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline'] }],\n            /**\n             * Place Self\n             * @see https://tailwindcss.com/docs/place-self\n             */\n            'place-self': [{ 'place-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n            // Spacing\n            /**\n             * Padding\n             * @see https://tailwindcss.com/docs/padding\n             */\n            p: [{ p: scaleUnambiguousSpacing() }],\n            /**\n             * Padding X\n             * @see https://tailwindcss.com/docs/padding\n             */\n            px: [{ px: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Y\n             * @see https://tailwindcss.com/docs/padding\n             */\n            py: [{ py: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Start\n             * @see https://tailwindcss.com/docs/padding\n             */\n            ps: [{ ps: scaleUnambiguousSpacing() }],\n            /**\n             * Padding End\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pe: [{ pe: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Top\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pt: [{ pt: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Right\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pr: [{ pr: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Bottom\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pb: [{ pb: scaleUnambiguousSpacing() }],\n            /**\n             * Padding Left\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pl: [{ pl: scaleUnambiguousSpacing() }],\n            /**\n             * Margin\n             * @see https://tailwindcss.com/docs/margin\n             */\n            m: [{ m: scaleMargin() }],\n            /**\n             * Margin X\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mx: [{ mx: scaleMargin() }],\n            /**\n             * Margin Y\n             * @see https://tailwindcss.com/docs/margin\n             */\n            my: [{ my: scaleMargin() }],\n            /**\n             * Margin Start\n             * @see https://tailwindcss.com/docs/margin\n             */\n            ms: [{ ms: scaleMargin() }],\n            /**\n             * Margin End\n             * @see https://tailwindcss.com/docs/margin\n             */\n            me: [{ me: scaleMargin() }],\n            /**\n             * Margin Top\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mt: [{ mt: scaleMargin() }],\n            /**\n             * Margin Right\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mr: [{ mr: scaleMargin() }],\n            /**\n             * Margin Bottom\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mb: [{ mb: scaleMargin() }],\n            /**\n             * Margin Left\n             * @see https://tailwindcss.com/docs/margin\n             */\n            ml: [{ ml: scaleMargin() }],\n            /**\n             * Space Between X\n             * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n             */\n            'space-x': [{ 'space-x': scaleUnambiguousSpacing() }],\n            /**\n             * Space Between X Reverse\n             * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n             */\n            'space-x-reverse': ['space-x-reverse'],\n            /**\n             * Space Between Y\n             * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n             */\n            'space-y': [{ 'space-y': scaleUnambiguousSpacing() }],\n            /**\n             * Space Between Y Reverse\n             * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n             */\n            'space-y-reverse': ['space-y-reverse'],\n\n            // --------------\n            // --- Sizing ---\n            // --------------\n\n            /**\n             * Size\n             * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n             */\n            size: [{ size: scaleSizing() }],\n            /**\n             * Width\n             * @see https://tailwindcss.com/docs/width\n             */\n            w: [{ w: [themeContainer, 'screen', ...scaleSizing()] }],\n            /**\n             * Min-Width\n             * @see https://tailwindcss.com/docs/min-width\n             */\n            'min-w': [\n                {\n                    'min-w': [\n                        themeContainer,\n                        'screen',\n                        /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n                        'none',\n                        ...scaleSizing(),\n                    ],\n                },\n            ],\n            /**\n             * Max-Width\n             * @see https://tailwindcss.com/docs/max-width\n             */\n            'max-w': [\n                {\n                    'max-w': [\n                        themeContainer,\n                        'screen',\n                        'none',\n                        /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n                        'prose',\n                        /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n                        { screen: [themeBreakpoint] },\n                        ...scaleSizing(),\n                    ],\n                },\n            ],\n            /**\n             * Height\n             * @see https://tailwindcss.com/docs/height\n             */\n            h: [{ h: ['screen', 'lh', ...scaleSizing()] }],\n            /**\n             * Min-Height\n             * @see https://tailwindcss.com/docs/min-height\n             */\n            'min-h': [{ 'min-h': ['screen', 'lh', 'none', ...scaleSizing()] }],\n            /**\n             * Max-Height\n             * @see https://tailwindcss.com/docs/max-height\n             */\n            'max-h': [{ 'max-h': ['screen', 'lh', ...scaleSizing()] }],\n\n            // ------------------\n            // --- Typography ---\n            // ------------------\n\n            /**\n             * Font Size\n             * @see https://tailwindcss.com/docs/font-size\n             */\n            'font-size': [\n                { text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength] },\n            ],\n            /**\n             * Font Smoothing\n             * @see https://tailwindcss.com/docs/font-smoothing\n             */\n            'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n            /**\n             * Font Style\n             * @see https://tailwindcss.com/docs/font-style\n             */\n            'font-style': ['italic', 'not-italic'],\n            /**\n             * Font Weight\n             * @see https://tailwindcss.com/docs/font-weight\n             */\n            'font-weight': [{ font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber] }],\n            /**\n             * Font Stretch\n             * @see https://tailwindcss.com/docs/font-stretch\n             */\n            'font-stretch': [\n                {\n                    'font-stretch': [\n                        'ultra-condensed',\n                        'extra-condensed',\n                        'condensed',\n                        'semi-condensed',\n                        'normal',\n                        'semi-expanded',\n                        'expanded',\n                        'extra-expanded',\n                        'ultra-expanded',\n                        isPercent,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Font Family\n             * @see https://tailwindcss.com/docs/font-family\n             */\n            'font-family': [{ font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont] }],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-normal': ['normal-nums'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-ordinal': ['ordinal'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-slashed-zero': ['slashed-zero'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n            /**\n             * Letter Spacing\n             * @see https://tailwindcss.com/docs/letter-spacing\n             */\n            tracking: [{ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Line Clamp\n             * @see https://tailwindcss.com/docs/line-clamp\n             */\n            'line-clamp': [\n                { 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber] },\n            ],\n            /**\n             * Line Height\n             * @see https://tailwindcss.com/docs/line-height\n             */\n            leading: [\n                {\n                    leading: [\n                        /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n                        themeLeading,\n                        ...scaleUnambiguousSpacing(),\n                    ],\n                },\n            ],\n            /**\n             * List Style Image\n             * @see https://tailwindcss.com/docs/list-style-image\n             */\n            'list-image': [{ 'list-image': ['none', isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * List Style Position\n             * @see https://tailwindcss.com/docs/list-style-position\n             */\n            'list-style-position': [{ list: ['inside', 'outside'] }],\n            /**\n             * List Style Type\n             * @see https://tailwindcss.com/docs/list-style-type\n             */\n            'list-style-type': [\n                { list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Text Alignment\n             * @see https://tailwindcss.com/docs/text-align\n             */\n            'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n            /**\n             * Placeholder Color\n             * @deprecated since Tailwind CSS v3.0.0\n             * @see https://v3.tailwindcss.com/docs/placeholder-color\n             */\n            'placeholder-color': [{ placeholder: scaleColor() }],\n            /**\n             * Text Color\n             * @see https://tailwindcss.com/docs/text-color\n             */\n            'text-color': [{ text: scaleColor() }],\n            /**\n             * Text Decoration\n             * @see https://tailwindcss.com/docs/text-decoration\n             */\n            'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n            /**\n             * Text Decoration Style\n             * @see https://tailwindcss.com/docs/text-decoration-style\n             */\n            'text-decoration-style': [{ decoration: [...scaleLineStyle(), 'wavy'] }],\n            /**\n             * Text Decoration Thickness\n             * @see https://tailwindcss.com/docs/text-decoration-thickness\n             */\n            'text-decoration-thickness': [\n                {\n                    decoration: [\n                        isNumber,\n                        'from-font',\n                        'auto',\n                        isArbitraryVariable,\n                        isArbitraryLength,\n                    ],\n                },\n            ],\n            /**\n             * Text Decoration Color\n             * @see https://tailwindcss.com/docs/text-decoration-color\n             */\n            'text-decoration-color': [{ decoration: scaleColor() }],\n            /**\n             * Text Underline Offset\n             * @see https://tailwindcss.com/docs/text-underline-offset\n             */\n            'underline-offset': [\n                { 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Text Transform\n             * @see https://tailwindcss.com/docs/text-transform\n             */\n            'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n            /**\n             * Text Overflow\n             * @see https://tailwindcss.com/docs/text-overflow\n             */\n            'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n            /**\n             * Text Wrap\n             * @see https://tailwindcss.com/docs/text-wrap\n             */\n            'text-wrap': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n            /**\n             * Text Indent\n             * @see https://tailwindcss.com/docs/text-indent\n             */\n            indent: [{ indent: scaleUnambiguousSpacing() }],\n            /**\n             * Vertical Alignment\n             * @see https://tailwindcss.com/docs/vertical-align\n             */\n            'vertical-align': [\n                {\n                    align: [\n                        'baseline',\n                        'top',\n                        'middle',\n                        'bottom',\n                        'text-top',\n                        'text-bottom',\n                        'sub',\n                        'super',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Whitespace\n             * @see https://tailwindcss.com/docs/whitespace\n             */\n            whitespace: [\n                { whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'] },\n            ],\n            /**\n             * Word Break\n             * @see https://tailwindcss.com/docs/word-break\n             */\n            break: [{ break: ['normal', 'words', 'all', 'keep'] }],\n            /**\n             * Overflow Wrap\n             * @see https://tailwindcss.com/docs/overflow-wrap\n             */\n            wrap: [{ wrap: ['break-word', 'anywhere', 'normal'] }],\n            /**\n             * Hyphens\n             * @see https://tailwindcss.com/docs/hyphens\n             */\n            hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n            /**\n             * Content\n             * @see https://tailwindcss.com/docs/content\n             */\n            content: [{ content: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n            // -------------------\n            // --- Backgrounds ---\n            // -------------------\n\n            /**\n             * Background Attachment\n             * @see https://tailwindcss.com/docs/background-attachment\n             */\n            'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n            /**\n             * Background Clip\n             * @see https://tailwindcss.com/docs/background-clip\n             */\n            'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n            /**\n             * Background Origin\n             * @see https://tailwindcss.com/docs/background-origin\n             */\n            'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n            /**\n             * Background Position\n             * @see https://tailwindcss.com/docs/background-position\n             */\n            'bg-position': [{ bg: scaleBgPosition() }],\n            /**\n             * Background Repeat\n             * @see https://tailwindcss.com/docs/background-repeat\n             */\n            'bg-repeat': [{ bg: scaleBgRepeat() }],\n            /**\n             * Background Size\n             * @see https://tailwindcss.com/docs/background-size\n             */\n            'bg-size': [{ bg: scaleBgSize() }],\n            /**\n             * Background Image\n             * @see https://tailwindcss.com/docs/background-image\n             */\n            'bg-image': [\n                {\n                    bg: [\n                        'none',\n                        {\n                            linear: [\n                                { to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n                                isInteger,\n                                isArbitraryVariable,\n                                isArbitraryValue,\n                            ],\n                            radial: ['', isArbitraryVariable, isArbitraryValue],\n                            conic: [isInteger, isArbitraryVariable, isArbitraryValue],\n                        },\n                        isArbitraryVariableImage,\n                        isArbitraryImage,\n                    ],\n                },\n            ],\n            /**\n             * Background Color\n             * @see https://tailwindcss.com/docs/background-color\n             */\n            'bg-color': [{ bg: scaleColor() }],\n            /**\n             * Gradient Color Stops From Position\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-from-pos': [{ from: scaleGradientStopPosition() }],\n            /**\n             * Gradient Color Stops Via Position\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-via-pos': [{ via: scaleGradientStopPosition() }],\n            /**\n             * Gradient Color Stops To Position\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-to-pos': [{ to: scaleGradientStopPosition() }],\n            /**\n             * Gradient Color Stops From\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-from': [{ from: scaleColor() }],\n            /**\n             * Gradient Color Stops Via\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-via': [{ via: scaleColor() }],\n            /**\n             * Gradient Color Stops To\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-to': [{ to: scaleColor() }],\n\n            // ---------------\n            // --- Borders ---\n            // ---------------\n\n            /**\n             * Border Radius\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            rounded: [{ rounded: scaleRadius() }],\n            /**\n             * Border Radius Start\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-s': [{ 'rounded-s': scaleRadius() }],\n            /**\n             * Border Radius End\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-e': [{ 'rounded-e': scaleRadius() }],\n            /**\n             * Border Radius Top\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-t': [{ 'rounded-t': scaleRadius() }],\n            /**\n             * Border Radius Right\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-r': [{ 'rounded-r': scaleRadius() }],\n            /**\n             * Border Radius Bottom\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-b': [{ 'rounded-b': scaleRadius() }],\n            /**\n             * Border Radius Left\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-l': [{ 'rounded-l': scaleRadius() }],\n            /**\n             * Border Radius Start Start\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-ss': [{ 'rounded-ss': scaleRadius() }],\n            /**\n             * Border Radius Start End\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-se': [{ 'rounded-se': scaleRadius() }],\n            /**\n             * Border Radius End End\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-ee': [{ 'rounded-ee': scaleRadius() }],\n            /**\n             * Border Radius End Start\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-es': [{ 'rounded-es': scaleRadius() }],\n            /**\n             * Border Radius Top Left\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-tl': [{ 'rounded-tl': scaleRadius() }],\n            /**\n             * Border Radius Top Right\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-tr': [{ 'rounded-tr': scaleRadius() }],\n            /**\n             * Border Radius Bottom Right\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-br': [{ 'rounded-br': scaleRadius() }],\n            /**\n             * Border Radius Bottom Left\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-bl': [{ 'rounded-bl': scaleRadius() }],\n            /**\n             * Border Width\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w': [{ border: scaleBorderWidth() }],\n            /**\n             * Border Width X\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-x': [{ 'border-x': scaleBorderWidth() }],\n            /**\n             * Border Width Y\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-y': [{ 'border-y': scaleBorderWidth() }],\n            /**\n             * Border Width Start\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-s': [{ 'border-s': scaleBorderWidth() }],\n            /**\n             * Border Width End\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-e': [{ 'border-e': scaleBorderWidth() }],\n            /**\n             * Border Width Top\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-t': [{ 'border-t': scaleBorderWidth() }],\n            /**\n             * Border Width Right\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-r': [{ 'border-r': scaleBorderWidth() }],\n            /**\n             * Border Width Bottom\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-b': [{ 'border-b': scaleBorderWidth() }],\n            /**\n             * Border Width Left\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-l': [{ 'border-l': scaleBorderWidth() }],\n            /**\n             * Divide Width X\n             * @see https://tailwindcss.com/docs/border-width#between-children\n             */\n            'divide-x': [{ 'divide-x': scaleBorderWidth() }],\n            /**\n             * Divide Width X Reverse\n             * @see https://tailwindcss.com/docs/border-width#between-children\n             */\n            'divide-x-reverse': ['divide-x-reverse'],\n            /**\n             * Divide Width Y\n             * @see https://tailwindcss.com/docs/border-width#between-children\n             */\n            'divide-y': [{ 'divide-y': scaleBorderWidth() }],\n            /**\n             * Divide Width Y Reverse\n             * @see https://tailwindcss.com/docs/border-width#between-children\n             */\n            'divide-y-reverse': ['divide-y-reverse'],\n            /**\n             * Border Style\n             * @see https://tailwindcss.com/docs/border-style\n             */\n            'border-style': [{ border: [...scaleLineStyle(), 'hidden', 'none'] }],\n            /**\n             * Divide Style\n             * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n             */\n            'divide-style': [{ divide: [...scaleLineStyle(), 'hidden', 'none'] }],\n            /**\n             * Border Color\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color': [{ border: scaleColor() }],\n            /**\n             * Border Color X\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-x': [{ 'border-x': scaleColor() }],\n            /**\n             * Border Color Y\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-y': [{ 'border-y': scaleColor() }],\n            /**\n             * Border Color S\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-s': [{ 'border-s': scaleColor() }],\n            /**\n             * Border Color E\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-e': [{ 'border-e': scaleColor() }],\n            /**\n             * Border Color Top\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-t': [{ 'border-t': scaleColor() }],\n            /**\n             * Border Color Right\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-r': [{ 'border-r': scaleColor() }],\n            /**\n             * Border Color Bottom\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-b': [{ 'border-b': scaleColor() }],\n            /**\n             * Border Color Left\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-l': [{ 'border-l': scaleColor() }],\n            /**\n             * Divide Color\n             * @see https://tailwindcss.com/docs/divide-color\n             */\n            'divide-color': [{ divide: scaleColor() }],\n            /**\n             * Outline Style\n             * @see https://tailwindcss.com/docs/outline-style\n             */\n            'outline-style': [{ outline: [...scaleLineStyle(), 'none', 'hidden'] }],\n            /**\n             * Outline Offset\n             * @see https://tailwindcss.com/docs/outline-offset\n             */\n            'outline-offset': [\n                { 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Outline Width\n             * @see https://tailwindcss.com/docs/outline-width\n             */\n            'outline-w': [\n                { outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength] },\n            ],\n            /**\n             * Outline Color\n             * @see https://tailwindcss.com/docs/outline-color\n             */\n            'outline-color': [{ outline: scaleColor() }],\n\n            // ---------------\n            // --- Effects ---\n            // ---------------\n\n            /**\n             * Box Shadow\n             * @see https://tailwindcss.com/docs/box-shadow\n             */\n            shadow: [\n                {\n                    shadow: [\n                        // Deprecated since Tailwind CSS v4.0.0\n                        '',\n                        'none',\n                        themeShadow,\n                        isArbitraryVariableShadow,\n                        isArbitraryShadow,\n                    ],\n                },\n            ],\n            /**\n             * Box Shadow Color\n             * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n             */\n            'shadow-color': [{ shadow: scaleColor() }],\n            /**\n             * Inset Box Shadow\n             * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n             */\n            'inset-shadow': [\n                {\n                    'inset-shadow': [\n                        'none',\n                        themeInsetShadow,\n                        isArbitraryVariableShadow,\n                        isArbitraryShadow,\n                    ],\n                },\n            ],\n            /**\n             * Inset Box Shadow Color\n             * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n             */\n            'inset-shadow-color': [{ 'inset-shadow': scaleColor() }],\n            /**\n             * Ring Width\n             * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n             */\n            'ring-w': [{ ring: scaleBorderWidth() }],\n            /**\n             * Ring Width Inset\n             * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n             * @deprecated since Tailwind CSS v4.0.0\n             * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n             */\n            'ring-w-inset': ['ring-inset'],\n            /**\n             * Ring Color\n             * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n             */\n            'ring-color': [{ ring: scaleColor() }],\n            /**\n             * Ring Offset Width\n             * @see https://v3.tailwindcss.com/docs/ring-offset-width\n             * @deprecated since Tailwind CSS v4.0.0\n             * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n             */\n            'ring-offset-w': [{ 'ring-offset': [isNumber, isArbitraryLength] }],\n            /**\n             * Ring Offset Color\n             * @see https://v3.tailwindcss.com/docs/ring-offset-color\n             * @deprecated since Tailwind CSS v4.0.0\n             * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n             */\n            'ring-offset-color': [{ 'ring-offset': scaleColor() }],\n            /**\n             * Inset Ring Width\n             * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n             */\n            'inset-ring-w': [{ 'inset-ring': scaleBorderWidth() }],\n            /**\n             * Inset Ring Color\n             * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n             */\n            'inset-ring-color': [{ 'inset-ring': scaleColor() }],\n            /**\n             * Text Shadow\n             * @see https://tailwindcss.com/docs/text-shadow\n             */\n            'text-shadow': [\n                {\n                    'text-shadow': [\n                        'none',\n                        themeTextShadow,\n                        isArbitraryVariableShadow,\n                        isArbitraryShadow,\n                    ],\n                },\n            ],\n            /**\n             * Text Shadow Color\n             * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n             */\n            'text-shadow-color': [{ 'text-shadow': scaleColor() }],\n            /**\n             * Opacity\n             * @see https://tailwindcss.com/docs/opacity\n             */\n            opacity: [{ opacity: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Mix Blend Mode\n             * @see https://tailwindcss.com/docs/mix-blend-mode\n             */\n            'mix-blend': [{ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter'] }],\n            /**\n             * Background Blend Mode\n             * @see https://tailwindcss.com/docs/background-blend-mode\n             */\n            'bg-blend': [{ 'bg-blend': scaleBlendMode() }],\n            /**\n             * Mask Clip\n             * @see https://tailwindcss.com/docs/mask-clip\n             */\n            'mask-clip': [\n                { 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n                'mask-no-clip',\n            ],\n            /**\n             * Mask Composite\n             * @see https://tailwindcss.com/docs/mask-composite\n             */\n            'mask-composite': [{ mask: ['add', 'subtract', 'intersect', 'exclude'] }],\n            /**\n             * Mask Image\n             * @see https://tailwindcss.com/docs/mask-image\n             */\n            'mask-image-linear-pos': [{ 'mask-linear': [isNumber] }],\n            'mask-image-linear-from-pos': [{ 'mask-linear-from': scaleMaskImagePosition() }],\n            'mask-image-linear-to-pos': [{ 'mask-linear-to': scaleMaskImagePosition() }],\n            'mask-image-linear-from-color': [{ 'mask-linear-from': scaleColor() }],\n            'mask-image-linear-to-color': [{ 'mask-linear-to': scaleColor() }],\n            'mask-image-t-from-pos': [{ 'mask-t-from': scaleMaskImagePosition() }],\n            'mask-image-t-to-pos': [{ 'mask-t-to': scaleMaskImagePosition() }],\n            'mask-image-t-from-color': [{ 'mask-t-from': scaleColor() }],\n            'mask-image-t-to-color': [{ 'mask-t-to': scaleColor() }],\n            'mask-image-r-from-pos': [{ 'mask-r-from': scaleMaskImagePosition() }],\n            'mask-image-r-to-pos': [{ 'mask-r-to': scaleMaskImagePosition() }],\n            'mask-image-r-from-color': [{ 'mask-r-from': scaleColor() }],\n            'mask-image-r-to-color': [{ 'mask-r-to': scaleColor() }],\n            'mask-image-b-from-pos': [{ 'mask-b-from': scaleMaskImagePosition() }],\n            'mask-image-b-to-pos': [{ 'mask-b-to': scaleMaskImagePosition() }],\n            'mask-image-b-from-color': [{ 'mask-b-from': scaleColor() }],\n            'mask-image-b-to-color': [{ 'mask-b-to': scaleColor() }],\n            'mask-image-l-from-pos': [{ 'mask-l-from': scaleMaskImagePosition() }],\n            'mask-image-l-to-pos': [{ 'mask-l-to': scaleMaskImagePosition() }],\n            'mask-image-l-from-color': [{ 'mask-l-from': scaleColor() }],\n            'mask-image-l-to-color': [{ 'mask-l-to': scaleColor() }],\n            'mask-image-x-from-pos': [{ 'mask-x-from': scaleMaskImagePosition() }],\n            'mask-image-x-to-pos': [{ 'mask-x-to': scaleMaskImagePosition() }],\n            'mask-image-x-from-color': [{ 'mask-x-from': scaleColor() }],\n            'mask-image-x-to-color': [{ 'mask-x-to': scaleColor() }],\n            'mask-image-y-from-pos': [{ 'mask-y-from': scaleMaskImagePosition() }],\n            'mask-image-y-to-pos': [{ 'mask-y-to': scaleMaskImagePosition() }],\n            'mask-image-y-from-color': [{ 'mask-y-from': scaleColor() }],\n            'mask-image-y-to-color': [{ 'mask-y-to': scaleColor() }],\n            'mask-image-radial': [{ 'mask-radial': [isArbitraryVariable, isArbitraryValue] }],\n            'mask-image-radial-from-pos': [{ 'mask-radial-from': scaleMaskImagePosition() }],\n            'mask-image-radial-to-pos': [{ 'mask-radial-to': scaleMaskImagePosition() }],\n            'mask-image-radial-from-color': [{ 'mask-radial-from': scaleColor() }],\n            'mask-image-radial-to-color': [{ 'mask-radial-to': scaleColor() }],\n            'mask-image-radial-shape': [{ 'mask-radial': ['circle', 'ellipse'] }],\n            'mask-image-radial-size': [\n                { 'mask-radial': [{ closest: ['side', 'corner'], farthest: ['side', 'corner'] }] },\n            ],\n            'mask-image-radial-pos': [{ 'mask-radial-at': scalePosition() }],\n            'mask-image-conic-pos': [{ 'mask-conic': [isNumber] }],\n            'mask-image-conic-from-pos': [{ 'mask-conic-from': scaleMaskImagePosition() }],\n            'mask-image-conic-to-pos': [{ 'mask-conic-to': scaleMaskImagePosition() }],\n            'mask-image-conic-from-color': [{ 'mask-conic-from': scaleColor() }],\n            'mask-image-conic-to-color': [{ 'mask-conic-to': scaleColor() }],\n            /**\n             * Mask Mode\n             * @see https://tailwindcss.com/docs/mask-mode\n             */\n            'mask-mode': [{ mask: ['alpha', 'luminance', 'match'] }],\n            /**\n             * Mask Origin\n             * @see https://tailwindcss.com/docs/mask-origin\n             */\n            'mask-origin': [\n                { 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n            ],\n            /**\n             * Mask Position\n             * @see https://tailwindcss.com/docs/mask-position\n             */\n            'mask-position': [{ mask: scaleBgPosition() }],\n            /**\n             * Mask Repeat\n             * @see https://tailwindcss.com/docs/mask-repeat\n             */\n            'mask-repeat': [{ mask: scaleBgRepeat() }],\n            /**\n             * Mask Size\n             * @see https://tailwindcss.com/docs/mask-size\n             */\n            'mask-size': [{ mask: scaleBgSize() }],\n            /**\n             * Mask Type\n             * @see https://tailwindcss.com/docs/mask-type\n             */\n            'mask-type': [{ 'mask-type': ['alpha', 'luminance'] }],\n            /**\n             * Mask Image\n             * @see https://tailwindcss.com/docs/mask-image\n             */\n            'mask-image': [{ mask: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n            // ---------------\n            // --- Filters ---\n            // ---------------\n\n            /**\n             * Filter\n             * @see https://tailwindcss.com/docs/filter\n             */\n            filter: [\n                {\n                    filter: [\n                        // Deprecated since Tailwind CSS v3.0.0\n                        '',\n                        'none',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Blur\n             * @see https://tailwindcss.com/docs/blur\n             */\n            blur: [{ blur: scaleBlur() }],\n            /**\n             * Brightness\n             * @see https://tailwindcss.com/docs/brightness\n             */\n            brightness: [{ brightness: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Contrast\n             * @see https://tailwindcss.com/docs/contrast\n             */\n            contrast: [{ contrast: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Drop Shadow\n             * @see https://tailwindcss.com/docs/drop-shadow\n             */\n            'drop-shadow': [\n                {\n                    'drop-shadow': [\n                        // Deprecated since Tailwind CSS v4.0.0\n                        '',\n                        'none',\n                        themeDropShadow,\n                        isArbitraryVariableShadow,\n                        isArbitraryShadow,\n                    ],\n                },\n            ],\n            /**\n             * Drop Shadow Color\n             * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n             */\n            'drop-shadow-color': [{ 'drop-shadow': scaleColor() }],\n            /**\n             * Grayscale\n             * @see https://tailwindcss.com/docs/grayscale\n             */\n            grayscale: [{ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Hue Rotate\n             * @see https://tailwindcss.com/docs/hue-rotate\n             */\n            'hue-rotate': [{ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Invert\n             * @see https://tailwindcss.com/docs/invert\n             */\n            invert: [{ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Saturate\n             * @see https://tailwindcss.com/docs/saturate\n             */\n            saturate: [{ saturate: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Sepia\n             * @see https://tailwindcss.com/docs/sepia\n             */\n            sepia: [{ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Backdrop Filter\n             * @see https://tailwindcss.com/docs/backdrop-filter\n             */\n            'backdrop-filter': [\n                {\n                    'backdrop-filter': [\n                        // Deprecated since Tailwind CSS v3.0.0\n                        '',\n                        'none',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Backdrop Blur\n             * @see https://tailwindcss.com/docs/backdrop-blur\n             */\n            'backdrop-blur': [{ 'backdrop-blur': scaleBlur() }],\n            /**\n             * Backdrop Brightness\n             * @see https://tailwindcss.com/docs/backdrop-brightness\n             */\n            'backdrop-brightness': [\n                { 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Contrast\n             * @see https://tailwindcss.com/docs/backdrop-contrast\n             */\n            'backdrop-contrast': [\n                { 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Grayscale\n             * @see https://tailwindcss.com/docs/backdrop-grayscale\n             */\n            'backdrop-grayscale': [\n                { 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Hue Rotate\n             * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n             */\n            'backdrop-hue-rotate': [\n                { 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Invert\n             * @see https://tailwindcss.com/docs/backdrop-invert\n             */\n            'backdrop-invert': [\n                { 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Opacity\n             * @see https://tailwindcss.com/docs/backdrop-opacity\n             */\n            'backdrop-opacity': [\n                { 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Saturate\n             * @see https://tailwindcss.com/docs/backdrop-saturate\n             */\n            'backdrop-saturate': [\n                { 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Backdrop Sepia\n             * @see https://tailwindcss.com/docs/backdrop-sepia\n             */\n            'backdrop-sepia': [\n                { 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n            ],\n\n            // --------------\n            // --- Tables ---\n            // --------------\n\n            /**\n             * Border Collapse\n             * @see https://tailwindcss.com/docs/border-collapse\n             */\n            'border-collapse': [{ border: ['collapse', 'separate'] }],\n            /**\n             * Border Spacing\n             * @see https://tailwindcss.com/docs/border-spacing\n             */\n            'border-spacing': [{ 'border-spacing': scaleUnambiguousSpacing() }],\n            /**\n             * Border Spacing X\n             * @see https://tailwindcss.com/docs/border-spacing\n             */\n            'border-spacing-x': [{ 'border-spacing-x': scaleUnambiguousSpacing() }],\n            /**\n             * Border Spacing Y\n             * @see https://tailwindcss.com/docs/border-spacing\n             */\n            'border-spacing-y': [{ 'border-spacing-y': scaleUnambiguousSpacing() }],\n            /**\n             * Table Layout\n             * @see https://tailwindcss.com/docs/table-layout\n             */\n            'table-layout': [{ table: ['auto', 'fixed'] }],\n            /**\n             * Caption Side\n             * @see https://tailwindcss.com/docs/caption-side\n             */\n            caption: [{ caption: ['top', 'bottom'] }],\n\n            // ---------------------------------\n            // --- Transitions and Animation ---\n            // ---------------------------------\n\n            /**\n             * Transition Property\n             * @see https://tailwindcss.com/docs/transition-property\n             */\n            transition: [\n                {\n                    transition: [\n                        '',\n                        'all',\n                        'colors',\n                        'opacity',\n                        'shadow',\n                        'transform',\n                        'none',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Transition Behavior\n             * @see https://tailwindcss.com/docs/transition-behavior\n             */\n            'transition-behavior': [{ transition: ['normal', 'discrete'] }],\n            /**\n             * Transition Duration\n             * @see https://tailwindcss.com/docs/transition-duration\n             */\n            duration: [{ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Transition Timing Function\n             * @see https://tailwindcss.com/docs/transition-timing-function\n             */\n            ease: [\n                { ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Transition Delay\n             * @see https://tailwindcss.com/docs/transition-delay\n             */\n            delay: [{ delay: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n            /**\n             * Animation\n             * @see https://tailwindcss.com/docs/animation\n             */\n            animate: [{ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue] }],\n\n            // ------------------\n            // --- Transforms ---\n            // ------------------\n\n            /**\n             * Backface Visibility\n             * @see https://tailwindcss.com/docs/backface-visibility\n             */\n            backface: [{ backface: ['hidden', 'visible'] }],\n            /**\n             * Perspective\n             * @see https://tailwindcss.com/docs/perspective\n             */\n            perspective: [\n                { perspective: [themePerspective, isArbitraryVariable, isArbitraryValue] },\n            ],\n            /**\n             * Perspective Origin\n             * @see https://tailwindcss.com/docs/perspective-origin\n             */\n            'perspective-origin': [{ 'perspective-origin': scalePositionWithArbitrary() }],\n            /**\n             * Rotate\n             * @see https://tailwindcss.com/docs/rotate\n             */\n            rotate: [{ rotate: scaleRotate() }],\n            /**\n             * Rotate X\n             * @see https://tailwindcss.com/docs/rotate\n             */\n            'rotate-x': [{ 'rotate-x': scaleRotate() }],\n            /**\n             * Rotate Y\n             * @see https://tailwindcss.com/docs/rotate\n             */\n            'rotate-y': [{ 'rotate-y': scaleRotate() }],\n            /**\n             * Rotate Z\n             * @see https://tailwindcss.com/docs/rotate\n             */\n            'rotate-z': [{ 'rotate-z': scaleRotate() }],\n            /**\n             * Scale\n             * @see https://tailwindcss.com/docs/scale\n             */\n            scale: [{ scale: scaleScale() }],\n            /**\n             * Scale X\n             * @see https://tailwindcss.com/docs/scale\n             */\n            'scale-x': [{ 'scale-x': scaleScale() }],\n            /**\n             * Scale Y\n             * @see https://tailwindcss.com/docs/scale\n             */\n            'scale-y': [{ 'scale-y': scaleScale() }],\n            /**\n             * Scale Z\n             * @see https://tailwindcss.com/docs/scale\n             */\n            'scale-z': [{ 'scale-z': scaleScale() }],\n            /**\n             * Scale 3D\n             * @see https://tailwindcss.com/docs/scale\n             */\n            'scale-3d': ['scale-3d'],\n            /**\n             * Skew\n             * @see https://tailwindcss.com/docs/skew\n             */\n            skew: [{ skew: scaleSkew() }],\n            /**\n             * Skew X\n             * @see https://tailwindcss.com/docs/skew\n             */\n            'skew-x': [{ 'skew-x': scaleSkew() }],\n            /**\n             * Skew Y\n             * @see https://tailwindcss.com/docs/skew\n             */\n            'skew-y': [{ 'skew-y': scaleSkew() }],\n            /**\n             * Transform\n             * @see https://tailwindcss.com/docs/transform\n             */\n            transform: [\n                { transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu'] },\n            ],\n            /**\n             * Transform Origin\n             * @see https://tailwindcss.com/docs/transform-origin\n             */\n            'transform-origin': [{ origin: scalePositionWithArbitrary() }],\n            /**\n             * Transform Style\n             * @see https://tailwindcss.com/docs/transform-style\n             */\n            'transform-style': [{ transform: ['3d', 'flat'] }],\n            /**\n             * Translate\n             * @see https://tailwindcss.com/docs/translate\n             */\n            translate: [{ translate: scaleTranslate() }],\n            /**\n             * Translate X\n             * @see https://tailwindcss.com/docs/translate\n             */\n            'translate-x': [{ 'translate-x': scaleTranslate() }],\n            /**\n             * Translate Y\n             * @see https://tailwindcss.com/docs/translate\n             */\n            'translate-y': [{ 'translate-y': scaleTranslate() }],\n            /**\n             * Translate Z\n             * @see https://tailwindcss.com/docs/translate\n             */\n            'translate-z': [{ 'translate-z': scaleTranslate() }],\n            /**\n             * Translate None\n             * @see https://tailwindcss.com/docs/translate\n             */\n            'translate-none': ['translate-none'],\n\n            // ---------------------\n            // --- Interactivity ---\n            // ---------------------\n\n            /**\n             * Accent Color\n             * @see https://tailwindcss.com/docs/accent-color\n             */\n            accent: [{ accent: scaleColor() }],\n            /**\n             * Appearance\n             * @see https://tailwindcss.com/docs/appearance\n             */\n            appearance: [{ appearance: ['none', 'auto'] }],\n            /**\n             * Caret Color\n             * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n             */\n            'caret-color': [{ caret: scaleColor() }],\n            /**\n             * Color Scheme\n             * @see https://tailwindcss.com/docs/color-scheme\n             */\n            'color-scheme': [\n                { scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light'] },\n            ],\n            /**\n             * Cursor\n             * @see https://tailwindcss.com/docs/cursor\n             */\n            cursor: [\n                {\n                    cursor: [\n                        'auto',\n                        'default',\n                        'pointer',\n                        'wait',\n                        'text',\n                        'move',\n                        'help',\n                        'not-allowed',\n                        'none',\n                        'context-menu',\n                        'progress',\n                        'cell',\n                        'crosshair',\n                        'vertical-text',\n                        'alias',\n                        'copy',\n                        'no-drop',\n                        'grab',\n                        'grabbing',\n                        'all-scroll',\n                        'col-resize',\n                        'row-resize',\n                        'n-resize',\n                        'e-resize',\n                        's-resize',\n                        'w-resize',\n                        'ne-resize',\n                        'nw-resize',\n                        'se-resize',\n                        'sw-resize',\n                        'ew-resize',\n                        'ns-resize',\n                        'nesw-resize',\n                        'nwse-resize',\n                        'zoom-in',\n                        'zoom-out',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Field Sizing\n             * @see https://tailwindcss.com/docs/field-sizing\n             */\n            'field-sizing': [{ 'field-sizing': ['fixed', 'content'] }],\n            /**\n             * Pointer Events\n             * @see https://tailwindcss.com/docs/pointer-events\n             */\n            'pointer-events': [{ 'pointer-events': ['auto', 'none'] }],\n            /**\n             * Resize\n             * @see https://tailwindcss.com/docs/resize\n             */\n            resize: [{ resize: ['none', '', 'y', 'x'] }],\n            /**\n             * Scroll Behavior\n             * @see https://tailwindcss.com/docs/scroll-behavior\n             */\n            'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n            /**\n             * Scroll Margin\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-m': [{ 'scroll-m': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin X\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mx': [{ 'scroll-mx': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Y\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-my': [{ 'scroll-my': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Start\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-ms': [{ 'scroll-ms': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin End\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-me': [{ 'scroll-me': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Top\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mt': [{ 'scroll-mt': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Right\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mr': [{ 'scroll-mr': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Bottom\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mb': [{ 'scroll-mb': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Margin Left\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-ml': [{ 'scroll-ml': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-p': [{ 'scroll-p': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding X\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-px': [{ 'scroll-px': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Y\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-py': [{ 'scroll-py': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Start\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-ps': [{ 'scroll-ps': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding End\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pe': [{ 'scroll-pe': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Top\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pt': [{ 'scroll-pt': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Right\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pr': [{ 'scroll-pr': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Bottom\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pb': [{ 'scroll-pb': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Padding Left\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pl': [{ 'scroll-pl': scaleUnambiguousSpacing() }],\n            /**\n             * Scroll Snap Align\n             * @see https://tailwindcss.com/docs/scroll-snap-align\n             */\n            'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n            /**\n             * Scroll Snap Stop\n             * @see https://tailwindcss.com/docs/scroll-snap-stop\n             */\n            'snap-stop': [{ snap: ['normal', 'always'] }],\n            /**\n             * Scroll Snap Type\n             * @see https://tailwindcss.com/docs/scroll-snap-type\n             */\n            'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n            /**\n             * Scroll Snap Type Strictness\n             * @see https://tailwindcss.com/docs/scroll-snap-type\n             */\n            'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n            /**\n             * Touch Action\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            touch: [{ touch: ['auto', 'none', 'manipulation'] }],\n            /**\n             * Touch Action X\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            'touch-x': [{ 'touch-pan': ['x', 'left', 'right'] }],\n            /**\n             * Touch Action Y\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            'touch-y': [{ 'touch-pan': ['y', 'up', 'down'] }],\n            /**\n             * Touch Action Pinch Zoom\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            'touch-pz': ['touch-pinch-zoom'],\n            /**\n             * User Select\n             * @see https://tailwindcss.com/docs/user-select\n             */\n            select: [{ select: ['none', 'text', 'all', 'auto'] }],\n            /**\n             * Will Change\n             * @see https://tailwindcss.com/docs/will-change\n             */\n            'will-change': [\n                {\n                    'will-change': [\n                        'auto',\n                        'scroll',\n                        'contents',\n                        'transform',\n                        isArbitraryVariable,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n\n            // -----------\n            // --- SVG ---\n            // -----------\n\n            /**\n             * Fill\n             * @see https://tailwindcss.com/docs/fill\n             */\n            fill: [{ fill: ['none', ...scaleColor()] }],\n            /**\n             * Stroke Width\n             * @see https://tailwindcss.com/docs/stroke-width\n             */\n            'stroke-w': [\n                {\n                    stroke: [\n                        isNumber,\n                        isArbitraryVariableLength,\n                        isArbitraryLength,\n                        isArbitraryNumber,\n                    ],\n                },\n            ],\n            /**\n             * Stroke\n             * @see https://tailwindcss.com/docs/stroke\n             */\n            stroke: [{ stroke: ['none', ...scaleColor()] }],\n\n            // ---------------------\n            // --- Accessibility ---\n            // ---------------------\n\n            /**\n             * Forced Color Adjust\n             * @see https://tailwindcss.com/docs/forced-color-adjust\n             */\n            'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n        },\n        conflictingClassGroups: {\n            overflow: ['overflow-x', 'overflow-y'],\n            overscroll: ['overscroll-x', 'overscroll-y'],\n            inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n            'inset-x': ['right', 'left'],\n            'inset-y': ['top', 'bottom'],\n            flex: ['basis', 'grow', 'shrink'],\n            gap: ['gap-x', 'gap-y'],\n            p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n            px: ['pr', 'pl'],\n            py: ['pt', 'pb'],\n            m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n            mx: ['mr', 'ml'],\n            my: ['mt', 'mb'],\n            size: ['w', 'h'],\n            'font-size': ['leading'],\n            'fvn-normal': [\n                'fvn-ordinal',\n                'fvn-slashed-zero',\n                'fvn-figure',\n                'fvn-spacing',\n                'fvn-fraction',\n            ],\n            'fvn-ordinal': ['fvn-normal'],\n            'fvn-slashed-zero': ['fvn-normal'],\n            'fvn-figure': ['fvn-normal'],\n            'fvn-spacing': ['fvn-normal'],\n            'fvn-fraction': ['fvn-normal'],\n            'line-clamp': ['display', 'overflow'],\n            rounded: [\n                'rounded-s',\n                'rounded-e',\n                'rounded-t',\n                'rounded-r',\n                'rounded-b',\n                'rounded-l',\n                'rounded-ss',\n                'rounded-se',\n                'rounded-ee',\n                'rounded-es',\n                'rounded-tl',\n                'rounded-tr',\n                'rounded-br',\n                'rounded-bl',\n            ],\n            'rounded-s': ['rounded-ss', 'rounded-es'],\n            'rounded-e': ['rounded-se', 'rounded-ee'],\n            'rounded-t': ['rounded-tl', 'rounded-tr'],\n            'rounded-r': ['rounded-tr', 'rounded-br'],\n            'rounded-b': ['rounded-br', 'rounded-bl'],\n            'rounded-l': ['rounded-tl', 'rounded-bl'],\n            'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n            'border-w': [\n                'border-w-x',\n                'border-w-y',\n                'border-w-s',\n                'border-w-e',\n                'border-w-t',\n                'border-w-r',\n                'border-w-b',\n                'border-w-l',\n            ],\n            'border-w-x': ['border-w-r', 'border-w-l'],\n            'border-w-y': ['border-w-t', 'border-w-b'],\n            'border-color': [\n                'border-color-x',\n                'border-color-y',\n                'border-color-s',\n                'border-color-e',\n                'border-color-t',\n                'border-color-r',\n                'border-color-b',\n                'border-color-l',\n            ],\n            'border-color-x': ['border-color-r', 'border-color-l'],\n            'border-color-y': ['border-color-t', 'border-color-b'],\n            translate: ['translate-x', 'translate-y', 'translate-none'],\n            'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n            'scroll-m': [\n                'scroll-mx',\n                'scroll-my',\n                'scroll-ms',\n                'scroll-me',\n                'scroll-mt',\n                'scroll-mr',\n                'scroll-mb',\n                'scroll-ml',\n            ],\n            'scroll-mx': ['scroll-mr', 'scroll-ml'],\n            'scroll-my': ['scroll-mt', 'scroll-mb'],\n            'scroll-p': [\n                'scroll-px',\n                'scroll-py',\n                'scroll-ps',\n                'scroll-pe',\n                'scroll-pt',\n                'scroll-pr',\n                'scroll-pb',\n                'scroll-pl',\n            ],\n            'scroll-px': ['scroll-pr', 'scroll-pl'],\n            'scroll-py': ['scroll-pt', 'scroll-pb'],\n            touch: ['touch-x', 'touch-y', 'touch-pz'],\n            'touch-x': ['touch'],\n            'touch-y': ['touch'],\n            'touch-pz': ['touch'],\n        },\n        conflictingClassGroupModifiers: {\n            'font-size': ['leading'],\n        },\n        orderSensitiveModifiers: [\n            '*',\n            '**',\n            'after',\n            'backdrop',\n            'before',\n            'details-content',\n            'file',\n            'first-letter',\n            'first-line',\n            'marker',\n            'placeholder',\n            'selection',\n        ],\n    } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n    return twMerge(clsx(inputs));\n}\n\nexport function toArray<T>(v: T | T[] | null | undefined): T[] {\n    if (v == null) return [];\n    return Array.isArray(v) ? v : [v];\n}","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Separator({\n  className,\n  orientation = \"horizontal\",\n  decorative = true,\n  ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n  return (\n    <SeparatorPrimitive.Root\n      data-slot=\"separator\"\n      decorative={decorative}\n      orientation={orientation}\n      className={cn(\n        \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport { Separator }\n","// src/variants/registry.ts\n\nimport type { VariantKey, VariantModule } from \"@/schema/variant\";\n\n/**\n * Internal storage for registered variants.\n */\nconst registry = new Map<VariantKey, VariantModule<any>>();\n\n/**\n * Register (or overwrite) a variant module.\n *\n * Typically called from presets, e.g.:\n *\n *   registerVariant(textVariant);\n *   registerVariant(numberVariant);\n */\nexport function registerVariant<K extends VariantKey>(\n    module: VariantModule<K>\n): void {\n    registry.set(module.variant, module as VariantModule<any>);\n}\n\n/**\n * Look up a variant module by key.\n */\nexport function getVariant<K extends VariantKey>(\n    key: K\n): VariantModule<K> | undefined {\n    return registry.get(key) as VariantModule<K> | undefined;\n}\n\n/**\n * List all registered variant modules.\n */\nexport function listVariants(): VariantModule<VariantKey>[] {\n    return Array.from(registry.values()) as VariantModule<VariantKey>[];\n}\n","import * as React from \"react\";\r\n\r\nexport interface InputMaskChangeEvent {\r\n   originalEvent: React.SyntheticEvent<HTMLInputElement> | Event | undefined;\r\n   value: string;\r\n   stopPropagation(): void;\r\n   preventDefault(): void;\r\n   target: {\r\n      name?: string;\r\n      id?: string;\r\n      value: string;\r\n   };\r\n}\r\n\r\nexport interface InputMaskCompleteEvent {\r\n   originalEvent: React.SyntheticEvent<HTMLInputElement> | Event;\r\n   value: string;\r\n}\r\n\r\nexport interface InputMaskRef {\r\n   focus(): void;\r\n   getElement(): HTMLInputElement | null;\r\n}\r\n\r\nexport interface InputMaskProps\r\n   extends Omit<\r\n      React.InputHTMLAttributes<HTMLInputElement>,\r\n      \"onChange\" | \"value\" | \"defaultValue\"\r\n   > {\r\n   mask: string | null;\r\n   autoClear?: boolean;\r\n   autoFocus?: boolean;\r\n   invalid?: boolean;\r\n   unmask?: boolean;\r\n   slotChar?: string;\r\n   'data-slot'?: string;\r\n   value?: string | null;\r\n   onChange?: (e: InputMaskChangeEvent) => void;\r\n   onComplete?: (e: InputMaskCompleteEvent) => void;\r\n}\r\n\r\nconst isEmpty = (val: unknown): boolean =>\r\n   val === null || val === undefined || val === \"\";\r\n\r\nconst isAndroid = (): boolean =>\r\n   typeof navigator !== \"undefined\" &&\r\n   /android/i.test(navigator.userAgent || \"\");\r\n\r\nconst isIOS = (): boolean =>\r\n   typeof navigator !== \"undefined\" &&\r\n   /(iphone|ipad|ipod)/i.test(navigator.userAgent || \"\");\r\n\r\nconst isChrome = (): boolean =>\r\n   typeof navigator !== \"undefined\" &&\r\n   /chrome/i.test(navigator.userAgent || \"\");\r\n\r\nconst focusEl = (el: HTMLInputElement | null) => {\r\n   if (el && typeof el.focus === \"function\") {\r\n      el.focus();\r\n   }\r\n};\r\n\r\nfunction useUpdateEffect(effect: React.EffectCallback, deps: React.DependencyList) {\r\n   const mounted = React.useRef(false);\r\n\r\n   React.useEffect(() => {\r\n      if (mounted.current) {\r\n         return effect();\r\n      }\r\n      mounted.current = true;\r\n      // eslint-disable-next-line react-hooks/exhaustive-deps\r\n   }, deps);\r\n}\r\n\r\nexport const InputMask = React.memo(\r\n   React.forwardRef<InputMaskRef, InputMaskProps>((inProps, ref) => {\r\n      // merge defaults with incoming props\r\n      const props = React.useMemo(\r\n         () => ({\r\n            autoClear: true,\r\n            autoFocus: false,\r\n            disabled: false,\r\n            invalid: false,\r\n            readOnly: false,\r\n            required: false,\r\n            slotChar: \"_\",\r\n            type: \"text\",\r\n            unmask: false,\r\n            ...inProps,\r\n         }),\r\n         [inProps]\r\n      );\r\n\r\n      const elementRef = React.useRef<HTMLInputElement | null>(null);\r\n      const firstNonMaskPos = React.useRef<number | null>(null);\r\n      const lastRequiredNonMaskPos = React.useRef(0);\r\n      const tests = React.useRef<(RegExp | null)[]>([]);\r\n      const buffer = React.useRef<string[]>([]);\r\n      const len = React.useRef(0);\r\n      const oldVal = React.useRef<string | null>(null);\r\n      const focus = React.useRef(false);\r\n      const focusText = React.useRef<string | null>(null);\r\n      const isValueChecked = React.useRef<boolean | null>(null);\r\n      const partialPosition = React.useRef<number | null>(null);\r\n      const defaultBuffer = React.useRef<string | null>(null);\r\n      const caretTimeoutId = React.useRef<number | null>(null);\r\n      const androidChrome = React.useRef(false);\r\n\r\n      const caret = (first?: number, last?: number) => {\r\n         let range: any;\r\n         let begin: number | null = null;\r\n         let end: number | null = null;\r\n         const inputEl = elementRef.current;\r\n\r\n         if (!inputEl || !inputEl.offsetParent || inputEl !== document.activeElement) {\r\n            return null;\r\n         }\r\n\r\n         if (typeof first === \"number\") {\r\n            begin = first;\r\n            end = typeof last === \"number\" ? last : begin;\r\n\r\n            if (inputEl.setSelectionRange) {\r\n               inputEl.setSelectionRange(begin, end);\r\n            } else if ((inputEl as any).createTextRange) {\r\n               range = (inputEl as any).createTextRange();\r\n               range.collapse(true);\r\n               range.moveEnd(\"character\", end);\r\n               range.moveStart(\"character\", begin);\r\n               range.select();\r\n            }\r\n            //@ts-ignore\r\n         } else if (inputEl.setSelectionRange) {\r\n            begin = inputEl.selectionStart ?? 0;\r\n            end = inputEl.selectionEnd ?? begin;\r\n         } else if ((document as any).selection && (document as any).selection.createRange) {\r\n            range = (document as any).selection.createRange();\r\n            begin = 0 - range.duplicate().moveStart(\"character\", -100000);\r\n            end = begin + range.text.length;\r\n         }\r\n\r\n         if (begin === null || end === null) {\r\n            return null;\r\n         }\r\n\r\n         return { begin, end };\r\n      };\r\n\r\n      const getPlaceholder = React.useCallback(\r\n         (i: number): string => {\r\n            const slotChar = props.slotChar ?? \"_\";\r\n\r\n            if (i < slotChar.length) {\r\n               return slotChar.charAt(i);\r\n            }\r\n\r\n            return slotChar.charAt(0);\r\n         },\r\n         [props.slotChar]\r\n      );\r\n\r\n      const isCompleted = () => {\r\n         const first = firstNonMaskPos.current ?? 0;\r\n\r\n         for (let i = first; i <= lastRequiredNonMaskPos.current; i++) {\r\n            if (tests.current[i] && buffer.current[i] === getPlaceholder(i)) {\r\n               return false;\r\n            }\r\n         }\r\n\r\n         return true;\r\n      };\r\n\r\n      const getValue = () =>\r\n         props.unmask ? getUnmaskedValue() : elementRef.current?.value ?? \"\";\r\n\r\n      const seekNext = (pos: number) => {\r\n         while (++pos < len.current && !tests.current[pos]) {\r\n            /* loop */\r\n         }\r\n         return pos;\r\n      };\r\n\r\n      const seekPrev = (pos: number) => {\r\n         while (--pos >= 0 && !tests.current[pos]) {\r\n            /* loop */\r\n         }\r\n         return pos;\r\n      };\r\n\r\n      const shiftL = (begin: number, end: number) => {\r\n         if (begin < 0) {\r\n            return;\r\n         }\r\n\r\n         let i: number;\r\n         let j: number;\r\n\r\n         for (i = begin, j = seekNext(end); i < len.current; i++) {\r\n            if (tests.current[i]) {\r\n               if (j < len.current && tests.current[i]!.test(buffer.current[j]!)) {\r\n                  buffer.current[i] = buffer.current[j]!;\r\n                  buffer.current[j] = getPlaceholder(j);\r\n               } else {\r\n                  break;\r\n               }\r\n\r\n               j = seekNext(j);\r\n            }\r\n         }\r\n\r\n         writeBuffer();\r\n         caret(Math.max(firstNonMaskPos.current ?? 0, begin));\r\n      };\r\n\r\n      const shiftR = (pos: number) => {\r\n         let i: number;\r\n         let c: string;\r\n         let j: number;\r\n         let t: string;\r\n\r\n         for (i = pos, c = getPlaceholder(pos); i < len.current; i++) {\r\n            if (tests.current[i]) {\r\n               j = seekNext(i);\r\n               t = buffer.current[i]!;\r\n               buffer.current[i] = c;\r\n               if (j < len.current && tests.current[j]!.test(t)) {\r\n                  c = t;\r\n               } else {\r\n                  break;\r\n               }\r\n            }\r\n         }\r\n      };\r\n\r\n      const clearBuffer = (start: number, end: number) => {\r\n         for (let i = start; i < end && i < len.current; i++) {\r\n            if (tests.current[i]) {\r\n               buffer.current[i] = getPlaceholder(i);\r\n            }\r\n         }\r\n      };\r\n\r\n      const writeBuffer = () => {\r\n         if (elementRef.current) {\r\n            elementRef.current.value = buffer.current.join(\"\");\r\n         }\r\n      };\r\n\r\n      const checkVal = (allow?: boolean): number => {\r\n         isValueChecked.current = true;\r\n\r\n         const test = elementRef.current?.value ?? \"\";\r\n         let lastMatch = -1;\r\n         let i: number;\r\n         let c: string;\r\n         let pos: number;\r\n\r\n         for (i = 0, pos = 0; i < len.current; i++) {\r\n            if (tests.current[i]) {\r\n               buffer.current[i] = getPlaceholder(i);\r\n\r\n               while (pos++ < test.length) {\r\n                  c = test.charAt(pos - 1);\r\n                  if (tests.current[i]!.test(c)) {\r\n                     buffer.current[i] = c;\r\n                     lastMatch = i;\r\n                     break;\r\n                  }\r\n               }\r\n\r\n               if (pos > test.length) {\r\n                  clearBuffer(i + 1, len.current);\r\n                  break;\r\n               }\r\n            } else {\r\n               if (buffer.current[i] === test.charAt(pos)) {\r\n                  pos++;\r\n               }\r\n               if (i < (partialPosition.current ?? 0)) {\r\n                  lastMatch = i;\r\n               }\r\n            }\r\n         }\r\n\r\n         if (allow) {\r\n            writeBuffer();\r\n         } else if (lastMatch + 1 < (partialPosition.current ?? 0)) {\r\n            if (props.autoClear || buffer.current.join(\"\") === defaultBuffer.current) {\r\n               if (elementRef.current && elementRef.current.value) {\r\n                  elementRef.current.value = \"\";\r\n               }\r\n               clearBuffer(0, len.current);\r\n            } else {\r\n               writeBuffer();\r\n            }\r\n         } else {\r\n            writeBuffer();\r\n            if (elementRef.current) {\r\n               elementRef.current.value = elementRef.current.value.substring(0, lastMatch + 1);\r\n            }\r\n         }\r\n\r\n         return partialPosition.current ? i : (firstNonMaskPos.current ?? 0);\r\n      };\r\n\r\n      const handleAndroidInput = (e: React.SyntheticEvent<HTMLInputElement>) => {\r\n         const inputEl = elementRef.current;\r\n         if (!inputEl) return;\r\n\r\n         const curVal = inputEl.value;\r\n         const pos = caret();\r\n         if (!pos) return;\r\n\r\n         if (oldVal.current && oldVal.current.length > curVal.length) {\r\n            // deletion/backspace\r\n            checkVal(true);\r\n            while (pos.begin > 0 && !tests.current[pos.begin - 1]) {\r\n               pos.begin--;\r\n            }\r\n            if (pos.begin === 0) {\r\n               while (\r\n                  pos.begin < (firstNonMaskPos.current ?? 0) &&\r\n                  !tests.current[pos.begin]\r\n               ) {\r\n                  pos.begin++;\r\n               }\r\n            }\r\n            caret(pos.begin, pos.begin);\r\n         } else {\r\n            checkVal(true);\r\n            while (pos.begin < len.current && !tests.current[pos.begin]) {\r\n               pos.begin++;\r\n            }\r\n            caret(pos.begin, pos.begin);\r\n         }\r\n\r\n         if (props.onComplete && isCompleted()) {\r\n            props.onComplete({\r\n               originalEvent: e,\r\n               value: getValue(),\r\n            });\r\n         }\r\n\r\n         updateModel(e);\r\n      };\r\n\r\n      const onBlur = (e: React.FocusEvent<HTMLInputElement>) => {\r\n         console.log(\"InputMask onBlur\");\r\n         focus.current = false;\r\n         checkVal();\r\n         updateModel(e);\r\n\r\n         if (props.onBlur) {\r\n            props.onBlur(e);\r\n         }\r\n\r\n         if (elementRef.current && elementRef.current.value !== focusText.current) {\r\n            const event = document.createEvent(\"HTMLEvents\");\r\n            event.initEvent(\"change\", true, false);\r\n            elementRef.current.dispatchEvent(event);\r\n         }\r\n      };\r\n\r\n      const onKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n         if (props.readOnly) {\r\n            return;\r\n         }\r\n\r\n         const k = e.which || e.keyCode;\r\n         let pos: { begin: number; end: number } | null;\r\n         let begin: number;\r\n         let end: number;\r\n\r\n         oldVal.current = elementRef.current?.value ?? null;\r\n\r\n         // backspace, delete, escape\r\n         if (k === 8 || k === 46 || (isIOS() && k === 127)) {\r\n            pos = caret();\r\n            if (!pos) {\r\n               return;\r\n            }\r\n            begin = pos.begin;\r\n            end = pos.end;\r\n\r\n            if (end - begin === 0) {\r\n               begin = k !== 46 ? seekPrev(begin) : (end = seekNext(begin - 1));\r\n               end = k === 46 ? seekNext(end) : end;\r\n            }\r\n\r\n            clearBuffer(begin, end);\r\n            shiftL(begin, end - 1);\r\n            updateModel(e as any);\r\n            e.preventDefault();\r\n         } else if (k === 13) {\r\n            // enter\r\n            onBlur(e as any);\r\n            updateModel(e as any);\r\n         } else if (k === 27) {\r\n            // escape\r\n            if (elementRef.current) {\r\n               elementRef.current.value = focusText.current ?? \"\";\r\n            }\r\n            caret(0, checkVal());\r\n            updateModel(e as any);\r\n            e.preventDefault();\r\n         }\r\n      };\r\n\r\n      const onKeyPress = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n         if (props.readOnly) {\r\n            return;\r\n         }\r\n\r\n         const pos = caret();\r\n         if (!pos) {\r\n            return;\r\n         }\r\n\r\n         const k = e.which || e.keyCode;\r\n         let p: number;\r\n         let c: string;\r\n         let next: number;\r\n         let completed = false;\r\n\r\n         if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {\r\n            return;\r\n         } else if (k && k !== 13) {\r\n            if (pos.end - pos.begin !== 0) {\r\n               clearBuffer(pos.begin, pos.end);\r\n               shiftL(pos.begin, pos.end - 1);\r\n            }\r\n\r\n            p = seekNext(pos.begin - 1);\r\n            if (p < len.current) {\r\n               c = String.fromCharCode(k);\r\n               if (tests.current[p] && tests.current[p]!.test(c)) {\r\n                  shiftR(p);\r\n                  buffer.current[p] = c;\r\n                  writeBuffer();\r\n\r\n                  next = seekNext(p);\r\n                  if (isAndroid()) {\r\n                     const proxy = () => caret(next);\r\n                     setTimeout(proxy, 0);\r\n                  } else {\r\n                     caret(next);\r\n                  }\r\n\r\n                  if (pos.begin <= lastRequiredNonMaskPos.current) {\r\n                     completed = isCompleted();\r\n                  }\r\n               }\r\n            }\r\n\r\n            e.preventDefault();\r\n         }\r\n\r\n         updateModel(e as any);\r\n\r\n         if (props.onComplete && completed) {\r\n            props.onComplete({\r\n               originalEvent: e,\r\n               value: getValue(),\r\n            });\r\n         }\r\n      };\r\n\r\n      const getUnmaskedValue = React.useCallback((): string => {\r\n         const unmaskedBuffer: string[] = [];\r\n\r\n         for (let i = 0; i < buffer.current.length; i++) {\r\n            const c = buffer.current[i]!;\r\n            if (tests.current[i] && c !== getPlaceholder(i)) {\r\n               unmaskedBuffer.push(c);\r\n            }\r\n         }\r\n\r\n         return unmaskedBuffer.join(\"\");\r\n      }, [getPlaceholder]);\r\n\r\n      const updateModel = (e?: React.SyntheticEvent<HTMLInputElement>) => {\r\n         if (!props.onChange) return;\r\n\r\n         const val = props.unmask ? getUnmaskedValue() : e && (e.target as HTMLInputElement)?.value;\r\n\r\n         const normalized = defaultBuffer.current !== val ? (val ?? \"\") : \"\";\r\n         console.log(\"InputMask updateModel:\", { val, normalized });\r\n         const payload: InputMaskChangeEvent = {\r\n            originalEvent: e,\r\n            value: normalized,\r\n            stopPropagation: () => {\r\n               (e as any)?.stopPropagation?.();\r\n            },\r\n            preventDefault: () => {\r\n               (e as any)?.preventDefault?.();\r\n            },\r\n            target: {\r\n               name: props.name,\r\n               id: props.id,\r\n               value: normalized,\r\n            },\r\n         };\r\n\r\n         props.onChange(payload);\r\n      };\r\n\r\n      const updateValue = (allow?: boolean): number | undefined => {\r\n         let pos: number | undefined;\r\n\r\n         if (elementRef.current) {\r\n            if (isEmpty(props.value)) {\r\n               elementRef.current.value = \"\";\r\n            } else {\r\n               elementRef.current.value = props.value ?? \"\";\r\n               pos = checkVal(allow);\r\n               setTimeout(() => {\r\n                  if (elementRef.current) {\r\n                     writeBuffer();\r\n                     return checkVal(allow);\r\n                  }\r\n               }, 10);\r\n            }\r\n\r\n            focusText.current = elementRef.current.value;\r\n         }\r\n\r\n         return pos;\r\n      };\r\n\r\n      const isValueUpdated = React.useCallback(() => {\r\n         const elVal = elementRef.current?.value ?? \"\";\r\n         return props.unmask\r\n            ? (props.value ?? \"\") !== getUnmaskedValue()\r\n            : defaultBuffer.current !== elVal && elVal !== (props.value ?? \"\");\r\n      }, [props.unmask, props.value, getUnmaskedValue]);\r\n\r\n      const init = () => {\r\n         const mask = props.mask;\r\n         if (!mask) return;\r\n\r\n         tests.current = [];\r\n         partialPosition.current = mask.length;\r\n         len.current = mask.length;\r\n         firstNonMaskPos.current = null;\r\n\r\n         const defs: Record<string, string> = {\r\n            \"9\": \"[0-9]\",\r\n            a: \"[A-Za-z]\",\r\n            \"*\": \"[A-Za-z0-9]\",\r\n         };\r\n\r\n         androidChrome.current = isChrome() && isAndroid();\r\n         const maskTokens = mask.split(\"\");\r\n\r\n         for (let i = 0; i < maskTokens.length; i++) {\r\n            const c = maskTokens[i]!;\r\n\r\n            if (c === \"?\") {\r\n               len.current--;\r\n               partialPosition.current = i;\r\n            } else if (defs[c]) {\r\n               tests.current.push(new RegExp(defs[c]!));\r\n               if (firstNonMaskPos.current === null) {\r\n                  firstNonMaskPos.current = tests.current.length - 1;\r\n               }\r\n               if (i < (partialPosition.current ?? 0)) {\r\n                  lastRequiredNonMaskPos.current = tests.current.length - 1;\r\n               }\r\n            } else {\r\n               tests.current.push(null);\r\n            }\r\n         }\r\n\r\n         buffer.current = [];\r\n\r\n         for (let i = 0; i < maskTokens.length; i++) {\r\n            const c = maskTokens[i]!;\r\n            if (c !== \"?\") {\r\n               if (defs[c]) {\r\n                  buffer.current.push(getPlaceholder(i));\r\n               } else {\r\n                  buffer.current.push(c);\r\n               }\r\n            }\r\n         }\r\n\r\n         defaultBuffer.current = buffer.current.join(\"\");\r\n      };\r\n\r\n      const onFocus = (e: React.FocusEvent<HTMLInputElement>) => {\r\n         console.log(\"InputMask onFocus\");\r\n         if (props.readOnly) {\r\n            return;\r\n         }\r\n\r\n         focus.current = true;\r\n         if (caretTimeoutId.current) {\r\n            window.clearTimeout(caretTimeoutId.current);\r\n         }\r\n\r\n         let pos: number;\r\n\r\n         if (elementRef.current) {\r\n            focusText.current = elementRef.current.value;\r\n         } else {\r\n            focusText.current = \"\";\r\n         }\r\n\r\n         pos = checkVal() || 0;\r\n\r\n         caretTimeoutId.current = window.setTimeout(() => {\r\n            if (elementRef.current !== document.activeElement) {\r\n               return;\r\n            }\r\n\r\n            writeBuffer();\r\n\r\n            if (props.mask && pos === props.mask.replace(\"?\", \"\").length) {\r\n               caret(0, pos);\r\n            } else {\r\n               caret(pos);\r\n            }\r\n         }, 100);\r\n\r\n         if (props.onFocus) {\r\n            props.onFocus(e);\r\n         }\r\n      };\r\n\r\n      const handleInputChange = (\r\n         e: React.FormEvent<HTMLInputElement>,\r\n         isOnPaste = false\r\n      ) => {\r\n         if (props.readOnly) {\r\n            return;\r\n         }\r\n\r\n         if (!isOnPaste) {\r\n            const pos = checkVal(true);\r\n            caret(pos);\r\n         }\r\n\r\n         updateModel(e as any);\r\n\r\n         if (props.onComplete && isCompleted()) {\r\n            props.onComplete({\r\n               originalEvent: e,\r\n               value: getValue(),\r\n            });\r\n         }\r\n      };\r\n\r\n      const onInput = (event: React.FormEvent<HTMLInputElement>) => {\r\n         androidChrome.current\r\n            ? handleAndroidInput(event as any)\r\n            : handleInputChange(event);\r\n      };\r\n\r\n      React.useImperativeHandle(\r\n         ref,\r\n         () => ({\r\n            focus: () => focusEl(elementRef.current),\r\n            getElement: () => elementRef.current,\r\n         }),\r\n         []\r\n      );\r\n\r\n      React.useEffect(() => {\r\n         if (!elementRef.current) return;\r\n      }, []);\r\n\r\n      React.useEffect(() => {\r\n         init();\r\n         updateValue();\r\n         // eslint-disable-next-line react-hooks/exhaustive-deps\r\n      }, []);\r\n\r\n      useUpdateEffect(() => {\r\n         init();\r\n         const pos = updateValue(true);\r\n         if (typeof pos === \"number\") {\r\n            caret(pos);\r\n         }\r\n         if (props.unmask) {\r\n            updateModel();\r\n         }\r\n      }, [props.mask, props.unmask]);\r\n\r\n      useUpdateEffect(() => {\r\n         if (isValueUpdated()) {\r\n            updateValue();\r\n         }\r\n      }, [isValueUpdated]);\r\n\r\n      const {\r\n         mask,\r\n         autoClear,\r\n         unmask,\r\n         slotChar,\r\n         onChange,\r\n         onComplete,\r\n         value,\r\n         autoFocus,\r\n         onFocus: i,\r\n         onBlur: j,\r\n         onKeyDown: k,\r\n         onKeyPress: l,\r\n         onInput: m,\r\n         className,\r\n         ...restInputProps\r\n      } = props;\r\n\r\n      return (\r\n         <input\r\n            ref={elementRef}\r\n            autoFocus={autoFocus}\r\n            id={props.id}\r\n            name={props.name}\r\n            style={props.style}\r\n            className={className}\r\n            placeholder={props.placeholder}\r\n            size={props.size}\r\n            maxLength={props.maxLength}\r\n            tabIndex={props.tabIndex}\r\n            onFocus={onFocus}\r\n            onBlur={onBlur}\r\n            onKeyDown={onKeyDown}\r\n            onKeyPress={onKeyPress}\r\n            onInput={onInput}\r\n            onPaste={(e) => handleInputChange(e, true)}\r\n            {...restInputProps}\r\n         />\r\n      );\r\n   })\r\n);\r\n\r\nInputMask.displayName = \"InputMask\";","// src/presets/ui/input.tsx\n// @ts-nocheck\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { InputMask } from \"../ui/input-mask\";\n\ntype MaskMode = \"raw\" | \"masked\";\n\n// Mask-related props (UI-level only; value semantics are up to callers)\nexport interface InputMaskProps {\n    mask?: string;\n    maskDefinitions?: Record<string, RegExp>; // reserved for future engine\n    slotChar?: string;\n    autoClear?: boolean;\n    unmask?: MaskMode | boolean;\n    maskInsertMode?: \"stream\" | \"caret\";\n}\n\n// Prefix / suffix (value-level, NOT icons)\nexport interface InputAffixProps {\n    prefix?: string;\n    suffix?: string;\n\n    /**\n     * If true (default), we assume the model value does NOT contain the prefix\n     * and we only add it visually at render time.\n     */\n    stripPrefix?: boolean;\n\n    /**\n     * If true (default), we assume the model value does NOT contain the suffix\n     * and we only add it visually at render time.\n     */\n    stripSuffix?: boolean;\n}\n\n// Icons & controls (pure overlays, like in ShadcnTextVariant)\nexport interface InputIconControlProps {\n    leadingIcons?: React.ReactNode[];\n    trailingIcons?: React.ReactNode[];\n    icon?: React.ReactNode;\n\n    iconGap?: number;\n    leadingIconSpacing?: number;\n    trailingIconSpacing?: number;\n\n    leadingControl?: React.ReactNode;\n    trailingControl?: React.ReactNode;\n    leadingControlClassName?: string;\n    trailingControlClassName?: string;\n\n    joinControls?: boolean;\n    extendBoxToControls?: boolean;\n\n    px?: number;\n    py?: number;\n    ps?: number;\n    pe?: number;\n    pb?: number;\n\n    inputClassName?: string;\n}\n\nexport interface InputSizeProps {\n    size?: \"sm\" | \"md\" | \"lg\" | (string & {});\n    density?:\n        | \"compact\"\n        | \"normal\"\n        | \"relaxed\"\n        | \"dense\"\n        | \"loose\"\n        | (string & {});\n}\n\n// ─────────────────────────────────────────────\n// KeyFilter support (PrimeReact-style)\n// ─────────────────────────────────────────────\n\nexport type InputKeyFilter =\n    | string\n    | RegExp\n    | ((\n          nextValue: string,\n          ctx: {\n              event: any;\n              currentValue: string;\n              input: HTMLInputElement;\n          },\n      ) => boolean);\n\nexport interface InputKeyFilterProps {\n    /**\n     * Filter that constrains what can be typed / pasted.\n     *\n     * - string preset: \"int\" | \"num\" | \"money\" | \"hex\" | \"alpha\" | \"alphanum\" | \"email\"\n     * - string pattern: converted to new RegExp(pattern)\n     * - RegExp: used directly\n     * - function: custom validator\n     */\n    keyFilter?: InputKeyFilter;\n\n    /**\n     * Which keyboard event to hook for filtering:\n     * - \"keydown\"\n     * - \"keypress\" (closest to PrimeReact default)\n     * - \"beforeinput\"\n     *\n     * Default: \"keypress\"\n     */\n    keyFilterOn?: \"keydown\" | \"keypress\" | \"beforeinput\";\n\n    /**\n     * Whether to apply keyFilter to paste events.\n     * Default: true\n     */\n    keyFilterOnPaste?: boolean;\n}\n\nfunction cx(...parts: any[]) {\n    return cn(...parts);\n}\n\nfunction resolveKeyFilterPattern(\n    filter: string | RegExp | undefined,\n): RegExp | null {\n    if (!filter) return null;\n\n    if (filter instanceof RegExp) {\n        // remove stateful flags for safety\n        const flags = filter.flags.replace(\"g\", \"\").replace(\"y\", \"\");\n        return new RegExp(filter.source, flags);\n    }\n\n    const presets: Record<string, RegExp> = {\n        int: /^[+-]?\\d*$/,\n        num: /^-?\\d*(\\.\\d*)?$/,\n        money: /^-?\\d*(\\.\\d{0,2})?$/,\n        hex: /^[0-9a-f]*$/i,\n        alpha: /^[A-Za-z]*$/,\n        alphanum: /^[A-Za-z0-9]*$/,\n        email: /^[^\\s@]*@?[^\\s@]*$/, // lenient while typing\n    };\n\n    const preset = presets[filter];\n    if (preset) return preset;\n\n    try {\n        return new RegExp(filter);\n    } catch {\n        return null;\n    }\n}\n\nfunction runKeyFilter(\n    filter: InputKeyFilter | undefined,\n    nextValue: string,\n    input: HTMLInputElement,\n    event: any,\n): boolean {\n    if (!filter) return true;\n    // Always allow empty so users can clear the field\n    if (nextValue === \"\") return true;\n\n    if (typeof filter === \"function\") {\n        return filter(nextValue, {\n            event,\n            currentValue: input.value,\n            input,\n        });\n    }\n\n    const pattern = resolveKeyFilterPattern(filter as any);\n    if (!pattern) return true;\n    return pattern.test(nextValue);\n}\n\nfunction computeNextFromInsertion(\n    input: HTMLInputElement,\n    inserted: string,\n): string {\n    const value = input.value ?? \"\";\n    const start = input.selectionStart ?? value.length;\n    const end = input.selectionEnd ?? start;\n    return value.slice(0, start) + inserted + value.slice(end);\n}\n\n// Same logic as in ShadcnTextVariant\nfunction resolveBasePadding(size: unknown, density: unknown) {\n    let px = 12;\n    let py = 4;\n\n    const s = (size as string | undefined) ?? \"md\";\n    const d = (density as string | undefined) ?? \"normal\";\n\n    if (s === \"sm\") {\n        px = 10;\n        py = 3;\n    } else if (s === \"lg\") {\n        px = 14;\n        py = 5;\n    }\n\n    if (d === \"dense\" || d === \"compact\") {\n        py = Math.max(2, py - 1);\n    } else if (d === \"relaxed\" || d === \"loose\") {\n        py = py + 1;\n    }\n\n    return { px, py };\n}\n\n// Same logic as in ShadcnTextVariant\nfunction resolveSizeDensityClasses(size: unknown, density: unknown) {\n    const s = (size as string | undefined) ?? \"md\";\n    const d = (density as string | undefined) ?? \"normal\";\n\n    let heightCls = \"h-9\";\n    let textCls = \"text-base md:text-sm\";\n\n    if (s === \"sm\") {\n        heightCls = \"h-8\";\n        textCls = \"text-sm\";\n    } else if (s === \"lg\") {\n        heightCls = \"h-10\";\n        textCls = \"text-base\";\n    }\n\n    let densityCls = \"\";\n    if (d === \"dense\" || d === \"compact\") {\n        densityCls = \"leading-tight\";\n    } else if (d === \"relaxed\" || d === \"loose\") {\n        densityCls = \"leading-relaxed\";\n    }\n\n    return { heightCls, textCls, densityCls };\n}\n\nexport interface InputProps\n    extends\n        Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n        InputMaskProps,\n        InputAffixProps,\n        InputIconControlProps,\n        InputSizeProps,\n        InputKeyFilterProps {}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n    function Input(rawProps, forwardedRef) {\n        const {\n            // base\n            className,\n            style,\n            type,\n            disabled,\n            readOnly,\n            required,\n\n            // size / density\n            size = \"md\",\n            density = \"normal\",\n\n            // mask\n            mask,\n            maskDefinitions, // reserved\n            slotChar,\n            autoClear,\n            unmask,\n            maskInsertMode,\n\n            // affixes (value-level)\n            prefix,\n            suffix,\n            stripPrefix = true,\n            stripSuffix = true,\n\n            // icons / controls\n            leadingIcons,\n            trailingIcons,\n            icon,\n            iconGap,\n            leadingIconSpacing,\n            trailingIconSpacing,\n            leadingControl,\n            trailingControl,\n            leadingControlClassName,\n            trailingControlClassName,\n            joinControls = true,\n            extendBoxToControls = true,\n            px,\n            py,\n            ps,\n            pe,\n            pb,\n            inputClassName,\n\n            // key filter\n            keyFilter,\n            keyFilterOn = \"keypress\",\n            keyFilterOnPaste = true,\n\n            // events\n            onChange,\n            onFocus,\n            onBlur,\n            onKeyDown,\n            onKeyPress,\n            onBeforeInput,\n            onPaste,\n\n            // rest of native props (value, defaultValue, placeholder, etc.)\n            ...rest\n        } = rawProps as InputProps;\n\n        const sizeKey = (size as string | undefined) ?? \"md\";\n        const densityKey = (density as string | undefined) ?? \"normal\";\n        const isMasked = Boolean(mask);\n\n        const innerRef = React.useRef<HTMLInputElement | null>(null);\n        React.useImperativeHandle(\n            forwardedRef,\n            () => innerRef.current as any,\n            [],\n        );\n\n        // Icons ONLY (prefix/suffix are NOT treated as icons)\n        const resolvedLeadingIcons: React.ReactNode[] = (() => {\n            if (leadingIcons && leadingIcons.length) return leadingIcons;\n            if (icon) return [icon];\n            return [];\n        })();\n\n        const resolvedTrailingIcons: React.ReactNode[] = trailingIcons ?? [];\n\n        const hasLeadingIcons = resolvedLeadingIcons.length > 0;\n        const hasTrailingIcons = resolvedTrailingIcons.length > 0;\n\n        const hasLeadingControl = !!leadingControl;\n        const hasTrailingControl = !!trailingControl;\n        const hasControls = hasLeadingControl || hasTrailingControl;\n        const hasIcons = hasLeadingIcons || hasTrailingIcons;\n        const hasExtras = hasControls || hasIcons;\n\n        const baseIconGap = iconGap ?? 4;\n        const leadingGap = leadingIconSpacing ?? baseIconGap;\n        const trailingGap = trailingIconSpacing ?? baseIconGap;\n\n        // Measure icon widths (for padding vars)\n        const leadingIconsRef = React.useRef<HTMLDivElement | null>(null);\n        const trailingIconsRef = React.useRef<HTMLDivElement | null>(null);\n\n        const [leadingIconsWidth, setLeadingIconsWidth] =\n            React.useState<number>(0);\n        const [trailingIconsWidth, setTrailingIconsWidth] =\n            React.useState<number>(0);\n\n        React.useLayoutEffect(() => {\n            if (typeof window === \"undefined\") return;\n            if (typeof ResizeObserver === \"undefined\") return;\n\n            const leadingEl = leadingIconsRef.current;\n            const trailingEl = trailingIconsRef.current;\n            if (!leadingEl && !trailingEl) return;\n\n            const observer = new ResizeObserver((entries) => {\n                for (const entry of entries) {\n                    const width = entry.contentRect.width;\n                    if (entry.target === leadingIconsRef.current) {\n                        setLeadingIconsWidth(width);\n                    } else if (entry.target === trailingIconsRef.current) {\n                        setTrailingIconsWidth(width);\n                    }\n                }\n            });\n\n            if (leadingEl) observer.observe(leadingEl);\n            if (trailingEl) observer.observe(trailingEl);\n\n            return () => observer.disconnect();\n        }, [hasLeadingIcons, hasTrailingIcons]);\n\n        // Padding vars (same idea as ShadcnTextVariant, feeding into Tailwind\n        // utilities on the actual “box” via CSS variables)\n        const { px: pxDefault, py: pyDefault } = resolveBasePadding(\n            size,\n            density,\n        );\n\n        const extraPx = typeof px === \"number\" ? px : 0;\n        const extraPy = typeof py === \"number\" ? py : 0;\n        const extraPs = typeof ps === \"number\" ? ps : 0;\n        const extraPe = typeof pe === \"number\" ? pe : 0;\n        const extraPb = typeof pb === \"number\" ? pb : 0;\n\n        let paddingStart = pxDefault + extraPx + extraPs;\n        let paddingEnd = pxDefault + extraPx + extraPe;\n        const paddingTop = pyDefault + extraPy;\n        const paddingBottom = pyDefault + extraPy + extraPb;\n\n        const textGap = baseIconGap;\n\n        if (hasLeadingIcons && leadingIconsWidth > 0) {\n            paddingStart += leadingIconsWidth + textGap;\n        }\n        if (hasTrailingIcons && trailingIconsWidth > 0) {\n            paddingEnd += trailingIconsWidth + textGap;\n        }\n\n        const varsStyle: React.CSSProperties = {\n            ...(style ?? {}),\n            \"--fp-pl\": `${paddingStart}px`,\n            \"--fp-pr\": `${paddingEnd}px`,\n            \"--fp-pt\": `${paddingTop}px`,\n            \"--fp-pb\": `${paddingBottom}px`,\n        } as React.CSSProperties;\n\n        const { heightCls, textCls, densityCls } = resolveSizeDensityClasses(\n            size,\n            density,\n        );\n\n        // Core “box” classes (border, radius, focus, size/density),\n        // WITHOUT padding – padding is applied only on the actual box element.\n        const baseBoxClasses = cx(\n            \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30\",\n            \"border-input w-full min-w-0 rounded-md border bg-[var(--surfaces-input,_transparent)] shadow-xs\",\n            \"transition-[color,box-shadow] outline-none\",\n            \"file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n            \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n            \"focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]\",\n            \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n            heightCls,\n            textCls,\n            densityCls,\n        );\n\n        // Padding classes driven by CSS vars\n        const boxPaddingClasses = cx(\n            \"px-(--fp-pl,--spacing(3)) pr-(--fp-pr,--spacing(3))\",\n            \"pt-(--fp-pt,--spacing(1)) pb-(--fp-pb,--spacing(1))\",\n        );\n\n        // Inner neutral input (used when the *wrapper* carries the box)\n        const innerInputNeutral = cx(\n            \"w-full min-w-0 bg-transparent border-none shadow-none outline-none\",\n            \"px-0 py-0\",\n            \"focus-visible:outline-none focus-visible:ring-0 focus-visible:border-transparent\",\n            \"placeholder:text-muted-foreground\",\n            inputClassName,\n        );\n\n        const maskMode: MaskMode =\n            unmask === true || unmask === \"raw\" ? \"raw\" : \"masked\";\n\n        // Focus handler with prefix/suffix selection logic\n        const handleFocus = React.useCallback(\n            (event: React.FocusEvent<HTMLInputElement>) => {\n                onFocus?.(event);\n\n                if (!prefix && !suffix) return;\n\n                const inputEl = event.currentTarget;\n                const inputValue = inputEl.value;\n                const prefixLength = (prefix || \"\").length;\n                const suffixLength = (suffix || \"\").length;\n                const end =\n                    inputValue.length === 0\n                        ? 0\n                        : inputValue.length - suffixLength;\n\n                try {\n                    inputEl.setSelectionRange(prefixLength, end);\n                } catch {\n                    // ignore if unsupported\n                }\n            },\n            [onFocus, prefix, suffix],\n        );\n\n        const focusInput = () => {\n            if (innerRef.current) {\n                innerRef.current.focus();\n            }\n        };\n\n        const handleIconMouseDown = (e: React.MouseEvent) => {\n            e.preventDefault();\n            focusInput();\n        };\n\n        const placeholder =\n            typeof mask === \"string\" && mask ? mask : (rest as any).placeholder;\n\n        const hasCustomPadding =\n            typeof px === \"number\" ||\n            typeof py === \"number\" ||\n            typeof ps === \"number\" ||\n            typeof pe === \"number\" ||\n            typeof pb === \"number\";\n\n        const hasKeyFilter = !!keyFilter;\n\n        // Key filter wrappers\n        const handleKeyDownWrapped = React.useCallback(\n            (event: React.KeyboardEvent<HTMLInputElement>) => {\n                if (\n                    hasKeyFilter &&\n                    keyFilterOn === \"keydown\" &&\n                    !event.ctrlKey &&\n                    !event.metaKey &&\n                    !event.altKey &&\n                    event.key &&\n                    event.key.length === 1\n                ) {\n                    const inputEl = event.currentTarget;\n                    const nextValue = computeNextFromInsertion(\n                        inputEl,\n                        event.key,\n                    );\n                    if (!runKeyFilter(keyFilter, nextValue, inputEl, event)) {\n                        event.preventDefault();\n                        return;\n                    }\n                }\n\n                onKeyDown?.(event);\n            },\n            [hasKeyFilter, keyFilterOn, keyFilter, onKeyDown],\n        );\n\n        const handleKeyPressWrapped = React.useCallback(\n            (event: React.KeyboardEvent<HTMLInputElement>) => {\n                if (\n                    hasKeyFilter &&\n                    keyFilterOn === \"keypress\" &&\n                    !event.ctrlKey &&\n                    !event.metaKey &&\n                    !event.altKey &&\n                    event.key &&\n                    event.key.length === 1\n                ) {\n                    const inputEl = event.currentTarget;\n                    const nextValue = computeNextFromInsertion(\n                        inputEl,\n                        event.key,\n                    );\n                    if (!runKeyFilter(keyFilter, nextValue, inputEl, event)) {\n                        event.preventDefault();\n                        return;\n                    }\n                }\n\n                onKeyPress?.(event);\n            },\n            [hasKeyFilter, keyFilterOn, keyFilter, onKeyPress],\n        );\n\n        const handleBeforeInputWrapped = React.useCallback(\n            (event: any) => {\n                if (\n                    hasKeyFilter &&\n                    keyFilterOn === \"beforeinput\" &&\n                    event?.nativeEvent\n                ) {\n                    const inputEl = event.currentTarget as HTMLInputElement;\n                    const data = event.nativeEvent.data as string | null;\n                    const inputType = event.nativeEvent.inputType as\n                        | string\n                        | null;\n\n                    // We only care about text insertions; deletions/etc. pass through.\n                    if (data && inputType && inputType.startsWith(\"insert\")) {\n                        const nextValue = computeNextFromInsertion(\n                            inputEl,\n                            data,\n                        );\n                        if (\n                            !runKeyFilter(keyFilter, nextValue, inputEl, event)\n                        ) {\n                            event.preventDefault();\n                            return;\n                        }\n                    }\n                }\n\n                onBeforeInput?.(event);\n            },\n            [hasKeyFilter, keyFilterOn, keyFilter, onBeforeInput],\n        );\n\n        const handlePasteWrapped = React.useCallback(\n            (event: React.ClipboardEvent<HTMLInputElement>) => {\n                if (hasKeyFilter && keyFilterOnPaste) {\n                    const pasted = event.clipboardData?.getData(\"text\") ?? \"\";\n                    if (pasted) {\n                        const inputEl = event.currentTarget;\n                        const nextValue = computeNextFromInsertion(\n                            inputEl,\n                            pasted,\n                        );\n                        if (\n                            !runKeyFilter(keyFilter, nextValue, inputEl, event)\n                        ) {\n                            event.preventDefault();\n                            return;\n                        }\n                    }\n                }\n\n                onPaste?.(event);\n            },\n            [hasKeyFilter, keyFilterOnPaste, keyFilter, onPaste],\n        );\n\n        // Core renderer (mask vs plain)\n        const renderBaseInput = (extra: {\n            className?: string;\n            style?: React.CSSProperties;\n            inner?: boolean; // false → input is the box; true/undefined → input is inner neutral\n        }) => {\n            const useInnerNeutral = extra.inner !== false;\n\n            // MASKED: we delegate value semantics to caller.\n            if (isMasked && mask) {\n                let maskWithAffixes = mask;\n                if (prefix) {\n                    maskWithAffixes = `${prefix}${maskWithAffixes}`;\n                }\n                if (suffix) {\n                    maskWithAffixes = `${maskWithAffixes}${suffix}`;\n                }\n\n                return (\n                    //@ts-ignore\n                    <InputMask\n                        ref={innerRef as any}\n                        mask={maskWithAffixes}\n                        slotChar={slotChar ?? \"_\"}\n                        unmask={maskMode === \"raw\"}\n                        disabled={disabled}\n                        readOnly={readOnly}\n                        onChange={onChange as any}\n                        onBlur={onBlur as any}\n                        onFocus={handleFocus as any}\n                        onKeyDown={handleKeyDownWrapped as any}\n                        onKeyPress={handleKeyPressWrapped as any}\n                        onBeforeInput={handleBeforeInputWrapped as any}\n                        onPaste={handlePasteWrapped as any}\n                        aria-required={required ? \"true\" : undefined}\n                        data-size={sizeKey}\n                        data-density={densityKey}\n                        placeholder={placeholder}\n                        className={cx(\n                            useInnerNeutral ? innerInputNeutral : \"\",\n                            extra.className,\n                        )}\n                        style={extra.style}\n                        data-slot=\"input\"\n                        {...rest}\n                    />\n                );\n            }\n\n            // PLAIN: value-level prefix/suffix\n            const modelValue = (rest.value ?? rest.defaultValue ?? \"\") as\n                | string\n                | number\n                | readonly string[];\n\n            let displayValue =\n                typeof modelValue === \"string\"\n                    ? modelValue\n                    : Array.isArray(modelValue)\n                      ? modelValue.join(\",\")\n                      : String(modelValue ?? \"\");\n\n            if (prefix) {\n                const hasPrefix = displayValue.startsWith(prefix);\n\n                if (stripPrefix) {\n                    const withoutPrefix = hasPrefix\n                        ? displayValue.slice(prefix.length)\n                        : displayValue;\n                    displayValue = prefix + withoutPrefix;\n                } else {\n                    displayValue = hasPrefix\n                        ? displayValue\n                        : prefix + displayValue;\n                }\n            }\n\n            if (suffix) {\n                const hasSuffix = displayValue.endsWith(suffix);\n\n                if (stripSuffix) {\n                    const withoutSuffix = hasSuffix\n                        ? displayValue.slice(\n                              0,\n                              displayValue.length - suffix.length,\n                          )\n                        : displayValue;\n                    displayValue = withoutSuffix + suffix;\n                } else {\n                    displayValue = hasSuffix\n                        ? displayValue\n                        : displayValue + suffix;\n                }\n            }\n\n            return (\n                //@ts-ignore\n                <input\n                    ref={innerRef}\n                    type={type}\n                    data-slot=\"input\"\n                    className={cx(\n                        useInnerNeutral ? innerInputNeutral : \"\",\n                        extra.className,\n                    )}\n                    style={extra.style}\n                    disabled={disabled}\n                    readOnly={readOnly}\n                    aria-required={required ? \"true\" : undefined}\n                    data-size={sizeKey}\n                    data-density={densityKey}\n                    placeholder={placeholder}\n                    {...rest}\n                    value={displayValue}\n                    onChange={onChange as any}\n                    onBlur={onBlur as any}\n                    onFocus={handleFocus}\n                    onKeyDown={handleKeyDownWrapped as any}\n                    onKeyPress={handleKeyPressWrapped as any}\n                    onBeforeInput={handleBeforeInputWrapped as any}\n                    onPaste={handlePasteWrapped as any}\n                />\n            );\n        };\n\n        // RENDER MODES\n        // 1. No controls, no icons → simple input (input is the box)\n        if (!hasControls && !hasIcons && !hasCustomPadding) {\n            return renderBaseInput({\n                inner: false,\n                className: cx(baseBoxClasses, boxPaddingClasses, className),\n                style: varsStyle,\n            });\n        }\n\n        // 2. No controls, but icons and/or custom padding → wrapper + box input\n        if (!hasControls) {\n            return (\n                <div\n                    className={cx(\"relative w-full\")}\n                    style={style}\n                    data-slot=\"input-wrapper\"\n                    data-has-icons={hasIcons ? \"true\" : \"false\"}\n                >\n                    {renderBaseInput({\n                        inner: false,\n                        className: cx(\n                            baseBoxClasses,\n                            boxPaddingClasses,\n                            className,\n                        ),\n                        style: varsStyle,\n                    })}\n\n                    {hasLeadingIcons && (\n                        <div\n                            ref={leadingIconsRef}\n                            className=\"pointer-events-auto absolute inset-y-0 left-0 flex items-center cursor-pointer\"\n                            style={{\n                                gap: leadingGap,\n                                paddingLeft: `${pxDefault}px`,\n                            }}\n                            data-slot=\"leading-icons\"\n                            onMouseDown={handleIconMouseDown}\n                        >\n                            {resolvedLeadingIcons.map((node, idx) => (\n                                <span\n                                    key={idx}\n                                    className=\"flex items-center justify-center\"\n                                >\n                                    {node}\n                                </span>\n                            ))}\n                        </div>\n                    )}\n\n                    {hasTrailingIcons && (\n                        <div\n                            ref={trailingIconsRef}\n                            className=\"pointer-events-auto absolute inset-y-0 right-0 flex items-center cursor-pointer\"\n                            style={{\n                                gap: trailingGap,\n                                paddingRight: `${pxDefault}px`,\n                            }}\n                            data-slot=\"trailing-icons\"\n                            onMouseDown={handleIconMouseDown}\n                        >\n                            {resolvedTrailingIcons.map((node, idx) => (\n                                <span\n                                    key={idx}\n                                    className=\"flex items-center justify-center\"\n                                >\n                                    {node}\n                                </span>\n                            ))}\n                        </div>\n                    )}\n                </div>\n            );\n        }\n\n        // From here: we have controls → we take over the box.\n        // data-slot=\"input-group\" NEVER carries padding; padding is on input-region / input-box.\n\n        const innerInputClassJoined = innerInputNeutral;\n\n        // 3. Joined mode: controls + input share one visual box\n        if (hasControls && joinControls) {\n            const groupClassName = cx(\n                \"flex items-stretch w-full overflow-hidden\",\n                extendBoxToControls && cx(\"relative\", baseBoxClasses), // box is the group\n                !extendBoxToControls &&\n                    \"relative border-none shadow-none bg-transparent\",\n                className,\n            );\n\n            const inputRegionClassName = cx(\n                \"relative flex-1 flex items-center min-w-0\",\n                // When the group isn't the box, the region becomes the box.\n                !extendBoxToControls && baseBoxClasses,\n                \"pl-[var(--fp-pl)] pr-[var(--fp-pr)] pt-[var(--fp-pt)] pb-[var(--fp-pb)]\",\n            );\n\n            return (\n                <div\n                    className={groupClassName}\n                    style={varsStyle}\n                    data-slot=\"input-group\"\n                    data-has-extras={hasExtras ? \"true\" : \"false\"}\n                    data-disabled={disabled ? \"true\" : \"false\"}\n                    data-size={sizeKey}\n                    data-density={densityKey}\n                >\n                    {hasLeadingControl && (\n                        <div\n                            className={cx(\n                                \"flex items-center\",\n                                leadingControlClassName,\n                            )}\n                            data-slot=\"leading-control\"\n                        >\n                            {leadingControl}\n                        </div>\n                    )}\n\n                    <div\n                        className={inputRegionClassName}\n                        data-slot=\"input-region\"\n                    >\n                        {renderBaseInput({\n                            inner: true,\n                            className: innerInputClassJoined,\n                            style: undefined,\n                        })}\n\n                        {hasLeadingIcons && (\n                            <div\n                                ref={leadingIconsRef}\n                                className=\"absolute inset-y-0 left-0 flex items-center cursor-pointer\"\n                                style={{\n                                    gap: leadingGap,\n                                    paddingLeft: hasLeadingControl\n                                        ? undefined\n                                        : `${pxDefault}px`,\n                                }}\n                                data-slot=\"leading-icons\"\n                                onMouseDown={handleIconMouseDown}\n                            >\n                                {resolvedLeadingIcons.map((node, idx) => (\n                                    <span\n                                        key={idx}\n                                        className=\"flex items-center justify-center\"\n                                    >\n                                        {node}\n                                    </span>\n                                ))}\n                            </div>\n                        )}\n\n                        {hasTrailingIcons && (\n                            <div\n                                ref={trailingIconsRef}\n                                className=\"absolute inset-y-0 right-0 flex items-center cursor-pointer\"\n                                style={{\n                                    gap: trailingGap,\n                                    paddingRight: hasTrailingControl\n                                        ? undefined\n                                        : `${pxDefault}px`,\n                                }}\n                                data-slot=\"trailing-icons\"\n                                onMouseDown={handleIconMouseDown}\n                            >\n                                {resolvedTrailingIcons.map((node, idx) => (\n                                    <span\n                                        key={idx}\n                                        className=\"flex items-center justify-center\"\n                                    >\n                                        {node}\n                                    </span>\n                                ))}\n                            </div>\n                        )}\n                    </div>\n\n                    {hasTrailingControl && (\n                        <div\n                            className={cx(\n                                \"flex items-center\",\n                                trailingControlClassName,\n                            )}\n                            data-slot=\"trailing-control\"\n                        >\n                            {trailingControl}\n                        </div>\n                    )}\n                </div>\n            );\n        }\n\n        // 4. Separate mode: input box + separate neighbour controls\n        const standaloneBoxClassName = cx(\n            \"relative\",\n            baseBoxClasses,\n            \"pl-[var(--fp-pl)] pr-[var(--fp-pr)] pt-[var(--fp-pt)] pb-[var(--fp-pb)]\",\n            className,\n        );\n\n        return (\n            <div className=\"flex items-stretch gap-1 w-full\">\n                {hasLeadingControl && (\n                    <div\n                        className={cx(\n                            \"flex items-center\",\n                            leadingControlClassName,\n                        )}\n                        data-slot=\"leading-control\"\n                    >\n                        {leadingControl}\n                    </div>\n                )}\n\n                <div className=\"flex-1 min-w-0\">\n                    <div\n                        className={standaloneBoxClassName}\n                        style={varsStyle}\n                        data-slot=\"input-box\"\n                        data-has-extras={hasExtras ? \"true\" : \"false\"}\n                        data-disabled={disabled ? \"true\" : \"false\"}\n                        data-size={sizeKey}\n                        data-density={densityKey}\n                    >\n                        {renderBaseInput({\n                            inner: true,\n                            className: innerInputNeutral,\n                            style: undefined,\n                        })}\n\n                        {hasLeadingIcons && (\n                            <div\n                                ref={leadingIconsRef}\n                                className=\"absolute inset-y-0 left-0 flex items-center cursor-pointer\"\n                                style={{\n                                    gap: leadingGap,\n                                    paddingLeft: `${pxDefault}px`,\n                                }}\n                                data-slot=\"leading-icons\"\n                                onMouseDown={handleIconMouseDown}\n                            >\n                                {resolvedLeadingIcons.map((node, idx) => (\n                                    <span\n                                        key={idx}\n                                        className=\"flex items-center justify-center\"\n                                    >\n                                        {node}\n                                    </span>\n                                ))}\n                            </div>\n                        )}\n\n                        {hasTrailingIcons && (\n                            <div\n                                ref={trailingIconsRef}\n                                className=\"absolute inset-y-0 right-0 flex items-center cursor-pointer\"\n                                style={{\n                                    gap: trailingGap,\n                                    paddingRight: `${pxDefault}px`,\n                                }}\n                                data-slot=\"trailing-icons\"\n                                onMouseDown={handleIconMouseDown}\n                            >\n                                {resolvedTrailingIcons.map((node, idx) => (\n                                    <span\n                                        key={idx}\n                                        className=\"flex items-center justify-center\"\n                                    >\n                                        {node}\n                                    </span>\n                                ))}\n                            </div>\n                        )}\n                    </div>\n                </div>\n\n                {hasTrailingControl && (\n                    <div\n                        className={cx(\n                            \"flex items-center\",\n                            trailingControlClassName,\n                        )}\n                        data-slot=\"trailing-control\"\n                    >\n                        {trailingControl}\n                    </div>\n                )}\n            </div>\n        );\n    },\n);\n","// src/presets/ui/shadcn-variants/text.tsx\n// noinspection GrazieInspection\n\nimport * as React from \"react\";\n\nimport { Input } from \"@/presets/ui/input\";\nimport type {\n    ChangeDetail,\n    ExtraFieldProps,\n    VariantBaseProps,\n} from \"@/variants/shared\";\nimport type { InputMaskChangeEvent } from \"../ui/input-mask\";\n\ntype MaskMode = \"raw\" | \"masked\";\n\nfunction stripAffixes(value: string, prefix?: string, suffix?: string) {\n    let out = value ?? \"\";\n    if (prefix && out.startsWith(prefix)) out = out.slice(prefix.length);\n    if (suffix && out.endsWith(suffix)) out = out.slice(0, -suffix.length);\n    return out;\n}\n\n/**\n * Mask-related props for the Shadcn text variant.\n *\n * These are forwarded to the underlying <Input>, which in turn wires\n * them into the InputMask implementation.\n */\nexport interface ShadcnTextMaskProps {\n    /**\n     * Mask pattern – Primereact style.\n     * Example: \"99/99/9999\", \"(999) 999-9999\"\n     */\n    mask?: string;\n\n    /**\n     * Per-symbol definitions for slots.\n     * Kept for future custom engine; not used by the current\n     * react-input-mask implementation.\n     */\n    maskDefinitions?: Record<string, RegExp>;\n\n    /**\n     * Character used to visually represent an empty slot.\n     * Default: \"_\".\n     */\n    slotChar?: string;\n\n    /**\n     * If true, when the value is effectively \"empty\" (no unmasked chars),\n     * we emit an empty string \"\" instead of a fully-masked placeholder.\n     *\n     * NOTE: This behaviour is implemented in the variant, not Input,\n     * so we preserve your existing semantics.\n     */\n    autoClear?: boolean;\n\n    /**\n     * Whether the *model* value is raw or masked.\n     *\n     * - \"raw\" or true   → onValue receives unmasked value\n     * - \"masked\" or false/undefined → onValue receives full masked string\n     *\n     * NOTE: detail.raw is **always** the masked string.\n     */\n    unmask?: MaskMode | boolean;\n\n    /**\n     * Placeholder for future caret-mode logic when we go back\n     * to a custom engine. Currently unused, kept for API compatibility.\n     */\n    maskInsertMode?: \"stream\" | \"caret\";\n}\n\n/**\n * Extra UI props for the Shadcn text input (pure HTML-level).\n *\n * These are forwarded straight to the underlying <Input />.\n */\nexport type ShadcnTextUiProps = Omit<\n    React.InputHTMLAttributes<HTMLInputElement>,\n    \"value\" | \"defaultValue\" | \"onChange\" | \"size\"\n> & {\n    /**\n     * Extra classes applied only to the *inner* input element\n     * (the actual <input>, not the wrapper box).\n     */\n    inputClassName?: string;\n\n    /**\n     * Fixed prefix rendered as part of the input value, NOT as an icon.\n     * E.g. \"₦\", \"ID: \".\n     *\n     * The underlying <Input> will:\n     *  - take the model value (without prefix),\n     *  - render prefix + value,\n     *  - expose the full visible string in event.target.value.\n     */\n    prefix?: string;\n\n    /**\n     * Fixed suffix rendered as part of the input value, NOT as an icon.\n     * E.g. \"%\", \"kg\".\n     */\n    suffix?: string;\n\n    /**\n     * If true (default), we strip the prefix from the value\n     * before emitting it via `onValue`.\n     */\n    stripPrefix?: boolean;\n\n    /**\n     * If true (default), we strip the suffix from the value\n     * before emitting it via `onValue`.\n     */\n    stripSuffix?: boolean;\n} & ShadcnTextMaskProps;\n\n/**\n * Props for the Shadcn-based text variant.\n *\n * This is a *form* wrapper around the base <Input />:\n *  - Handles value ↔ ChangeDetail mapping.\n *  - Delegates all visual concerns (masking, affixes, icons, controls,\n *    size, density) to the Input component.\n */\nexport type ShadcnTextVariantProps = ExtraFieldProps<\n    VariantBaseProps<string | undefined>\n> & {\n    /**\n     * If true and there are controls, the input + controls share one box\n     * (borders, radius, focus states).\n     *\n     * Delegated to the underlying <Input />.\n     */\n    joinControls?: boolean;\n\n    /**\n     * When joinControls is true, whether the box styling extends over controls\n     * (true) or controls are visually separate (false).\n     */\n    extendBoxToControls?: boolean;\n} & ShadcnTextUiProps;\n\nexport const ShadcnTextVariant = React.forwardRef<\n    HTMLInputElement,\n    ShadcnTextVariantProps & ShadcnTextUiProps\n>(function ShadcnTextVariant(props, forwardedRef) {\n    const {\n        // form-level props\n        value,\n        onValue,\n        disabled,\n        readOnly,\n        required,\n        error,\n        size,\n        density,\n\n        // extras from VariantBaseProps / ExtraFieldProps\n        leadingIcons,\n        trailingIcons,\n        icon,\n        iconGap,\n        leadingIconSpacing,\n        trailingIconSpacing,\n        leadingControl,\n        trailingControl,\n        leadingControlClassName,\n        trailingControlClassName,\n        px,\n        py,\n        ps,\n        pe,\n        pb,\n\n        joinControls = true,\n        extendBoxToControls = true,\n\n        // masking\n        mask,\n        maskDefinitions,\n        slotChar,\n        autoClear,\n        unmask,\n        maskInsertMode,\n\n        // affixes\n        prefix,\n        suffix,\n        stripPrefix = true,\n        stripSuffix = true,\n\n        // visual props\n        inputClassName,\n        className,\n        style,\n        ...rest\n    } = props;\n\n    const isMasked = Boolean(mask);\n\n    // ─────────────────────────────────────────────\n    // Plain change handler (unmasked <Input />)\n    // ─────────────────────────────────────────────\n\n    const handlePlainChange = React.useCallback(\n        (e: React.ChangeEvent<HTMLInputElement>) => {\n            const displayed = e.target.value ?? \"\";\n\n            let modelValue = displayed;\n\n            // strip prefix if configured\n            if (prefix && stripPrefix && modelValue.startsWith(prefix)) {\n                modelValue = modelValue.slice(prefix.length);\n            }\n\n            // strip suffix if configured\n            if (suffix && stripSuffix && modelValue.endsWith(suffix)) {\n                modelValue = modelValue.slice(\n                    0,\n                    modelValue.length - suffix.length\n                );\n            }\n\n            const detail: ChangeDetail = {\n                source: \"variant\",\n                raw: displayed, // actual visible value (with affixes)\n                nativeEvent: e,\n                meta: {\n                    prefix,\n                    suffix,\n                    stripPrefix,\n                    stripSuffix,\n                    model: modelValue,\n                },\n            };\n\n            onValue?.(modelValue, detail);\n        },\n        [onValue, prefix, suffix, stripPrefix, stripSuffix]\n    );\n\n    // ─────────────────────────────────────────────\n    // Masked change handler (InputMask under <Input />)\n    // ─────────────────────────────────────────────\n\n    const handleMaskedChange = React.useCallback(\n        (e: InputMaskChangeEvent) => {\n            const maskedValue = e.value ?? \"\";\n            const maskedValueWithoutAffixes = stripAffixes(\n                maskedValue,\n                prefix,\n                suffix\n            );\n\n            // Same heuristic as your original variant:\n            // \"Unmasked\" = characters that would normally be accepted by masks.\n            const unmaskedInner =\n                maskedValueWithoutAffixes.match(/[0-9A-Za-z]/g)?.join(\"\") ?? \"\";\n\n            const mode: MaskMode =\n                unmask === true || unmask === \"raw\" ? \"raw\" : \"masked\";\n\n            // IMPORTANT: detail.raw is ALWAYS the masked value.\n            const detail: ChangeDetail = {\n                source: \"variant\",\n                raw: maskedValue,\n                nativeEvent: e.originalEvent as any,\n                meta: {\n                    masked: maskedValue,\n                    unmasked: unmaskedInner,\n                    mode,\n                    prefix,\n                    suffix,\n                },\n            };\n\n            let emitValue = mode === \"raw\" ? unmaskedInner : maskedValue;\n\n            // autoClear: if nothing \"real\" was typed, treat as empty.\n            if (autoClear && unmaskedInner.length === 0) {\n                emitValue = \"\";\n            }\n\n            onValue?.(emitValue, detail);\n        },\n        [onValue, unmask, autoClear, prefix, suffix]\n    );\n\n    // Variant-level \"model\" is always the raw value you store.\n    // The underlying <Input> is responsible for visually applying prefix/suffix\n    // or mask literals on top of this model.\n    const modelValue = value ?? \"\";\n\n    return (\n        <Input\n            ref={forwardedRef}\n            // visual & sizing\n            className={className}\n            style={style}\n            size={size as any}\n            density={density as any}\n            inputClassName={inputClassName}\n            // flags\n            disabled={disabled}\n            readOnly={readOnly}\n            required={required}\n            aria-invalid={error ? \"true\" : undefined}\n            // masking\n            mask={mask}\n            maskDefinitions={maskDefinitions}\n            slotChar={slotChar}\n            autoClear={autoClear}\n            unmask={unmask}\n            maskInsertMode={maskInsertMode}\n            // affixes (value-level, not icons)\n            prefix={prefix}\n            suffix={suffix}\n            stripPrefix={stripPrefix}\n            stripSuffix={stripSuffix}\n            // icons & controls\n            leadingIcons={leadingIcons}\n            trailingIcons={trailingIcons}\n            icon={icon}\n            iconGap={iconGap}\n            leadingIconSpacing={leadingIconSpacing}\n            trailingIconSpacing={trailingIconSpacing}\n            leadingControl={leadingControl}\n            trailingControl={trailingControl}\n            leadingControlClassName={leadingControlClassName}\n            trailingControlClassName={trailingControlClassName}\n            joinControls={joinControls}\n            extendBoxToControls={extendBoxToControls}\n            px={px}\n            py={py}\n            ps={ps}\n            pe={pe}\n            pb={pb}\n            // value & event mapping\n            value={modelValue}\n            onChange={\n                isMasked\n                    ? (handleMaskedChange as any)\n                    : (handlePlainChange as any)\n            }\n            {...rest}\n        />\n    );\n});\n\nShadcnTextVariant.displayName = \"ShadcnTextVariant\";\n\nexport default ShadcnTextVariant;\n","// src/variants/core/text.tsx\n\nimport * as React from \"react\";\n\nimport type { Dict } from \"@/schema/core\";\nimport type { VariantModule } from \"@/schema/variant\";\nimport type { ValidateResult } from \"@/schema/input-field\";\nimport { ShadcnTextVariant } from \"@/presets/shadcn-variants/text\";\nimport type { ShadcnTextUiProps, ShadcnTextVariantProps } from \"@/presets/shadcn-variants/text\";\n\n/**\n * Text variant props (core layer).\n *\n * - Extends Dict so it can cleanly participate in the Variants registry.\n * - Extends the Shadcn UI props so the core variant can pass everything\n *   straight through to the underlying visual component.\n *\n * This is where we hang *semantic* flags that drive validation.\n */\nexport interface TextVariantProps extends Dict, ShadcnTextUiProps {\n    /**\n     * If true, the value will be trimmed before validation.\n     * (Visual value is still whatever the user types; this is just for\n     * validation semantics.)\n     */\n    trim?: boolean;\n\n    /**\n     * Minimum allowed string length (after optional trimming).\n     */\n    minLength?: number;\n\n    /**\n     * Maximum allowed string length (after optional trimming).\n     */\n    maxLength?: number;\n}\n\n/**\n * Simple validation helper for the text variant.\n */\nfunction validateText(\n    value: string | undefined,\n    ctx: {\n        required?: boolean;\n        props: ShadcnTextVariantProps & TextVariantProps;\n    }\n): ValidateResult {\n    const { required, props } = ctx;\n    const { trim, minLength, maxLength } = props;\n\n    const raw = value ?? \"\";\n    const v = trim ? raw.trim() : raw;\n\n    // required\n    if (required && v.length === 0) {\n        return \"This field is required.\";\n    }\n\n    // minLength\n    if (typeof minLength === \"number\" && v.length > 0 && v.length < minLength) {\n        return `Please enter at least ${minLength} characters.`;\n    }\n\n    // maxLength\n    if (typeof maxLength === \"number\" && v.length > maxLength) {\n        return `Please enter no more than ${maxLength} characters.`;\n    }\n\n    return true;\n}\n\n/**\n * Core text variant module.\n *\n * - Uses ShadcnTextVariant as the visual component.\n * - Adds simple length-based validation.\n * - Provides layout defaults for InputField to use.\n */\nexport const textVariant: VariantModule<\"text\"> = {\n    variant: \"text\",\n\n    // Visual component: Shadcn-based text input\n    Variant: ShadcnTextVariant,\n\n    // Validation logic (runs before/alongside per-field onValidate)\n    validate(value, { required, props, field, form }) {\n        //@ts-ignore field + form are available if you need them later.\n        return validateText(value, { required, props });\n    },\n\n    // Layout defaults for this variant\n    defaults: {\n        layout: {\n            labelPlacement: \"top\",\n            sublabelPlacement: \"right\",\n            descriptionPlacement: \"below\",\n            helpTextPlacement: \"below\",\n            errorTextPlacement: \"below\",\n            inline: false,\n            fullWidth: true,\n            defaultSize: \"md\",\n            defaultDensity: \"comfortable\",\n        },\n    },\n\n    meta: {\n        label: \"Text\",\n        description: \"Single-line text input\",\n        tags: [\"text\", \"input\", \"string\"],\n    },\n};\n\nexport default textVariant;","import * as React from \"react\";\nimport { ShadcnTextVariantProps } from \"../shadcn-variants/text\";\nimport { FieldSize } from \"@/variants/shared\";\nimport { Input } from \"./input\";\n\ntype InputRef = HTMLInputElement;\n\nexport interface InputNumberValueChangeEvent {\n    originalEvent: React.SyntheticEvent<any> | null;\n    value: number | null;\n    stopPropagation(): void;\n    preventDefault(): void;\n    target: {\n        name?: string | null;\n        id?: string | null;\n        value: number | null;\n    };\n}\n\nexport interface InputNumberProps\n    extends\n        Omit<ShadcnTextVariantProps, \"min\" | \"max\" | \"value\">,\n        Omit<\n            React.InputHTMLAttributes<HTMLInputElement>,\n            | \"value\"\n            | \"defaultValue\"\n            | \"onChange\"\n            | \"onInput\"\n            | \"onKeyDown\"\n            | \"onKeyUp\"\n            | \"size\"\n            | \"max\"\n            | \"min\"\n        > {\n    onKeyUp?(event: React.KeyboardEvent<HTMLInputElement>): unknown;\n    onKeyDown?(event: React.KeyboardEvent<HTMLInputElement>): unknown;\n\n    value?: number | null;\n\n    /** Emitted when the numeric value changes (Prime-style). */\n    onValueChange?: (e: InputNumberValueChangeEvent) => void;\n\n    /** Optional simple change handler (numeric value). */\n    onChange?: (e: {\n        originalEvent: React.SyntheticEvent<any>;\n        value: number | null;\n    }) => void;\n\n    locale?: string;\n    localeMatcher?: Intl.NumberFormatOptions[\"localeMatcher\"];\n\n    mode?: \"decimal\" | \"currency\";\n    currency?: string;\n    currencyDisplay?: Intl.NumberFormatOptions[\"currencyDisplay\"];\n\n    useGrouping?: boolean;\n\n    minFractionDigits?: number;\n    maxFractionDigits?: number;\n\n    roundingMode?: Intl.NumberFormatOptions[\"roundingMode\"];\n\n    min?: number | null;\n    max?: number | null;\n\n    step?: number;\n\n    allowEmpty?: boolean;\n\n    /** If false: show raw (no Intl formatting) even when blurred */\n    format?: boolean;\n\n    inputId?: string;\n    inputClassName?: string;\n    inputStyle?: React.CSSProperties;\n    inputRef?: React.Ref<InputRef> | null;\n\n    prefix?: string;\n    suffix?: string;\n\n    size?: FieldSize;\n\n    invalid?: boolean;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Helpers                                                                     */\n/* -------------------------------------------------------------------------- */\n\nfunction clampToLimits(\n    n: number,\n    min: number | null | undefined,\n    max: number | null | undefined,\n): number {\n    let out = n;\n    if (min != null && out < min) out = min;\n    if (max != null && out > max) out = max;\n    return out;\n}\n\nfunction isFiniteNumber(n: unknown): n is number {\n    return typeof n === \"number\" && Number.isFinite(n);\n}\n\nfunction sanitizeNumberish(value: number | null | undefined): number | null {\n    return isFiniteNumber(value) ? value : null;\n}\n\nfunction resolveLocale(explicit?: string) {\n    if (explicit) return explicit;\n    if (typeof navigator !== \"undefined\" && navigator.language)\n        return navigator.language;\n    return \"en-US\";\n}\n\nfunction getDecimalSeparator(locale: string) {\n    const s = new Intl.NumberFormat(locale, { useGrouping: false }).format(1.1);\n    // \"1.1\" -> \".\"\n    const m = s.match(/1(.?)1/);\n    return m?.[1] || \".\";\n}\n\nfunction stripAffixes(text: string, prefix?: string, suffix?: string) {\n    let t = text ?? \"\";\n    if (prefix && t.startsWith(prefix)) t = t.slice(prefix.length);\n    if (suffix && t.endsWith(suffix)) t = t.slice(0, -suffix.length);\n    return t;\n}\n\nfunction stripGrouping(text: string, locale: string) {\n    const group = new Intl.NumberFormat(locale, { useGrouping: true })\n        .format(1000000)\n        .replace(/[0-9]/g, \"\")\n        .trim()\n        .charAt(0);\n\n    if (!group) return text;\n    // Escape special regex chars\n    const re = new RegExp(`\\\\${group}`, \"g\");\n    return text.replace(re, \"\");\n}\n\n/**\n * Convert an \"editable string\" to a number:\n * - accepts \"-\", \"\", \"12.\", \"12.0\"\n * - uses locale decimal separator\n */\nfunction parseEditable(\n    editable: string,\n    locale: string,\n    decimalSep: string,\n): number | null {\n    const t = editable.trim();\n    if (!t || t === \"-\" || t === decimalSep) return null;\n\n    // remove grouping if any sneaks in\n    const noGroup = stripGrouping(t, locale);\n\n    // normalize decimal sep to \".\"\n    const normalized =\n        decimalSep === \".\" ? noGroup : noGroup.replace(decimalSep, \".\");\n\n    // allow trailing dot: \"12.\" -> 12\n    const cleaned = normalized.endsWith(\".\")\n        ? normalized.slice(0, -1)\n        : normalized;\n\n    if (!cleaned || cleaned === \"-\") return null;\n\n    const n = Number(cleaned);\n    return Number.isFinite(n) ? n : null;\n}\n\nfunction formatDisplayNumber(\n    n: number,\n    locale: string,\n    opts: Intl.NumberFormatOptions,\n    prefix?: string,\n    suffix?: string,\n) {\n    if (!isFiniteNumber(n)) return \"\";\n    const f = new Intl.NumberFormat(locale, opts).format(n);\n    return `${prefix ?? \"\"}${f}${suffix ?? \"\"}`;\n}\n\n/**\n * Enforce maxFractionDigits with a \"replace when full\" policy.\n * If caret is inside fraction and fraction is already full, replace instead of pushing.\n */\nfunction applyFractionLimitReplace(\n    next: string,\n    prev: string,\n    locale: string,\n    decimalSep: string,\n    maxFractionDigits: number | undefined,\n    inputEl: HTMLInputElement,\n) {\n    if (maxFractionDigits == null)\n        return { text: next, caret: inputEl.selectionStart ?? next.length };\n\n    const selStart = inputEl.selectionStart ?? 0;\n    const selEnd = inputEl.selectionEnd ?? selStart;\n\n    // Identify decimal position in next\n    const decIndex = next.indexOf(decimalSep);\n    if (decIndex === -1) return { text: next, caret: selStart };\n\n    const frac = next.slice(decIndex + 1);\n    if (frac.length <= maxFractionDigits)\n        return { text: next, caret: selStart };\n\n    // We exceeded limit. If selection replaces text, just trim.\n    if (selEnd > selStart) {\n        const trimmed = next.slice(0, decIndex + 1 + maxFractionDigits);\n        const caret = Math.min(selStart, trimmed.length);\n        return { text: trimmed, caret };\n    }\n\n    // No selection: replace behavior.\n    // If caret is in fraction region, replace the digit at caret-1 (the newly inserted char position) if possible.\n    const caret = selStart;\n    const fracStart = decIndex + 1;\n    const fracEnd = fracStart + maxFractionDigits;\n\n    // Keep only allowed fraction length, but try to preserve the \"typed digit\"\n    // Strategy: trim to max, but if caret is beyond allowed, clamp caret.\n    const trimmed = next.slice(0, fracEnd);\n\n    const clampedCaret = Math.min(caret, trimmed.length);\n\n    return { text: trimmed, caret: clampedCaret };\n}\n\nfunction normalizeEditable(\n    raw: string,\n    locale: string,\n    decimalSep: string,\n    allowMinus: boolean,\n) {\n    let t = raw;\n\n    // strip grouping always in edit mode\n    t = stripGrouping(t, locale);\n\n    // allow only digits, decimalSep, and \"-\"\n    const allowed = new RegExp(`[^0-9\\\\${decimalSep}\\\\-]`, \"g\");\n    t = t.replace(allowed, \"\");\n\n    // handle multiple minus signs\n    const minusCount = (t.match(/\\-/g) || []).length;\n    if (minusCount) {\n        t = t.replace(/\\-/g, \"\");\n        if (allowMinus) t = \"-\" + t;\n    }\n\n    // allow only one decimal separator\n    const firstDec = t.indexOf(decimalSep);\n    if (firstDec !== -1) {\n        const before = t.slice(0, firstDec + 1);\n        const after = t\n            .slice(firstDec + 1)\n            .replace(new RegExp(`\\\\${decimalSep}`, \"g\"), \"\");\n        t = before + after;\n    }\n\n    // avoid \"-.\" -> \"-0.\"\n    if (t === \"-\" + decimalSep) t = \"-0\" + decimalSep;\n    if (t === decimalSep) t = \"0\" + decimalSep;\n\n    return t;\n}\n\nexport const InputNumber = React.memo(\n    React.forwardRef<InputRef, InputNumberProps>((inProps, ref) => {\n        const props: InputNumberProps = {\n            allowEmpty: true,\n            autoFocus: false,\n            format: true,\n            locale: undefined,\n            localeMatcher: undefined,\n            mode: \"decimal\",\n            useGrouping: true,\n            step: 1,\n            roundingMode: undefined,\n            type: \"text\",\n            ...inProps,\n        };\n\n        const locale = React.useMemo(\n            () => resolveLocale(props.locale),\n            [props.locale],\n        );\n        const decimalSep = React.useMemo(\n            () => getDecimalSeparator(locale),\n            [locale],\n        );\n\n        const allowMinus = React.useMemo(\n            () => props.min == null || props.min < 0,\n            [props.min],\n        );\n\n        const fmtOptions = React.useMemo<Intl.NumberFormatOptions>(() => {\n            return {\n                localeMatcher: props.localeMatcher,\n                style: props.mode,\n                currency: props.currency,\n                currencyDisplay: props.currencyDisplay,\n                useGrouping: props.useGrouping,\n                minimumFractionDigits:\n                    props.minFractionDigits !== undefined\n                        ? props.minFractionDigits\n                        : undefined,\n                maximumFractionDigits:\n                    props.maxFractionDigits !== undefined\n                        ? props.maxFractionDigits\n                        : undefined,\n                roundingMode: props.roundingMode,\n            };\n        }, [\n            props.localeMatcher,\n            props.mode,\n            props.currency,\n            props.currencyDisplay,\n            props.useGrouping,\n            props.minFractionDigits,\n            props.maxFractionDigits,\n            props.roundingMode,\n        ]);\n\n        const inputRef = React.useRef<InputRef | null>(null);\n        React.useImperativeHandle(ref, () => inputRef.current as InputRef);\n\n        // display string is the single source of truth for what the user sees\n        const [display, setDisplay] = React.useState<string>(\"\");\n\n        // track focus to choose between edit-mode display and formatted display\n        const [focused, setFocused] = React.useState(false);\n\n        // When focused we keep an \"editable\" view (no grouping, no prefix/suffix)\n        const toEditableFromNumber = React.useCallback(\n            (n: number) => {\n                // keep decimal separator for locale in edit mode\n                // we DO NOT pad here; padding happens on blur formatting\n                const s = String(n);\n                return decimalSep === \".\" ? s : s.replace(\".\", decimalSep);\n            },\n            [decimalSep],\n        );\n\n        const clampModel = React.useCallback(\n            (n: number) => clampToLimits(n, props.min, props.max),\n            [props.min, props.max],\n        );\n\n        const emit = React.useCallback(\n            (event: React.SyntheticEvent<any> | null, value: number | null) => {\n                const safeValue = sanitizeNumberish(value);\n\n                props.onValueChange?.({\n                    originalEvent: event,\n                    value: safeValue,\n                    stopPropagation() {\n                        event?.stopPropagation();\n                    },\n                    preventDefault() {\n                        event?.preventDefault();\n                    },\n                    target: {\n                        name: props.name ?? null,\n                        id: props.id ?? null,\n                        value: safeValue,\n                    },\n                });\n\n                if (props.onChange && event) {\n                    props.onChange({ originalEvent: event, value: safeValue });\n                }\n            },\n            [props],\n        );\n\n        const setCaret = (pos: number) => {\n            const el = inputRef.current;\n            if (!el) return;\n            // next tick to ensure value applied\n            queueMicrotask(() => {\n                try {\n                    el.setSelectionRange(pos, pos);\n                } catch {}\n            });\n        };\n\n        const formatFromModel = React.useCallback(\n            (n: number | null) => {\n                const safeNumber = sanitizeNumberish(n);\n                if (safeNumber == null) return \"\";\n                if (!props.format) return toEditableFromNumber(safeNumber);\n\n                const formatted = formatDisplayNumber(\n                    safeNumber,\n                    locale,\n                    fmtOptions,\n                    props.prefix,\n                    props.suffix,\n                );\n                return formatted;\n            },\n            [\n                props.format,\n                props.prefix,\n                props.suffix,\n                locale,\n                fmtOptions,\n                toEditableFromNumber,\n            ],\n        );\n\n        const getModelFromDisplay = React.useCallback(\n            (text: string) => {\n                const stripped = stripAffixes(text, props.prefix, props.suffix);\n                const withoutGroup = stripGrouping(stripped, locale);\n                // Accept both \".\" and locale decimal while parsing (people may type \".\")\n                const candidate =\n                    decimalSep !== \".\"\n                        ? withoutGroup.replace(\".\", decimalSep)\n                        : withoutGroup;\n\n                const n = parseEditable(candidate, locale, decimalSep);\n                if (n == null) return null;\n\n                const clamped = clampModel(n);\n                return clamped;\n            },\n            [props.prefix, props.suffix, locale, decimalSep, clampModel],\n        );\n\n        const syncFromPropsValue = React.useCallback(\n            (v: number | null | undefined) => {\n                const safeValue = sanitizeNumberish(v);\n                if (safeValue == null) {\n                    setDisplay(\"\");\n                    return;\n                }\n                const clamped = clampModel(safeValue);\n                setDisplay(\n                    focused\n                        ? toEditableFromNumber(clamped)\n                        : formatFromModel(clamped),\n                );\n            },\n            [clampModel, focused, toEditableFromNumber, formatFromModel],\n        );\n\n        // initial\n        React.useEffect(() => {\n            syncFromPropsValue(props.value ?? null);\n            // eslint-disable-next-line react-hooks/exhaustive-deps\n        }, []);\n\n        // controlled updates\n        React.useEffect(() => {\n            // if parent updates while focused, we DO NOT stomp the user's raw typing\n            if (focused) return;\n            syncFromPropsValue(props.value ?? null);\n        }, [props.value, focused, syncFromPropsValue]);\n\n        const onFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n            setFocused(true);\n            props.onFocus?.(e);\n\n            const model = isFiniteNumber(props.value)\n                ? clampModel(props.value)\n                : getModelFromDisplay(display);\n\n            const editable =\n                model == null\n                    ? stripAffixes(display, props.prefix, props.suffix)\n                    : toEditableFromNumber(model);\n            const normalized = normalizeEditable(\n                editable,\n                locale,\n                decimalSep,\n                allowMinus,\n            );\n\n            setDisplay(normalized);\n\n            // Prime-like: put caret at end in edit mode\n            queueMicrotask(() => {\n                setCaret((inputRef.current?.value ?? \"\").length);\n            });\n        };\n\n        const onBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n            setFocused(false);\n\n            const el = e.currentTarget;\n            const raw = stripAffixes(el.value, props.prefix, props.suffix);\n            const normalized = normalizeEditable(\n                raw,\n                locale,\n                decimalSep,\n                allowMinus,\n            );\n\n            const parsed = parseEditable(normalized, locale, decimalSep);\n            let model: number | null =\n                parsed == null ? null : clampModel(parsed);\n\n            if (model == null && props.allowEmpty === false) {\n                const fallback = props.min ?? 0;\n                model = clampModel(fallback);\n            }\n\n            // format display on blur and KEEP it\n            setDisplay(formatFromModel(model));\n\n            // emit (Prime does emit on blur if value changed — you can rely on this)\n            emit(e, model);\n\n            props.onBlur?.(e);\n        };\n\n        const onChangeText = (e: React.ChangeEvent<HTMLInputElement>) => {\n            if (props.disabled || props.readOnly) return;\n\n            const el = e.currentTarget;\n\n            // caret before normalization\n            const caretBefore = el.selectionStart ?? el.value.length;\n\n            // strip prefix/suffix if user somehow includes them\n            const stripped = stripAffixes(el.value, props.prefix, props.suffix);\n\n            // normalize into editable form\n            let next = normalizeEditable(\n                stripped,\n                locale,\n                decimalSep,\n                allowMinus,\n            );\n\n            // Enforce fraction limit with \"replace when full\" behavior\n            const fracLimit = props.maxFractionDigits;\n            if (fracLimit != null) {\n                const applied = applyFractionLimitReplace(\n                    next,\n                    display,\n                    locale,\n                    decimalSep,\n                    fracLimit,\n                    el,\n                );\n                next = applied.text;\n                // after setDisplay we restore caret\n                setDisplay(next);\n                setCaret(applied.caret);\n            } else {\n                setDisplay(next);\n                setCaret(caretBefore);\n            }\n\n            // emit numeric model (clamped)\n            const parsed = parseEditable(next, locale, decimalSep);\n            const model = parsed == null ? null : clampModel(parsed);\n\n            // enforce allowEmpty\n            const finalModel =\n                model == null && props.allowEmpty === false\n                    ? clampModel(props.min ?? 0)\n                    : model;\n\n            emit(e, finalModel);\n        };\n\n        // Better inputMode defaults\n        const inputMode =\n            props.inputMode ||\n            (props.mode === \"decimal\" &&\n            props.maxFractionDigits == null &&\n            props.minFractionDigits == null\n                ? \"numeric\"\n                : \"decimal\");\n\n        const inputClassName = [\n            props.inputClassName,\n            props.invalid ? \"p-invalid\" : undefined,\n        ]\n            .filter(Boolean)\n            .join(\" \");\n\n        const {\n            inputId,\n            inputStyle,\n            leadingControl,\n            trailingControl,\n            leadingControlClassName,\n            trailingControlClassName,\n            value,\n            icon,\n            iconGap,\n            ...passThroughProps\n        } = props;\n\n        return (\n            //@ts-ignore\n            <Input\n                ref={(node) => {\n                    inputRef.current = node;\n                    if (typeof props.inputRef === \"function\")\n                        props.inputRef(node);\n                    else if (\n                        props.inputRef &&\n                        typeof props.inputRef === \"object\"\n                    ) {\n                        (\n                            props.inputRef as React.MutableRefObject<InputRef | null>\n                        ).current = node;\n                    }\n                }}\n                {...passThroughProps}\n                id={inputId ?? props.id}\n                style={inputStyle ?? props.style}\n                role=\"spinbutton\"\n                className={inputClassName || props.className}\n                type={props.type ?? \"text\"}\n                inputMode={inputMode}\n                value={display}\n                onFocus={onFocus}\n                onBlur={onBlur}\n                onChange={onChangeText}\n                leadingControl={leadingControl}\n                trailingControl={trailingControl}\n                leadingControlClassName={leadingControlClassName}\n                trailingControlClassName={trailingControlClassName}\n                icon={icon}\n                iconGap={iconGap}\n            />\n        );\n    }),\n);\n\nInputNumber.displayName = \"InputNumber\";\n","import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n  string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n  string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n    p2 ? p2.toUpperCase() : p1.toLowerCase(),\n  );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n  const camelCase = toCamelCase(string);\n\n  return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n  classes\n    .filter((className, index, array) => {\n      return (\n        Boolean(className) &&\n        (className as string).trim() !== '' &&\n        array.indexOf(className) === index\n      );\n    })\n    .join(' ')\n    .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n  for (const prop in props) {\n    if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n      return true;\n    }\n  }\n};\n","export default {\n  xmlns: 'http://www.w3.org/2000/svg',\n  width: 24,\n  height: 24,\n  viewBox: '0 0 24 24',\n  fill: 'none',\n  stroke: 'currentColor',\n  strokeWidth: 2,\n  strokeLinecap: 'round',\n  strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n  iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n  (\n    {\n      color = 'currentColor',\n      size = 24,\n      strokeWidth = 2,\n      absoluteStrokeWidth,\n      className = '',\n      children,\n      iconNode,\n      ...rest\n    },\n    ref,\n  ) =>\n    createElement(\n      'svg',\n      {\n        ref,\n        ...defaultAttributes,\n        width: size,\n        height: size,\n        stroke: color,\n        strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n        className: mergeClasses('lucide', className),\n        ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n        ...rest,\n      },\n      [\n        ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n        ...(Array.isArray(children) ? children : [children]),\n      ],\n    ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n  const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n    createElement(Icon, {\n      ref,\n      iconNode,\n      className: mergeClasses(\n        `lucide-${toKebabCase(toPascalCase(iconName))}`,\n        `lucide-${iconName}`,\n        className,\n      ),\n      ...props,\n    }),\n  );\n\n  Component.displayName = toPascalCase(iconName);\n\n  return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M8 2v4', key: '1cmpym' }],\n  ['path', { d: 'M16 2v4', key: '4m81vk' }],\n  ['rect', { width: '18', height: '18', x: '3', y: '4', rx: '2', key: '1hopcy' }],\n  ['path', { d: 'M3 10h18', key: '8toen8' }],\n];\n\n/**\n * @component @name Calendar\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAydjQiIC8+CiAgPHBhdGggZD0iTTE2IDJ2NCIgLz4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjQiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Ik0zIDEwaDE4IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/calendar\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Calendar = createLucideIcon('calendar', __iconNode);\n\nexport default Calendar;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm15 18-6-6 6-6', key: '1wnfg3' }]];\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTgtNi02IDYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronLeft = createLucideIcon('chevron-left', __iconNode);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm18 15-6-6-6 6', key: '153udz' }]];\n\n/**\n * @component @name ChevronUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTggMTUtNi02LTYgNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronUp = createLucideIcon('chevron-up', __iconNode);\n\nexport default ChevronUp;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n  ['line', { x1: '12', x2: '12', y1: '8', y2: '12', key: '1pkeuh' }],\n  ['line', { x1: '12', x2: '12.01', y1: '16', y2: '16', key: '4dfq90' }],\n];\n\n/**\n * @component @name CircleAlert\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjgiIHkyPSIxMiIgLz4KICA8bGluZSB4MT0iMTIiIHgyPSIxMi4wMSIgeTE9IjE2IiB5Mj0iMTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/circle-alert\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CircleAlert = createLucideIcon('circle-alert', __iconNode);\n\nexport default CircleAlert;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n  ['path', { d: 'm9 12 2 2 4-4', key: 'dzmm74' }],\n];\n\n/**\n * @component @name CircleCheck\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8cGF0aCBkPSJtOSAxMiAyIDIgNC00IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/circle-check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CircleCheck = createLucideIcon('circle-check', __iconNode);\n\nexport default CircleCheck;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }]];\n\n/**\n * @component @name Circle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Circle = createLucideIcon('circle', __iconNode);\n\nexport default Circle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M12 13v8', key: '1l5pq0' }],\n  ['path', { d: 'M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242', key: '1pljnt' }],\n  ['path', { d: 'm8 17 4-4 4 4', key: '1quai1' }],\n];\n\n/**\n * @component @name CloudUpload\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTN2OCIgLz4KICA8cGF0aCBkPSJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiIgLz4KICA8cGF0aCBkPSJtOCAxNyA0LTQgNCA0IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/cloud-upload\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CloudUpload = createLucideIcon('cloud-upload', __iconNode);\n\nexport default CloudUpload;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'm18 16 4-4-4-4', key: '1inbqp' }],\n  ['path', { d: 'm6 8-4 4 4 4', key: '15zrgr' }],\n  ['path', { d: 'm14.5 4-5 16', key: 'e7oirm' }],\n];\n\n/**\n * @component @name CodeXml\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTggMTYgNC00LTQtNCIgLz4KICA8cGF0aCBkPSJtNiA4LTQgNCA0IDQiIC8+CiAgPHBhdGggZD0ibTE0LjUgNC01IDE2IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/code-xml\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CodeXml = createLucideIcon('code-xml', __iconNode);\n\nexport default CodeXml;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49',\n      key: 'ct8e1f',\n    },\n  ],\n  ['path', { d: 'M14.084 14.158a3 3 0 0 1-4.242-4.242', key: '151rxh' }],\n  [\n    'path',\n    {\n      d: 'M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143',\n      key: '13bj9a',\n    },\n  ],\n  ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n];\n\n/**\n * @component @name EyeOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAuNzMzIDUuMDc2YTEwLjc0NCAxMC43NDQgMCAwIDEgMTEuMjA1IDYuNTc1IDEgMSAwIDAgMSAwIC42OTYgMTAuNzQ3IDEwLjc0NyAwIDAgMS0xLjQ0NCAyLjQ5IiAvPgogIDxwYXRoIGQ9Ik0xNC4wODQgMTQuMTU4YTMgMyAwIDAgMS00LjI0Mi00LjI0MiIgLz4KICA8cGF0aCBkPSJNMTcuNDc5IDE3LjQ5OWExMC43NSAxMC43NSAwIDAgMS0xNS40MTctNS4xNTEgMSAxIDAgMCAxIDAtLjY5NiAxMC43NSAxMC43NSAwIDAgMSA0LjQ0Ni01LjE0MyIgLz4KICA8cGF0aCBkPSJtMiAyIDIwIDIwIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/eye-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst EyeOff = createLucideIcon('eye-off', __iconNode);\n\nexport default EyeOff;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\n      key: '1nclc0',\n    },\n  ],\n  ['circle', { cx: '12', cy: '12', r: '3', key: '1v7zrd' }],\n];\n\n/**\n * @component @name Eye\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMi4wNjIgMTIuMzQ4YTEgMSAwIDAgMSAwLS42OTYgMTAuNzUgMTAuNzUgMCAwIDEgMTkuODc2IDAgMSAxIDAgMCAxIDAgLjY5NiAxMC43NSAxMC43NSAwIDAgMS0xOS44NzYgMCIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/eye\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Eye = createLucideIcon('eye', __iconNode);\n\nexport default Eye;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n      key: '1oefj6',\n    },\n  ],\n  ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n];\n\n/**\n * @component @name File\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/file\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst File = createLucideIcon('file', __iconNode);\n\nexport default File;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'm6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2',\n      key: 'usdka0',\n    },\n  ],\n];\n\n/**\n * @component @name FolderOpen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiAxNCAxLjUtMi45QTIgMiAwIDAgMSA5LjI0IDEwSDIwYTIgMiAwIDAgMSAxLjk0IDIuNWwtMS41NCA2YTIgMiAwIDAgMS0xLjk1IDEuNUg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgxOGEyIDIgMCAwIDEgMiAydjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/folder-open\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderOpen = createLucideIcon('folder-open', __iconNode);\n\nexport default FolderOpen;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n      key: '1kt360',\n    },\n  ],\n  ['path', { d: 'M12 10v6', key: '1bos4e' }],\n  ['path', { d: 'm9 13 3-3 3 3', key: '1pxg3c' }],\n];\n\n/**\n * @component @name FolderUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIiAvPgogIDxwYXRoIGQ9Ik0xMiAxMHY2IiAvPgogIDxwYXRoIGQ9Im05IDEzIDMtMyAzIDMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/folder-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderUp = createLucideIcon('folder-up', __iconNode);\n\nexport default FolderUp;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n      key: '1kt360',\n    },\n  ],\n];\n\n/**\n * @component @name Folder\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/folder\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Folder = createLucideIcon('folder', __iconNode);\n\nexport default Folder;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z',\n      key: 'sc7q7i',\n    },\n  ],\n];\n\n/**\n * @component @name Funnel\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgMjBhMSAxIDAgMCAwIC41NTMuODk1bDIgMUExIDEgMCAwIDAgMTQgMjF2LTdhMiAyIDAgMCAxIC41MTctMS4zNDFMMjEuNzQgNC42N0ExIDEgMCAwIDAgMjEgM0gzYTEgMSAwIDAgMC0uNzQyIDEuNjdsNy4yMjUgNy45ODlBMiAyIDAgMCAxIDEwIDE0eiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/funnel\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Funnel = createLucideIcon('funnel', __iconNode);\n\nexport default Funnel;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n  ['path', { d: 'M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20', key: '13o1zl' }],\n  ['path', { d: 'M2 12h20', key: '9i4pu4' }],\n];\n\n/**\n * @component @name Globe\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8cGF0aCBkPSJNMTIgMmExNC41IDE0LjUgMCAwIDAgMCAyMCAxNC41IDE0LjUgMCAwIDAgMC0yMCIgLz4KICA8cGF0aCBkPSJNMiAxMmgyMCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/globe\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Globe = createLucideIcon('globe', __iconNode);\n\nexport default Globe;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['circle', { cx: '9', cy: '12', r: '1', key: '1vctgf' }],\n  ['circle', { cx: '9', cy: '5', r: '1', key: 'hp0tcf' }],\n  ['circle', { cx: '9', cy: '19', r: '1', key: 'fkjjf6' }],\n  ['circle', { cx: '15', cy: '12', r: '1', key: '1tmaij' }],\n  ['circle', { cx: '15', cy: '5', r: '1', key: '19l28e' }],\n  ['circle', { cx: '15', cy: '19', r: '1', key: 'f4zoj3' }],\n];\n\n/**\n * @component @name GripVertical\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSI5IiBjeT0iMTIiIHI9IjEiIC8+CiAgPGNpcmNsZSBjeD0iOSIgY3k9IjUiIHI9IjEiIC8+CiAgPGNpcmNsZSBjeD0iOSIgY3k9IjE5IiByPSIxIiAvPgogIDxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEiIC8+CiAgPGNpcmNsZSBjeD0iMTUiIGN5PSI1IiByPSIxIiAvPgogIDxjaXJjbGUgY3g9IjE1IiBjeT0iMTkiIHI9IjEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/grip-vertical\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst GripVertical = createLucideIcon('grip-vertical', __iconNode);\n\nexport default GripVertical;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2', key: '1m3agn' }],\n  ['circle', { cx: '9', cy: '9', r: '2', key: 'af1f0g' }],\n  ['path', { d: 'm21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21', key: '1xmnt7' }],\n];\n\n/**\n * @component @name Image\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiByeT0iMiIgLz4KICA8Y2lyY2xlIGN4PSI5IiBjeT0iOSIgcj0iMiIgLz4KICA8cGF0aCBkPSJtMjEgMTUtMy4wODYtMy4wODZhMiAyIDAgMCAwLTIuODI4IDBMNiAyMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/image\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Image = createLucideIcon('image', __iconNode);\n\nexport default Image;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n  ['path', { d: 'M12 16v-4', key: '1dtifu' }],\n  ['path', { d: 'M12 8h.01', key: 'e9boi3' }],\n];\n\n/**\n * @component @name Info\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8cGF0aCBkPSJNMTIgMTZ2LTQiIC8+CiAgPHBhdGggZD0iTTEyIDhoLjAxIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/info\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Info = createLucideIcon('info', __iconNode);\n\nexport default Info;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['rect', { width: '7', height: '7', x: '3', y: '3', rx: '1', key: '1g98yp' }],\n  ['rect', { width: '7', height: '7', x: '14', y: '3', rx: '1', key: '6d4xhi' }],\n  ['rect', { width: '7', height: '7', x: '14', y: '14', rx: '1', key: 'nxv5o0' }],\n  ['rect', { width: '7', height: '7', x: '3', y: '14', rx: '1', key: '1bb6yr' }],\n];\n\n/**\n * @component @name LayoutGrid\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI3IiB4PSIzIiB5PSIzIiByeD0iMSIgLz4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI3IiB4PSIxNCIgeT0iMyIgcng9IjEiIC8+CiAgPHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iNyIgeD0iMTQiIHk9IjE0IiByeD0iMSIgLz4KICA8cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSI3IiB4PSIzIiB5PSIxNCIgcng9IjEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/layout-grid\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LayoutGrid = createLucideIcon('layout-grid', __iconNode);\n\nexport default LayoutGrid;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56', key: '13zald' }]];\n\n/**\n * @component @name LoaderCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/loader-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LoaderCircle = createLucideIcon('loader-circle', __iconNode);\n\nexport default LoaderCircle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0',\n      key: '1r0f0z',\n    },\n  ],\n  ['circle', { cx: '12', cy: '10', r: '3', key: 'ilqhr7' }],\n];\n\n/**\n * @component @name MapPin\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIiAvPgogIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTAiIHI9IjMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/map-pin\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MapPin = createLucideIcon('map-pin', __iconNode);\n\nexport default MapPin;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M5 12h14', key: '1ays0h' }]];\n\n/**\n * @component @name Minus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/minus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Minus = createLucideIcon('minus', __iconNode);\n\nexport default Minus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z',\n      key: 'e79jfc',\n    },\n  ],\n  ['circle', { cx: '13.5', cy: '6.5', r: '.5', fill: 'currentColor', key: '1okk4w' }],\n  ['circle', { cx: '17.5', cy: '10.5', r: '.5', fill: 'currentColor', key: 'f64h9f' }],\n  ['circle', { cx: '6.5', cy: '12.5', r: '.5', fill: 'currentColor', key: 'qy21gx' }],\n  ['circle', { cx: '8.5', cy: '7.5', r: '.5', fill: 'currentColor', key: 'fotxhn' }],\n];\n\n/**\n * @component @name Palette\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMjJhMSAxIDAgMCAxIDAtMjAgMTAgOSAwIDAgMSAxMCA5IDUgNSAwIDAgMS01IDVoLTIuMjVhMS43NSAxLjc1IDAgMCAwLTEuNCAyLjhsLjMuNGExLjc1IDEuNzUgMCAwIDEtMS40IDIuOHoiIC8+CiAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjYuNSIgcj0iLjUiIGZpbGw9ImN1cnJlbnRDb2xvciIgLz4KICA8Y2lyY2xlIGN4PSIxNy41IiBjeT0iMTAuNSIgcj0iLjUiIGZpbGw9ImN1cnJlbnRDb2xvciIgLz4KICA8Y2lyY2xlIGN4PSI2LjUiIGN5PSIxMi41IiByPSIuNSIgZmlsbD0iY3VycmVudENvbG9yIiAvPgogIDxjaXJjbGUgY3g9IjguNSIgY3k9IjcuNSIgcj0iLjUiIGZpbGw9ImN1cnJlbnRDb2xvciIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/palette\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Palette = createLucideIcon('palette', __iconNode);\n\nexport default Palette;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M13 21h8', key: '1jsn5i' }],\n  [\n    'path',\n    {\n      d: 'M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z',\n      key: '1a8usu',\n    },\n  ],\n];\n\n/**\n * @component @name PenLine\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTMgMjFoOCIgLz4KICA8cGF0aCBkPSJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/pen-line\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst PenLine = createLucideIcon('pen-line', __iconNode);\n\nexport default PenLine;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M5 12h14', key: '1ays0h' }],\n  ['path', { d: 'M12 5v14', key: 's699le' }],\n];\n\n/**\n * @component @name Plus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Plus = createLucideIcon('plus', __iconNode);\n\nexport default Plus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8', key: 'v9h5vc' }],\n  ['path', { d: 'M21 3v5h-5', key: '1q7to0' }],\n  ['path', { d: 'M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16', key: '3uifl3' }],\n  ['path', { d: 'M8 16H3v5', key: '1cv678' }],\n];\n\n/**\n * @component @name RefreshCw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAwIDEgOS05IDkuNzUgOS43NSAwIDAgMSA2Ljc0IDIuNzRMMjEgOCIgLz4KICA8cGF0aCBkPSJNMjEgM3Y1aC01IiAvPgogIDxwYXRoIGQ9Ik0yMSAxMmE5IDkgMCAwIDEtOSA5IDkuNzUgOS43NSAwIDAgMS02Ljc0LTIuNzRMMyAxNiIgLz4KICA8cGF0aCBkPSJNOCAxNkgzdjUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/refresh-cw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RefreshCw = createLucideIcon('refresh-cw', __iconNode);\n\nexport default RefreshCw;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'm21 21-4.34-4.34', key: '14j7rj' }],\n  ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n];\n\n/**\n * @component @name Search\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMjEgMjEtNC4zNC00LjM0IiAvPgogIDxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/search\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Search = createLucideIcon('search', __iconNode);\n\nexport default Search;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M10 5H3', key: '1qgfaw' }],\n  ['path', { d: 'M12 19H3', key: 'yhmn1j' }],\n  ['path', { d: 'M14 3v4', key: '1sua03' }],\n  ['path', { d: 'M16 17v4', key: '1q0r14' }],\n  ['path', { d: 'M21 12h-9', key: '1o4lsq' }],\n  ['path', { d: 'M21 19h-5', key: '1rlt1p' }],\n  ['path', { d: 'M21 5h-7', key: '1oszz2' }],\n  ['path', { d: 'M8 10v4', key: 'tgpxqk' }],\n  ['path', { d: 'M8 12H3', key: 'a7s4jb' }],\n];\n\n/**\n * @component @name SlidersHorizontal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgNUgzIiAvPgogIDxwYXRoIGQ9Ik0xMiAxOUgzIiAvPgogIDxwYXRoIGQ9Ik0xNCAzdjQiIC8+CiAgPHBhdGggZD0iTTE2IDE3djQiIC8+CiAgPHBhdGggZD0iTTIxIDEyaC05IiAvPgogIDxwYXRoIGQ9Ik0yMSAxOWgtNSIgLz4KICA8cGF0aCBkPSJNMjEgNWgtNyIgLz4KICA8cGF0aCBkPSJNOCAxMHY0IiAvPgogIDxwYXRoIGQ9Ik04IDEySDMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/sliders-horizontal\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst SlidersHorizontal = createLucideIcon('sliders-horizontal', __iconNode);\n\nexport default SlidersHorizontal;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M5 8V5c0-1 1-2 2-2h10c1 0 2 1 2 2v3', key: '1pi83i' }],\n  ['path', { d: 'M19 16v3c0 1-1 2-2 2H7c-1 0-2-1-2-2v-3', key: 'ido5k7' }],\n  ['line', { x1: '4', x2: '20', y1: '12', y2: '12', key: '1e0a9i' }],\n];\n\n/**\n * @component @name SquareSplitVertical\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSA4VjVjMC0xIDEtMiAyLTJoMTBjMSAwIDIgMSAyIDJ2MyIgLz4KICA8cGF0aCBkPSJNMTkgMTZ2M2MwIDEtMSAyLTIgMkg3Yy0xIDAtMi0xLTItMnYtMyIgLz4KICA8bGluZSB4MT0iNCIgeDI9IjIwIiB5MT0iMTIiIHkyPSIxMiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/square-split-vertical\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst SquareSplitVertical = createLucideIcon('square-split-vertical', __iconNode);\n\nexport default SquareSplitVertical;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z',\n      key: 'vktsd0',\n    },\n  ],\n  ['circle', { cx: '7.5', cy: '7.5', r: '.5', fill: 'currentColor', key: 'kqv944' }],\n];\n\n/**\n * @component @name Tag\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIuNTg2IDIuNTg2QTIgMiAwIDAgMCAxMS4xNzIgMkg0YTIgMiAwIDAgMC0yIDJ2Ny4xNzJhMiAyIDAgMCAwIC41ODYgMS40MTRsOC43MDQgOC43MDRhMi40MjYgMi40MjYgMCAwIDAgMy40MiAwbDYuNTgtNi41OGEyLjQyNiAyLjQyNiAwIDAgMCAwLTMuNDJ6IiAvPgogIDxjaXJjbGUgY3g9IjcuNSIgY3k9IjcuNSIgcj0iLjUiIGZpbGw9ImN1cnJlbnRDb2xvciIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/tag\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Tag = createLucideIcon('tag', __iconNode);\n\nexport default Tag;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M10 11v6', key: 'nco0om' }],\n  ['path', { d: 'M14 11v6', key: 'outv1u' }],\n  ['path', { d: 'M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6', key: 'miytrc' }],\n  ['path', { d: 'M3 6h18', key: 'd0wm0j' }],\n  ['path', { d: 'M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2', key: 'e791ji' }],\n];\n\n/**\n * @component @name Trash2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgMTF2NiIgLz4KICA8cGF0aCBkPSJNMTQgMTF2NiIgLz4KICA8cGF0aCBkPSJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2IiAvPgogIDxwYXRoIGQ9Ik0zIDZoMTgiIC8+CiAgPHBhdGggZD0iTTggNlY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/trash-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Trash2 = createLucideIcon('trash-2', __iconNode);\n\nexport default Trash2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M12 3v12', key: '1x0j5s' }],\n  ['path', { d: 'm17 8-5-5-5 5', key: '7q97r8' }],\n  ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4', key: 'ih7n3h' }],\n];\n\n/**\n * @component @name Upload\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgM3YxMiIgLz4KICA8cGF0aCBkPSJtMTcgOC01LTUtNSA1IiAvPgogIDxwYXRoIGQ9Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/upload\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Upload = createLucideIcon('upload', __iconNode);\n\nexport default Upload;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n  ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","import React from \"react\";\nimport { InputNumber, InputNumberProps, InputNumberValueChangeEvent } from \"../ui/number\";\nimport { cn } from \"@/lib/utils\";\nimport { ChevronUp, ChevronDown, Plus, Minus } from \"lucide-react\";\n\nfunction sanitizeNumberish(value: number | null | undefined): number | null {\n   return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\n// Wrapper-level props for the variant\nexport type ShadcnNumberVariantProps =\n   // All the usual number stuff (mode, locale, prefix, suffix, etc.)\n   Omit<InputNumberProps,\n      | \"onValueChange\"\n      | \"onChange\"\n      | \"leadingControl\"\n      | \"trailingControl\"\n   >\n   & {\n      /**\n       * Show +/- buttons around the numeric field.\n       * Defaults to false.\n       */\n      showButtons?: boolean;\n\n      /**\n       * How the step buttons are laid out when showButtons is true.\n       *\n       * - 'inline': \"-\" on the left, \"+\" on the right\n       * - 'stacked': vertical +/- stack on the right\n       */\n      buttonLayout?: \"inline\" | \"stacked\";\n   };\n\n\nexport const ShadcnNumberVariant = React.forwardRef<\n   HTMLInputElement,\n   ShadcnNumberVariantProps\n>(function ShadcnNumberVariant(props, forwardedRef) {\n   const {\n      showButtons,\n      buttonLayout = \"stacked\",\n      disabled, // Extract disabled to style buttons\n      ...rest\n   } = props;\n\n   // we still want access to these for stepping logic\n   const {\n      step = 1,\n      min,\n      value,\n      max,\n      onValue: onValueChange,\n      name,\n      id,\n      inputId,\n   } = rest as ShadcnNumberVariantProps;\n\n   const handleChange = React.useCallback(\n      (e: InputNumberValueChangeEvent) => {\n         const safeValue = sanitizeNumberish(e.value);\n\n         if (onValueChange) {\n            onValueChange((safeValue ?? undefined) as any, {\n               source: \"user\",\n               nativeEvent: e.originalEvent as any,\n               raw: safeValue,\n            });\n         }\n      },\n      [onValueChange]\n   );\n\n   const handleStep = React.useCallback(\n      (direction: 1 | -1, originalEvent: React.SyntheticEvent<any>) => {\n         if (disabled) return;\n\n         const current = sanitizeNumberish(value) ?? 0;\n         let next = current + direction * step;\n\n         if (typeof min === \"number\") next = Math.max(next, min);\n         if (typeof max === \"number\") next = Math.min(next, max);\n\n         // Prime-style event\n         const e: InputNumberValueChangeEvent = {\n            originalEvent,\n            value: sanitizeNumberish(next),\n            stopPropagation: () => originalEvent.stopPropagation(),\n            preventDefault: () => originalEvent.preventDefault(),\n            target: {\n               name,\n               id: id ?? inputId ?? null,\n               value: sanitizeNumberish(next),\n            },\n         };\n\n         handleChange(e)\n      },\n      [value, step, min, max, onValueChange, name, id, inputId, disabled, handleChange]\n   );\n\n   // --- Styles ---\n   // Common styles for the interactive buttons\n   const btnBase = \"flex h-full items-center justify-center bg-transparent text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground disabled:opacity-50 disabled:cursor-not-allowed\";\n\n   // Build controls based on layout\n   let leadingControl: React.ReactNode | undefined;\n   let trailingControl: React.ReactNode | undefined;\n\n   if (showButtons) {\n      if (buttonLayout === \"inline\") {\n         // INLINE: \"-\" on the left, \"+\" on the right\n         leadingControl = (\n            <button\n               type=\"button\"\n               tabIndex={-1} // Prevent tabbing to buttons\n               disabled={disabled}\n               onClick={(e) => handleStep(-1, e)}\n               className={cn(btnBase, \"border-r border-input px-3\")}\n               aria-label=\"Decrease value\"\n            >\n               <Minus className=\"h-4 w-4\" />\n            </button>\n         );\n\n         trailingControl = (\n            <button\n               type=\"button\"\n               tabIndex={-1}\n               disabled={disabled}\n               onClick={(e) => handleStep(1, e)}\n               className={cn(btnBase, \"border-l border-input px-3\")}\n               aria-label=\"Increase value\"\n            >\n               <Plus className=\"h-4 w-4\" />\n            </button>\n         );\n      } else {\n         // STACKED: vertical +/- on the right\n         trailingControl = (\n            <div className=\"flex h-full flex-col border-l border-input\">\n               <button\n                  type=\"button\"\n                  tabIndex={-1}\n                  disabled={disabled}\n                  onClick={(e) => handleStep(1, e)}\n                  className={cn(btnBase, \"h-1/2 px-2 border-b border-input\")}\n                  aria-label=\"Increase value\"\n               >\n                  <ChevronUp className=\"h-3 w-3\" />\n               </button>\n               <button\n                  type=\"button\"\n                  tabIndex={-1}\n                  disabled={disabled}\n                  onClick={(e) => handleStep(-1, e)}\n                  className={cn(btnBase, \"h-1/2 px-2\")}\n                  aria-label=\"Decrease value\"\n               >\n                  <ChevronDown className=\"h-3 w-3\" />\n               </button>\n            </div>\n         );\n      }\n   }\n\n   return (\n      <InputNumber\n         ref={forwardedRef}\n         value={value}\n         disabled={disabled}\n         {...rest}\n         onValueChange={handleChange}\n         leadingControl={leadingControl}\n         trailingControl={trailingControl}\n         extendBoxToControls\n         // Ensure the controls sit flush inside the container\n         leadingControlClassName={cn(\"flex h-full\", rest.leadingControlClassName)}\n         trailingControlClassName={cn(\"flex h-full\", rest.trailingControlClassName)}\n      />\n   );\n});\n","// src/variants/core/text.tsx\r\n\r\nimport * as React from \"react\";\r\n\r\nimport type { Dict } from \"@/schema/core\";\r\nimport type { VariantModule } from \"@/schema/variant\";\r\nimport type { ValidateResult } from \"@/schema/input-field\";\r\nimport { ShadcnTextVariant } from \"@/presets/shadcn-variants/text\";\r\nimport type { ShadcnTextUiProps } from \"@/presets/shadcn-variants/text\";\r\nimport { ShadcnNumberVariant, ShadcnNumberVariantProps } from \"@/presets/shadcn-variants/number\";\r\n\r\n/**\r\n * Text variant props (core layer).\r\n *\r\n * - Extends Dict so it can cleanly participate in the Variants registry.\r\n * - Extends the Shadcn UI props so the core variant can pass everything\r\n *   straight through to the underlying visual component.\r\n *\r\n * This is where we hang *semantic* flags that drive validation.\r\n */\r\nexport interface TextVariantProps extends Dict, ShadcnTextUiProps {\r\n   /**\r\n    * If true, the value will be trimmed before validation.\r\n    * (Visual value is still whatever the user types; this is just for\r\n    * validation semantics.)\r\n    */\r\n   trim?: boolean;\r\n\r\n   /**\r\n    * Minimum allowed string length (after optional trimming).\r\n    */\r\n   minLength?: number;\r\n\r\n   /**\r\n    * Maximum allowed string length (after optional trimming).\r\n    */\r\n   maxLength?: number;\r\n}\r\n\r\n/**\r\n * Simple validation helper for the text variant.\r\n */\r\nfunction validateText(\r\n   value: number | undefined,\r\n   ctx: {\r\n      required?: boolean;\r\n      props: ShadcnNumberVariantProps;\r\n   }\r\n): ValidateResult {\r\n   const { required, props } = ctx;\r\n   const { minLength, maxLength } = props;\r\n\r\n   const raw = (value ?? \"\") + \"\";\r\n   const v = raw.trim();\r\n\r\n   // required\r\n   if (required && v.length === 0) {\r\n      return \"This field is required.\";\r\n   }\r\n\r\n   // minLength\r\n   if (typeof minLength === \"number\" && v.length > 0 && v.length < minLength) {\r\n      return `Please enter at least ${minLength} characters.`;\r\n   }\r\n\r\n   // maxLength\r\n   if (typeof maxLength === \"number\" && v.length > maxLength) {\r\n      return `Please enter no more than ${maxLength} characters.`;\r\n   }\r\n\r\n   return true;\r\n}\r\n\r\n/**\r\n * Core text variant module.\r\n *\r\n * - Uses ShadcnTextVariant as the visual component.\r\n * - Adds simple length-based validation.\r\n * - Provides layout defaults for InputField to use.\r\n */\r\nexport const numberVariant: VariantModule<\"number\"> = {\r\n   variant: \"number\",\r\n\r\n   // Visual component: Shadcn-based text input\r\n   Variant: ShadcnNumberVariant as any,\r\n\r\n   // Validation logic (runs before/alongside per-field onValidate)\r\n   validate(value, { required, props, field, form }) {\r\n      // field + form are available if you need them later.\r\n      return validateText(value, { required, props });\r\n   },\r\n\r\n   // Layout defaults for this variant\r\n   defaults: {\r\n      layout: {\r\n         labelPlacement: \"top\",\r\n         sublabelPlacement: \"right\",\r\n         descriptionPlacement: \"below\",\r\n         helpTextPlacement: \"below\",\r\n         errorTextPlacement: \"below\",\r\n         inline: false,\r\n         fullWidth: true,\r\n         defaultSize: \"md\",\r\n         defaultDensity: \"comfortable\",\r\n      },\r\n   },\r\n\r\n   meta: {\r\n      label: \"Number\",\r\n      description: \"Single-line number input\",\r\n      tags: [\"number\", \"input\", \"integer\", \"float\"],\r\n   },\r\n};\r\n\r\nexport default numberVariant;","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Select({\n    ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n    return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({\n    ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n    return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({\n    ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n    return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\nfunction SelectTrigger({\n    className,\n    size = \"default\",\n    children,\n    icon: Icon = ChevronDownIcon,\n    ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n    size?: \"sm\" | \"default\";\n    /**\n     * Optional custom icon component.\n     * Example: `icon={ChevronUpIcon}`\n     */\n    icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n}) {\n    const content = !props.asChild ? (\n        <>\n            {children}\n            {Icon && (\n                <SelectPrimitive.Icon asChild>\n                    <Icon className=\"size-4 opacity-50\" />\n                </SelectPrimitive.Icon>\n            )}\n        </>\n    ) : (\n        children\n    );\n\n    return (\n        <SelectPrimitive.Trigger\n            data-slot=\"select-trigger\"\n            data-size={size}\n            className={cn(\n                \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-[var(--surfaces-input,_transparent)] px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n                className,\n            )}\n            {...props}\n        >\n            {content}\n        </SelectPrimitive.Trigger>\n    );\n}\n\nfunction SelectContent({\n    className,\n    children,\n    position = \"popper\",\n    align = \"center\",\n    ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n    return (\n        <SelectPrimitive.Portal>\n            <SelectPrimitive.Content\n                data-slot=\"select-content\"\n                className={cn(\n                    \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n                    position === \"popper\" &&\n                        \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n                    className,\n                )}\n                position={position}\n                align={align}\n                {...props}\n            >\n                <SelectScrollUpButton />\n                <SelectPrimitive.Viewport\n                    className={cn(\n                        \"p-1\",\n                        position === \"popper\" &&\n                            \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\",\n                    )}\n                >\n                    {children}\n                </SelectPrimitive.Viewport>\n                <SelectScrollDownButton />\n            </SelectPrimitive.Content>\n        </SelectPrimitive.Portal>\n    );\n}\n\nfunction SelectLabel({\n    className,\n    ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n    return (\n        <SelectPrimitive.Label\n            data-slot=\"select-label\"\n            className={cn(\n                \"text-muted-foreground px-2 py-1.5 text-xs\",\n                className,\n            )}\n            {...props}\n        />\n    );\n}\n\nfunction SelectItem({\n    className,\n    children,\n    ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n    return (\n        <SelectPrimitive.Item\n            data-slot=\"select-item\"\n            className={cn(\n                \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n                className,\n            )}\n            {...props}\n        >\n            <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n                <SelectPrimitive.ItemIndicator>\n                    <CheckIcon className=\"size-4\" />\n                </SelectPrimitive.ItemIndicator>\n            </span>\n            <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n        </SelectPrimitive.Item>\n    );\n}\n\nfunction SelectSeparator({\n    className,\n    ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n    return (\n        <SelectPrimitive.Separator\n            data-slot=\"select-separator\"\n            className={cn(\n                \"bg-border pointer-events-none -mx-1 my-1 h-px\",\n                className,\n            )}\n            {...props}\n        />\n    );\n}\n\nfunction SelectScrollUpButton({\n    className,\n    ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n    return (\n        <SelectPrimitive.ScrollUpButton\n            data-slot=\"select-scroll-up-button\"\n            className={cn(\n                \"flex cursor-default items-center justify-center py-1\",\n                className,\n            )}\n            {...props}\n        >\n            <ChevronUpIcon className=\"size-4\" />\n        </SelectPrimitive.ScrollUpButton>\n    );\n}\n\nfunction SelectScrollDownButton({\n    className,\n    ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n    return (\n        <SelectPrimitive.ScrollDownButton\n            data-slot=\"select-scroll-down-button\"\n            className={cn(\n                \"flex cursor-default items-center justify-center py-1\",\n                className,\n            )}\n            {...props}\n        >\n            <ChevronDownIcon className=\"size-4\" />\n        </SelectPrimitive.ScrollDownButton>\n    );\n}\n\nexport {\n    Select,\n    SelectContent,\n    SelectGroup,\n    SelectItem,\n    SelectLabel,\n    SelectScrollDownButton,\n    SelectScrollUpButton,\n    SelectSeparator,\n    SelectTrigger,\n    SelectValue,\n};\n","import { PhoneCountry } from \"@/presets/shadcn-variants/phone\";\r\n\r\n// e.g. src/lib/get-global-countries.ts\r\nlet cachedCountries: PhoneCountry[] | null = null;\r\n\r\nconst DEFAULT_COUNTRIES: PhoneCountry[] = [\r\n   {\r\n      code: \"NG\",\r\n      label: \"Nigeria\",\r\n      dial: \"+234\",\r\n      mask: \"999 999 9999\",\r\n      flag: \"🇳🇬\",\r\n   },\r\n   {\r\n      code: \"US\",\r\n      label: \"United States\",\r\n      dial: \"1\",\r\n      mask: \"(999) 999-9999\",\r\n      flag: \"🇺🇸\",\r\n   },\r\n   {\r\n      code: \"GB\",\r\n      label: \"United Kingdom\",\r\n      dial: \"44\",\r\n      mask: \"9999 999 999\",\r\n      flag: \"🇬🇧\",\r\n   },\r\n];\r\n\r\ncachedCountries = DEFAULT_COUNTRIES;\r\nlet validatedOnce = false;\r\n\r\nfunction isPhoneCountry(value: unknown): value is PhoneCountry {\r\n   if (!value || typeof value !== \"object\") return false;\r\n\r\n   const v = value as Record<string, unknown>;\r\n\r\n   return (\r\n      typeof v.code === \"string\" &&\r\n      typeof v.label === \"string\" &&\r\n      typeof v.dial === \"string\" &&\r\n      typeof v.mask === \"string\"\r\n      // flag is optional & can be anything React can render, so we don't\r\n      // validate it beyond existence.\r\n   );\r\n}\r\n\r\nexport function getGlobalCountryList(): PhoneCountry[] {\r\n   // 1. If we have a cache, return it.\r\n   if (cachedCountries) return cachedCountries;\r\n\r\n   // 2. SSR check: return defaults if on server\r\n   if (typeof window === \"undefined\") {\r\n      return DEFAULT_COUNTRIES;\r\n   }\r\n\r\n   // 3. Check window registry\r\n   const raw = window[\"form-palette\"]?.countries;\r\n\r\n   // 4. If window has valid data, use it\r\n   if (Array.isArray(raw) && raw.length > 0) {\r\n      const result: PhoneCountry[] = [];\r\n      for (const item of raw) {\r\n         if (isPhoneCountry(item)) {\r\n            result.push(item);\r\n         }\r\n      }\r\n\r\n      // If we found valid items, cache and return them\r\n      if (result.length > 0) {\r\n         cachedCountries = result;\r\n         return result;\r\n      }\r\n   }\r\n\r\n   // 5. Fallback to defaults if window was empty or invalid\r\n   cachedCountries = DEFAULT_COUNTRIES;\r\n   return cachedCountries;\r\n}","import type { CustomFileLoader, FileItem } from \"@/presets/shadcn-variants/file\";\r\nimport { PasswordDefinitionMap } from \"@/presets/shadcn-variants/password\";\r\nimport { PhoneCountry } from \"@/presets/shadcn-variants/phone\";\r\n\r\ntype IconGroup = {\r\n    id: string; // stable key for selection/filtering\r\n    label: string;\r\n    prefixes: string[]; // iconify prefixes to load\r\n};\r\n// 1. Define the shape of your global palette store\r\nexport interface PaletteRegistry {\r\n   countries: PhoneCountry[];\r\n   ruleDefinition: PasswordDefinitionMap;\r\n   customLoader: CustomFileLoader;\r\n   getCountries: () => Promise<PhoneCountry[]>;\r\n   formatFileValue: (file: FileItem) => string | undefined;\r\n   iconPicker: {\r\n       groups?: IconGroup[],\r\n       url?: string\r\n   }\r\n   // You can add more keys here later, e.g.:\r\n   // theme?: 'light' | 'dark';\r\n   // locale?: string;\r\n}\r\n\r\n// 2. Extend the global Window interface to include your custom key\r\ndeclare global {\r\n   interface Window {\r\n      \"form-palette\"?: Partial<PaletteRegistry>;\r\n   }\r\n}\r\n\r\n/**\r\n * Registers a value to the global window['form-palette'] object.\r\n * Safe to call in SSR environments (it will just no-op).\r\n */\r\nexport function registerPaletteUtil<K extends keyof PaletteRegistry>(\r\n   key: K,\r\n   value: PaletteRegistry[K]\r\n) {\r\n   // SSR Safety check\r\n   if (typeof window === \"undefined\") return;\r\n\r\n   // Initialize the namespace if it doesn't exist\r\n   if (!window[\"form-palette\"]) {\r\n      window[\"form-palette\"] = {};\r\n   }\r\n\r\n   // Assign the value\r\n   window[\"form-palette\"][key] = value;\r\n}\r\n\r\n/**\r\n * Retrieves a value from the global window['form-palette'] object.\r\n * Returns the value if found, otherwise returns the optional defaultValue or undefined.\r\n */\r\nexport function getPaletteUtil<K extends keyof PaletteRegistry>(\r\n   key: K,\r\n   defaultValue?: PaletteRegistry[K]\r\n): PaletteRegistry[K] | undefined {\r\n   // SSR Safety check\r\n   if (typeof window === \"undefined\") {\r\n      return defaultValue;\r\n   }\r\n\r\n   const registry = window[\"form-palette\"];\r\n\r\n   // Return the specific key if it exists\r\n   if (registry && key in registry) {\r\n      return registry[key];\r\n   }\r\n\r\n   return defaultValue;\r\n}","// src/presets/shadcn-variants/phone.tsx\n\nimport * as React from \"react\";\nimport type { ChangeDetail, VariantBaseProps } from \"@/variants/shared\";\nimport type { ShadcnTextVariantProps } from \"@/presets/shadcn-variants/text\";\nimport { Input } from \"@/presets/ui/input\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from \"@/presets/ui/select\";\nimport { cn } from \"@/lib/utils\";\nimport { getGlobalCountryList } from \"@/lib/get-global-countries\";\nimport { getPaletteUtil } from \"@/lib/register-global\";\n\ntype BaseProps = VariantBaseProps<string | undefined>;\n\n/**\n * Single-country phone config.\n *\n * - code: ISO 3166-1 alpha-2 (\"NG\", \"US\", \"GB\", ...)\n * - dial: dial code without \"+\" (\"234\", \"1\", \"44\", ...)\n * - mask: NATIONAL portion mask only (no dial), e.g. \"999 999 9999\"\n */\nexport interface PhoneCountry {\n    code: string;\n    label: string;\n    dial: string;\n    mask: string;\n    flag?: React.ReactNode;\n}\n\n/**\n * How the variant emits the form value.\n *\n * - \"masked\"  → \"+234 801 234 5678\"\n * - \"e164\"    → \"2348012345678\"   (dial + national digits, no \"+\")\n * - \"national\"→ \"8012345678\"\n */\nexport type PhoneValueMode = \"masked\" | \"e164\" | \"national\";\n\nexport interface PhoneSpecificProps {\n    countries?: PhoneCountry[];\n    defaultCountry?: string;\n    onCountryChange?: (country: PhoneCountry) => void;\n\n    showCountry?: boolean;\n    countryPlaceholder?: string;\n    showFlag?: boolean;\n    showSelectedLabel?: boolean;\n    showSelectedDial?: boolean;\n    showDialInList?: boolean;\n\n    /**\n     * Controls how the emitted value is shaped.\n     *\n     * Default mirrors legacy autoUnmask=true + emitE164=true → \"e164\".\n     */\n    valueMode?: PhoneValueMode;\n\n    /**\n     * When true, the national mask keeps placeholder characters\n     * for not-yet-filled positions. When false, trailing mask\n     * fragments are omitted.\n     */\n    keepCharPositions?: boolean;\n\n    /**\n     * Style hooks for the internal country selector.\n     */\n    countrySelectClassName?: string;\n    countryTriggerClassName?: string;\n    countryValueClassName?: string;\n    countryContentClassName?: string;\n    countryItemClassName?: string;\n}\n\n// We still *type* against ShadcnTextVariantProps so the phone variant exposes\n// the same visual/text props (size, density, icon props, etc.), but we don't\n// use the component itself anymore.\ntype TextUiProps = Omit<\n    ShadcnTextVariantProps,\n    // We control these for phone behaviour\n    \"type\" | \"inputMode\" | \"leadingControl\" | \"value\" | \"onValue\"\n>;\n\n/**\n * Full props for the phone variant as seen by the form runtime.\n *\n * - Keeps the same `value`/`onValue` contract as other variants.\n * - Inherits visual/behavioural text props (size, density, className, etc.).\n * - Adds phone-specific configuration (countries, valueMode, etc.).\n */\nexport type ShadcnPhoneVariantProps = TextUiProps &\n    PhoneSpecificProps &\n    Pick<BaseProps, \"value\" | \"onValue\">;\n\n// ———————————————————————————————\n// Defaults\n// ———————————————————————————————\n\n// ———————————————————————————————\n// Mask helpers (lightweight legacy port)\n// ———————————————————————————————\n\nconst TOKEN_CHARS = new Set([\"9\", \"a\", \"*\"] as const);\n\ninterface CompiledMask {\n    pattern: string;\n    placeholderChar: string;\n}\n\n/**\n * Phone only ever really uses digit masks, so we keep this compact.\n */\nfunction compileMask(pattern: string, placeholderChar = \"_\"): CompiledMask {\n    return { pattern, placeholderChar };\n}\n\n/**\n * Apply a simple token-based mask:\n * - '9' → digit\n * - 'a' → letter\n * - '*' → alphanumeric\n *\n * `keepCharPositions` keeps literal chars/placeholders even when not filled.\n */\nfunction applyMask(\n    mask: CompiledMask,\n    raw: string,\n    keepCharPositions: boolean,\n): string {\n    const { pattern, placeholderChar } = mask;\n    let result = \"\";\n    let rawIndex = 0;\n    const len = pattern.length;\n\n    const hasTokenAhead = (pos: number): boolean => {\n        for (let j = pos + 1; j < len; j++) {\n            if (TOKEN_CHARS.has(pattern[j] as any)) return true;\n        }\n        return false;\n    };\n\n    for (let i = 0; i < len; i++) {\n        const ch = pattern[i];\n        const isToken = TOKEN_CHARS.has(ch as any);\n\n        if (isToken) {\n            if (rawIndex >= raw.length) {\n                if (keepCharPositions) {\n                    result += placeholderChar;\n                    continue;\n                }\n                break;\n            }\n            const next = raw[rawIndex++];\n            result += next;\n            continue;\n        }\n\n        // Literal character in the mask.\n        const rawRemaining = rawIndex < raw.length;\n        const tokenAhead = hasTokenAhead(i);\n\n        // No tokens ahead → trailing literal.\n        if (!tokenAhead) {\n            if (keepCharPositions) {\n                result += ch;\n                continue;\n            }\n            break;\n        }\n\n        if (rawRemaining) {\n            // We still have digits to place → include the literal.\n            result += ch;\n        } else if (keepCharPositions) {\n            // No digits left, but want full skeleton.\n            result += ch;\n        } else {\n            // No digits left, and we don't keep skeleton → stop.\n            break;\n        }\n    }\n\n    return result;\n}\n\n/**\n * Strip everything except digits.\n */\nfunction digitsOnly(input: string | undefined | null): string {\n    return (input ?? \"\").replace(/\\D+/g, \"\");\n}\n\nfunction normalizeDial(dial: string | undefined | null): string {\n    return digitsOnly(dial ?? \"\");\n}\n\n// ———————————————————————————————\n// Value ↔ display helpers\n// ———————————————————————————————\n\nfunction dialPrefixFor(country: PhoneCountry): string {\n    return `+${normalizeDial(country.dial)} `;\n}\n\n/**\n * From any stored value (masked, e164, or national) extract\n * the NATIONAL digits for a given country.\n *\n * Strategy: remove all non-digits, then strip leading dial code\n * if present.\n */\nfunction valueToNationalDigits(\n    value: string | undefined,\n    country: PhoneCountry,\n): string {\n    const digits = digitsOnly(value);\n    if (!digits) return \"\";\n    const dial = normalizeDial(country.dial);\n    if (dial && digits.startsWith(dial)) {\n        return digits.slice(dial.length);\n    }\n    return digits;\n}\n\n/**\n * Build the display string shown in the input for a given value.\n *\n * Always renders \"+<dial> \" plus an optionally masked national part.\n */\nfunction computeDisplayFromValue(\n    value: string | undefined,\n    country: PhoneCountry,\n    keepCharPositions: boolean,\n): string {\n    const prefix = dialPrefixFor(country);\n\n    const national = valueToNationalDigits(value, country);\n    if (!national) {\n        return prefix;\n    }\n\n    const mask = compileMask(country.mask);\n    const maskedNational = applyMask(mask, national, keepCharPositions);\n    if (!maskedNational) {\n        return prefix;\n    }\n\n    return prefix + maskedNational;\n}\n\n/**\n * Given raw user input in the field, compute:\n * - display string (what we show in the input)\n * - next form value (according to valueMode)\n * - nationalDigits (for metadata)\n */\nfunction computeNextFromInput(\n    rawInput: string,\n    country: PhoneCountry,\n    mode: PhoneValueMode,\n    keepCharPositions: boolean,\n): {\n    display: string;\n    nextValue: string | undefined;\n    nationalDigits: string;\n} {\n    const prefix = dialPrefixFor(country);\n\n    let national = digitsOnly(rawInput);\n    const dial = normalizeDial(country.dial);\n    if (dial && national.startsWith(dial)) {\n        national = national.slice(dial.length);\n    }\n\n    const mask = compileMask(country.mask);\n    const maskedNational = applyMask(mask, national, keepCharPositions);\n\n    const display =\n        national.length === 0 ? prefix : prefix + maskedNational || prefix;\n\n    let nextValue: string | undefined;\n    if (!national.length) {\n        nextValue = undefined;\n    } else if (mode === \"masked\") {\n        nextValue = display;\n    } else if (mode === \"e164\") {\n        nextValue = dial + national;\n    } else {\n        // \"national\"\n        nextValue = national;\n    }\n\n    return { display, nextValue, nationalDigits: national };\n}\n\n/**\n * When the country changes, re-interpret the existing value's\n * digits into the new country's mask/dial.\n */\nfunction remapToCountry(\n    value: string | undefined,\n    from: PhoneCountry,\n    to: PhoneCountry,\n    mode: PhoneValueMode,\n    keepCharPositions: boolean,\n): { display: string; nextValue: string | undefined } {\n    if (!value) {\n        const prefix = dialPrefixFor(to);\n        return { display: prefix, nextValue: undefined };\n    }\n\n    const digitsAll = digitsOnly(value);\n\n    let national = digitsAll;\n    const fromDial = normalizeDial(from.dial);\n    const toDial = normalizeDial(to.dial);\n\n    if (fromDial && digitsAll.startsWith(fromDial)) {\n        national = digitsAll.slice(fromDial.length);\n    }\n\n    const prefix = dialPrefixFor(to);\n    const mask = compileMask(to.mask);\n    const masked = applyMask(mask, national, keepCharPositions);\n\n    const display = national.length === 0 ? prefix : prefix + masked || prefix;\n\n    let nextValue: string | undefined;\n    if (!national.length) {\n        nextValue = undefined;\n    } else if (mode === \"masked\") {\n        nextValue = display;\n    } else if (mode === \"e164\") {\n        nextValue = toDial + national;\n    } else {\n        nextValue = national;\n    }\n\n    return { display, nextValue };\n}\n\n/**\n * If no placeholder is passed, we show the dial prefix plus an\n * underscore-skeleton version of the national mask.\n */\nfunction buildPlaceholder(country: PhoneCountry): string {\n    const prefix = dialPrefixFor(country);\n    const skeleton = country.mask.replace(/[9a\\*]/g, \"_\");\n    return prefix + skeleton;\n}\n\n// ———————————————————————————————\n// Country select (Shadcn Select)\n// ———————————————————————————————\n\ninterface CountrySelectProps {\n    countries: PhoneCountry[];\n    value: string;\n    onChange: (code: string) => void;\n    showFlag: boolean;\n    showSelectedLabel: boolean;\n    showSelectedDial: boolean;\n    showDialInList: boolean;\n\n    countrySelectClassName?: string;\n    countryTriggerClassName?: string;\n    countryValueClassName?: string;\n    countryContentClassName?: string;\n    countryItemClassName?: string;\n}\n\nconst CountrySelect: React.FC<CountrySelectProps> = ({\n    countries,\n    value,\n    onChange,\n    showFlag,\n    showSelectedLabel,\n    showSelectedDial,\n    showDialInList,\n    countrySelectClassName,\n    countryTriggerClassName,\n    countryValueClassName,\n    countryContentClassName,\n    countryItemClassName,\n}) => {\n    const selected =\n        countries.find((c) => c.code === value) ?? countries[0] ?? null;\n\n    const triggerLabel = selected\n        ? [\n              showFlag && selected.flag ? selected.flag : null,\n              showSelectedDial ? `+${normalizeDial(selected.dial)}` : null,\n              showSelectedLabel ? selected.label : null,\n          ]\n              .filter(Boolean)\n              .join(\" \")\n        : \"\";\n\n    return (\n        <div className={countrySelectClassName}>\n            <Select value={selected?.code ?? \"\"} onValueChange={onChange}>\n                <SelectTrigger\n                    className={cn(\n                        \"h-full min-w-18 px-2 focus-visible:ring-0 py-0 shadow-none rounded-none border-l-0 border-t-0 border-b-0 border-r border-gray-700/20 text-xs whitespace-nowrap\",\n                        countryTriggerClassName,\n                    )}\n                >\n                    <SelectValue\n                        placeholder=\"Code\"\n                        className={countryValueClassName}\n                    >\n                        {triggerLabel || selected?.code || \"—\"}\n                    </SelectValue>\n                </SelectTrigger>\n                <SelectContent className={countryContentClassName}>\n                    {countries.map((c) => {\n                        const parts: string[] = [];\n\n                        if (showFlag && c.flag) {\n                            parts.push(String(c.flag));\n                        }\n\n                        if (showDialInList) {\n                            parts.push(`+${normalizeDial(c.dial)}`);\n                        }\n\n                        parts.push(c.label);\n\n                        return (\n                            <SelectItem\n                                key={c.code}\n                                value={c.code}\n                                className={countryItemClassName}\n                            >\n                                {parts.join(\" \")}\n                            </SelectItem>\n                        );\n                    })}\n                </SelectContent>\n            </Select>\n        </div>\n    );\n};\n\n// ———————————————————————————————\n// Main variant component\n// ———————————————————————————————\n\nexport const ShadcnPhoneVariant = React.forwardRef<\n    HTMLInputElement,\n    ShadcnPhoneVariantProps\n>(function ShadcnPhoneVariant(props, ref) {\n    const {\n        countries: countriesProp,\n        defaultCountry,\n        onCountryChange,\n        showCountry = true,\n        showFlag = true,\n        showSelectedLabel = false,\n        showSelectedDial = false,\n        showDialInList = true,\n        valueMode = \"e164\",\n        keepCharPositions = false,\n        value,\n        onValue,\n        countryPlaceholder: placeholder,\n        error,\n\n        countrySelectClassName,\n        countryTriggerClassName,\n        countryValueClassName,\n        countryContentClassName,\n        countryItemClassName,\n\n        ...restTextProps\n    } = props;\n\n    let DEFAULT_COUNTRIES = getGlobalCountryList();\n    const defaultCountries =\n        countriesProp && countriesProp.length > 0\n            ? countriesProp\n            : DEFAULT_COUNTRIES;\n\n    const [countries, setLoadedCountries] =\n        React.useState<PhoneCountry[]>(defaultCountries);\n\n    React.useEffect(() => {\n        if (countriesProp?.length) return;\n        const list = getPaletteUtil(\"countries\");\n        if (list?.length) {\n            return setLoadedCountries(list);\n        }\n        const loader = getPaletteUtil(\"getCountries\");\n        if (loader) {\n            Promise.resolve(loader()).then((list) => {\n                setLoadedCountries(list);\n            });\n        }\n    }, []);\n\n    const [country, setCountry] = React.useState<PhoneCountry>(() => {\n        if (defaultCountry) {\n            const found = countries.find((c) => c.code === defaultCountry);\n            if (found) return found;\n        }\n        return countries[0] ?? DEFAULT_COUNTRIES[0];\n    });\n\n    // Keep active country in sync if list/default changes.\n    React.useEffect(() => {\n        setCountry((prev) => {\n            if (defaultCountry) {\n                const found = countries.find((c) => c.code === defaultCountry);\n                if (found) return found;\n            }\n            const stillThere = countries.find((c) => c.code === prev.code);\n            return stillThere ?? countries[0] ?? prev;\n        });\n    }, [countries, defaultCountry]);\n\n    const [local, setLocal] = React.useState<string>(() =>\n        computeDisplayFromValue(value, country, keepCharPositions),\n    );\n\n    // Sync local display when external value or country changes.\n    React.useEffect(() => {\n        setLocal(computeDisplayFromValue(value, country, keepCharPositions));\n    }, [value, country, keepCharPositions]);\n\n    const handleInputChange = React.useCallback(\n        (event: React.ChangeEvent<HTMLInputElement>) => {\n            const rawInput = event.target.value ?? \"\";\n            const { display, nextValue, nationalDigits } = computeNextFromInput(\n                rawInput,\n                country,\n                valueMode,\n                keepCharPositions,\n            );\n\n            setLocal(display);\n\n            if (onValue) {\n                const detail: ChangeDetail<{\n                    country: PhoneCountry;\n                    nationalDigits: string;\n                }> = {\n                    source: \"variant\",\n                    raw: rawInput,\n                    nativeEvent: event,\n                    meta: {\n                        country,\n                        nationalDigits,\n                    },\n                };\n                onValue(nextValue, detail);\n            }\n        },\n        [country, valueMode, keepCharPositions, onValue],\n    );\n\n    const handleCountryChange = React.useCallback(\n        (nextCode: string) => {\n            const nextCountry =\n                countries.find((c) => c.code === nextCode) ?? countries[0];\n\n            if (!nextCountry) return;\n\n            setCountry(nextCountry);\n            onCountryChange?.(nextCountry);\n\n            const { display, nextValue } = remapToCountry(\n                value,\n                country,\n                nextCountry,\n                valueMode,\n                keepCharPositions,\n            );\n\n            setLocal(display);\n\n            if (onValue) {\n                const detail: ChangeDetail<{\n                    from: PhoneCountry;\n                    to: PhoneCountry;\n                }> = {\n                    source: \"variant\",\n                    raw: undefined,\n                    meta: {\n                        from: country,\n                        to: nextCountry,\n                    },\n                };\n                onValue(nextValue, detail);\n            }\n        },\n        [\n            countries,\n            country,\n            keepCharPositions,\n            onCountryChange,\n            onValue,\n            value,\n            valueMode,\n        ],\n    );\n\n    const effectivePlaceholder = placeholder ?? buildPlaceholder(country);\n\n    const leadingControl = showCountry ? (\n        <CountrySelect\n            countries={countries}\n            value={country.code}\n            onChange={handleCountryChange}\n            showFlag={showFlag}\n            showSelectedLabel={showSelectedLabel}\n            showSelectedDial={showSelectedDial}\n            showDialInList={showDialInList}\n            countrySelectClassName={countrySelectClassName}\n            countryTriggerClassName={countryTriggerClassName}\n            countryValueClassName={countryValueClassName}\n            countryContentClassName={countryContentClassName}\n            countryItemClassName={countryItemClassName}\n        />\n    ) : undefined;\n\n    return (\n        <Input\n            ref={ref}\n            {...restTextProps}\n            type=\"tel\"\n            inputMode=\"tel\"\n            value={local}\n            onChange={handleInputChange}\n            leadingControl={leadingControl}\n            placeholder={effectivePlaceholder}\n            aria-invalid={error ? \"true\" : undefined}\n        />\n    );\n});\n","// ———————————————————————————————\r\n// VariantModule wiring\r\n\r\nimport { ShadcnPhoneVariant } from \"@/presets/shadcn-variants/phone\";\r\nimport { VariantModule } from \"@/schema/variant\";\r\n\r\n// ———————————————————————————————\r\nexport const PhoneVariantModule: VariantModule<\"phone\"> = {\r\n   variant: \"phone\",\r\n   Variant: ShadcnPhoneVariant,\r\n   meta: {\r\n      label: \"Phone\",\r\n      description: \"Phone number input with country code and masking.\",\r\n      tags: [\"phone\", \"tel\", \"contact\"],\r\n   },\r\n};","// src/presets/shadcn-variants/color.tsx\r\n\r\nimport * as React from \"react\";\r\n\r\nimport type { VariantModule } from \"@/schema/variant\";\r\nimport type { VariantBaseProps, ChangeDetail } from \"@/variants/shared\";\r\nimport type { ShadcnTextVariantProps } from \"@/presets/shadcn-variants/text\";\r\nimport { Input } from \"@/presets/ui/input\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Palette } from \"lucide-react\";\r\n\r\ntype BaseProps = VariantBaseProps<string | undefined>;\r\n\r\n/**\r\n * Extra options specific to the color variant.\r\n */\r\nexport interface ColorSpecificProps {\r\n   /**\r\n    * If false, we hide the colour preview box.\r\n    * Default: true\r\n    */\r\n   showPreview?: boolean;\r\n\r\n   /**\r\n    * If false, we hide the picker toggle control/icon.\r\n    * Default: true\r\n    */\r\n   showPickerToggle?: boolean;\r\n\r\n   /**\r\n    * Size of the colour swatch in pixels.\r\n    * Default: 18\r\n    */\r\n   previewSize?: number;\r\n\r\n   /**\r\n    * Optional className for the outer wrapper that hosts\r\n    * the Input + hidden color input.\r\n    */\r\n   wrapperClassName?: string;\r\n\r\n   /**\r\n    * Optional className for the preview button itself (around the swatch).\r\n    */\r\n   previewButtonClassName?: string;\r\n\r\n   /**\r\n    * Optional className for the swatch box inside the preview button.\r\n    */\r\n   previewSwatchClassName?: string;\r\n\r\n   /**\r\n    * Optional className for the hidden `<input type=\"color\">`.\r\n    *\r\n    * By default this input is visually hidden and only used\r\n    * to invoke the browser/OS colour picker, but you can override\r\n    * this class to make it visible and style it.\r\n    */\r\n   pickerInputClassName?: string;\r\n\r\n   /**\r\n    * Custom icon shown in the trailing control as the picker toggle.\r\n    * If omitted, a tiny ▾ triangle is used.\r\n    */\r\n   pickerToggleIcon?: React.ReactNode;\r\n\r\n   className?: string;\r\n}\r\n\r\n/**\r\n * We inherit the *visual/behavioural* props from ShadcnTextVariant,\r\n * but control value / onValue / type / inputMode / leadingControl / trailingControl ourselves.\r\n */\r\ntype TextUiProps = Omit<\r\n   ShadcnTextVariantProps,\r\n   \"type\" | \"inputMode\" | \"leadingControl\" | \"trailingControl\" | \"value\" | \"onValue\"\r\n>;\r\n\r\n/**\r\n * Full props for the color variant as seen by the form runtime.\r\n */\r\nexport type ShadcnColorVariantProps = TextUiProps &\r\n   ColorSpecificProps &\r\n   Pick<BaseProps, \"value\" | \"onValue\">;\r\n\r\nfunction normalizeColorForPicker(value: string | undefined): string {\r\n   // Very light sanity: accept #rgb or #rrggbb; otherwise fall back.\r\n   if (typeof value === \"string\" && /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(value)) {\r\n      return value;\r\n   }\r\n   return \"#000000\";\r\n}\r\n\r\nexport const ShadcnColorVariant = React.forwardRef<\r\n   HTMLInputElement,\r\n   ShadcnColorVariantProps\r\n>(function ShadcnColorVariant(props, ref) {\r\n   const {\r\n      // variant contract\r\n      value,\r\n      onValue,\r\n\r\n      // colour-specific\r\n      showPreview = true,\r\n      showPickerToggle = true,\r\n      previewSize = 18,\r\n      wrapperClassName,\r\n      previewButtonClassName,\r\n      previewSwatchClassName,\r\n      pickerInputClassName,\r\n      pickerToggleIcon,\r\n\r\n      // from text variant UI\r\n      error,\r\n      joinControls = true,\r\n      extendBoxToControls = true,\r\n\r\n      // everything else → Input (size, density, className, icons, etc.)\r\n      ...restTextProps\r\n   } = props;\r\n\r\n   const [local, setLocal] = React.useState<string>(value ?? \"\");\r\n   const [pickerOpen, setPickerOpen] = React.useState(false);\r\n\r\n   React.useEffect(() => {\r\n      setLocal(value ?? \"\");\r\n   }, [value]);\r\n\r\n   const pickerRef = React.useRef<HTMLInputElement | null>(null);\r\n\r\n   const effectiveColor = normalizeColorForPicker(local || value);\r\n   const showError = Boolean(error);\r\n\r\n   const openSystemPicker = React.useCallback(() => {\r\n      setPickerOpen(true);\r\n      // Small timeout so state flushes before click; not strictly required but safe.\r\n      window.setTimeout(() => {\r\n         pickerRef.current?.click();\r\n      }, 0);\r\n   }, []);\r\n\r\n   const handleTextChange = React.useCallback(\r\n      (event: React.ChangeEvent<HTMLInputElement>) => {\r\n         const next = event.target.value ?? \"\";\r\n         setLocal(next);\r\n\r\n         if (onValue) {\r\n            const detail: ChangeDetail<{ source: \"input\" }> = {\r\n               source: \"variant\",\r\n               raw: next,\r\n               nativeEvent: event,\r\n               meta: { source: \"input\" },\r\n            };\r\n            onValue(next || undefined, detail);\r\n         }\r\n      },\r\n      [onValue]\r\n   );\r\n\r\n   const handlePickerChange = React.useCallback(\r\n      (event: React.ChangeEvent<HTMLInputElement>) => {\r\n         const next = event.target.value ?? \"\";\r\n         setLocal(next);\r\n\r\n         if (onValue) {\r\n            const detail: ChangeDetail<{ source: \"picker\" }> = {\r\n               source: \"variant\",\r\n               raw: next,\r\n               nativeEvent: event,\r\n               meta: { source: \"picker\" },\r\n            };\r\n            onValue(next || undefined, detail);\r\n         }\r\n\r\n         // Once the user picks a colour, the OS picker closes.\r\n         setPickerOpen(false);\r\n      },\r\n      [onValue]\r\n   );\r\n\r\n   const handlePickerBlur = React.useCallback(() => {\r\n      // If the user cancels the picker, blur fires and we can clear state.\r\n      setPickerOpen(false);\r\n   }, []);\r\n\r\n   // ———————————————————————————————\r\n   // Leading control: colour preview\r\n   // ———————————————————————————————\r\n\r\n   const leadingControl = showPreview ? (\r\n      <button\r\n         type=\"button\"\r\n         onClick={openSystemPicker}\r\n         className={cn(\r\n            \"flex h-full items-center px-3 border-r border-border/50\",\r\n            \"hover:bg-muted/50 transition-colors focus-visible:outline-none focus-visible:bg-muted/50\",\r\n            previewButtonClassName\r\n         )}\r\n         tabIndex={-1}\r\n         aria-label=\"Open colour picker\"\r\n      >\r\n         <span\r\n            className={cn(\r\n               \"inline-flex rounded-sm shadow-sm ring-1 ring-inset ring-foreground/10\",\r\n               previewSwatchClassName\r\n            )}\r\n            style={{\r\n               width: previewSize,\r\n               height: previewSize,\r\n               backgroundColor: effectiveColor,\r\n            }}\r\n         />\r\n      </button>\r\n   ) : undefined;\r\n\r\n   // ———————————————————————————————\r\n   // Trailing control: picker toggle icon\r\n   // ———————————————————————————————\r\n\r\n   const toggleNode =\r\n      pickerToggleIcon !== undefined ? (\r\n         pickerToggleIcon\r\n      ) : (\r\n         // Swapped the text caret for a Lucide Palette icon\r\n         <Palette className=\"h-4 w-4 opacity-50\" />\r\n      );\r\n\r\n   const trailingControl = showPickerToggle ? (\r\n      <button\r\n         type=\"button\"\r\n         onClick={openSystemPicker}\r\n         className=\"flex h-full items-center px-3 text-muted-foreground hover:text-foreground transition-colors\"\r\n         tabIndex={-1}\r\n         aria-label={pickerOpen ? \"Close colour picker\" : \"Open colour picker\"}\r\n         data-open={pickerOpen ? \"true\" : \"false\"}\r\n      >\r\n         {toggleNode}\r\n      </button>\r\n   ) : undefined;\r\n\r\n   // ———————————————————————————————\r\n   // Render\r\n   // ———————————————————————————————\r\n\r\n   return (\r\n      <div className={cn(\"relative group/color\", wrapperClassName)}>\r\n         <Input\r\n            ref={ref}\r\n            {...restTextProps}\r\n            type=\"text\"\r\n            value={local}\r\n            onChange={handleTextChange}\r\n            leadingControl={leadingControl}\r\n            trailingControl={trailingControl}\r\n            joinControls={joinControls}\r\n            extendBoxToControls={extendBoxToControls}\r\n            aria-invalid={showError ? \"true\" : undefined}\r\n            // Added mono font and uppercase for cleaner hex code display\r\n            className={cn(\"font-mono uppercase\", restTextProps.className)}\r\n            maxLength={9}\r\n         />\r\n\r\n         {/* Native color input – used to show the real browser/OS picker.\r\n                By default it's visually hidden; override pickerInputClassName\r\n                if you ever want to show/style it directly. */}\r\n         <input\r\n            ref={pickerRef}\r\n            type=\"color\"\r\n            // hidden\r\n            className={cn(\r\n               \"absolute h-0 w-0 opacity-0 pointer-events-none\",\r\n               pickerInputClassName\r\n            )}\r\n            value={effectiveColor}\r\n            onChange={handlePickerChange}\r\n            onBlur={handlePickerBlur}\r\n            tabIndex={-1}\r\n            aria-hidden=\"true\"\r\n         />\r\n      </div>\r\n   );\r\n});\r\n\r\nShadcnColorVariant.displayName = \"ShadcnColorVariant\";\r\n","// ———————————————————————————————\r\n// VariantModule wiring\r\n\r\nimport { ShadcnColorVariant } from \"@/presets/shadcn-variants/color\";\r\nimport { VariantModule } from \"@/schema/variant\";\r\n\r\n// ———————————————————————————————\r\nexport const ColorVariantModule: VariantModule<\"color\"> = {\r\n   variant: \"color\",\r\n   Variant: ShadcnColorVariant,\r\n   meta: {\r\n      label: \"Phone\",\r\n      description: \"Phone number input with country code and masking.\",\r\n      tags: [\"phone\", \"tel\", \"contact\"],\r\n   },\r\n};","// src/presets/shadcn-variants/password.tsx\r\n\r\nimport * as React from \"react\";\r\n\r\nimport type { VariantBaseProps, ChangeDetail } from \"@/variants/shared\";\r\nimport type { ShadcnTextVariantProps } from \"@/presets/shadcn-variants/text\";\r\nimport { Input } from \"@/presets/ui/input\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Eye, EyeOff, Check } from \"lucide-react\";\r\n\r\ntype BaseProps = VariantBaseProps<string | undefined>;\r\n\r\n/**\r\n * Options for the built-in password strength meter.\r\n *\r\n * NOTE: Score is always in the range 0–4 (inclusive).\r\n */\r\nexport interface StrengthOptions {\r\n   /**\r\n    * Custom scoring function.\r\n    * Return a number in the range 0–4 (inclusive) where 0 = weakest, 4 = strongest.\r\n    */\r\n   calc?: (value: string) => number;\r\n\r\n   /**\r\n    * Labels for each score bucket (index 0..4).\r\n    * Defaults to: [\"Very weak\", \"Weak\", \"Okay\", \"Good\", \"Strong\"]\r\n    */\r\n   labels?: [string, string, string, string, string];\r\n\r\n   /**\r\n    * Thresholds for score steps using a 0–100 bar.\r\n    * Defaults to [0, 25, 50, 75, 100] mapping to scores 0..4 respectively.\r\n    */\r\n   thresholds?: [number, number, number, number, number];\r\n\r\n   /**\r\n    * Minimum score required to consider the password acceptable (0–4).\r\n    * This is purely visual unless you enforce it in validate/onChange.\r\n    * Default: 2\r\n    */\r\n   minScore?: number | 2;\r\n\r\n   /**\r\n    * Whether to show the textual label next to/under the bar.\r\n    * Default: true\r\n    */\r\n   showLabel?: boolean;\r\n\r\n   /**\r\n    * Where to render the meter.\r\n    * - \"inline\" → compact row under the input\r\n    * - \"block\" → stacked with more spacing\r\n    * Default: \"inline\"\r\n    */\r\n   display?: \"inline\" | \"block\";\r\n}\r\n\r\n/** Heuristic length/charset score: fast, dependency-free. Returns 0..4. */\r\nfunction defaultScore(pw: string): number {\r\n   if (!pw) return 0;\r\n   let score = 0;\r\n\r\n   // length\r\n   if (pw.length >= 8) score++;\r\n   if (pw.length >= 12) score++;\r\n\r\n   // diversity\r\n   const hasLower = /[a-z]/.test(pw);\r\n   const hasUpper = /[A-Z]/.test(pw);\r\n   const hasDigit = /\\d/.test(pw);\r\n   const hasSymbol = /[^A-Za-z0-9]/.test(pw);\r\n\r\n   const variety = [hasLower, hasUpper, hasDigit, hasSymbol].filter(Boolean)\r\n      .length;\r\n   if (variety >= 2) score++;\r\n   if (variety >= 3) score++;\r\n\r\n   // Cap at 4\r\n   return Math.max(0, Math.min(4, score));\r\n}\r\n\r\nconst DEFAULT_LABELS: [string, string, string, string, string] = [\r\n   \"Very weak\",\r\n   \"Weak\",\r\n   \"Okay\",\r\n   \"Good\",\r\n   \"Strong\",\r\n];\r\n\r\nconst DEFAULT_THRESHOLDS: [number, number, number, number, number] = [\r\n   0, 25, 50, 75, 100,\r\n];\r\n\r\nfunction normalizeStrengthOptions(\r\n   raw: boolean | StrengthOptions | undefined,\r\n): StrengthOptions | null {\r\n   if (!raw) return null;\r\n\r\n   const base: StrengthOptions = {\r\n      calc: defaultScore,\r\n      labels: DEFAULT_LABELS,\r\n      thresholds: DEFAULT_THRESHOLDS,\r\n      minScore: 2,\r\n      showLabel: true,\r\n      display: \"inline\",\r\n   };\r\n\r\n   if (raw === true) {\r\n      return base;\r\n   }\r\n\r\n   return {\r\n      ...base,\r\n      ...raw,\r\n      labels: raw.labels ?? base.labels,\r\n      thresholds: raw.thresholds ?? base.thresholds,\r\n      minScore: raw.minScore ?? base.minScore,\r\n      showLabel: raw.showLabel ?? base.showLabel,\r\n      display: raw.display ?? base.display,\r\n   };\r\n}\r\n\r\n// ─────────────────────────────────────────────\r\n// Definition map / rules\r\n// ─────────────────────────────────────────────\r\n\r\nexport interface PasswordRuleConfig {\r\n   /**\r\n    * Pattern used to decide if the rule passes.\r\n    */\r\n   pattern: RegExp;\r\n\r\n   /**\r\n    * If true, the rule is considered optional (recommendation).\r\n    * Default: false unless the rule name is not prefixed with \"!\".\r\n    */\r\n   optional?: boolean;\r\n\r\n   /**\r\n    * Weight in the scoring (relative importance).\r\n    * Default: 1, doubled if the use key is prefixed with \"!\".\r\n    */\r\n   weight?: number;\r\n\r\n   /**\r\n    * Short label for the rule (e.g. \"At least 8 characters\").\r\n    * Defaults to the map key if omitted.\r\n    */\r\n   label?: string;\r\n\r\n   /**\r\n    * Longer description, used in detailed rule view.\r\n    */\r\n   description?: string;\r\n}\r\n\r\n/**\r\n * A definition entry can be:\r\n * - string     → treated as a regex source\r\n * - RegExp     → used directly\r\n * - full config\r\n */\r\nexport type PasswordRuleDefinition =\r\n   | string\r\n   | RegExp\r\n   | PasswordRuleConfig;\r\n\r\n/**\r\n * Map of alias/keys → definition entries.\r\n */\r\nexport type PasswordDefinitionMap = Record<string, PasswordRuleDefinition>;\r\n\r\n// Default rule definitions used by the meter.\r\nconst DEFAULT_RULE_DEFINITIONS: PasswordDefinitionMap = {\r\n   \"length-8\": {\r\n      pattern: /.{8,}/,\r\n      label: \"8+ chars\",\r\n      description: \"Use at least 8 characters.\",\r\n   },\r\n   \"length-12\": {\r\n      pattern: /.{12,}/,\r\n      optional: true,\r\n      label: \"12+ chars\",\r\n      description: \"Use 12 or more characters for stronger security.\",\r\n   },\r\n   lower: {\r\n      pattern: /[a-z]/,\r\n      label: \"Lowercase\",\r\n      description: \"Include at least one lowercase letter (a–z).\",\r\n   },\r\n   upper: {\r\n      pattern: /[A-Z]/,\r\n      label: \"Uppercase\",\r\n      description: \"Include at least one uppercase letter (A–Z).\",\r\n   },\r\n   digit: {\r\n      pattern: /\\d/,\r\n      label: \"Number\",\r\n      description: \"Include at least one digit (0–9).\",\r\n   },\r\n   symbol: {\r\n      pattern: /[^A-Za-z0-9]/,\r\n      label: \"Symbol\",\r\n      description: \"Include at least one symbol (e.g. !, @, #, ?).\",\r\n   },\r\n   \"no-space\": {\r\n      pattern: /^\\S+$/,\r\n      optional: true,\r\n      label: \"No spaces\",\r\n      description: \"Avoid spaces in your password.\",\r\n   },\r\n};\r\n\r\n/**\r\n * Merge default → global → local rule definitions.\r\n *\r\n * - DEFAULT_RULE_DEFINITIONS\r\n * - window[\"form-palette\"]?.ruleDefinition\r\n * - props.ruleDefinitions\r\n */\r\nfunction getMergedRuleDefinitions(\r\n   local?: PasswordDefinitionMap,\r\n): PasswordDefinitionMap {\r\n   let merged: PasswordDefinitionMap = { ...DEFAULT_RULE_DEFINITIONS };\r\n\r\n   if (typeof window !== \"undefined\") {\r\n      const fp = (window as any)[\"form-palette\"];\r\n      const globalDefs = fp?.ruleDefinition as\r\n         | PasswordDefinitionMap\r\n         | undefined;\r\n\r\n      if (globalDefs && typeof globalDefs === \"object\") {\r\n         merged = { ...merged, ...globalDefs };\r\n      }\r\n   }\r\n\r\n   if (local && typeof local === \"object\") {\r\n      merged = { ...merged, ...local };\r\n   }\r\n\r\n   return merged;\r\n}\r\n\r\n/**\r\n * Internal normalized state for a single rule.\r\n */\r\ninterface NormalizedRuleState {\r\n   key: string;\r\n   label: string;\r\n   description?: string;\r\n   optional: boolean;\r\n   required: boolean;\r\n   weight: number;\r\n   passed: boolean;\r\n}\r\n\r\n/**\r\n * Props passed to custom meter renderers.\r\n */\r\nexport interface PasswordMeterRenderProps {\r\n   /** Raw password value. */\r\n   value: string;\r\n   /** Bucket score 0..4 based on percent + thresholds. */\r\n   score: number;\r\n   /** 0–100 progress used for the bar. */\r\n   percent: number;\r\n   /** Human label for the current score. */\r\n   label: string;\r\n   /** Whether score >= minScore. */\r\n   passed: boolean;\r\n   /** Effective minScore after normalization. */\r\n   minScore: number;\r\n   /** Effective thresholds used for bucketing. */\r\n   thresholds: [number, number, number, number, number];\r\n   /** Effective labels used. */\r\n   labels: [string, string, string, string, string];\r\n   /** Rule-level details when using a definition map. */\r\n   rules: NormalizedRuleState[];\r\n}\r\n\r\n/**\r\n * Password-only props (on top of Shadcn text UI props & VariantBaseProps).\r\n *\r\n * This is what the form runtime sees as VariantPropsFor<\"password\">.\r\n */\r\nexport interface PasswordVariantProps {\r\n   /** Maximum number of characters permitted. */\r\n   maxLength?: number;\r\n   /** Browser autocomplete hint (e.g., \"current-password\", \"new-password\"). */\r\n   autoComplete?: string;\r\n\r\n   /** Show an eye button to toggle between obscured/plain text. (default: true) */\r\n   revealToggle?: boolean;\r\n   /** Start in the revealed (plain text) state. */\r\n   defaultRevealed?: boolean;\r\n   /** Called whenever the reveal state changes. */\r\n   onRevealChange?(revealed: boolean): void;\r\n   /** Override the icons used for hide/show. */\r\n   renderToggleIcon?(revealed: boolean): React.ReactNode;\r\n   /** Accessible label for the toggle button. */\r\n   toggleAriaLabel?(revealed: boolean): string;\r\n\r\n   /**\r\n    * Extra className for the reveal toggle button.\r\n    */\r\n   toggleButtonClassName?: string;\r\n\r\n   /**\r\n    * Enable the built-in strength meter (boolean or options).\r\n    *\r\n    * - false / undefined → no built-in meter is shown\r\n    * - true              → use defaults\r\n    * - object            → merge with defaults\r\n    */\r\n   strengthMeter?: boolean | StrengthOptions;\r\n\r\n   /**\r\n    * Optional rule definition map.\r\n    */\r\n   ruleDefinitions?: PasswordDefinitionMap;\r\n\r\n   /**\r\n    * Selection of rule aliases to apply.\r\n    *\r\n    * - \"length\"  → use ruleDefinitions[\"length\"] with default importance\r\n    * - \"!length\" → same rule but treated as more important\r\n    */\r\n   ruleUses?: string[];\r\n\r\n   /**\r\n    * Built-in meter style:\r\n    * - \"simple\" → single bar + label\r\n    * - \"rules\"  → bar + per-rule checklist\r\n    * Default: \"simple\"\r\n    */\r\n   meterStyle?: \"simple\" | \"rules\";\r\n\r\n   /**\r\n    * Optional custom meter renderer.\r\n    */\r\n   renderMeter?(props: PasswordMeterRenderProps): React.ReactNode;\r\n\r\n   /**\r\n    * ClassNames for the meter and rules UI.\r\n    */\r\n   meterWrapperClassName?: string;\r\n   meterContainerClassName?: string;\r\n   meterBarClassName?: string;\r\n   meterLabelClassName?: string;\r\n\r\n   rulesWrapperClassName?: string;\r\n   rulesHeadingClassName?: string;\r\n   rulesListClassName?: string;\r\n   ruleItemClassName?: string;\r\n   ruleIconClassName?: string;\r\n   ruleLabelClassName?: string;\r\n\r\n   /**\r\n    * Extra className for the outer field wrapper.\r\n    */\r\n   className?: string;\r\n}\r\n\r\n// We still *type* against ShadcnTextVariantProps so password can reuse\r\n// all the visual/text props. We take control of type, value, onValue & trailingControl.\r\ntype TextUiProps = Omit<\r\n   ShadcnTextVariantProps,\r\n   \"type\" | \"inputMode\" | \"leadingControl\" | \"trailingControl\" | \"value\" | \"onValue\"\r\n>;\r\n\r\n/**\r\n * Full props for the Shadcn-based password variant.\r\n */\r\nexport type ShadcnPasswordVariantProps = TextUiProps &\r\n   PasswordVariantProps &\r\n   Pick<BaseProps, \"value\" | \"onValue\" | \"error\">;\r\n\r\n// ─────────────────────────────────────────────\r\n// Rule normalization & scoring\r\n// ─────────────────────────────────────────────\r\n\r\nfunction normalizeRules(\r\n   value: string,\r\n   definitions?: PasswordDefinitionMap,\r\n   uses?: string[],\r\n): { rules: NormalizedRuleState[]; percent: number | null } {\r\n   if (!definitions || Object.keys(definitions).length === 0) {\r\n      return { rules: [], percent: null };\r\n   }\r\n\r\n   const useList =\r\n      uses && uses.length ? uses : Object.keys(definitions);\r\n\r\n   const rules: NormalizedRuleState[] = [];\r\n   let totalWeight = 0;\r\n   let passedWeight = 0;\r\n\r\n   for (const rawKey of useList) {\r\n      if (!rawKey) continue;\r\n\r\n      const important = rawKey.startsWith(\"!\");\r\n      const key = important ? rawKey.slice(1) : rawKey;\r\n      const def = definitions[key];\r\n      if (!def) continue;\r\n\r\n      let pattern: RegExp;\r\n      let optional = !important;\r\n      let weight = important ? 2 : 1;\r\n      let label = key;\r\n      let description: string | undefined;\r\n\r\n      if (typeof def === \"string\") {\r\n         pattern = new RegExp(def);\r\n      } else if (def instanceof RegExp) {\r\n         pattern = def;\r\n      } else {\r\n         pattern = def.pattern;\r\n         if (def.optional !== undefined) optional = def.optional;\r\n         if (def.weight !== undefined) weight = def.weight;\r\n         if (def.label) label = def.label;\r\n         if (def.description) description = def.description;\r\n      }\r\n\r\n      const passed = pattern.test(value);\r\n      totalWeight += weight;\r\n      if (passed) passedWeight += weight;\r\n\r\n      rules.push({\r\n         key,\r\n         label,\r\n         description,\r\n         optional,\r\n         required: !optional,\r\n         weight,\r\n         passed,\r\n      });\r\n   }\r\n\r\n   if (totalWeight === 0) {\r\n      return { rules, percent: null };\r\n   }\r\n\r\n   const percent = (passedWeight / totalWeight) * 100;\r\n   return { rules, percent };\r\n}\r\n\r\nfunction clampScore(x: number): number {\r\n   if (Number.isNaN(x)) return 0;\r\n   return Math.max(0, Math.min(4, x));\r\n}\r\n\r\nfunction computeMeterState(\r\n   value: string,\r\n   strength: StrengthOptions,\r\n   definitions?: PasswordDefinitionMap,\r\n   uses?: string[],\r\n): PasswordMeterRenderProps {\r\n   const { rules, percent: rulesPercent } = normalizeRules(\r\n      value,\r\n      definitions,\r\n      uses,\r\n   );\r\n\r\n   const labels = strength.labels ?? DEFAULT_LABELS;\r\n   const thresholds = strength.thresholds ?? DEFAULT_THRESHOLDS;\r\n   const minScore = (strength.minScore ?? 2) as number;\r\n\r\n   let percent: number;\r\n   let score: number;\r\n\r\n   if (rulesPercent != null) {\r\n      percent = rulesPercent;\r\n   } else {\r\n      const rawScore = clampScore(\r\n         strength.calc ? strength.calc(value) : defaultScore(value),\r\n      );\r\n      percent = (rawScore / 4) * 100;\r\n   }\r\n\r\n   let bucketIndex = 0;\r\n   for (let i = 0; i < thresholds.length; i++) {\r\n      if (percent >= thresholds[i]) {\r\n         bucketIndex = i;\r\n      } else {\r\n         break;\r\n      }\r\n   }\r\n   score = bucketIndex;\r\n\r\n   const label =\r\n      labels[score] ??\r\n      labels[labels.length - 1] ??\r\n      DEFAULT_LABELS[DEFAULT_LABELS.length - 1];\r\n\r\n   const passed = score >= minScore;\r\n\r\n   return {\r\n      value,\r\n      score,\r\n      percent,\r\n      label,\r\n      passed,\r\n      minScore,\r\n      thresholds: thresholds,\r\n      labels,\r\n      rules,\r\n   };\r\n}\r\n\r\nfunction meterColor(score: number): string {\r\n   if (score <= 1) return \"bg-destructive\";\r\n   if (score === 2) return \"bg-orange-500\";\r\n   if (score === 3) return \"bg-amber-500\";\r\n   return \"bg-emerald-500\";\r\n}\r\n\r\n// ─────────────────────────────────────────────\r\n// Main variant component\r\n// ─────────────────────────────────────────────\r\n\r\nexport const ShadcnPasswordVariant = React.forwardRef<\r\n   HTMLInputElement,\r\n   ShadcnPasswordVariantProps\r\n>(function ShadcnPasswordVariant(props, ref) {\r\n   const {\r\n      // base variant bits\r\n      value,\r\n      onValue,\r\n      error,\r\n\r\n      // password base props\r\n      maxLength,\r\n      autoComplete,\r\n      revealToggle = true,\r\n      defaultRevealed = false,\r\n      onRevealChange,\r\n      renderToggleIcon,\r\n      toggleAriaLabel,\r\n      toggleButtonClassName,\r\n\r\n      // strength / rules\r\n      strengthMeter,\r\n      ruleDefinitions,\r\n      ruleUses,\r\n      meterStyle = \"simple\",\r\n      renderMeter,\r\n      meterWrapperClassName,\r\n      meterContainerClassName,\r\n      meterBarClassName,\r\n      meterLabelClassName,\r\n      rulesWrapperClassName,\r\n      rulesHeadingClassName,\r\n      rulesListClassName,\r\n      ruleItemClassName,\r\n      ruleIconClassName,\r\n      ruleLabelClassName,\r\n\r\n      className,\r\n\r\n      // everything else from Shadcn text UI\r\n      ...restTextProps\r\n   } = props;\r\n\r\n   const [revealed, setRevealed] = React.useState<boolean>(\r\n      Boolean(defaultRevealed),\r\n   );\r\n\r\n   const normalizedStrength = React.useMemo(\r\n      () => normalizeStrengthOptions(strengthMeter),\r\n      [strengthMeter],\r\n   );\r\n\r\n   const effectiveRuleDefinitions = React.useMemo(\r\n      () => getMergedRuleDefinitions(ruleDefinitions),\r\n      [ruleDefinitions],\r\n   );\r\n\r\n   const meterState = React.useMemo<PasswordMeterRenderProps | null>(() => {\r\n      if (!normalizedStrength) return null;\r\n      const v = value ?? \"\";\r\n      return computeMeterState(\r\n         v,\r\n         normalizedStrength,\r\n         effectiveRuleDefinitions,\r\n         ruleUses,\r\n      );\r\n   }, [normalizedStrength, value, ruleUses, effectiveRuleDefinitions]);\r\n\r\n   const handleToggleReveal = React.useCallback(() => {\r\n      setRevealed((prev) => {\r\n         const next = !prev;\r\n         onRevealChange?.(next);\r\n         return next;\r\n      });\r\n   }, [onRevealChange]);\r\n\r\n   const handleChange = React.useCallback(\r\n      (event: React.ChangeEvent<HTMLInputElement>) => {\r\n         const next = event.target.value ?? \"\";\r\n         const detail: ChangeDetail<PasswordMeterRenderProps | undefined> = {\r\n            source: \"variant\",\r\n            raw: next,\r\n            nativeEvent: event,\r\n            meta: meterState ?? undefined,\r\n         };\r\n         onValue?.(next, detail);\r\n      },\r\n      [onValue, meterState],\r\n   );\r\n\r\n   const toggleLabel =\r\n      toggleAriaLabel?.(revealed) ??\r\n      (revealed ? \"Hide password\" : \"Show password\");\r\n\r\n   const trailingControl =\r\n      revealToggle === false ? undefined : (\r\n         <button\r\n            type=\"button\"\r\n            onClick={handleToggleReveal}\r\n            aria-label={toggleLabel}\r\n            tabIndex={-1}\r\n            className={cn(\r\n               \"inline-flex h-full items-center justify-center px-3 text-muted-foreground transition-colors hover:text-foreground hover:bg-muted/50 focus-visible:outline-none focus-visible:bg-muted/50\",\r\n               toggleButtonClassName,\r\n            )}\r\n            data-slot=\"password-toggle\"\r\n         >\r\n            {renderToggleIcon ? (\r\n               renderToggleIcon(revealed)\r\n            ) : revealed ? (\r\n               <EyeOff className=\"h-4 w-4\" />\r\n            ) : (\r\n               <Eye className=\"h-4 w-4\" />\r\n            )}\r\n         </button>\r\n      );\r\n\r\n   const meterNode =\r\n      normalizedStrength && meterState\r\n         ? renderMeter?.(meterState) ??\r\n         (strengthMeter && (\r\n            <div\r\n               className={cn(\r\n                  normalizedStrength.display === \"block\"\r\n                     ? \"mt-2 space-y-2\"\r\n                     : \"mt-1.5 flex flex-col gap-0\",\r\n                  meterWrapperClassName,\r\n               )}\r\n               data-slot=\"password-meter\"\r\n            >\r\n               {/* Progress Bar Row */}\r\n               <div\r\n                  className={cn(\r\n                     \"flex w-full items-center gap-3\",\r\n                     meterContainerClassName,\r\n                  )}\r\n               >\r\n                  <div className=\"flex-1\">\r\n                     {/* Reduced height from h-2 to h-1 */}\r\n                     <div className=\"h-1 w-full overflow-hidden rounded-full bg-secondary\">\r\n                        <div\r\n                           className={cn(\r\n                              \"h-full transition-all duration-300 ease-out\",\r\n                              meterColor(meterState.score),\r\n                              meterBarClassName,\r\n                           )}\r\n                           style={{ width: `${meterState.percent}%` }}\r\n                        />\r\n                     </div>\r\n                  </div>\r\n\r\n                  {normalizedStrength.showLabel !== false && (\r\n                     <div\r\n                        className={cn(\r\n                           \"min-w-[4rem] text-right text-[10px] font-medium uppercase tracking-wider text-muted-foreground\",\r\n                           meterLabelClassName,\r\n                        )}\r\n                     >\r\n                        {meterState.label}\r\n                     </div>\r\n                  )}\r\n               </div>\r\n\r\n               {/* New Modern Chips for Rules */}\r\n               {meterStyle === \"rules\" &&\r\n                  meterState.rules.length > 0 && (\r\n                     <div\r\n                        className={cn(\r\n                           \"flex flex-wrap gap-1.5 pt-1\",\r\n                           rulesWrapperClassName,\r\n                        )}\r\n                     >\r\n                        {meterState.rules.map((rule) => (\r\n                           <span\r\n                              key={rule.key}\r\n                              className={cn(\r\n                                 \"inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-medium transition-colors duration-200\",\r\n                                 rule.passed\r\n                                    ? \"border-emerald-500/30 bg-emerald-500/10 text-emerald-600 dark:border-emerald-400/20 dark:bg-emerald-400/10 dark:text-emerald-400\"\r\n                                    : \"border-transparent bg-secondary text-muted-foreground\",\r\n                                 ruleItemClassName\r\n                              )}\r\n                           >\r\n                              {rule.passed && (\r\n                                 <Check className=\"h-3 w-3\" strokeWidth={3} />\r\n                              )}\r\n                              {rule.label}\r\n                           </span>\r\n                        ))}\r\n                     </div>\r\n                  )}\r\n            </div>\r\n         ))\r\n         : null;\r\n\r\n   return (\r\n      <div className={cn(\"group/password w-full\", className)} data-slot=\"password-field\">\r\n         <Input\r\n            ref={ref}\r\n            {...restTextProps}\r\n            type={revealed ? \"text\" : \"password\"}\r\n            value={value ?? \"\"}\r\n            onChange={handleChange}\r\n            maxLength={maxLength}\r\n            autoComplete={autoComplete}\r\n            trailingControl={trailingControl}\r\n            aria-invalid={error ? \"true\" : undefined}\r\n         />\r\n         {meterNode}\r\n      </div>\r\n   );\r\n});\r\n\r\nShadcnPasswordVariant.displayName = \"ShadcnPasswordVariant\";\r\n\r\nexport default ShadcnPasswordVariant;\r\n","// src/variants/core/password.tsx\r\n\r\nimport type { VariantModuleFor } from \"@/schema/variant\";\r\nimport { ShadcnPasswordVariant } from \"@/presets/shadcn-variants/password\";\r\n\r\n/**\r\n * Core module for the \"password\" variant.\r\n *\r\n * - Uses the ShadcnPasswordVariant UI (Input + reveal toggle + strength meter).\r\n * - Value type is string | undefined (from Variants[\"password\"].value).\r\n * - Props are ShadcnPasswordVariantProps (from Variants[\"password\"].props).\r\n */\r\nexport const passwordVariant: VariantModuleFor<\"password\"> = {\r\n   variant: \"password\",\r\n   Variant: ShadcnPasswordVariant,\r\n\r\n   // Optional layout defaults – tweak as you like\r\n   defaults: {\r\n      layout: {\r\n         fullWidth: true,\r\n         // You can set defaultSize/defaultDensity here if you want:\r\n         // defaultSize: \"md\",\r\n         // defaultDensity: \"normal\",\r\n      },\r\n   },\r\n\r\n   meta: {\r\n      label: \"Password\",\r\n      description:\r\n         \"Password input with reveal toggle and optional strength meter.\",\r\n      tags: [\"auth\", \"security\", \"password\"],\r\n   },\r\n};\r\n\r\nexport default passwordVariant;","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Popover({\n  ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n  return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n  ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n  return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n  className,\n  align = \"center\",\n  sideOffset = 4,\n  ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n  return (\n    <PopoverPrimitive.Portal>\n      <PopoverPrimitive.Content\n        data-slot=\"popover-content\"\n        align={align}\n        sideOffset={sideOffset}\n        className={cn(\n          \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden pointer-events-auto\",\n          className\n        )}\n        {...props}\n      />\n    </PopoverPrimitive.Portal>\n  )\n}\n\nfunction PopoverAnchor({\n  ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n  return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","/**\n * Time zone name format.\n */\n\n/**\n * The function returns the time zone name for the given date in the specified\n * time zone.\n *\n * It uses the `Intl.DateTimeFormat` API and by default outputs the time zone\n * name in a long format, e.g. \"Pacific Standard Time\" or\n * \"Singapore Standard Time\".\n *\n * It is possible to specify the format as the third argument using one of the following options\n *\n * - \"short\": e.g. \"EDT\" or \"GMT+8\".\n * - \"long\": e.g. \"Eastern Daylight Time\".\n * - \"shortGeneric\": e.g. \"ET\" or \"Singapore Time\".\n * - \"longGeneric\": e.g. \"Eastern Time\" or \"Singapore Standard Time\".\n *\n * These options correspond to TR35 tokens `z..zzz`, `zzzz`, `v`, and `vvvv` respectively: https://www.unicode.org/reports/tr35/tr35-dates.html#dfst-zone\n *\n * @param timeZone - Time zone name (IANA or UTC offset)\n * @param date - Date object to get the time zone name for\n * @param format - Optional format of the time zone name. Defaults to \"long\". Can be \"short\", \"long\", \"shortGeneric\", or \"longGeneric\".\n *\n * @returns Time zone name (e.g. \"Singapore Standard Time\")\n */\nexport function tzName(timeZone, date, format = \"long\") {\n  return new Intl.DateTimeFormat(\"en-US\", {\n    // Enforces engine to render the time. Without the option JavaScriptCore omits it.\n    hour: \"numeric\",\n    timeZone: timeZone,\n    timeZoneName: format\n  }).format(date).split(/\\s/g) // Format.JS uses non-breaking spaces\n  .slice(2) // Skip the hour and AM/PM parts\n  .join(\" \");\n}","const offsetFormatCache = {};\nconst offsetCache = {};\n\n/**\n * The function extracts UTC offset in minutes from the given date in specified\n * time zone.\n *\n * Unlike `Date.prototype.getTimezoneOffset`, this function returns the value\n * mirrored to the sign of the offset in the time zone. For Asia/Singapore\n * (UTC+8), `tzOffset` returns 480, while `getTimezoneOffset` returns -480.\n *\n * @param timeZone - Time zone name (IANA or UTC offset)\n * @param date - Date to check the offset for\n *\n * @returns UTC offset in minutes\n */\nexport function tzOffset(timeZone, date) {\n  try {\n    const format = offsetFormatCache[timeZone] ||= new Intl.DateTimeFormat(\"en-US\", {\n      timeZone,\n      timeZoneName: \"longOffset\"\n    }).format;\n    const offsetStr = format(date).split(\"GMT\")[1];\n    if (offsetStr in offsetCache) return offsetCache[offsetStr];\n    return calcOffset(offsetStr, offsetStr.split(\":\"));\n  } catch {\n    // Fallback to manual parsing if the runtime doesn't support ±HH:MM/±HHMM/±HH\n    // See: https://github.com/nodejs/node/issues/53419\n    if (timeZone in offsetCache) return offsetCache[timeZone];\n    const captures = timeZone?.match(offsetRe);\n    if (captures) return calcOffset(timeZone, captures.slice(1));\n    return NaN;\n  }\n}\nconst offsetRe = /([+-]\\d\\d):?(\\d\\d)?/;\nfunction calcOffset(cacheStr, values) {\n  const hours = +(values[0] || 0);\n  const minutes = +(values[1] || 0);\n  // Convert seconds to minutes by dividing by 60 to keep the function return in minutes.\n  const seconds = +(values[2] || 0) / 60;\n  return offsetCache[cacheStr] = hours * 60 + minutes > 0 ? hours * 60 + minutes + seconds : hours * 60 - minutes - seconds;\n}","import { tzOffset } from \"../tzOffset/index.js\";\nexport class TZDateMini extends Date {\n  //#region static\n\n  constructor(...args) {\n    super();\n    if (args.length > 1 && typeof args[args.length - 1] === \"string\") {\n      this.timeZone = args.pop();\n    }\n    this.internal = new Date();\n    if (isNaN(tzOffset(this.timeZone, this))) {\n      this.setTime(NaN);\n    } else {\n      if (!args.length) {\n        this.setTime(Date.now());\n      } else if (typeof args[0] === \"number\" && (args.length === 1 || args.length === 2 && typeof args[1] !== \"number\")) {\n        this.setTime(args[0]);\n      } else if (typeof args[0] === \"string\") {\n        this.setTime(+new Date(args[0]));\n      } else if (args[0] instanceof Date) {\n        this.setTime(+args[0]);\n      } else {\n        this.setTime(+new Date(...args));\n        adjustToSystemTZ(this, NaN);\n        syncToInternal(this);\n      }\n    }\n  }\n  static tz(tz, ...args) {\n    return args.length ? new TZDateMini(...args, tz) : new TZDateMini(Date.now(), tz);\n  }\n\n  //#endregion\n\n  //#region time zone\n\n  withTimeZone(timeZone) {\n    return new TZDateMini(+this, timeZone);\n  }\n  getTimezoneOffset() {\n    const offset = -tzOffset(this.timeZone, this);\n    // Remove the seconds offset\n    // use Math.floor for negative GMT timezones and Math.ceil for positive GMT timezones.\n    return offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n  }\n\n  //#endregion\n\n  //#region time\n\n  setTime(time) {\n    Date.prototype.setTime.apply(this, arguments);\n    syncToInternal(this);\n    return +this;\n  }\n\n  //#endregion\n\n  //#region date-fns integration\n\n  [Symbol.for(\"constructDateFrom\")](date) {\n    return new TZDateMini(+new Date(date), this.timeZone);\n  }\n\n  //#endregion\n}\n\n// Assign getters and setters\nconst re = /^(get|set)(?!UTC)/;\nObject.getOwnPropertyNames(Date.prototype).forEach(method => {\n  if (!re.test(method)) return;\n  const utcMethod = method.replace(re, \"$1UTC\");\n  // Filter out methods without UTC counterparts\n  if (!TZDateMini.prototype[utcMethod]) return;\n  if (method.startsWith(\"get\")) {\n    // Delegate to internal date's UTC method\n    TZDateMini.prototype[method] = function () {\n      return this.internal[utcMethod]();\n    };\n  } else {\n    // Assign regular setter\n    TZDateMini.prototype[method] = function () {\n      Date.prototype[utcMethod].apply(this.internal, arguments);\n      syncFromInternal(this);\n      return +this;\n    };\n\n    // Assign UTC setter\n    TZDateMini.prototype[utcMethod] = function () {\n      Date.prototype[utcMethod].apply(this, arguments);\n      syncToInternal(this);\n      return +this;\n    };\n  }\n});\n\n/**\n * Function syncs time to internal date, applying the time zone offset.\n *\n * @param {Date} date - Date to sync\n */\nfunction syncToInternal(date) {\n  date.internal.setTime(+date);\n  date.internal.setUTCSeconds(date.internal.getUTCSeconds() - Math.round(-tzOffset(date.timeZone, date) * 60));\n}\n\n/**\n * Function syncs the internal date UTC values to the date. It allows to get\n * accurate timestamp value.\n *\n * @param {Date} date - The date to sync\n */\nfunction syncFromInternal(date) {\n  // First we transpose the internal values\n  Date.prototype.setFullYear.call(date, date.internal.getUTCFullYear(), date.internal.getUTCMonth(), date.internal.getUTCDate());\n  Date.prototype.setHours.call(date, date.internal.getUTCHours(), date.internal.getUTCMinutes(), date.internal.getUTCSeconds(), date.internal.getUTCMilliseconds());\n\n  // Now we have to adjust the date to the system time zone\n  adjustToSystemTZ(date);\n}\n\n/**\n * Function adjusts the date to the system time zone. It uses the time zone\n * differences to calculate the offset and adjust the date.\n *\n * @param {Date} date - Date to adjust\n */\nfunction adjustToSystemTZ(date) {\n  // Save the time zone offset before all the adjustments\n  const baseOffset = tzOffset(date.timeZone, date);\n  // Remove the seconds offset\n  // use Math.floor for negative GMT timezones and Math.ceil for positive GMT timezones.\n  const offset = baseOffset > 0 ? Math.floor(baseOffset) : Math.ceil(baseOffset);\n  //#region System DST adjustment\n\n  // The biggest problem with using the system time zone is that when we create\n  // a date from internal values stored in UTC, the system time zone might end\n  // up on the DST hour:\n  //\n  //   $ TZ=America/New_York node\n  //   > new Date(2020, 2, 8, 1).toString()\n  //   'Sun Mar 08 2020 01:00:00 GMT-0500 (Eastern Standard Time)'\n  //   > new Date(2020, 2, 8, 2).toString()\n  //   'Sun Mar 08 2020 03:00:00 GMT-0400 (Eastern Daylight Time)'\n  //   > new Date(2020, 2, 8, 3).toString()\n  //   'Sun Mar 08 2020 03:00:00 GMT-0400 (Eastern Daylight Time)'\n  //   > new Date(2020, 2, 8, 4).toString()\n  //   'Sun Mar 08 2020 04:00:00 GMT-0400 (Eastern Daylight Time)'\n  //\n  // Here we get the same hour for both 2 and 3, because the system time zone\n  // has DST beginning at 8 March 2020, 2 a.m. and jumps to 3 a.m. So we have\n  // to adjust the internal date to reflect that.\n  //\n  // However we want to adjust only if that's the DST hour the change happenes,\n  // not the hour where DST moves to.\n\n  // We calculate the previous hour to see if the time zone offset has changed\n  // and we have landed on the DST hour.\n  const prevHour = new Date(+date);\n  // We use UTC methods here as we don't want to land on the same hour again\n  // in case of DST.\n  prevHour.setUTCHours(prevHour.getUTCHours() - 1);\n\n  // Calculate if we are on the system DST hour.\n  const systemOffset = -new Date(+date).getTimezoneOffset();\n  const prevHourSystemOffset = -new Date(+prevHour).getTimezoneOffset();\n  const systemDSTChange = systemOffset - prevHourSystemOffset;\n  // Detect the DST shift. System DST change will occur both on\n  const dstShift = Date.prototype.getHours.apply(date) !== date.internal.getUTCHours();\n\n  // Move the internal date when we are on the system DST hour.\n  if (systemDSTChange && dstShift) date.internal.setUTCMinutes(date.internal.getUTCMinutes() + systemDSTChange);\n\n  //#endregion\n\n  //#region System diff adjustment\n\n  // Now we need to adjust the date, since we just applied internal values.\n  // We need to calculate the difference between the system and date time zones\n  // and apply it to the date.\n\n  const offsetDiff = systemOffset - offset;\n  if (offsetDiff) Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + offsetDiff);\n\n  //#endregion\n\n  //#region Seconds System diff adjustment\n\n  const systemDate = new Date(+date);\n  // Set the UTC seconds to 0 to isolate the timezone offset in seconds.\n  systemDate.setUTCSeconds(0);\n  // For negative systemOffset, invert the seconds.\n  const systemSecondsOffset = systemOffset > 0 ? systemDate.getSeconds() : (systemDate.getSeconds() - 60) % 60;\n\n  // Calculate the seconds offset based on the timezone offset.\n  const secondsOffset = Math.round(-(tzOffset(date.timeZone, date) * 60)) % 60;\n  if (secondsOffset || systemSecondsOffset) {\n    date.internal.setUTCSeconds(date.internal.getUTCSeconds() + secondsOffset);\n    Date.prototype.setUTCSeconds.call(date, Date.prototype.getUTCSeconds.call(date) + secondsOffset + systemSecondsOffset);\n  }\n\n  //#endregion\n\n  //#region Post-adjustment DST fix\n\n  const postBaseOffset = tzOffset(date.timeZone, date);\n  // Remove the seconds offset\n  // use Math.floor for negative GMT timezones and Math.ceil for positive GMT timezones.\n  const postOffset = postBaseOffset > 0 ? Math.floor(postBaseOffset) : Math.ceil(postBaseOffset);\n  const postSystemOffset = -new Date(+date).getTimezoneOffset();\n  const postOffsetDiff = postSystemOffset - postOffset;\n  const offsetChanged = postOffset !== offset;\n  const postDiff = postOffsetDiff - offsetDiff;\n  if (offsetChanged && postDiff) {\n    Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + postDiff);\n\n    // Now we need to check if got offset change during the post-adjustment.\n    // If so, we also need both dates to reflect that.\n\n    const newBaseOffset = tzOffset(date.timeZone, date);\n    // Remove the seconds offset\n    // use Math.floor for negative GMT timezones and Math.ceil for positive GMT timezones.\n    const newOffset = newBaseOffset > 0 ? Math.floor(newBaseOffset) : Math.ceil(newBaseOffset);\n    const offsetChange = postOffset - newOffset;\n    if (offsetChange) {\n      date.internal.setUTCMinutes(date.internal.getUTCMinutes() + offsetChange);\n      Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + offsetChange);\n    }\n  }\n\n  //#endregion\n}","import { tzName } from \"../tzName/index.js\";\nimport { TZDateMini } from \"./mini.js\";\nexport class TZDate extends TZDateMini {\n  //#region static\n\n  static tz(tz, ...args) {\n    return args.length ? new TZDate(...args, tz) : new TZDate(Date.now(), tz);\n  }\n\n  //#endregion\n\n  //#region representation\n\n  toISOString() {\n    const [sign, hours, minutes] = this.tzComponents();\n    const tz = `${sign}${hours}:${minutes}`;\n    return this.internal.toISOString().slice(0, -1) + tz;\n  }\n  toString() {\n    // \"Tue Aug 13 2024 07:50:19 GMT+0800 (Singapore Standard Time)\";\n    return `${this.toDateString()} ${this.toTimeString()}`;\n  }\n  toDateString() {\n    // toUTCString returns RFC 7231 (\"Mon, 12 Aug 2024 23:36:08 GMT\")\n    const [day, date, month, year] = this.internal.toUTCString().split(\" \");\n    // \"Tue Aug 13 2024\"\n    return `${day?.slice(0, -1) /* Remove \",\" */} ${month} ${date} ${year}`;\n  }\n  toTimeString() {\n    // toUTCString returns RFC 7231 (\"Mon, 12 Aug 2024 23:36:08 GMT\")\n    const time = this.internal.toUTCString().split(\" \")[4];\n    const [sign, hours, minutes] = this.tzComponents();\n    // \"07:42:23 GMT+0800 (Singapore Standard Time)\"\n    return `${time} GMT${sign}${hours}${minutes} (${tzName(this.timeZone, this)})`;\n  }\n  toLocaleString(locales, options) {\n    return Date.prototype.toLocaleString.call(this, locales, {\n      ...options,\n      timeZone: options?.timeZone || this.timeZone\n    });\n  }\n  toLocaleDateString(locales, options) {\n    return Date.prototype.toLocaleDateString.call(this, locales, {\n      ...options,\n      timeZone: options?.timeZone || this.timeZone\n    });\n  }\n  toLocaleTimeString(locales, options) {\n    return Date.prototype.toLocaleTimeString.call(this, locales, {\n      ...options,\n      timeZone: options?.timeZone || this.timeZone\n    });\n  }\n\n  //#endregion\n\n  //#region private\n\n  tzComponents() {\n    const offset = this.getTimezoneOffset();\n    const sign = offset > 0 ? \"-\" : \"+\";\n    const hours = String(Math.floor(Math.abs(offset) / 60)).padStart(2, \"0\");\n    const minutes = String(Math.abs(offset) % 60).padStart(2, \"0\");\n    return [sign, hours, minutes];\n  }\n\n  //#endregion\n\n  withTimeZone(timeZone) {\n    return new TZDate(+this, timeZone);\n  }\n\n  //#region date-fns integration\n\n  [Symbol.for(\"constructDateFrom\")](date) {\n    return new TZDate(+new Date(date), this.timeZone);\n  }\n\n  //#endregion\n}","/**\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","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addDays} function options.\n */\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given 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 date - The date to be changed\n * @param amount - The amount of days to be added.\n * @param options - An object with options\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount, options) {\n  const _date = toDate(date, options?.in);\n  if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n\n  // If 0 days, no-op to avoid changing times in the hour before end of DST\n  if (!amount) return _date;\n\n  _date.setDate(_date.getDate() + amount);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given 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 date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount, options) {\n  const _date = toDate(date, options?.in);\n  if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n  if (!amount) {\n    // If 0 months, no-op to avoid changing times in the hour before end of DST\n    return _date;\n  }\n  const dayOfMonth = _date.getDate();\n\n  // The JS Date object supports date math by accepting out-of-bounds values for\n  // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n  // new Date(2020, 13, 1) returns 1 Feb 2021.  This is *almost* the behavior we\n  // want except that dates will wrap around the end of a month, meaning that\n  // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n  // we'll default to the end of the desired month by adding 1 to the desired\n  // month and using a date of 0 to back up one day to the end of the desired\n  // month.\n  const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());\n  endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n  const daysInMonth = endOfDesiredMonth.getDate();\n  if (dayOfMonth >= daysInMonth) {\n    // If we're already at the end of the month, then this is the correct date\n    // and we're done.\n    return endOfDesiredMonth;\n  } else {\n    // Otherwise, we now know that setting the original day-of-month value won't\n    // cause an overflow, so set the desired day-of-month. Note that we can't\n    // just set the date of `endOfDesiredMonth` because that object may have had\n    // its time changed in the unusual case where where a DST transition was on\n    // the last day of the month and its local time was in the hour skipped or\n    // repeated next to a DST transition.  So we use `date` instead which is\n    // guaranteed to still have the original time.\n    _date.setFullYear(\n      endOfDesiredMonth.getFullYear(),\n      endOfDesiredMonth.getMonth(),\n      dayOfMonth,\n    );\n    return _date;\n  }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n  return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n  defaultOptions = newOptions;\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\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 date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const _date = toDate(date, options?.in);\n  const day = _date.getDay();\n  const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n  _date.setDate(_date.getDate() - diff);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_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 date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date, options) {\n  return startOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n\n  const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n  const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n  const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n  const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n  if (_date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (_date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n  const _date = toDate(date);\n  const utcDate = new Date(\n    Date.UTC(\n      _date.getFullYear(),\n      _date.getMonth(),\n      _date.getDate(),\n      _date.getHours(),\n      _date.getMinutes(),\n      _date.getSeconds(),\n      _date.getMilliseconds(),\n    ),\n  );\n  utcDate.setUTCFullYear(_date.getFullYear());\n  return +date - +utcDate;\n}\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n  const normalize = constructFrom.bind(\n    null,\n    context || dates.find((date) => typeof date === \"object\"),\n  );\n  return dates.map(normalize);\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\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 date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n  const _date = toDate(date, options?.in);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n\n  const laterStartOfDay = startOfDay(laterDate_);\n  const earlierStartOfDay = startOfDay(earlierDate_);\n\n  const laterTimestamp =\n    +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n  const earlierTimestamp =\n    +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n  // Round the number of days to the nearest integer because the number of\n  // milliseconds in a day is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_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 date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date, options) {\n  const year = getISOWeekYear(date, options);\n  const fourthOfJanuary = constructFrom(options?.in || date, 0);\n  fourthOfJanuary.setFullYear(year, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link addWeeks} function options.\n */\n\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of weeks to the given 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 date - The date to be changed\n * @param amount - The amount of weeks to be added.\n * @param options - An object with options\n *\n * @returns The new date with the weeks added\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * const result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport function addWeeks(date, amount, options) {\n  return addDays(date, amount * 7, options);\n}\n\n// Fallback for modularized imports:\nexport default addWeeks;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addYears} function options.\n */\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given 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.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be added.\n * @param options - The options\n *\n * @returns The new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport function addYears(date, amount, options) {\n  return addMonths(date, amount * 12, options);\n}\n\n// Fallback for modularized imports:\nexport default addYears;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link max} function options.\n */\n\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\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 dates - The dates to compare\n *\n * @returns The latest of the dates\n *\n * @example\n * // Which of these dates is the latest?\n * const result = max([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\nexport function max(dates, options) {\n  let result;\n  let context = options?.in;\n\n  dates.forEach((date) => {\n    // Use the first date object as the context function\n    if (!context && typeof date === \"object\")\n      context = constructFrom.bind(null, date);\n\n    const date_ = toDate(date, context);\n    if (!result || result < date_ || isNaN(+date_)) result = date_;\n  });\n\n  return constructFrom(context, result || NaN);\n}\n\n// Fallback for modularized imports:\nexport default max;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link min} function options.\n */\n\n/**\n * @name min\n * @category Common Helpers\n * @summary Returns the earliest of the given dates.\n *\n * @description\n * Returns the earliest of the given dates.\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 dates - The dates to compare\n *\n * @returns The earliest of the dates\n *\n * @example\n * // Which of these dates is the earliest?\n * const result = min([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Wed Feb 11 1987 00:00:00\n */\nexport function min(dates, options) {\n  let result;\n  let context = options?.in;\n\n  dates.forEach((date) => {\n    // Use the first date object as the context function\n    if (!context && typeof date === \"object\")\n      context = constructFrom.bind(null, date);\n\n    const date_ = toDate(date, context);\n    if (!result || result > date_ || isNaN(+date_)) result = date_;\n  });\n\n  return constructFrom(context, result || NaN);\n}\n\n// Fallback for modularized imports:\nexport default min;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link isSameDay} function options.\n */\n\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same day (and year and month)\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\nexport function isSameDay(laterDate, earlierDate, options) {\n  const [dateLeft_, dateRight_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n  return +startOfDay(dateLeft_) === +startOfDay(dateRight_);\n}\n\n// Fallback for modularized imports:\nexport default isSameDay;\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 { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link differenceInCalendarMonths} function options.\n */\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of calendar months\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport function differenceInCalendarMonths(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n\n  const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();\n  const monthsDiff = laterDate_.getMonth() - earlierDate_.getMonth();\n\n  return yearsDiff * 12 + monthsDiff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarMonths;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfMonth} function options.\n */\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\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 date - The original date\n * @param options - An object with options\n *\n * @returns The end of a month\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfMonth(date, options) {\n  const _date = toDate(date, options?.in);\n  const month = _date.getMonth();\n  _date.setFullYear(_date.getFullYear(), month + 1, 0);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMonth;\n","import { normalizeDates } from \"./normalizeDates.js\";\n\nexport function normalizeInterval(context, interval) {\n  const [start, end] = normalizeDates(context, interval.start, interval.end);\n  return { start, end };\n}\n","import { normalizeInterval } from \"./_lib/normalizeInterval.js\";\nimport { constructFrom } from \"./constructFrom.js\";\n\n/**\n * The {@link eachMonthOfInterval} function options.\n */\n\n/**\n * The {@link eachMonthOfInterval} function result type. It resolves the proper data type.\n */\n\n/**\n * @name eachMonthOfInterval\n * @category Interval Helpers\n * @summary Return the array of months within the specified time interval.\n *\n * @description\n * Return the array of months within the specified time interval.\n *\n * @typeParam IntervalType - Interval type.\n * @typeParam Options - Options type.\n *\n * @param interval - The interval.\n * @param options - An object with options.\n *\n * @returns The array with starts of months from the month of the interval start to the month of the interval end\n *\n * @example\n * // Each month between 6 February 2014 and 10 August 2014:\n * const result = eachMonthOfInterval({\n *   start: new Date(2014, 1, 6),\n *   end: new Date(2014, 7, 10)\n * })\n * //=> [\n * //   Sat Feb 01 2014 00:00:00,\n * //   Sat Mar 01 2014 00:00:00,\n * //   Tue Apr 01 2014 00:00:00,\n * //   Thu May 01 2014 00:00:00,\n * //   Sun Jun 01 2014 00:00:00,\n * //   Tue Jul 01 2014 00:00:00,\n * //   Fri Aug 01 2014 00:00:00\n * // ]\n */\nexport function eachMonthOfInterval(interval, options) {\n  const { start, end } = normalizeInterval(options?.in, interval);\n\n  let reversed = +start > +end;\n  const endTime = reversed ? +start : +end;\n  const date = reversed ? end : start;\n  date.setHours(0, 0, 0, 0);\n  date.setDate(1);\n\n  let step = options?.step ?? 1;\n  if (!step) return [];\n  if (step < 0) {\n    step = -step;\n    reversed = !reversed;\n  }\n\n  const dates = [];\n\n  while (+date <= endTime) {\n    dates.push(constructFrom(start, date));\n    date.setMonth(date.getMonth() + step);\n  }\n\n  return reversed ? dates.reverse() : dates;\n}\n\n// Fallback for modularized imports:\nexport default eachMonthOfInterval;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfMonth} function options.\n */\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date. The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments.\n * 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,\n * or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a month\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfMonth(date, options) {\n  const _date = toDate(date, options?.in);\n  _date.setDate(1);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfYear} function options.\n */\n\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\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 date - The original date\n * @param options - The options\n *\n * @returns The end of a year\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * const result = endOfYear(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\nexport function endOfYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n  _date.setFullYear(year + 1, 0, 0);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfYear;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\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 date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date, options) {\n  const date_ = toDate(date, options?.in);\n  date_.setFullYear(date_.getFullYear(), 0, 1);\n  date_.setHours(0, 0, 0, 0);\n  return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","import { normalizeInterval } from \"./_lib/normalizeInterval.js\";\nimport { constructFrom } from \"./constructFrom.js\";\n\n/**\n * The {@link eachYearOfInterval} function options.\n */\n\n/**\n * The {@link eachYearOfInterval} function result type. It resolves the proper data type.\n * It uses the first argument date object type, starting from the date argument,\n * then the start interval date, and finally the end interval date. If\n * a context function is passed, it uses the context function return type.\n */\n\n/**\n * @name eachYearOfInterval\n * @category Interval Helpers\n * @summary Return the array of yearly timestamps within the specified time interval.\n *\n * @description\n * Return the array of yearly timestamps within the specified time interval.\n *\n * @typeParam IntervalType - Interval type.\n * @typeParam Options - Options type.\n *\n * @param interval - The interval.\n * @param options - An object with options.\n *\n * @returns The array with starts of yearly timestamps from the month of the interval start to the month of the interval end\n *\n * @example\n * // Each year between 6 February 2014 and 10 August 2017:\n * const result = eachYearOfInterval({\n *   start: new Date(2014, 1, 6),\n *   end: new Date(2017, 7, 10)\n * })\n * //=> [\n * //   Wed Jan 01 2014 00:00:00,\n * //   Thu Jan 01 2015 00:00:00,\n * //   Fri Jan 01 2016 00:00:00,\n * //   Sun Jan 01 2017 00:00:00\n * // ]\n */\nexport function eachYearOfInterval(interval, options) {\n  const { start, end } = normalizeInterval(options?.in, interval);\n\n  let reversed = +start > +end;\n  const endTime = reversed ? +start : +end;\n  const date = reversed ? end : start;\n  date.setHours(0, 0, 0, 0);\n  date.setMonth(0, 1);\n\n  let step = options?.step ?? 1;\n  if (!step) return [];\n  if (step < 0) {\n    step = -step;\n    reversed = !reversed;\n  }\n\n  const dates = [];\n\n  while (+date <= endTime) {\n    dates.push(constructFrom(start, date));\n    date.setFullYear(date.getFullYear() + step);\n  }\n\n  return reversed ? dates.reverse() : dates;\n}\n\n// Fallback for modularized imports:\nexport default eachYearOfInterval;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfWeek} function options.\n */\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\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 date - The original date\n * @param options - An object with options\n *\n * @returns The end of a week\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport function endOfWeek(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const _date = toDate(date, options?.in);\n  const day = _date.getDay();\n  const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n  _date.setDate(_date.getDate() + diff);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfWeek;\n","import { endOfWeek } from \"./endOfWeek.js\";\n\n/**\n * The {@link endOfISOWeek} function options.\n */\n\n/**\n * @name endOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the end of an ISO week for the given date.\n *\n * @description\n * Return the end of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_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 date - The original date\n * @param options - An object with options\n *\n * @returns The end of an ISO week\n *\n * @example\n * // The end of an ISO week for 2 September 2014 11:55:00:\n * const result = endOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport function endOfISOWeek(date, options) {\n  return endOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default endOfISOWeek;\n","const formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: \"less than a second\",\n    other: \"less than {{count}} seconds\",\n  },\n\n  xSeconds: {\n    one: \"1 second\",\n    other: \"{{count}} seconds\",\n  },\n\n  halfAMinute: \"half a minute\",\n\n  lessThanXMinutes: {\n    one: \"less than a minute\",\n    other: \"less than {{count}} minutes\",\n  },\n\n  xMinutes: {\n    one: \"1 minute\",\n    other: \"{{count}} minutes\",\n  },\n\n  aboutXHours: {\n    one: \"about 1 hour\",\n    other: \"about {{count}} hours\",\n  },\n\n  xHours: {\n    one: \"1 hour\",\n    other: \"{{count}} hours\",\n  },\n\n  xDays: {\n    one: \"1 day\",\n    other: \"{{count}} days\",\n  },\n\n  aboutXWeeks: {\n    one: \"about 1 week\",\n    other: \"about {{count}} weeks\",\n  },\n\n  xWeeks: {\n    one: \"1 week\",\n    other: \"{{count}} weeks\",\n  },\n\n  aboutXMonths: {\n    one: \"about 1 month\",\n    other: \"about {{count}} months\",\n  },\n\n  xMonths: {\n    one: \"1 month\",\n    other: \"{{count}} months\",\n  },\n\n  aboutXYears: {\n    one: \"about 1 year\",\n    other: \"about {{count}} years\",\n  },\n\n  xYears: {\n    one: \"1 year\",\n    other: \"{{count}} years\",\n  },\n\n  overXYears: {\n    one: \"over 1 year\",\n    other: \"over {{count}} years\",\n  },\n\n  almostXYears: {\n    one: \"almost 1 year\",\n    other: \"almost {{count}} years\",\n  },\n};\n\nexport const formatDistance = (token, count, options) => {\n  let result;\n\n  const tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === \"string\") {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace(\"{{count}}\", count.toString());\n  }\n\n  if (options?.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return \"in \" + result;\n    } else {\n      return result + \" ago\";\n    }\n  }\n\n  return result;\n};\n","export function buildFormatLongFn(args) {\n  return (options = {}) => {\n    // TODO: Remove String()\n    const width = options.width ? String(options.width) : args.defaultWidth;\n    const format = args.formats[width] || args.formats[args.defaultWidth];\n    return format;\n  };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n  full: \"EEEE, MMMM do, y\",\n  long: \"MMMM do, y\",\n  medium: \"MMM d, y\",\n  short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n  full: \"h:mm:ss a zzzz\",\n  long: \"h:mm:ss a z\",\n  medium: \"h:mm:ss a\",\n  short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: \"{{date}}, {{time}}\",\n  short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: \"full\",\n  }),\n\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: \"full\",\n  }),\n\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: \"full\",\n  }),\n};\n","const formatRelativeLocale = {\n  lastWeek: \"'last' eeee 'at' p\",\n  yesterday: \"'yesterday at' p\",\n  today: \"'today at' p\",\n  tomorrow: \"'tomorrow at' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n  formatRelativeLocale[token];\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n  return (value, options) => {\n    const context = options?.context ? String(options.context) : \"standalone\";\n\n    let valuesArray;\n    if (context === \"formatting\" && args.formattingValues) {\n      const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n      const width = options?.width ? String(options.width) : defaultWidth;\n\n      valuesArray =\n        args.formattingValues[width] || args.formattingValues[defaultWidth];\n    } else {\n      const defaultWidth = args.defaultWidth;\n      const width = options?.width ? String(options.width) : args.defaultWidth;\n\n      valuesArray = args.values[width] || args.values[defaultWidth];\n    }\n    const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n    // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n    return valuesArray[index];\n  };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n  narrow: [\"B\", \"A\"],\n  abbreviated: [\"BC\", \"AD\"],\n  wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n  narrow: [\"1\", \"2\", \"3\", \"4\"],\n  abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n  wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n  narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n  abbreviated: [\n    \"Jan\",\n    \"Feb\",\n    \"Mar\",\n    \"Apr\",\n    \"May\",\n    \"Jun\",\n    \"Jul\",\n    \"Aug\",\n    \"Sep\",\n    \"Oct\",\n    \"Nov\",\n    \"Dec\",\n  ],\n\n  wide: [\n    \"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\",\n  ],\n};\n\nconst dayValues = {\n  narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n  short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n  abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  wide: [\n    \"Sunday\",\n    \"Monday\",\n    \"Tuesday\",\n    \"Wednesday\",\n    \"Thursday\",\n    \"Friday\",\n    \"Saturday\",\n  ],\n};\n\nconst dayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n};\n\nconst formattingDayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n  const number = Number(dirtyNumber);\n\n  // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`.\n  //\n  // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'.\n\n  const rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + \"st\";\n      case 2:\n        return number + \"nd\";\n      case 3:\n        return number + \"rd\";\n    }\n  }\n  return number + \"th\";\n};\n\nexport const localize = {\n  ordinalNumber,\n\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: \"wide\",\n  }),\n\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: \"wide\",\n    argumentCallback: (quarter) => quarter - 1,\n  }),\n\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: \"wide\",\n  }),\n\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: \"wide\",\n  }),\n\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: \"wide\",\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: \"wide\",\n  }),\n};\n","export function buildMatchFn(args) {\n  return (string, options = {}) => {\n    const width = options.width;\n\n    const matchPattern =\n      (width && args.matchPatterns[width]) ||\n      args.matchPatterns[args.defaultMatchWidth];\n    const matchResult = string.match(matchPattern);\n\n    if (!matchResult) {\n      return null;\n    }\n    const matchedString = matchResult[0];\n\n    const parsePatterns =\n      (width && args.parsePatterns[width]) ||\n      args.parsePatterns[args.defaultParseWidth];\n\n    const key = Array.isArray(parsePatterns)\n      ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n      : // [TODO] -- I challenge you to fix the type\n        findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n    let value;\n\n    value = args.valueCallback ? args.valueCallback(key) : key;\n    value = options.valueCallback\n      ? // [TODO] -- I challenge you to fix the type\n        options.valueCallback(value)\n      : value;\n\n    const rest = string.slice(matchedString.length);\n\n    return { value, rest };\n  };\n}\n\nfunction findKey(object, predicate) {\n  for (const key in object) {\n    if (\n      Object.prototype.hasOwnProperty.call(object, key) &&\n      predicate(object[key])\n    ) {\n      return key;\n    }\n  }\n  return undefined;\n}\n\nfunction findIndex(array, predicate) {\n  for (let key = 0; key < array.length; key++) {\n    if (predicate(array[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}\n","export function buildMatchPatternFn(args) {\n  return (string, options = {}) => {\n    const matchResult = string.match(args.matchPattern);\n    if (!matchResult) return null;\n    const matchedString = matchResult[0];\n\n    const parseResult = string.match(args.parsePattern);\n    if (!parseResult) return null;\n    let value = args.valueCallback\n      ? args.valueCallback(parseResult[0])\n      : parseResult[0];\n\n    // [TODO] I challenge you to fix the type\n    value = options.valueCallback ? options.valueCallback(value) : value;\n\n    const rest = string.slice(matchedString.length);\n\n    return { value, rest };\n  };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n  narrow: /^(b|a)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n  narrow: [\n    /^j/i,\n    /^f/i,\n    /^m/i,\n    /^a/i,\n    /^m/i,\n    /^j/i,\n    /^j/i,\n    /^a/i,\n    /^s/i,\n    /^o/i,\n    /^n/i,\n    /^d/i,\n  ],\n\n  any: [\n    /^ja/i,\n    /^f/i,\n    /^mar/i,\n    /^ap/i,\n    /^may/i,\n    /^jun/i,\n    /^jul/i,\n    /^au/i,\n    /^s/i,\n    /^o/i,\n    /^n/i,\n    /^d/i,\n  ],\n};\n\nconst matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|mo|tu|we|th|fr|sa)/i,\n  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i,\n  },\n};\n\nexport const match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: (value) => parseInt(value, 10),\n  }),\n\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: \"any\",\n    valueCallback: (index) => index + 1,\n  }),\n\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: \"any\",\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: \"any\",\n  }),\n};\n","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n  code: \"en-US\",\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1,\n  },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const diff = differenceInCalendarDays(_date, startOfYear(_date));\n  const dayOfYear = diff + 1;\n  return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date, options) {\n  const _date = toDate(date, options?.in);\n  const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n  // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n\n  const defaultOptions = getDefaultOptions();\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n  firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setHours(0, 0, 0, 0);\n  const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n  const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n  firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setHours(0, 0, 0, 0);\n  const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n  if (+_date >= +startOfNextYear) {\n    return year + 1;\n  } else if (+_date >= +startOfThisYear) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\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.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const year = getWeekYear(date, options);\n  const firstWeek = constructFrom(options?.in || date, 0);\n  firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setHours(0, 0, 0, 0);\n  const _date = startOfWeek(firstWeek, options);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> 53\n */\nexport function getWeek(date, options) {\n  const _date = toDate(date, options?.in);\n  const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n  // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\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 \"../addLeadingZeros.js\";\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* |                                |\n * |  d  | Day of month                   |  D  |                                |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  m  | Minute                         |  M  | Month                          |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  y  | Year (abs)                     |  Y  |                                |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n  // Year\n  y(date, token) {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n    const signedYear = date.getFullYear();\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    const year = signedYear > 0 ? signedYear : 1 - signedYear;\n    return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n  },\n\n  // Month\n  M(date, token) {\n    const month = date.getMonth();\n    return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n  },\n\n  // Day of the month\n  d(date, token) {\n    return addLeadingZeros(date.getDate(), token.length);\n  },\n\n  // AM or PM\n  a(date, token) {\n    const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return dayPeriodEnumValue.toUpperCase();\n      case \"aaa\":\n        return dayPeriodEnumValue;\n      case \"aaaaa\":\n        return dayPeriodEnumValue[0];\n      case \"aaaa\":\n      default:\n        return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n    }\n  },\n\n  // Hour [1-12]\n  h(date, token) {\n    return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n  },\n\n  // Hour [0-23]\n  H(date, token) {\n    return addLeadingZeros(date.getHours(), token.length);\n  },\n\n  // Minute\n  m(date, token) {\n    return addLeadingZeros(date.getMinutes(), token.length);\n  },\n\n  // Second\n  s(date, token) {\n    return addLeadingZeros(date.getSeconds(), token.length);\n  },\n\n  // Fraction of second\n  S(date, token) {\n    const numberOfDigits = token.length;\n    const milliseconds = date.getMilliseconds();\n    const fractionalSeconds = Math.trunc(\n      milliseconds * Math.pow(10, numberOfDigits - 3),\n    );\n    return addLeadingZeros(fractionalSeconds, token.length);\n  },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\n\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\n\nconst dayPeriodEnum = {\n  am: \"am\",\n  pm: \"pm\",\n  midnight: \"midnight\",\n  noon: \"noon\",\n  morning: \"morning\",\n  afternoon: \"afternoon\",\n  evening: \"evening\",\n  night: \"night\",\n};\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n  // Era\n  G: function (date, token, localize) {\n    const era = date.getFullYear() > 0 ? 1 : 0;\n    switch (token) {\n      // AD, BC\n      case \"G\":\n      case \"GG\":\n      case \"GGG\":\n        return localize.era(era, { width: \"abbreviated\" });\n      // A, B\n      case \"GGGGG\":\n        return localize.era(era, { width: \"narrow\" });\n      // Anno Domini, Before Christ\n      case \"GGGG\":\n      default:\n        return localize.era(era, { width: \"wide\" });\n    }\n  },\n\n  // Year\n  y: function (date, token, localize) {\n    // Ordinal number\n    if (token === \"yo\") {\n      const signedYear = date.getFullYear();\n      // Returns 1 for 1 BC (which is year 0 in JavaScript)\n      const year = signedYear > 0 ? signedYear : 1 - signedYear;\n      return localize.ordinalNumber(year, { unit: \"year\" });\n    }\n\n    return lightFormatters.y(date, token);\n  },\n\n  // Local week-numbering year\n  Y: function (date, token, localize, options) {\n    const signedWeekYear = getWeekYear(date, options);\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n    // Two digit year\n    if (token === \"YY\") {\n      const twoDigitYear = weekYear % 100;\n      return addLeadingZeros(twoDigitYear, 2);\n    }\n\n    // Ordinal number\n    if (token === \"Yo\") {\n      return localize.ordinalNumber(weekYear, { unit: \"year\" });\n    }\n\n    // Padding\n    return addLeadingZeros(weekYear, token.length);\n  },\n\n  // ISO week-numbering year\n  R: function (date, token) {\n    const isoWeekYear = getISOWeekYear(date);\n\n    // Padding\n    return addLeadingZeros(isoWeekYear, token.length);\n  },\n\n  // Extended year. This is a single number designating the year of this calendar system.\n  // The main difference between `y` and `u` localizers are B.C. years:\n  // | Year | `y` | `u` |\n  // |------|-----|-----|\n  // | AC 1 |   1 |   1 |\n  // | BC 1 |   1 |   0 |\n  // | BC 2 |   2 |  -1 |\n  // Also `yy` always returns the last two digits of a year,\n  // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n  u: function (date, token) {\n    const year = date.getFullYear();\n    return addLeadingZeros(year, token.length);\n  },\n\n  // Quarter\n  Q: function (date, token, localize) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"Q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n      case \"QQ\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case \"Qo\":\n        return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"QQQ\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"QQQQQ\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"QQQQ\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Stand-alone quarter\n  q: function (date, token, localize) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n      case \"qq\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case \"qo\":\n        return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"qqq\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"qqqqq\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"qqqq\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"standalone\",\n        });\n    }\n  },\n\n  // Month\n  M: function (date, token, localize) {\n    const month = date.getMonth();\n    switch (token) {\n      case \"M\":\n      case \"MM\":\n        return lightFormatters.M(date, token);\n      // 1st, 2nd, ..., 12th\n      case \"Mo\":\n        return localize.ordinalNumber(month + 1, { unit: \"month\" });\n      // Jan, Feb, ..., Dec\n      case \"MMM\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // J, F, ..., D\n      case \"MMMMM\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // January, February, ..., December\n      case \"MMMM\":\n      default:\n        return localize.month(month, { width: \"wide\", context: \"formatting\" });\n    }\n  },\n\n  // Stand-alone month\n  L: function (date, token, localize) {\n    const month = date.getMonth();\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"L\":\n        return String(month + 1);\n      // 01, 02, ..., 12\n      case \"LL\":\n        return addLeadingZeros(month + 1, 2);\n      // 1st, 2nd, ..., 12th\n      case \"Lo\":\n        return localize.ordinalNumber(month + 1, { unit: \"month\" });\n      // Jan, Feb, ..., Dec\n      case \"LLL\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // J, F, ..., D\n      case \"LLLLL\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // January, February, ..., December\n      case \"LLLL\":\n      default:\n        return localize.month(month, { width: \"wide\", context: \"standalone\" });\n    }\n  },\n\n  // Local week of year\n  w: function (date, token, localize, options) {\n    const week = getWeek(date, options);\n\n    if (token === \"wo\") {\n      return localize.ordinalNumber(week, { unit: \"week\" });\n    }\n\n    return addLeadingZeros(week, token.length);\n  },\n\n  // ISO week of year\n  I: function (date, token, localize) {\n    const isoWeek = getISOWeek(date);\n\n    if (token === \"Io\") {\n      return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n    }\n\n    return addLeadingZeros(isoWeek, token.length);\n  },\n\n  // Day of the month\n  d: function (date, token, localize) {\n    if (token === \"do\") {\n      return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n    }\n\n    return lightFormatters.d(date, token);\n  },\n\n  // Day of year\n  D: function (date, token, localize) {\n    const dayOfYear = getDayOfYear(date);\n\n    if (token === \"Do\") {\n      return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n    }\n\n    return addLeadingZeros(dayOfYear, token.length);\n  },\n\n  // Day of week\n  E: function (date, token, localize) {\n    const dayOfWeek = date.getDay();\n    switch (token) {\n      // Tue\n      case \"E\":\n      case \"EE\":\n      case \"EEE\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"EEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"EEEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"EEEE\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Local day of week\n  e: function (date, token, localize, options) {\n    const dayOfWeek = date.getDay();\n    const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (Nth day of week with current locale or weekStartsOn)\n      case \"e\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case \"ee\":\n        return addLeadingZeros(localDayOfWeek, 2);\n      // 1st, 2nd, ..., 7th\n      case \"eo\":\n        return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n      case \"eee\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"eeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"eeeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"eeee\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Stand-alone local day of week\n  c: function (date, token, localize, options) {\n    const dayOfWeek = date.getDay();\n    const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (same as in `e`)\n      case \"c\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case \"cc\":\n        return addLeadingZeros(localDayOfWeek, token.length);\n      // 1st, 2nd, ..., 7th\n      case \"co\":\n        return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n      case \"ccc\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // T\n      case \"ccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // Tu\n      case \"cccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"standalone\",\n        });\n      // Tuesday\n      case \"cccc\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"standalone\",\n        });\n    }\n  },\n\n  // ISO day of week\n  i: function (date, token, localize) {\n    const dayOfWeek = date.getDay();\n    const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n    switch (token) {\n      // 2\n      case \"i\":\n        return String(isoDayOfWeek);\n      // 02\n      case \"ii\":\n        return addLeadingZeros(isoDayOfWeek, token.length);\n      // 2nd\n      case \"io\":\n        return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n      // Tue\n      case \"iii\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"iiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"iiiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"iiii\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // AM or PM\n  a: function (date, token, localize) {\n    const hours = date.getHours();\n    const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"aaa\":\n        return localize\n          .dayPeriod(dayPeriodEnumValue, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          })\n          .toLowerCase();\n      case \"aaaaa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"aaaa\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // AM, PM, midnight, noon\n  b: function (date, token, localize) {\n    const hours = date.getHours();\n    let dayPeriodEnumValue;\n    if (hours === 12) {\n      dayPeriodEnumValue = dayPeriodEnum.noon;\n    } else if (hours === 0) {\n      dayPeriodEnumValue = dayPeriodEnum.midnight;\n    } else {\n      dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n    }\n\n    switch (token) {\n      case \"b\":\n      case \"bb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"bbb\":\n        return localize\n          .dayPeriod(dayPeriodEnumValue, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          })\n          .toLowerCase();\n      case \"bbbbb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"bbbb\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // in the morning, in the afternoon, in the evening, at night\n  B: function (date, token, localize) {\n    const hours = date.getHours();\n    let dayPeriodEnumValue;\n    if (hours >= 17) {\n      dayPeriodEnumValue = dayPeriodEnum.evening;\n    } else if (hours >= 12) {\n      dayPeriodEnumValue = dayPeriodEnum.afternoon;\n    } else if (hours >= 4) {\n      dayPeriodEnumValue = dayPeriodEnum.morning;\n    } else {\n      dayPeriodEnumValue = dayPeriodEnum.night;\n    }\n\n    switch (token) {\n      case \"B\":\n      case \"BB\":\n      case \"BBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"BBBBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"BBBB\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Hour [1-12]\n  h: function (date, token, localize) {\n    if (token === \"ho\") {\n      let hours = date.getHours() % 12;\n      if (hours === 0) hours = 12;\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return lightFormatters.h(date, token);\n  },\n\n  // Hour [0-23]\n  H: function (date, token, localize) {\n    if (token === \"Ho\") {\n      return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n    }\n\n    return lightFormatters.H(date, token);\n  },\n\n  // Hour [0-11]\n  K: function (date, token, localize) {\n    const hours = date.getHours() % 12;\n\n    if (token === \"Ko\") {\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n\n  // Hour [1-24]\n  k: function (date, token, localize) {\n    let hours = date.getHours();\n    if (hours === 0) hours = 24;\n\n    if (token === \"ko\") {\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n\n  // Minute\n  m: function (date, token, localize) {\n    if (token === \"mo\") {\n      return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n    }\n\n    return lightFormatters.m(date, token);\n  },\n\n  // Second\n  s: function (date, token, localize) {\n    if (token === \"so\") {\n      return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n    }\n\n    return lightFormatters.s(date, token);\n  },\n\n  // Fraction of second\n  S: function (date, token) {\n    return lightFormatters.S(date, token);\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    if (timezoneOffset === 0) {\n      return \"Z\";\n    }\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"X\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XX`\n      case \"XXXX\":\n      case \"XX\": // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XXX`\n      case \"XXXXX\":\n      case \"XXX\": // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n  x: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"x\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xx`\n      case \"xxxx\":\n      case \"xx\": // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xxx`\n      case \"xxxxx\":\n      case \"xxx\": // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (GMT)\n  O: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"O\":\n      case \"OO\":\n      case \"OOO\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n      case \"OOOO\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (specific non-location)\n  z: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"z\":\n      case \"zz\":\n      case \"zzz\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n      case \"zzzz\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Seconds timestamp\n  t: function (date, token, _localize) {\n    const timestamp = Math.trunc(+date / 1000);\n    return addLeadingZeros(timestamp, token.length);\n  },\n\n  // Milliseconds timestamp\n  T: function (date, token, _localize) {\n    return addLeadingZeros(+date, token.length);\n  },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n  const sign = offset > 0 ? \"-\" : \"+\";\n  const absOffset = Math.abs(offset);\n  const hours = Math.trunc(absOffset / 60);\n  const minutes = absOffset % 60;\n  if (minutes === 0) {\n    return sign + String(hours);\n  }\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n  if (offset % 60 === 0) {\n    const sign = offset > 0 ? \"-\" : \"+\";\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n  }\n  return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n  const sign = offset > 0 ? \"-\" : \"+\";\n  const absOffset = Math.abs(offset);\n  const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n  const minutes = addLeadingZeros(absOffset % 60, 2);\n  return sign + hours + delimiter + minutes;\n}\n","const dateLongFormatter = (pattern, formatLong) => {\n  switch (pattern) {\n    case \"P\":\n      return formatLong.date({ width: \"short\" });\n    case \"PP\":\n      return formatLong.date({ width: \"medium\" });\n    case \"PPP\":\n      return formatLong.date({ width: \"long\" });\n    case \"PPPP\":\n    default:\n      return formatLong.date({ width: \"full\" });\n  }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n  switch (pattern) {\n    case \"p\":\n      return formatLong.time({ width: \"short\" });\n    case \"pp\":\n      return formatLong.time({ width: \"medium\" });\n    case \"ppp\":\n      return formatLong.time({ width: \"long\" });\n    case \"pppp\":\n    default:\n      return formatLong.time({ width: \"full\" });\n  }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n  const matchResult = pattern.match(/(P+)(p+)?/) || [];\n  const datePattern = matchResult[1];\n  const timePattern = matchResult[2];\n\n  if (!timePattern) {\n    return dateLongFormatter(pattern, formatLong);\n  }\n\n  let dateTimeFormat;\n\n  switch (datePattern) {\n    case \"P\":\n      dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n      break;\n    case \"PP\":\n      dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n      break;\n    case \"PPP\":\n      dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n      break;\n    case \"PPPP\":\n    default:\n      dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n      break;\n  }\n\n  return dateTimeFormat\n    .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n    .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n  p: timeLongFormatter,\n  P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n  return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n  return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n  const _message = message(token, format, input);\n  console.warn(_message);\n  if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n  const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n  return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n  isProtectedDayOfYearToken,\n  isProtectedWeekYearToken,\n  warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n  /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era                             | G..GGG  | AD, BC                            |       |\n * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 | GGGGG   | A, B                              |       |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |\n * |                                 | yy      | 44, 01, 00, 17                    | 5     |\n * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |\n * |                                 | yyyyy   | ...                               | 3,5   |\n * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |\n * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |\n * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |\n * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |\n * |                                 | YYYYY   | ...                               | 3,5   |\n * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |\n * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |\n * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |\n * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |\n * |                                 | RRRRR   | ...                               | 3,5,7 |\n * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |\n * |                                 | uu      | -43, 01, 1900, 2017               | 5     |\n * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |\n * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |\n * |                                 | uuuuu   | ...                               | 3,5   |\n * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |\n * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | QQ      | 01, 02, 03, 04                    |       |\n * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |\n * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | qq      | 01, 02, 03, 04                    |       |\n * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |\n * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | MM      | 01, 02, ..., 12                   |       |\n * |                                 | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 | MMMM    | January, February, ..., December  | 2     |\n * |                                 | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |\n * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | LL      | 01, 02, ..., 12                   |       |\n * |                                 | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 | LLLL    | January, February, ..., December  | 2     |\n * |                                 | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | w       | 1, 2, ..., 53                     |       |\n * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |\n * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | II      | 01, 02, ..., 53                   | 7     |\n * | Day of month                    | d       | 1, 2, ..., 31                     |       |\n * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |\n * |                                 | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     | D       | 1, 2, ..., 365, 366               | 9     |\n * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |\n * |                                 | DD      | 01, 02, ..., 365, 366             | 9     |\n * |                                 | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 | DDDD    | ...                               | 3     |\n * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |\n * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |\n * |                                 | ii      | 01, 02, ..., 07                   | 7     |\n * |                                 | iii     | Mon, Tue, Wed, ..., Sun           | 7     |\n * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |\n * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |\n * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 7     |\n * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | ee      | 02, 03, ..., 01                   |       |\n * |                                 | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | cc      | 02, 03, ..., 01                   |       |\n * |                                 | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          | a..aa   | AM, PM                            |       |\n * |                                 | aaa     | am, pm                            |       |\n * |                                 | aaaa    | a.m., p.m.                        | 2     |\n * |                                 | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          | b..bb   | AM, PM, noon, midnight            |       |\n * |                                 | bbb     | am, pm, noon, midnight            |       |\n * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |\n * |                                 | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |\n * |                                 | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |\n * |                                 | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |\n * |                                 | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |\n * |                                 | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          | m       | 0, 1, ..., 59                     |       |\n * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | mm      | 00, 01, ..., 59                   |       |\n * | Second                          | s       | 0, 1, ..., 59                     |       |\n * |                                 | so      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | ss      | 00, 01, ..., 59                   |       |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |       |\n * |                                 | SS      | 00, 01, ..., 99                   |       |\n * |                                 | SSS     | 000, 001, ..., 999                |       |\n * |                                 | SSSS    | ...                               | 3     |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |\n * |                                 | XX      | -0800, +0530, Z                   |       |\n * |                                 | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |\n * |                                 | xx      | -0800, +0530, +0000               |       |\n * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |\n * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |\n * | Timezone (specific non-locat.)  | z...zzz | GMT-8, GMT+5:30, GMT+0            | 6     |\n * |                                 | zzzz    | GMT-08:00, GMT+05:30, GMT+00:00   | 2,6   |\n * | Seconds timestamp               | t       | 512969520                         | 7     |\n * |                                 | tt      | ...                               | 3,7   |\n * | Milliseconds timestamp          | T       | 512969520900                      | 7     |\n * |                                 | TT      | ...                               | 3,7   |\n * | Long localized date             | P       | 04/29/1453                        | 7     |\n * |                                 | PP      | Apr 29, 1453                      | 7     |\n * |                                 | PPP     | April 29th, 1453                  | 7     |\n * |                                 | PPPP    | Friday, April 29th, 1453          | 2,7   |\n * | Long localized time             | p       | 12:00 AM                          | 7     |\n * |                                 | pp      | 12:00:00 AM                       | 7     |\n * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |\n * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |\n * | Combination of date and time    | Pp      | 04/29/1453, 12:00 AM              | 7     |\n * |                                 | PPpp    | Apr 29, 1453, 12:00:00 AM         | 7     |\n * |                                 | PPPppp  | April 29th, 1453 at ...           | 7     |\n * |                                 | PPPPpppp| Friday, April 29th, 1453 at ...   | 2,7   |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n *    the output will be the same as default pattern for this unit, usually\n *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n *    are marked with \"2\" in the last column of the table.\n *\n *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n *    The output will be padded with zeros to match the length of the pattern.\n *\n *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` always returns the last two digits of a year,\n *    while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n *    | Year | `yy` | `uu` |\n *    |------|------|------|\n *    | 1    |   01 |   01 |\n *    | 14   |   14 |   14 |\n *    | 376  |   76 |  376 |\n *    | 1453 |   53 | 1453 |\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n *    and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n *    so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `t`: seconds timestamp\n *    - `T`: milliseconds timestamp\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n *   locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n  const defaultOptions = getDefaultOptions();\n  const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const originalDate = toDate(date, options?.in);\n\n  if (!isValid(originalDate)) {\n    throw new RangeError(\"Invalid time value\");\n  }\n\n  let parts = formatStr\n    .match(longFormattingTokensRegExp)\n    .map((substring) => {\n      const firstCharacter = substring[0];\n      if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n        const longFormatter = longFormatters[firstCharacter];\n        return longFormatter(substring, locale.formatLong);\n      }\n      return substring;\n    })\n    .join(\"\")\n    .match(formattingTokensRegExp)\n    .map((substring) => {\n      // Replace two single quote characters with one single quote character\n      if (substring === \"''\") {\n        return { isToken: false, value: \"'\" };\n      }\n\n      const firstCharacter = substring[0];\n      if (firstCharacter === \"'\") {\n        return { isToken: false, value: cleanEscapedString(substring) };\n      }\n\n      if (formatters[firstCharacter]) {\n        return { isToken: true, value: substring };\n      }\n\n      if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n        throw new RangeError(\n          \"Format string contains an unescaped latin alphabet character `\" +\n            firstCharacter +\n            \"`\",\n        );\n      }\n\n      return { isToken: false, value: substring };\n    });\n\n  // invoke localize preprocessor (only for french locales at the moment)\n  if (locale.localize.preprocessor) {\n    parts = locale.localize.preprocessor(originalDate, parts);\n  }\n\n  const formatterOptions = {\n    firstWeekContainsDate,\n    weekStartsOn,\n    locale,\n  };\n\n  return parts\n    .map((part) => {\n      if (!part.isToken) return part.value;\n\n      const token = part.value;\n\n      if (\n        (!options?.useAdditionalWeekYearTokens &&\n          isProtectedWeekYearToken(token)) ||\n        (!options?.useAdditionalDayOfYearTokens &&\n          isProtectedDayOfYearToken(token))\n      ) {\n        warnOrThrowProtectedError(token, formatStr, String(date));\n      }\n\n      const formatter = formatters[token[0]];\n      return formatter(originalDate, token, locale.localize, formatterOptions);\n    })\n    .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n  const matched = input.match(escapedStringRegExp);\n\n  if (!matched) {\n    return input;\n  }\n\n  return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDaysInMonth} function options.\n */\n\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date, considering the context if provided.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The number of days in a month\n *\n * @example\n * // How many days are in February 2000?\n * const result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nexport function getDaysInMonth(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n  const monthIndex = _date.getMonth();\n  const lastDayOfMonth = constructFrom(_date, 0);\n  lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);\n  lastDayOfMonth.setHours(0, 0, 0, 0);\n  return lastDayOfMonth.getDate();\n}\n\n// Fallback for modularized imports:\nexport default getDaysInMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getMonth} function options.\n */\n\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The month index (0-11)\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\nexport function getMonth(date, options) {\n  return toDate(date, options?.in).getMonth();\n}\n\n// Fallback for modularized imports:\nexport default getMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getYear} function options.\n */\n\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The year\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\nexport function getYear(date, options) {\n  return toDate(date, options?.in).getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default getYear;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @param date - The date that should be after the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is after the second date\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport function isAfter(date, dateToCompare) {\n  return +toDate(date) > +toDate(dateToCompare);\n}\n\n// Fallback for modularized imports:\nexport default isAfter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param date - The date that should be before the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is before the second date\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport function isBefore(date, dateToCompare) {\n  return +toDate(date) < +toDate(dateToCompare);\n}\n\n// Fallback for modularized imports:\nexport default isBefore;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link isSameMonth} function options.\n */\n\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same month (and year)\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\nexport function isSameMonth(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n  return (\n    laterDate_.getFullYear() === earlierDate_.getFullYear() &&\n    laterDate_.getMonth() === earlierDate_.getMonth()\n  );\n}\n\n// Fallback for modularized imports:\nexport default isSameMonth;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link isSameYear} function options.\n */\n\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same year\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * const result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport function isSameYear(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n  return laterDate_.getFullYear() === earlierDate_.getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default isSameYear;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getDaysInMonth } from \"./getDaysInMonth.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setMonth} function options.\n */\n\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given 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 date - The date to be changed\n * @param month - The month index to set (0-11)\n * @param options - The options\n *\n * @returns The new date with the month set\n *\n * @example\n * // Set February to 1 September 2014:\n * const result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nexport function setMonth(date, month, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n  const day = _date.getDate();\n\n  const midMonth = constructFrom(options?.in || date, 0);\n  midMonth.setFullYear(year, month, 15);\n  midMonth.setHours(0, 0, 0, 0);\n  const daysInMonth = getDaysInMonth(midMonth);\n\n  // Set the earlier date, allows to wrap Jan 31 to Feb 28\n  _date.setMonth(month, Math.min(day, daysInMonth));\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default setMonth;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setYear} function options.\n */\n\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given 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 date - The date to be changed\n * @param year - The year of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the year set\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * const result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\nexport function setYear(date, year, options) {\n  const date_ = toDate(date, options?.in);\n\n  // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n  if (isNaN(+date_)) return constructFrom(options?.in || date, NaN);\n\n  date_.setFullYear(year);\n  return date_;\n}\n\n// Fallback for modularized imports:\nexport default setYear;\n","const FIVE_WEEKS = 5;\nconst FOUR_WEEKS = 4;\n/**\n * Returns the number of weeks to display in the broadcast calendar for a given\n * month.\n *\n * The broadcast calendar may have either 4 or 5 weeks in a month, depending on\n * the start and end dates of the broadcast weeks.\n *\n * @since 9.4.0\n * @param month The month for which to calculate the number of weeks.\n * @param dateLib The date library to use for date manipulation.\n * @returns The number of weeks in the broadcast calendar (4 or 5).\n */\nexport function getBroadcastWeeksInMonth(month, dateLib) {\n    // Get the first day of the month\n    const firstDayOfMonth = dateLib.startOfMonth(month);\n    // Get the day of the week for the first day of the month (1-7, where 1 is Monday)\n    const firstDayOfWeek = firstDayOfMonth.getDay() > 0 ? firstDayOfMonth.getDay() : 7;\n    const broadcastStartDate = dateLib.addDays(month, -firstDayOfWeek + 1);\n    const lastDateOfLastWeek = dateLib.addDays(broadcastStartDate, FIVE_WEEKS * 7 - 1);\n    const numberOfWeeks = dateLib.getMonth(month) === dateLib.getMonth(lastDateOfLastWeek)\n        ? FIVE_WEEKS\n        : FOUR_WEEKS;\n    return numberOfWeeks;\n}\n","/**\n * Returns the start date of the week in the broadcast calendar.\n *\n * The broadcast week starts on Monday. If the first day of the month is not a\n * Monday, this function calculates the previous Monday as the start of the\n * broadcast week.\n *\n * @since 9.4.0\n * @param date The date for which to calculate the start of the broadcast week.\n * @param dateLib The date library to use for date manipulation.\n * @returns The start date of the broadcast week.\n */\nexport function startOfBroadcastWeek(date, dateLib) {\n    const firstOfMonth = dateLib.startOfMonth(date);\n    const dayOfWeek = firstOfMonth.getDay();\n    if (dayOfWeek === 1) {\n        return firstOfMonth;\n    }\n    else if (dayOfWeek === 0) {\n        return dateLib.addDays(firstOfMonth, -1 * 6);\n    }\n    else {\n        return dateLib.addDays(firstOfMonth, -1 * (dayOfWeek - 1));\n    }\n}\n","import { getBroadcastWeeksInMonth } from \"./getBroadcastWeeksInMonth.js\";\nimport { startOfBroadcastWeek } from \"./startOfBroadcastWeek.js\";\n/**\n * Returns the end date of the week in the broadcast calendar.\n *\n * The broadcast week ends on the last day of the last broadcast week for the\n * given date.\n *\n * @since 9.4.0\n * @param date The date for which to calculate the end of the broadcast week.\n * @param dateLib The date library to use for date manipulation.\n * @returns The end date of the broadcast week.\n */\nexport function endOfBroadcastWeek(date, dateLib) {\n    const startDate = startOfBroadcastWeek(date, dateLib);\n    const numberOfWeeks = getBroadcastWeeksInMonth(date, dateLib);\n    const endDate = dateLib.addDays(startDate, numberOfWeeks * 7 - 1);\n    return endDate;\n}\n","import { format } from \"date-fns\";\nimport { enUS as dateFnsEnUS } from \"date-fns/locale\";\n/** English (United States) locale extended with DayPicker-specific translations. */\nexport const enUS = {\n    ...dateFnsEnUS,\n    labels: {\n        labelDayButton: (date, modifiers, options, dateLib) => {\n            let formatDate;\n            if (dateLib && typeof dateLib.format === \"function\") {\n                formatDate = dateLib.format.bind(dateLib);\n            }\n            else {\n                formatDate = (d, pattern) => format(d, pattern, { locale: dateFnsEnUS, ...options });\n            }\n            let label = formatDate(date, \"PPPP\");\n            if (modifiers.today)\n                label = `Today, ${label}`;\n            if (modifiers.selected)\n                label = `${label}, selected`;\n            return label;\n        },\n        labelMonthDropdown: \"Choose the Month\",\n        labelNext: \"Go to the Next Month\",\n        labelPrevious: \"Go to the Previous Month\",\n        labelWeekNumber: (weekNumber) => `Week ${weekNumber}`,\n        labelYearDropdown: \"Choose the Year\",\n        labelGrid: (date, options, dateLib) => {\n            let formatDate;\n            if (dateLib && typeof dateLib.format === \"function\") {\n                formatDate = dateLib.format.bind(dateLib);\n            }\n            else {\n                formatDate = (d, pattern) => format(d, pattern, { locale: dateFnsEnUS, ...options });\n            }\n            return formatDate(date, \"LLLL yyyy\");\n        },\n        labelGridcell: (date, modifiers, options, dateLib) => {\n            let formatDate;\n            if (dateLib && typeof dateLib.format === \"function\") {\n                formatDate = dateLib.format.bind(dateLib);\n            }\n            else {\n                formatDate = (d, pattern) => format(d, pattern, { locale: dateFnsEnUS, ...options });\n            }\n            let label = formatDate(date, \"PPPP\");\n            if (modifiers?.today) {\n                label = `Today, ${label}`;\n            }\n            return label;\n        },\n        labelNav: \"Navigation bar\",\n        labelWeekNumberHeader: \"Week Number\",\n        labelWeekday: (date, options, dateLib) => {\n            let formatDate;\n            if (dateLib && typeof dateLib.format === \"function\") {\n                formatDate = dateLib.format.bind(dateLib);\n            }\n            else {\n                formatDate = (d, pattern) => format(d, pattern, { locale: dateFnsEnUS, ...options });\n            }\n            return formatDate(date, \"cccc\");\n        },\n    },\n};\n","import { TZDate } from \"@date-fns/tz\";\nimport { addDays, addMonths, addWeeks, addYears, differenceInCalendarDays, differenceInCalendarMonths, eachMonthOfInterval, eachYearOfInterval, endOfISOWeek, endOfMonth, endOfWeek, endOfYear, format, getISOWeek, getMonth, getWeek, getYear, isAfter, isBefore, isDate, isSameDay, isSameMonth, isSameYear, max, min, setMonth, setYear, startOfDay, startOfISOWeek, startOfMonth, startOfWeek, startOfYear, } from \"date-fns\";\nimport { endOfBroadcastWeek } from \"../helpers/endOfBroadcastWeek.js\";\nimport { startOfBroadcastWeek } from \"../helpers/startOfBroadcastWeek.js\";\nimport { enUS } from \"../locale/en-US.js\";\n/**\n * A wrapper class around [date-fns](http://date-fns.org) that provides utility\n * methods for date manipulation and formatting.\n *\n * @since 9.2.0\n * @example\n *   const dateLib = new DateLib({ locale: es });\n *   const newDate = dateLib.addDays(new Date(), 5);\n */\nexport class DateLib {\n    /**\n     * Creates an instance of `DateLib`.\n     *\n     * @param options Configuration options for the date library.\n     * @param overrides Custom overrides for the date library functions.\n     */\n    constructor(options, overrides) {\n        /**\n         * Reference to the built-in Date constructor.\n         *\n         * @deprecated Use `newDate()` or `today()`.\n         */\n        this.Date = Date;\n        /**\n         * Creates a new `Date` object representing today's date.\n         *\n         * @since 9.5.0\n         * @returns A `Date` object for today's date.\n         */\n        this.today = () => {\n            if (this.overrides?.today) {\n                return this.overrides.today();\n            }\n            if (this.options.timeZone) {\n                return TZDate.tz(this.options.timeZone);\n            }\n            return new this.Date();\n        };\n        /**\n         * Creates a new `Date` object with the specified year, month, and day.\n         *\n         * @since 9.5.0\n         * @param year The year.\n         * @param monthIndex The month (0-11).\n         * @param date The day of the month.\n         * @returns A new `Date` object.\n         */\n        this.newDate = (year, monthIndex, date) => {\n            if (this.overrides?.newDate) {\n                return this.overrides.newDate(year, monthIndex, date);\n            }\n            if (this.options.timeZone) {\n                return new TZDate(year, monthIndex, date, this.options.timeZone);\n            }\n            return new Date(year, monthIndex, date);\n        };\n        /**\n         * Adds the specified number of days to the given date.\n         *\n         * @param date The date to add days to.\n         * @param amount The number of days to add.\n         * @returns The new date with the days added.\n         */\n        this.addDays = (date, amount) => {\n            return this.overrides?.addDays\n                ? this.overrides.addDays(date, amount)\n                : addDays(date, amount);\n        };\n        /**\n         * Adds the specified number of months to the given date.\n         *\n         * @param date The date to add months to.\n         * @param amount The number of months to add.\n         * @returns The new date with the months added.\n         */\n        this.addMonths = (date, amount) => {\n            return this.overrides?.addMonths\n                ? this.overrides.addMonths(date, amount)\n                : addMonths(date, amount);\n        };\n        /**\n         * Adds the specified number of weeks to the given date.\n         *\n         * @param date The date to add weeks to.\n         * @param amount The number of weeks to add.\n         * @returns The new date with the weeks added.\n         */\n        this.addWeeks = (date, amount) => {\n            return this.overrides?.addWeeks\n                ? this.overrides.addWeeks(date, amount)\n                : addWeeks(date, amount);\n        };\n        /**\n         * Adds the specified number of years to the given date.\n         *\n         * @param date The date to add years to.\n         * @param amount The number of years to add.\n         * @returns The new date with the years added.\n         */\n        this.addYears = (date, amount) => {\n            return this.overrides?.addYears\n                ? this.overrides.addYears(date, amount)\n                : addYears(date, amount);\n        };\n        /**\n         * Returns the number of calendar days between the given dates.\n         *\n         * @param dateLeft The later date.\n         * @param dateRight The earlier date.\n         * @returns The number of calendar days between the dates.\n         */\n        this.differenceInCalendarDays = (dateLeft, dateRight) => {\n            return this.overrides?.differenceInCalendarDays\n                ? this.overrides.differenceInCalendarDays(dateLeft, dateRight)\n                : differenceInCalendarDays(dateLeft, dateRight);\n        };\n        /**\n         * Returns the number of calendar months between the given dates.\n         *\n         * @param dateLeft The later date.\n         * @param dateRight The earlier date.\n         * @returns The number of calendar months between the dates.\n         */\n        this.differenceInCalendarMonths = (dateLeft, dateRight) => {\n            return this.overrides?.differenceInCalendarMonths\n                ? this.overrides.differenceInCalendarMonths(dateLeft, dateRight)\n                : differenceInCalendarMonths(dateLeft, dateRight);\n        };\n        /**\n         * Returns the months between the given dates.\n         *\n         * @param interval The interval to get the months for.\n         */\n        this.eachMonthOfInterval = (interval) => {\n            return this.overrides?.eachMonthOfInterval\n                ? this.overrides.eachMonthOfInterval(interval)\n                : eachMonthOfInterval(interval);\n        };\n        /**\n         * Returns the years between the given dates.\n         *\n         * @since 9.11.1\n         * @param interval The interval to get the years for.\n         * @returns The array of years in the interval.\n         */\n        this.eachYearOfInterval = (interval) => {\n            const years = this.overrides?.eachYearOfInterval\n                ? this.overrides.eachYearOfInterval(interval)\n                : eachYearOfInterval(interval);\n            // Remove duplicates that may happen across DST transitions (e.g., \"America/Sao_Paulo\")\n            // See https://github.com/date-fns/tz/issues/72\n            const uniqueYears = new Set(years.map((d) => this.getYear(d)));\n            if (uniqueYears.size === years.length) {\n                // No duplicates, return as is\n                return years;\n            }\n            // Rebuild the array to ensure one date per year\n            const yearsArray = [];\n            uniqueYears.forEach((y) => {\n                yearsArray.push(new Date(y, 0, 1));\n            });\n            return yearsArray;\n        };\n        /**\n         * Returns the end of the broadcast week for the given date.\n         *\n         * @param date The original date.\n         * @returns The end of the broadcast week.\n         */\n        this.endOfBroadcastWeek = (date) => {\n            return this.overrides?.endOfBroadcastWeek\n                ? this.overrides.endOfBroadcastWeek(date)\n                : endOfBroadcastWeek(date, this);\n        };\n        /**\n         * Returns the end of the ISO week for the given date.\n         *\n         * @param date The original date.\n         * @returns The end of the ISO week.\n         */\n        this.endOfISOWeek = (date) => {\n            return this.overrides?.endOfISOWeek\n                ? this.overrides.endOfISOWeek(date)\n                : endOfISOWeek(date);\n        };\n        /**\n         * Returns the end of the month for the given date.\n         *\n         * @param date The original date.\n         * @returns The end of the month.\n         */\n        this.endOfMonth = (date) => {\n            return this.overrides?.endOfMonth\n                ? this.overrides.endOfMonth(date)\n                : endOfMonth(date);\n        };\n        /**\n         * Returns the end of the week for the given date.\n         *\n         * @param date The original date.\n         * @returns The end of the week.\n         */\n        this.endOfWeek = (date, options) => {\n            return this.overrides?.endOfWeek\n                ? this.overrides.endOfWeek(date, options)\n                : endOfWeek(date, this.options);\n        };\n        /**\n         * Returns the end of the year for the given date.\n         *\n         * @param date The original date.\n         * @returns The end of the year.\n         */\n        this.endOfYear = (date) => {\n            return this.overrides?.endOfYear\n                ? this.overrides.endOfYear(date)\n                : endOfYear(date);\n        };\n        /**\n         * Formats the given date using the specified format string.\n         *\n         * @param date The date to format.\n         * @param formatStr The format string.\n         * @returns The formatted date string.\n         */\n        this.format = (date, formatStr, _options) => {\n            const formatted = this.overrides?.format\n                ? this.overrides.format(date, formatStr, this.options)\n                : format(date, formatStr, this.options);\n            if (this.options.numerals && this.options.numerals !== \"latn\") {\n                return this.replaceDigits(formatted);\n            }\n            return formatted;\n        };\n        /**\n         * Returns the ISO week number for the given date.\n         *\n         * @param date The date to get the ISO week number for.\n         * @returns The ISO week number.\n         */\n        this.getISOWeek = (date) => {\n            return this.overrides?.getISOWeek\n                ? this.overrides.getISOWeek(date)\n                : getISOWeek(date);\n        };\n        /**\n         * Returns the month of the given date.\n         *\n         * @param date The date to get the month for.\n         * @returns The month.\n         */\n        this.getMonth = (date, _options) => {\n            return this.overrides?.getMonth\n                ? this.overrides.getMonth(date, this.options)\n                : getMonth(date, this.options);\n        };\n        /**\n         * Returns the year of the given date.\n         *\n         * @param date The date to get the year for.\n         * @returns The year.\n         */\n        this.getYear = (date, _options) => {\n            return this.overrides?.getYear\n                ? this.overrides.getYear(date, this.options)\n                : getYear(date, this.options);\n        };\n        /**\n         * Returns the local week number for the given date.\n         *\n         * @param date The date to get the week number for.\n         * @returns The week number.\n         */\n        this.getWeek = (date, _options) => {\n            return this.overrides?.getWeek\n                ? this.overrides.getWeek(date, this.options)\n                : getWeek(date, this.options);\n        };\n        /**\n         * Checks if the first date is after the second date.\n         *\n         * @param date The date to compare.\n         * @param dateToCompare The date to compare with.\n         * @returns True if the first date is after the second date.\n         */\n        this.isAfter = (date, dateToCompare) => {\n            return this.overrides?.isAfter\n                ? this.overrides.isAfter(date, dateToCompare)\n                : isAfter(date, dateToCompare);\n        };\n        /**\n         * Checks if the first date is before the second date.\n         *\n         * @param date The date to compare.\n         * @param dateToCompare The date to compare with.\n         * @returns True if the first date is before the second date.\n         */\n        this.isBefore = (date, dateToCompare) => {\n            return this.overrides?.isBefore\n                ? this.overrides.isBefore(date, dateToCompare)\n                : isBefore(date, dateToCompare);\n        };\n        /**\n         * Checks if the given value is a Date object.\n         *\n         * @param value The value to check.\n         * @returns True if the value is a Date object.\n         */\n        this.isDate = (value) => {\n            return this.overrides?.isDate\n                ? this.overrides.isDate(value)\n                : isDate(value);\n        };\n        /**\n         * Checks if the given dates are on the same day.\n         *\n         * @param dateLeft The first date to compare.\n         * @param dateRight The second date to compare.\n         * @returns True if the dates are on the same day.\n         */\n        this.isSameDay = (dateLeft, dateRight) => {\n            return this.overrides?.isSameDay\n                ? this.overrides.isSameDay(dateLeft, dateRight)\n                : isSameDay(dateLeft, dateRight);\n        };\n        /**\n         * Checks if the given dates are in the same month.\n         *\n         * @param dateLeft The first date to compare.\n         * @param dateRight The second date to compare.\n         * @returns True if the dates are in the same month.\n         */\n        this.isSameMonth = (dateLeft, dateRight) => {\n            return this.overrides?.isSameMonth\n                ? this.overrides.isSameMonth(dateLeft, dateRight)\n                : isSameMonth(dateLeft, dateRight);\n        };\n        /**\n         * Checks if the given dates are in the same year.\n         *\n         * @param dateLeft The first date to compare.\n         * @param dateRight The second date to compare.\n         * @returns True if the dates are in the same year.\n         */\n        this.isSameYear = (dateLeft, dateRight) => {\n            return this.overrides?.isSameYear\n                ? this.overrides.isSameYear(dateLeft, dateRight)\n                : isSameYear(dateLeft, dateRight);\n        };\n        /**\n         * Returns the latest date in the given array of dates.\n         *\n         * @param dates The array of dates to compare.\n         * @returns The latest date.\n         */\n        this.max = (dates) => {\n            return this.overrides?.max ? this.overrides.max(dates) : max(dates);\n        };\n        /**\n         * Returns the earliest date in the given array of dates.\n         *\n         * @param dates The array of dates to compare.\n         * @returns The earliest date.\n         */\n        this.min = (dates) => {\n            return this.overrides?.min ? this.overrides.min(dates) : min(dates);\n        };\n        /**\n         * Sets the month of the given date.\n         *\n         * @param date The date to set the month on.\n         * @param month The month to set (0-11).\n         * @returns The new date with the month set.\n         */\n        this.setMonth = (date, month) => {\n            return this.overrides?.setMonth\n                ? this.overrides.setMonth(date, month)\n                : setMonth(date, month);\n        };\n        /**\n         * Sets the year of the given date.\n         *\n         * @param date The date to set the year on.\n         * @param year The year to set.\n         * @returns The new date with the year set.\n         */\n        this.setYear = (date, year) => {\n            return this.overrides?.setYear\n                ? this.overrides.setYear(date, year)\n                : setYear(date, year);\n        };\n        /**\n         * Returns the start of the broadcast week for the given date.\n         *\n         * @param date The original date.\n         * @returns The start of the broadcast week.\n         */\n        this.startOfBroadcastWeek = (date, _dateLib) => {\n            return this.overrides?.startOfBroadcastWeek\n                ? this.overrides.startOfBroadcastWeek(date, this)\n                : startOfBroadcastWeek(date, this);\n        };\n        /**\n         * Returns the start of the day for the given date.\n         *\n         * @param date The original date.\n         * @returns The start of the day.\n         */\n        this.startOfDay = (date) => {\n            return this.overrides?.startOfDay\n                ? this.overrides.startOfDay(date)\n                : startOfDay(date);\n        };\n        /**\n         * Returns the start of the ISO week for the given date.\n         *\n         * @param date The original date.\n         * @returns The start of the ISO week.\n         */\n        this.startOfISOWeek = (date) => {\n            return this.overrides?.startOfISOWeek\n                ? this.overrides.startOfISOWeek(date)\n                : startOfISOWeek(date);\n        };\n        /**\n         * Returns the start of the month for the given date.\n         *\n         * @param date The original date.\n         * @returns The start of the month.\n         */\n        this.startOfMonth = (date) => {\n            return this.overrides?.startOfMonth\n                ? this.overrides.startOfMonth(date)\n                : startOfMonth(date);\n        };\n        /**\n         * Returns the start of the week for the given date.\n         *\n         * @param date The original date.\n         * @returns The start of the week.\n         */\n        this.startOfWeek = (date, _options) => {\n            return this.overrides?.startOfWeek\n                ? this.overrides.startOfWeek(date, this.options)\n                : startOfWeek(date, this.options);\n        };\n        /**\n         * Returns the start of the year for the given date.\n         *\n         * @param date The original date.\n         * @returns The start of the year.\n         */\n        this.startOfYear = (date) => {\n            return this.overrides?.startOfYear\n                ? this.overrides.startOfYear(date)\n                : startOfYear(date);\n        };\n        this.options = { locale: enUS, ...options };\n        this.overrides = overrides;\n    }\n    /**\n     * Generates a mapping of Arabic digits (0-9) to the target numbering system\n     * digits.\n     *\n     * @since 9.5.0\n     * @returns A record mapping Arabic digits to the target numerals.\n     */\n    getDigitMap() {\n        const { numerals = \"latn\" } = this.options;\n        // Use Intl.NumberFormat to create a formatter with the specified numbering system\n        const formatter = new Intl.NumberFormat(\"en-US\", {\n            numberingSystem: numerals,\n        });\n        // Map Arabic digits (0-9) to the target numerals\n        const digitMap = {};\n        for (let i = 0; i < 10; i++) {\n            digitMap[i.toString()] = formatter.format(i);\n        }\n        return digitMap;\n    }\n    /**\n     * Replaces Arabic digits in a string with the target numbering system digits.\n     *\n     * @since 9.5.0\n     * @param input The string containing Arabic digits.\n     * @returns The string with digits replaced.\n     */\n    replaceDigits(input) {\n        const digitMap = this.getDigitMap();\n        return input.replace(/\\d/g, (digit) => digitMap[digit] || digit);\n    }\n    /**\n     * Formats a number using the configured numbering system.\n     *\n     * @since 9.5.0\n     * @param value The number to format.\n     * @returns The formatted number as a string.\n     */\n    formatNumber(value) {\n        return this.replaceDigits(value.toString());\n    }\n    /**\n     * Returns the preferred ordering for month and year labels for the current\n     * locale.\n     */\n    getMonthYearOrder() {\n        const code = this.options.locale?.code;\n        if (!code) {\n            return \"month-first\";\n        }\n        return DateLib.yearFirstLocales.has(code) ? \"year-first\" : \"month-first\";\n    }\n    /**\n     * Formats the month/year pair respecting locale conventions.\n     *\n     * @since 9.11.0\n     */\n    formatMonthYear(date) {\n        const { locale, timeZone, numerals } = this.options;\n        const localeCode = locale?.code;\n        if (localeCode && DateLib.yearFirstLocales.has(localeCode)) {\n            try {\n                const intl = new Intl.DateTimeFormat(localeCode, {\n                    month: \"long\",\n                    year: \"numeric\",\n                    timeZone,\n                    numberingSystem: numerals,\n                });\n                const formatted = intl.format(date);\n                return formatted;\n            }\n            catch {\n                // Fallback to date-fns formatting below.\n            }\n        }\n        const pattern = this.getMonthYearOrder() === \"year-first\" ? \"y LLLL\" : \"LLLL y\";\n        return this.format(date, pattern);\n    }\n}\nDateLib.yearFirstLocales = new Set([\n    \"eu\",\n    \"hu\",\n    \"ja\",\n    \"ja-Hira\",\n    \"ja-JP\",\n    \"ko\",\n    \"ko-KR\",\n    \"lt\",\n    \"lt-LT\",\n    \"lv\",\n    \"lv-LV\",\n    \"mn\",\n    \"mn-MN\",\n    \"zh\",\n    \"zh-CN\",\n    \"zh-HK\",\n    \"zh-TW\",\n]);\n/** The default locale (English). */\nexport { enUS as defaultLocale } from \"../locale/en-US.js\";\n/**\n * The default date library with English locale.\n *\n * @since 9.2.0\n */\nexport const defaultDateLib = new DateLib();\n/**\n * @ignore\n * @deprecated Use `defaultDateLib`.\n */\nexport const dateLib = defaultDateLib;\n","import { defaultDateLib } from \"./DateLib.js\";\n/**\n * Represents a day displayed in the calendar.\n *\n * In DayPicker, a `CalendarDay` is a wrapper around a `Date` object that\n * provides additional information about the day, such as whether it belongs to\n * the displayed month.\n */\nexport class CalendarDay {\n    constructor(date, displayMonth, dateLib = defaultDateLib) {\n        this.date = date;\n        this.displayMonth = displayMonth;\n        this.outside = Boolean(displayMonth && !dateLib.isSameMonth(date, displayMonth));\n        this.dateLib = dateLib;\n        this.isoDate = dateLib.format(date, \"yyyy-MM-dd\");\n        this.displayMonthId = dateLib.format(displayMonth, \"yyyy-MM\");\n        this.dateMonthId = dateLib.format(date, \"yyyy-MM\");\n    }\n    /**\n     * Checks if this day is equal to another `CalendarDay`, considering both the\n     * date and the displayed month.\n     *\n     * @param day The `CalendarDay` to compare with.\n     * @returns `true` if the days are equal, otherwise `false`.\n     */\n    isEqualTo(day) {\n        return (this.dateLib.isSameDay(day.date, this.date) &&\n            this.dateLib.isSameMonth(day.displayMonth, this.displayMonth));\n    }\n}\n","/**\n * Represents a month in a calendar year.\n *\n * A `CalendarMonth` contains the weeks within the month and the date of the\n * month.\n */\nexport class CalendarMonth {\n    constructor(month, weeks) {\n        this.date = month;\n        this.weeks = weeks;\n    }\n}\n","/**\n * Represents a week in a calendar month.\n *\n * A `CalendarWeek` contains the days within the week and the week number.\n */\nexport class CalendarWeek {\n    constructor(weekNumber, days) {\n        this.days = days;\n        this.weekNumber = weekNumber;\n    }\n}\n","export * from \"./Button.js\";\nexport * from \"./CaptionLabel.js\";\nexport * from \"./Chevron.js\";\nexport * from \"./Day.js\";\nexport * from \"./DayButton.js\";\nexport * from \"./Dropdown.js\";\nexport * from \"./DropdownNav.js\";\nexport * from \"./Footer.js\";\nexport * from \"./Month.js\";\nexport * from \"./MonthCaption.js\";\nexport * from \"./MonthGrid.js\";\nexport * from \"./Months.js\";\nexport * from \"./MonthsDropdown.js\";\nexport * from \"./Nav.js\";\nexport * from \"./NextMonthButton.js\";\nexport * from \"./Option.js\";\nexport * from \"./PreviousMonthButton.js\";\nexport * from \"./Root.js\";\nexport * from \"./Select.js\";\nexport * from \"./Week.js\";\nexport * from \"./Weekday.js\";\nexport * from \"./Weekdays.js\";\nexport * from \"./WeekNumber.js\";\nexport * from \"./WeekNumberHeader.js\";\nexport * from \"./Weeks.js\";\nexport * from \"./YearsDropdown.js\";\n","import React from \"react\";\n/**\n * Render the button elements in the calendar.\n *\n * @private\n * @deprecated Use `PreviousMonthButton` or `@link NextMonthButton` instead.\n */\nexport function Button(props) {\n    return React.createElement(\"button\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render the label in the month caption.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function CaptionLabel(props) {\n    return React.createElement(\"span\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render the chevron icon used in the navigation buttons and dropdowns.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Chevron(props) {\n    const { size = 24, orientation = \"left\", className } = props;\n    return (\n    // biome-ignore lint/a11y/noSvgWithoutTitle: handled by the parent component\n    React.createElement(\"svg\", { className: className, width: size, height: size, viewBox: \"0 0 24 24\" },\n        orientation === \"up\" && (React.createElement(\"polygon\", { points: \"6.77 17 12.5 11.43 18.24 17 20 15.28 12.5 8 5 15.28\" })),\n        orientation === \"down\" && (React.createElement(\"polygon\", { points: \"6.77 8 12.5 13.57 18.24 8 20 9.72 12.5 17 5 9.72\" })),\n        orientation === \"left\" && (React.createElement(\"polygon\", { points: \"16 18.112 9.81111111 12 16 5.87733333 14.0888889 4 6 12 14.0888889 20\" })),\n        orientation === \"right\" && (React.createElement(\"polygon\", { points: \"8 18.112 14.18888889 12 8 5.87733333 9.91111111 4 18 12 9.91111111 20\" }))));\n}\n","import React from \"react\";\n/**\n * Render a grid cell for a specific day in the calendar.\n *\n * Handles interaction and focus for the day. If you only need to change the\n * content of the day cell, consider swapping the `DayButton` component\n * instead.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Day(props) {\n    const { day, modifiers, ...tdProps } = props;\n    return React.createElement(\"td\", { ...tdProps });\n}\n","import React from \"react\";\n/**\n * Render a button for a specific day in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function DayButton(props) {\n    const { day, modifiers, ...buttonProps } = props;\n    const ref = React.useRef(null);\n    React.useEffect(() => {\n        if (modifiers.focused)\n            ref.current?.focus();\n    }, [modifiers.focused]);\n    return React.createElement(\"button\", { ref: ref, ...buttonProps });\n}\n","/**\n * Enum representing the UI elements composing DayPicker. These elements are\n * mapped to {@link CustomComponents}, {@link ClassNames}, and {@link Styles}.\n *\n * Some elements are extended by flags and modifiers.\n */\nexport var UI;\n(function (UI) {\n    /** The root component displaying the months and the navigation bar. */\n    UI[\"Root\"] = \"root\";\n    /** The Chevron SVG element used by navigation buttons and dropdowns. */\n    UI[\"Chevron\"] = \"chevron\";\n    /**\n     * The grid cell with the day's date. Extended by {@link DayFlag} and\n     * {@link SelectionState}.\n     */\n    UI[\"Day\"] = \"day\";\n    /** The button containing the formatted day's date, inside the grid cell. */\n    UI[\"DayButton\"] = \"day_button\";\n    /** The caption label of the month (when not showing the dropdown navigation). */\n    UI[\"CaptionLabel\"] = \"caption_label\";\n    /** The container of the dropdown navigation (when enabled). */\n    UI[\"Dropdowns\"] = \"dropdowns\";\n    /** The dropdown element to select for years and months. */\n    UI[\"Dropdown\"] = \"dropdown\";\n    /** The container element of the dropdown. */\n    UI[\"DropdownRoot\"] = \"dropdown_root\";\n    /** The root element of the footer. */\n    UI[\"Footer\"] = \"footer\";\n    /** The month grid. */\n    UI[\"MonthGrid\"] = \"month_grid\";\n    /** Contains the dropdown navigation or the caption label. */\n    UI[\"MonthCaption\"] = \"month_caption\";\n    /** The dropdown with the months. */\n    UI[\"MonthsDropdown\"] = \"months_dropdown\";\n    /** Wrapper of the month grid. */\n    UI[\"Month\"] = \"month\";\n    /** The container of the displayed months. */\n    UI[\"Months\"] = \"months\";\n    /** The navigation bar with the previous and next buttons. */\n    UI[\"Nav\"] = \"nav\";\n    /**\n     * The next month button in the navigation. *\n     *\n     * @since 9.1.0\n     */\n    UI[\"NextMonthButton\"] = \"button_next\";\n    /**\n     * The previous month button in the navigation.\n     *\n     * @since 9.1.0\n     */\n    UI[\"PreviousMonthButton\"] = \"button_previous\";\n    /** The row containing the week. */\n    UI[\"Week\"] = \"week\";\n    /** The group of row weeks in a month (`tbody`). */\n    UI[\"Weeks\"] = \"weeks\";\n    /** The column header with the weekday. */\n    UI[\"Weekday\"] = \"weekday\";\n    /** The row grouping the weekdays in the column headers. */\n    UI[\"Weekdays\"] = \"weekdays\";\n    /** The cell containing the week number. */\n    UI[\"WeekNumber\"] = \"week_number\";\n    /** The cell header of the week numbers column. */\n    UI[\"WeekNumberHeader\"] = \"week_number_header\";\n    /** The dropdown with the years. */\n    UI[\"YearsDropdown\"] = \"years_dropdown\";\n})(UI || (UI = {}));\n/** Enum representing flags for the {@link UI.Day} element. */\nexport var DayFlag;\n(function (DayFlag) {\n    /** The day is disabled. */\n    DayFlag[\"disabled\"] = \"disabled\";\n    /** The day is hidden. */\n    DayFlag[\"hidden\"] = \"hidden\";\n    /** The day is outside the current month. */\n    DayFlag[\"outside\"] = \"outside\";\n    /** The day is focused. */\n    DayFlag[\"focused\"] = \"focused\";\n    /** The day is today. */\n    DayFlag[\"today\"] = \"today\";\n})(DayFlag || (DayFlag = {}));\n/**\n * Enum representing selection states that can be applied to the {@link UI.Day}\n * element in selection mode.\n */\nexport var SelectionState;\n(function (SelectionState) {\n    /** The day is at the end of a selected range. */\n    SelectionState[\"range_end\"] = \"range_end\";\n    /** The day is at the middle of a selected range. */\n    SelectionState[\"range_middle\"] = \"range_middle\";\n    /** The day is at the start of a selected range. */\n    SelectionState[\"range_start\"] = \"range_start\";\n    /** The day is selected. */\n    SelectionState[\"selected\"] = \"selected\";\n})(SelectionState || (SelectionState = {}));\n/**\n * Enum representing different animation states for transitioning between\n * months.\n */\nexport var Animation;\n(function (Animation) {\n    /** The entering weeks when they appear before the exiting month. */\n    Animation[\"weeks_before_enter\"] = \"weeks_before_enter\";\n    /** The exiting weeks when they disappear before the entering month. */\n    Animation[\"weeks_before_exit\"] = \"weeks_before_exit\";\n    /** The entering weeks when they appear after the exiting month. */\n    Animation[\"weeks_after_enter\"] = \"weeks_after_enter\";\n    /** The exiting weeks when they disappear after the entering month. */\n    Animation[\"weeks_after_exit\"] = \"weeks_after_exit\";\n    /** The entering caption when it appears after the exiting month. */\n    Animation[\"caption_after_enter\"] = \"caption_after_enter\";\n    /** The exiting caption when it disappears after the entering month. */\n    Animation[\"caption_after_exit\"] = \"caption_after_exit\";\n    /** The entering caption when it appears before the exiting month. */\n    Animation[\"caption_before_enter\"] = \"caption_before_enter\";\n    /** The exiting caption when it disappears before the entering month. */\n    Animation[\"caption_before_exit\"] = \"caption_before_exit\";\n})(Animation || (Animation = {}));\n","import React from \"react\";\nimport { UI } from \"../UI.js\";\n/**\n * Render a dropdown component for navigation in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Dropdown(props) {\n    const { options, className, components, classNames, ...selectProps } = props;\n    const cssClassSelect = [classNames[UI.Dropdown], className].join(\" \");\n    const selectedOption = options?.find(({ value }) => value === selectProps.value);\n    return (React.createElement(\"span\", { \"data-disabled\": selectProps.disabled, className: classNames[UI.DropdownRoot] },\n        React.createElement(components.Select, { className: cssClassSelect, ...selectProps }, options?.map(({ value, label, disabled }) => (React.createElement(components.Option, { key: value, value: value, disabled: disabled }, label)))),\n        React.createElement(\"span\", { className: classNames[UI.CaptionLabel], \"aria-hidden\": true },\n            selectedOption?.label,\n            React.createElement(components.Chevron, { orientation: \"down\", size: 18, className: classNames[UI.Chevron] }))));\n}\n","import React from \"react\";\n/**\n * Render the navigation dropdowns for the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function DropdownNav(props) {\n    return React.createElement(\"div\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render the footer of the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Footer(props) {\n    return React.createElement(\"div\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render the grid with the weekday header row and the weeks for a specific\n * month.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Month(props) {\n    const { calendarMonth, displayIndex, ...divProps } = props;\n    return React.createElement(\"div\", { ...divProps }, props.children);\n}\n","import React from \"react\";\n/**\n * Render the caption for a month in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function MonthCaption(props) {\n    const { calendarMonth, displayIndex, ...divProps } = props;\n    return React.createElement(\"div\", { ...divProps });\n}\n","import React from \"react\";\n/**\n * Render the grid of days for a specific month.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function MonthGrid(props) {\n    return React.createElement(\"table\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render a container wrapping the month grids.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Months(props) {\n    return React.createElement(\"div\", { ...props });\n}\n","import { createContext, useContext } from \"react\";\n/** @ignore */\nexport const dayPickerContext = createContext(undefined);\n/**\n * Provides access to the DayPicker context, which includes properties and\n * methods to interact with the DayPicker component. This hook must be used\n * within a custom component.\n *\n * @template T - Use this type to refine the returned context type with a\n *   specific selection mode.\n * @returns The context to work with DayPicker.\n * @throws {Error} If the hook is used outside of a DayPicker provider.\n * @group Hooks\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function useDayPicker() {\n    const context = useContext(dayPickerContext);\n    if (context === undefined) {\n        throw new Error(\"useDayPicker() must be used within a custom component.\");\n    }\n    return context;\n}\n","import React from \"react\";\nimport { useDayPicker } from \"../useDayPicker.js\";\n/**\n * Render a dropdown to navigate between months in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function MonthsDropdown(props) {\n    const { components } = useDayPicker();\n    return React.createElement(components.Dropdown, { ...props });\n}\n","import React, { useCallback, } from \"react\";\nimport { UI } from \"../UI.js\";\nimport { useDayPicker } from \"../useDayPicker.js\";\n/**\n * Render the navigation toolbar with buttons to navigate between months.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Nav(props) {\n    const { onPreviousClick, onNextClick, previousMonth, nextMonth, ...navProps } = props;\n    const { components, classNames, labels: { labelPrevious, labelNext }, } = useDayPicker();\n    const handleNextClick = useCallback((e) => {\n        if (nextMonth) {\n            onNextClick?.(e);\n        }\n    }, [nextMonth, onNextClick]);\n    const handlePreviousClick = useCallback((e) => {\n        if (previousMonth) {\n            onPreviousClick?.(e);\n        }\n    }, [previousMonth, onPreviousClick]);\n    return (React.createElement(\"nav\", { ...navProps },\n        React.createElement(components.PreviousMonthButton, { type: \"button\", className: classNames[UI.PreviousMonthButton], tabIndex: previousMonth ? undefined : -1, \"aria-disabled\": previousMonth ? undefined : true, \"aria-label\": labelPrevious(previousMonth), onClick: handlePreviousClick },\n            React.createElement(components.Chevron, { disabled: previousMonth ? undefined : true, className: classNames[UI.Chevron], orientation: \"left\" })),\n        React.createElement(components.NextMonthButton, { type: \"button\", className: classNames[UI.NextMonthButton], tabIndex: nextMonth ? undefined : -1, \"aria-disabled\": nextMonth ? undefined : true, \"aria-label\": labelNext(nextMonth), onClick: handleNextClick },\n            React.createElement(components.Chevron, { disabled: nextMonth ? undefined : true, orientation: \"right\", className: classNames[UI.Chevron] }))));\n}\n","import React from \"react\";\nimport { useDayPicker } from \"../useDayPicker.js\";\n/**\n * Render the button to navigate to the next month in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function NextMonthButton(props) {\n    const { components } = useDayPicker();\n    return React.createElement(components.Button, { ...props });\n}\n","import React from \"react\";\n/**\n * Render an `option` element.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Option(props) {\n    return React.createElement(\"option\", { ...props });\n}\n","import React from \"react\";\nimport { useDayPicker } from \"../useDayPicker.js\";\n/**\n * Render the button to navigate to the previous month in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function PreviousMonthButton(props) {\n    const { components } = useDayPicker();\n    return React.createElement(components.Button, { ...props });\n}\n","import React from \"react\";\n/**\n * Render the root element of the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Root(props) {\n    const { rootRef, ...rest } = props;\n    return React.createElement(\"div\", { ...rest, ref: rootRef });\n}\n","import React from \"react\";\n/**\n * Render a `select` element.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Select(props) {\n    return React.createElement(\"select\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render a table row representing a week in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Week(props) {\n    const { week, ...trProps } = props;\n    return React.createElement(\"tr\", { ...trProps });\n}\n","import React from \"react\";\n/**\n * Render a table header cell with the name of a weekday (e.g., \"Mo\", \"Tu\").\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Weekday(props) {\n    return React.createElement(\"th\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render the table row containing the weekday names.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Weekdays(props) {\n    return (React.createElement(\"thead\", { \"aria-hidden\": true },\n        React.createElement(\"tr\", { ...props })));\n}\n","import React from \"react\";\n/**\n * Render a table cell displaying the number of the week.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function WeekNumber(props) {\n    const { week, ...thProps } = props;\n    return React.createElement(\"th\", { ...thProps });\n}\n","import React from \"react\";\n/**\n * Render the header cell for the week numbers column.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function WeekNumberHeader(props) {\n    return React.createElement(\"th\", { ...props });\n}\n","import React from \"react\";\n/**\n * Render the container for the weeks in the month grid.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function Weeks(props) {\n    return React.createElement(\"tbody\", { ...props });\n}\n","import React from \"react\";\nimport { useDayPicker } from \"../useDayPicker.js\";\n/**\n * Render a dropdown to navigate between years in the calendar.\n *\n * @group Components\n * @see https://daypicker.dev/guides/custom-components\n */\nexport function YearsDropdown(props) {\n    const { components } = useDayPicker();\n    return React.createElement(components.Dropdown, { ...props });\n}\n","import { defaultDateLib } from \"../classes/index.js\";\n/**\n * Checks if a given date is within a specified date range.\n *\n * @since 9.0.0\n * @param range - The date range to check against.\n * @param date - The date to check.\n * @param excludeEnds - If `true`, the range's start and end dates are excluded.\n * @param dateLib - The date utility library instance.\n * @returns `true` if the date is within the range, otherwise `false`.\n * @group Utilities\n */\nexport function rangeIncludesDate(range, date, excludeEnds = false, dateLib = defaultDateLib) {\n    let { from, to } = range;\n    const { differenceInCalendarDays, isSameDay } = dateLib;\n    if (from && to) {\n        const isRangeInverted = differenceInCalendarDays(to, from) < 0;\n        if (isRangeInverted) {\n            [from, to] = [to, from];\n        }\n        const isInRange = differenceInCalendarDays(date, from) >= (excludeEnds ? 1 : 0) &&\n            differenceInCalendarDays(to, date) >= (excludeEnds ? 1 : 0);\n        return isInRange;\n    }\n    if (!excludeEnds && to) {\n        return isSameDay(to, date);\n    }\n    if (!excludeEnds && from) {\n        return isSameDay(from, date);\n    }\n    return false;\n}\n/**\n * @private\n * @deprecated Use {@link rangeIncludesDate} instead.\n */\nexport const isDateInRange = (range, date) => rangeIncludesDate(range, date, false, defaultDateLib);\n","/**\n * Checks if the given value is of type {@link DateInterval}.\n *\n * @param matcher - The value to check.\n * @returns `true` if the value is a {@link DateInterval}, otherwise `false`.\n * @group Utilities\n */\nexport function isDateInterval(matcher) {\n    return Boolean(matcher &&\n        typeof matcher === \"object\" &&\n        \"before\" in matcher &&\n        \"after\" in matcher);\n}\n/**\n * Checks if the given value is of type {@link DateRange}.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a {@link DateRange}, otherwise `false`.\n * @group Utilities\n */\nexport function isDateRange(value) {\n    return Boolean(value && typeof value === \"object\" && \"from\" in value);\n}\n/**\n * Checks if the given value is of type {@link DateAfter}.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a {@link DateAfter}, otherwise `false`.\n * @group Utilities\n */\nexport function isDateAfterType(value) {\n    return Boolean(value && typeof value === \"object\" && \"after\" in value);\n}\n/**\n * Checks if the given value is of type {@link DateBefore}.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a {@link DateBefore}, otherwise `false`.\n * @group Utilities\n */\nexport function isDateBeforeType(value) {\n    return Boolean(value && typeof value === \"object\" && \"before\" in value);\n}\n/**\n * Checks if the given value is of type {@link DayOfWeek}.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a {@link DayOfWeek}, otherwise `false`.\n * @group Utilities\n */\nexport function isDayOfWeekType(value) {\n    return Boolean(value && typeof value === \"object\" && \"dayOfWeek\" in value);\n}\n/**\n * Checks if the given value is an array of valid dates.\n *\n * @private\n * @param value - The value to check.\n * @param dateLib - The date utility library instance.\n * @returns `true` if the value is an array of valid dates, otherwise `false`.\n */\nexport function isDatesArray(value, dateLib) {\n    return Array.isArray(value) && value.every(dateLib.isDate);\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\nimport { rangeIncludesDate } from \"./rangeIncludesDate.js\";\nimport { isDateAfterType, isDateBeforeType, isDateInterval, isDateRange, isDatesArray, isDayOfWeekType, } from \"./typeguards.js\";\n/**\n * Checks if a given date matches at least one of the specified {@link Matcher}.\n *\n * @param date - The date to check.\n * @param matchers - The matchers to check against.\n * @param dateLib - The date utility library instance.\n * @returns `true` if the date matches any of the matchers, otherwise `false`.\n * @group Utilities\n */\nexport function dateMatchModifiers(date, matchers, dateLib = defaultDateLib) {\n    const matchersArr = !Array.isArray(matchers) ? [matchers] : matchers;\n    const { isSameDay, differenceInCalendarDays, isAfter } = dateLib;\n    return matchersArr.some((matcher) => {\n        if (typeof matcher === \"boolean\") {\n            return matcher;\n        }\n        if (dateLib.isDate(matcher)) {\n            return isSameDay(date, matcher);\n        }\n        if (isDatesArray(matcher, dateLib)) {\n            return matcher.some((matcherDate) => isSameDay(date, matcherDate));\n        }\n        if (isDateRange(matcher)) {\n            return rangeIncludesDate(matcher, date, false, dateLib);\n        }\n        if (isDayOfWeekType(matcher)) {\n            if (!Array.isArray(matcher.dayOfWeek)) {\n                return matcher.dayOfWeek === date.getDay();\n            }\n            return matcher.dayOfWeek.includes(date.getDay());\n        }\n        if (isDateInterval(matcher)) {\n            const diffBefore = differenceInCalendarDays(matcher.before, date);\n            const diffAfter = differenceInCalendarDays(matcher.after, date);\n            const isDayBefore = diffBefore > 0;\n            const isDayAfter = diffAfter < 0;\n            const isClosedInterval = isAfter(matcher.before, matcher.after);\n            if (isClosedInterval) {\n                return isDayAfter && isDayBefore;\n            }\n            else {\n                return isDayBefore || isDayAfter;\n            }\n        }\n        if (isDateAfterType(matcher)) {\n            return differenceInCalendarDays(date, matcher.after) > 0;\n        }\n        if (isDateBeforeType(matcher)) {\n            return differenceInCalendarDays(matcher.before, date) > 0;\n        }\n        if (typeof matcher === \"function\") {\n            return matcher(date);\n        }\n        return false;\n    });\n}\n/**\n * @private\n * @deprecated Use {@link dateMatchModifiers} instead.\n */\nexport const isMatch = dateMatchModifiers;\n","import { DayFlag } from \"../UI.js\";\nimport { dateMatchModifiers } from \"../utils/dateMatchModifiers.js\";\n/**\n * Creates a function to retrieve the modifiers for a given day.\n *\n * This function calculates both internal and custom modifiers for each day\n * based on the provided calendar days and DayPicker props.\n *\n * @private\n * @param days The array of `CalendarDay` objects to process.\n * @param props The DayPicker props, including modifiers and configuration\n *   options.\n * @param dateLib The date library to use for date manipulation.\n * @returns A function that retrieves the modifiers for a given `CalendarDay`.\n */\nexport function createGetModifiers(days, props, navStart, navEnd, dateLib) {\n    const { disabled, hidden, modifiers, showOutsideDays, broadcastCalendar, today = dateLib.today(), } = props;\n    const { isSameDay, isSameMonth, startOfMonth, isBefore, endOfMonth, isAfter, } = dateLib;\n    const computedNavStart = navStart && startOfMonth(navStart);\n    const computedNavEnd = navEnd && endOfMonth(navEnd);\n    const internalModifiersMap = {\n        [DayFlag.focused]: [],\n        [DayFlag.outside]: [],\n        [DayFlag.disabled]: [],\n        [DayFlag.hidden]: [],\n        [DayFlag.today]: [],\n    };\n    const customModifiersMap = {};\n    for (const day of days) {\n        const { date, displayMonth } = day;\n        const isOutside = Boolean(displayMonth && !isSameMonth(date, displayMonth));\n        const isBeforeNavStart = Boolean(computedNavStart && isBefore(date, computedNavStart));\n        const isAfterNavEnd = Boolean(computedNavEnd && isAfter(date, computedNavEnd));\n        const isDisabled = Boolean(disabled && dateMatchModifiers(date, disabled, dateLib));\n        const isHidden = Boolean(hidden && dateMatchModifiers(date, hidden, dateLib)) ||\n            isBeforeNavStart ||\n            isAfterNavEnd ||\n            // Broadcast calendar will show outside days as default\n            (!broadcastCalendar && !showOutsideDays && isOutside) ||\n            (broadcastCalendar && showOutsideDays === false && isOutside);\n        const isToday = isSameDay(date, today);\n        if (isOutside)\n            internalModifiersMap.outside.push(day);\n        if (isDisabled)\n            internalModifiersMap.disabled.push(day);\n        if (isHidden)\n            internalModifiersMap.hidden.push(day);\n        if (isToday)\n            internalModifiersMap.today.push(day);\n        // Add custom modifiers\n        if (modifiers) {\n            Object.keys(modifiers).forEach((name) => {\n                const modifierValue = modifiers?.[name];\n                const isMatch = modifierValue\n                    ? dateMatchModifiers(date, modifierValue, dateLib)\n                    : false;\n                if (!isMatch)\n                    return;\n                if (customModifiersMap[name]) {\n                    customModifiersMap[name].push(day);\n                }\n                else {\n                    customModifiersMap[name] = [day];\n                }\n            });\n        }\n    }\n    return (day) => {\n        // Initialize all the modifiers to false\n        const dayFlags = {\n            [DayFlag.focused]: false,\n            [DayFlag.disabled]: false,\n            [DayFlag.hidden]: false,\n            [DayFlag.outside]: false,\n            [DayFlag.today]: false,\n        };\n        const customModifiers = {};\n        // Find the modifiers for the given day\n        for (const name in internalModifiersMap) {\n            const days = internalModifiersMap[name];\n            dayFlags[name] = days.some((d) => d === day);\n        }\n        for (const name in customModifiersMap) {\n            customModifiers[name] = customModifiersMap[name].some((d) => d === day);\n        }\n        return {\n            ...dayFlags,\n            // custom modifiers should override all the previous ones\n            ...customModifiers,\n        };\n    };\n}\n","import { DayFlag, SelectionState, UI } from \"../UI.js\";\n/**\n * Returns the class names for a day based on its modifiers.\n *\n * This function combines the base class name for the day with any class names\n * associated with active modifiers.\n *\n * @param modifiers The modifiers applied to the day.\n * @param classNames The base class names for the calendar elements.\n * @param modifiersClassNames The class names associated with specific\n *   modifiers.\n * @returns An array of class names for the day.\n */\nexport function getClassNamesForModifiers(modifiers, classNames, modifiersClassNames = {}) {\n    const modifierClassNames = Object.entries(modifiers)\n        .filter(([, active]) => active === true)\n        .reduce((previousValue, [key]) => {\n        if (modifiersClassNames[key]) {\n            previousValue.push(modifiersClassNames[key]);\n        }\n        else if (classNames[DayFlag[key]]) {\n            previousValue.push(classNames[DayFlag[key]]);\n        }\n        else if (classNames[SelectionState[key]]) {\n            previousValue.push(classNames[SelectionState[key]]);\n        }\n        return previousValue;\n    }, [classNames[UI.Day]]);\n    return modifierClassNames;\n}\n","import * as components from \"../components/custom-components.js\";\n/**\n * Merges custom components from the props with the default components.\n *\n * This function ensures that any custom components provided in the props\n * override the default components.\n *\n * @param customComponents The custom components provided in the DayPicker\n *   props.\n * @returns An object containing the merged components.\n */\nexport function getComponents(customComponents) {\n    return {\n        ...components,\n        ...customComponents,\n    };\n}\n","/**\n * Extracts `data-` attributes from the DayPicker props.\n *\n * This function collects all `data-` attributes from the props and adds\n * additional attributes based on the DayPicker configuration.\n *\n * @param props The DayPicker props.\n * @returns An object containing the `data-` attributes.\n */\nexport function getDataAttributes(props) {\n    const dataAttributes = {\n        \"data-mode\": props.mode ?? undefined,\n        \"data-required\": \"required\" in props ? props.required : undefined,\n        \"data-multiple-months\": (props.numberOfMonths && props.numberOfMonths > 1) || undefined,\n        \"data-week-numbers\": props.showWeekNumber || undefined,\n        \"data-broadcast-calendar\": props.broadcastCalendar || undefined,\n        \"data-nav-layout\": props.navLayout || undefined,\n    };\n    Object.entries(props).forEach(([key, val]) => {\n        if (key.startsWith(\"data-\")) {\n            dataAttributes[key] = val;\n        }\n    });\n    return dataAttributes;\n}\n","import { Animation, DayFlag, SelectionState, UI } from \"../UI.js\";\n/**\n * Returns the default class names for the UI elements.\n *\n * This function generates a mapping of default class names for various UI\n * elements, day flags, selection states, and animations.\n *\n * @returns An object containing the default class names.\n * @group Utilities\n */\nexport function getDefaultClassNames() {\n    const classNames = {};\n    for (const key in UI) {\n        classNames[UI[key]] =\n            `rdp-${UI[key]}`;\n    }\n    for (const key in DayFlag) {\n        classNames[DayFlag[key]] =\n            `rdp-${DayFlag[key]}`;\n    }\n    for (const key in SelectionState) {\n        classNames[SelectionState[key]] =\n            `rdp-${SelectionState[key]}`;\n    }\n    for (const key in Animation) {\n        classNames[Animation[key]] =\n            `rdp-${Animation[key]}`;\n    }\n    return classNames;\n}\n","export * from \"./formatCaption.js\";\nexport * from \"./formatDay.js\";\nexport * from \"./formatMonthDropdown.js\";\nexport * from \"./formatWeekdayName.js\";\nexport * from \"./formatWeekNumber.js\";\nexport * from \"./formatWeekNumberHeader.js\";\nexport * from \"./formatYearDropdown.js\";\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the caption of the month.\n *\n * @defaultValue Locale-specific month/year order (e.g., \"November 2022\").\n * @param month The date representing the month.\n * @param options Configuration options for the date library.\n * @param dateLib The date library to use for formatting. If not provided, a new\n *   instance is created.\n * @returns The formatted caption as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatCaption(month, options, dateLib) {\n    const lib = dateLib ?? new DateLib(options);\n    return lib.formatMonthYear(month);\n}\n/**\n * @private\n * @deprecated Use {@link formatCaption} instead.\n * @group Formatters\n */\nexport const formatMonthCaption = formatCaption;\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the day date shown in the day cell.\n *\n * @defaultValue `d` (e.g., \"1\").\n * @param date The date to format.\n * @param options Configuration options for the date library.\n * @param dateLib The date library to use for formatting. If not provided, a new\n *   instance is created.\n * @returns The formatted day as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatDay(date, options, dateLib) {\n    return (dateLib ?? new DateLib(options)).format(date, \"d\");\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the month for the dropdown option label.\n *\n * @defaultValue The localized full month name.\n * @param month The date representing the month.\n * @param dateLib The date library to use for formatting. Defaults to\n *   `defaultDateLib`.\n * @returns The formatted month name as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatMonthDropdown(month, dateLib = defaultDateLib) {\n    return dateLib.format(month, \"LLLL\");\n}\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the name of a weekday to be displayed in the weekdays header.\n *\n * @defaultValue `cccccc` (e.g., \"Mo\" for Monday).\n * @param weekday The date representing the weekday.\n * @param options Configuration options for the date library.\n * @param dateLib The date library to use for formatting. If not provided, a new\n *   instance is created.\n * @returns The formatted weekday name as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatWeekdayName(weekday, options, dateLib) {\n    return (dateLib ?? new DateLib(options)).format(weekday, \"cccccc\");\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the week number.\n *\n * @defaultValue The week number as a string, with a leading zero for single-digit numbers.\n * @param weekNumber The week number to format.\n * @param dateLib The date library to use for formatting. Defaults to\n *   `defaultDateLib`.\n * @returns The formatted week number as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatWeekNumber(weekNumber, dateLib = defaultDateLib) {\n    if (weekNumber < 10) {\n        return dateLib.formatNumber(`0${weekNumber.toLocaleString()}`);\n    }\n    return dateLib.formatNumber(`${weekNumber.toLocaleString()}`);\n}\n","/**\n * Formats the header for the week number column.\n *\n * @defaultValue An empty string `\"\"`.\n * @returns The formatted week number header as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatWeekNumberHeader() {\n    return ``;\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\n/**\n * Formats the year for the dropdown option label.\n *\n * @param year The year to format.\n * @param dateLib The date library to use for formatting. Defaults to\n *   `defaultDateLib`.\n * @returns The formatted year as a string.\n * @group Formatters\n * @see https://daypicker.dev/docs/translation#custom-formatters\n */\nexport function formatYearDropdown(year, dateLib = defaultDateLib) {\n    return dateLib.format(year, \"yyyy\");\n}\n/**\n * @private\n * @deprecated Use `formatYearDropdown` instead.\n * @group Formatters\n */\nexport const formatYearCaption = formatYearDropdown;\n","import * as defaultFormatters from \"../formatters/index.js\";\n/**\n * Merges custom formatters from the props with the default formatters.\n *\n * @param customFormatters The custom formatters provided in the DayPicker\n *   props.\n * @returns The merged formatters object.\n */\nexport function getFormatters(customFormatters) {\n    if (customFormatters?.formatMonthCaption && !customFormatters.formatCaption) {\n        customFormatters.formatCaption = customFormatters.formatMonthCaption;\n    }\n    if (customFormatters?.formatYearCaption &&\n        !customFormatters.formatYearDropdown) {\n        customFormatters.formatYearDropdown = customFormatters.formatYearCaption;\n    }\n    return {\n        ...defaultFormatters,\n        ...customFormatters,\n    };\n}\n","export * from \"./labelDayButton.js\";\nexport * from \"./labelGrid.js\";\nexport * from \"./labelGrid.js\";\nexport * from \"./labelGridcell.js\";\nexport * from \"./labelMonthDropdown.js\";\nexport * from \"./labelNav.js\";\nexport * from \"./labelNext.js\";\nexport * from \"./labelPrevious.js\";\nexport * from \"./labelWeekday.js\";\nexport * from \"./labelWeekNumber.js\";\nexport * from \"./labelWeekNumberHeader.js\";\nexport * from \"./labelYearDropdown.js\";\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Generates the ARIA label for a day button.\n *\n * Use the `modifiers` argument to provide additional context for the label,\n * such as indicating if the day is \"today\" or \"selected.\"\n *\n * @defaultValue The formatted date.\n * @param date - The date to format.\n * @param modifiers - The modifiers providing context for the day.\n * @param options - Optional configuration for the date formatting library.\n * @param dateLib - An optional instance of the date formatting library.\n * @returns The ARIA label for the day button.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelDayButton(date, modifiers, options, dateLib) {\n    let label = (dateLib ?? new DateLib(options)).format(date, \"PPPP\");\n    if (modifiers.today)\n        label = `Today, ${label}`;\n    if (modifiers.selected)\n        label = `${label}, selected`;\n    return label;\n}\n/**\n * @ignore\n * @deprecated Use `labelDayButton` instead.\n */\nexport const labelDay = labelDayButton;\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Generates the ARIA label for the month grid, which is announced when entering\n * the grid.\n *\n * @defaultValue Locale-specific month/year order (e.g., \"November 2022\").\n * @param date - The date representing the month.\n * @param options - Optional configuration for the date formatting library.\n * @param dateLib - An optional instance of the date formatting library.\n * @returns The ARIA label for the month grid.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelGrid(date, options, dateLib) {\n    const lib = dateLib ?? new DateLib(options);\n    return lib.formatMonthYear(date);\n}\n/**\n * @ignore\n * @deprecated Use {@link labelGrid} instead.\n */\nexport const labelCaption = labelGrid;\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Generates the label for a day grid cell when the calendar is not interactive.\n *\n * @param date - The date to format.\n * @param modifiers - Optional modifiers providing context for the day.\n * @param options - Optional configuration for the date formatting library.\n * @param dateLib - An optional instance of the date formatting library.\n * @returns The label for the day grid cell.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelGridcell(date, modifiers, options, dateLib) {\n    let label = (dateLib ?? new DateLib(options)).format(date, \"PPPP\");\n    if (modifiers?.today) {\n        label = `Today, ${label}`;\n    }\n    return label;\n}\n","/**\n * Generates the ARIA label for the months dropdown.\n *\n * @defaultValue `\"Choose the Month\"`\n * @param options - Optional configuration for the date formatting library.\n * @returns The ARIA label for the months dropdown.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelMonthDropdown(_options) {\n    return \"Choose the Month\";\n}\n","/**\n * Generates the ARIA label for the navigation toolbar.\n *\n * @defaultValue `\"\"`\n * @returns The ARIA label for the navigation toolbar.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelNav() {\n    return \"\";\n}\n","const defaultLabel = \"Go to the Next Month\";\n/**\n * Generates the ARIA label for the \"next month\" button.\n *\n * @defaultValue `\"Go to the Next Month\"`\n * @param month - The date representing the next month, or `undefined` if there\n *   is no next month.\n * @returns The ARIA label for the \"next month\" button.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelNext(_month, _options) {\n    return defaultLabel;\n}\n","/**\n * Generates the ARIA label for the \"previous month\" button.\n *\n * @defaultValue `\"Go to the Previous Month\"`\n * @param month - The date representing the previous month, or `undefined` if\n *   there is no previous month.\n * @returns The ARIA label for the \"previous month\" button.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelPrevious(_month) {\n    return \"Go to the Previous Month\";\n}\n","import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Generates the ARIA label for a weekday column header.\n *\n * @defaultValue `\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"`\n * @param date - The date representing the weekday.\n * @param options - Optional configuration for the date formatting library.\n * @param dateLib - An optional instance of the date formatting library.\n * @returns The ARIA label for the weekday column header.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelWeekday(date, options, dateLib) {\n    return (dateLib ?? new DateLib(options)).format(date, \"cccc\");\n}\n","/**\n * Generates the ARIA label for the week number cell (the first cell in a row).\n *\n * @defaultValue `Week ${weekNumber}`\n * @param weekNumber - The number of the week.\n * @param options - Optional configuration for the date formatting library.\n * @returns The ARIA label for the week number cell.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelWeekNumber(weekNumber, _options) {\n    return `Week ${weekNumber}`;\n}\n","/**\n * Generates the ARIA label for the week number header element.\n *\n * @defaultValue `\"Week Number\"`\n * @param options - Optional configuration for the date formatting library.\n * @returns The ARIA label for the week number header.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelWeekNumberHeader(_options) {\n    return \"Week Number\";\n}\n","/**\n * Generates the ARIA label for the years dropdown.\n *\n * @defaultValue `\"Choose the Year\"`\n * @param options - Optional configuration for the date formatting library.\n * @returns The ARIA label for the years dropdown.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelYearDropdown(_options) {\n    return \"Choose the Year\";\n}\n","import * as defaultLabels from \"../labels/index.js\";\nconst resolveLabel = (defaultLabel, customLabel, localeLabel) => {\n    if (customLabel)\n        return customLabel;\n    if (localeLabel) {\n        return (typeof localeLabel === \"function\"\n            ? localeLabel\n            : (..._args) => localeLabel);\n    }\n    return defaultLabel;\n};\n/**\n * Merges custom labels from the props with the default labels.\n *\n * When available, uses the locale-provided translation for `labelNext`.\n *\n * @param customLabels The custom labels provided in the DayPicker props.\n * @param options Options from the date library, used to resolve locale\n *   translations.\n * @returns The merged labels object with locale-aware defaults.\n */\nexport function getLabels(customLabels, options) {\n    const localeLabels = options.locale?.labels ?? {};\n    return {\n        ...defaultLabels,\n        ...(customLabels ?? {}),\n        labelDayButton: resolveLabel(defaultLabels.labelDayButton, customLabels?.labelDayButton, localeLabels.labelDayButton),\n        labelMonthDropdown: resolveLabel(defaultLabels.labelMonthDropdown, customLabels?.labelMonthDropdown, localeLabels.labelMonthDropdown),\n        labelNext: resolveLabel(defaultLabels.labelNext, customLabels?.labelNext, localeLabels.labelNext),\n        labelPrevious: resolveLabel(defaultLabels.labelPrevious, customLabels?.labelPrevious, localeLabels.labelPrevious),\n        labelWeekNumber: resolveLabel(defaultLabels.labelWeekNumber, customLabels?.labelWeekNumber, localeLabels.labelWeekNumber),\n        labelYearDropdown: resolveLabel(defaultLabels.labelYearDropdown, customLabels?.labelYearDropdown, localeLabels.labelYearDropdown),\n        labelGrid: resolveLabel(defaultLabels.labelGrid, customLabels?.labelGrid, localeLabels.labelGrid),\n        labelGridcell: resolveLabel(defaultLabels.labelGridcell, customLabels?.labelGridcell, localeLabels.labelGridcell),\n        labelNav: resolveLabel(defaultLabels.labelNav, customLabels?.labelNav, localeLabels.labelNav),\n        labelWeekNumberHeader: resolveLabel(defaultLabels.labelWeekNumberHeader, customLabels?.labelWeekNumberHeader, localeLabels.labelWeekNumberHeader),\n        labelWeekday: resolveLabel(defaultLabels.labelWeekday, customLabels?.labelWeekday, localeLabels.labelWeekday),\n    };\n}\n","/**\n * Returns the months to show in the dropdown.\n *\n * This function generates a list of months for the current year, formatted\n * using the provided formatter, and determines whether each month should be\n * disabled based on the navigation range.\n *\n * @param displayMonth The currently displayed month.\n * @param navStart The start date for navigation.\n * @param navEnd The end date for navigation.\n * @param formatters The formatters to use for formatting the month labels.\n * @param dateLib The date library to use for date manipulation.\n * @returns An array of dropdown options representing the months, or `undefined`\n *   if no months are available.\n */\nexport function getMonthOptions(displayMonth, navStart, navEnd, formatters, dateLib) {\n    const { startOfMonth, startOfYear, endOfYear, eachMonthOfInterval, getMonth, } = dateLib;\n    const months = eachMonthOfInterval({\n        start: startOfYear(displayMonth),\n        end: endOfYear(displayMonth),\n    });\n    const options = months.map((month) => {\n        const label = formatters.formatMonthDropdown(month, dateLib);\n        const value = getMonth(month);\n        const disabled = (navStart && month < startOfMonth(navStart)) ||\n            (navEnd && month > startOfMonth(navEnd)) ||\n            false;\n        return { value, label, disabled };\n    });\n    return options;\n}\n","import { UI } from \"../UI.js\";\n/**\n * Returns the computed style for a day based on its modifiers.\n *\n * This function merges the base styles for the day with any styles associated\n * with active modifiers.\n *\n * @param dayModifiers The modifiers applied to the day.\n * @param styles The base styles for the calendar elements.\n * @param modifiersStyles The styles associated with specific modifiers.\n * @returns The computed style for the day.\n */\nexport function getStyleForModifiers(dayModifiers, styles = {}, modifiersStyles = {}) {\n    let style = { ...styles?.[UI.Day] };\n    Object.entries(dayModifiers)\n        .filter(([, active]) => active === true)\n        .forEach(([modifier]) => {\n        style = {\n            ...style,\n            ...modifiersStyles?.[modifier],\n        };\n    });\n    return style;\n}\n","/**\n * Generates a series of 7 days, starting from the beginning of the week, to use\n * for formatting weekday names (e.g., Monday, Tuesday, etc.).\n *\n * @param dateLib The date library to use for date manipulation.\n * @param ISOWeek Whether to use ISO week numbering (weeks start on Monday).\n * @param broadcastCalendar Whether to use the broadcast calendar (weeks start\n *   on Monday, but may include adjustments for broadcast-specific rules).\n * @returns An array of 7 dates representing the weekdays.\n */\nexport function getWeekdays(dateLib, ISOWeek, broadcastCalendar, today) {\n    const referenceToday = today ?? dateLib.today();\n    const start = broadcastCalendar\n        ? dateLib.startOfBroadcastWeek(referenceToday, dateLib)\n        : ISOWeek\n            ? dateLib.startOfISOWeek(referenceToday)\n            : dateLib.startOfWeek(referenceToday);\n    const days = [];\n    for (let i = 0; i < 7; i++) {\n        const day = dateLib.addDays(start, i);\n        days.push(day);\n    }\n    return days;\n}\n","/**\n * Returns the years to display in the dropdown.\n *\n * This function generates a list of years between the navigation start and end\n * dates, formatted using the provided formatter.\n *\n * @param navStart The start date for navigation.\n * @param navEnd The end date for navigation.\n * @param formatters The formatters to use for formatting the year labels.\n * @param dateLib The date library to use for date manipulation.\n * @param reverse If true, reverses the order of the years (descending).\n * @returns An array of dropdown options representing the years, or `undefined`\n *   if `navStart` or `navEnd` is not provided.\n */\nexport function getYearOptions(navStart, navEnd, formatters, dateLib, reverse = false) {\n    if (!navStart)\n        return undefined;\n    if (!navEnd)\n        return undefined;\n    const { startOfYear, endOfYear, eachYearOfInterval, getYear } = dateLib;\n    const firstNavYear = startOfYear(navStart);\n    const lastNavYear = endOfYear(navEnd);\n    const years = eachYearOfInterval({ start: firstNavYear, end: lastNavYear });\n    if (reverse)\n        years.reverse();\n    return years.map((year) => {\n        const label = formatters.formatYearDropdown(year, dateLib);\n        return {\n            value: getYear(year),\n            label,\n            disabled: false,\n        };\n    });\n}\n","import { useLayoutEffect, useRef } from \"react\";\nimport { Animation } from \"./UI.js\";\nconst asHtmlElement = (element) => {\n    if (element instanceof HTMLElement)\n        return element;\n    return null;\n};\nconst queryMonthEls = (element) => [\n    ...(element.querySelectorAll(\"[data-animated-month]\") ?? []),\n];\nconst queryMonthEl = (element) => asHtmlElement(element.querySelector(\"[data-animated-month]\"));\nconst queryCaptionEl = (element) => asHtmlElement(element.querySelector(\"[data-animated-caption]\"));\nconst queryWeeksEl = (element) => asHtmlElement(element.querySelector(\"[data-animated-weeks]\"));\nconst queryNavEl = (element) => asHtmlElement(element.querySelector(\"[data-animated-nav]\"));\nconst queryWeekdaysEl = (element) => asHtmlElement(element.querySelector(\"[data-animated-weekdays]\"));\n/**\n * Handles animations for transitioning between months in the DayPicker\n * component.\n *\n * @private\n * @param rootElRef - A reference to the root element of the DayPicker\n *   component.\n * @param enabled - Whether animations are enabled.\n * @param options - Configuration options for the animation, including class\n *   names, months, focused day, and the date utility library.\n */\nexport function useAnimation(rootElRef, enabled, { classNames, months, focused, dateLib, }) {\n    const previousRootElSnapshotRef = useRef(null);\n    const previousMonthsRef = useRef(months);\n    const animatingRef = useRef(false);\n    useLayoutEffect(() => {\n        // get previous months before updating the previous months ref\n        const previousMonths = previousMonthsRef.current;\n        // update previous months ref for next effect trigger\n        previousMonthsRef.current = months;\n        if (!enabled ||\n            !rootElRef.current ||\n            // safety check because the ref can be set to anything by consumers\n            !(rootElRef.current instanceof HTMLElement) ||\n            // validation required for the animation to work as expected\n            months.length === 0 ||\n            previousMonths.length === 0 ||\n            months.length !== previousMonths.length) {\n            return;\n        }\n        const isSameMonth = dateLib.isSameMonth(months[0].date, previousMonths[0].date);\n        const isAfterPreviousMonth = dateLib.isAfter(months[0].date, previousMonths[0].date);\n        const captionAnimationClass = isAfterPreviousMonth\n            ? classNames[Animation.caption_after_enter]\n            : classNames[Animation.caption_before_enter];\n        const weeksAnimationClass = isAfterPreviousMonth\n            ? classNames[Animation.weeks_after_enter]\n            : classNames[Animation.weeks_before_enter];\n        // get previous root element snapshot before updating the snapshot ref\n        const previousRootElSnapshot = previousRootElSnapshotRef.current;\n        // update snapshot for next effect trigger\n        const rootElSnapshot = rootElRef.current.cloneNode(true);\n        if (rootElSnapshot instanceof HTMLElement) {\n            // if this effect is triggered while animating, we need to clean up the new root snapshot\n            // to put it in the same state as when not animating, to correctly animate the next month change\n            const currentMonthElsSnapshot = queryMonthEls(rootElSnapshot);\n            currentMonthElsSnapshot.forEach((currentMonthElSnapshot) => {\n                if (!(currentMonthElSnapshot instanceof HTMLElement))\n                    return;\n                // remove the old month snapshots from the new root snapshot\n                const previousMonthElSnapshot = queryMonthEl(currentMonthElSnapshot);\n                if (previousMonthElSnapshot &&\n                    currentMonthElSnapshot.contains(previousMonthElSnapshot)) {\n                    currentMonthElSnapshot.removeChild(previousMonthElSnapshot);\n                }\n                // remove animation classes from the new month snapshots\n                const captionEl = queryCaptionEl(currentMonthElSnapshot);\n                if (captionEl) {\n                    captionEl.classList.remove(captionAnimationClass);\n                }\n                const weeksEl = queryWeeksEl(currentMonthElSnapshot);\n                if (weeksEl) {\n                    weeksEl.classList.remove(weeksAnimationClass);\n                }\n            });\n            previousRootElSnapshotRef.current = rootElSnapshot;\n        }\n        else {\n            previousRootElSnapshotRef.current = null;\n        }\n        if (animatingRef.current ||\n            isSameMonth ||\n            // skip animation if a day is focused because it can cause issues to the animation and is better for a11y\n            focused) {\n            return;\n        }\n        const previousMonthEls = previousRootElSnapshot instanceof HTMLElement\n            ? queryMonthEls(previousRootElSnapshot)\n            : [];\n        const currentMonthEls = queryMonthEls(rootElRef.current);\n        if (currentMonthEls?.every((el) => el instanceof HTMLElement) &&\n            previousMonthEls &&\n            previousMonthEls.every((el) => el instanceof HTMLElement)) {\n            animatingRef.current = true;\n            const cleanUpFunctions = [];\n            // set isolation to isolate to isolate the stacking context during animation\n            rootElRef.current.style.isolation = \"isolate\";\n            // set z-index to 1 to ensure the nav is clickable over the other elements being animated\n            const navEl = queryNavEl(rootElRef.current);\n            if (navEl) {\n                navEl.style.zIndex = \"1\";\n            }\n            currentMonthEls.forEach((currentMonthEl, index) => {\n                const previousMonthEl = previousMonthEls[index];\n                if (!previousMonthEl) {\n                    return;\n                }\n                // animate new displayed month\n                currentMonthEl.style.position = \"relative\";\n                currentMonthEl.style.overflow = \"hidden\";\n                const captionEl = queryCaptionEl(currentMonthEl);\n                if (captionEl) {\n                    captionEl.classList.add(captionAnimationClass);\n                }\n                const weeksEl = queryWeeksEl(currentMonthEl);\n                if (weeksEl) {\n                    weeksEl.classList.add(weeksAnimationClass);\n                }\n                // animate new displayed month end\n                const cleanUp = () => {\n                    animatingRef.current = false;\n                    if (rootElRef.current) {\n                        rootElRef.current.style.isolation = \"\";\n                    }\n                    if (navEl) {\n                        navEl.style.zIndex = \"\";\n                    }\n                    if (captionEl) {\n                        captionEl.classList.remove(captionAnimationClass);\n                    }\n                    if (weeksEl) {\n                        weeksEl.classList.remove(weeksAnimationClass);\n                    }\n                    currentMonthEl.style.position = \"\";\n                    currentMonthEl.style.overflow = \"\";\n                    if (currentMonthEl.contains(previousMonthEl)) {\n                        currentMonthEl.removeChild(previousMonthEl);\n                    }\n                };\n                cleanUpFunctions.push(cleanUp);\n                // animate old displayed month\n                previousMonthEl.style.pointerEvents = \"none\";\n                previousMonthEl.style.position = \"absolute\";\n                previousMonthEl.style.overflow = \"hidden\";\n                previousMonthEl.setAttribute(\"aria-hidden\", \"true\");\n                // hide the weekdays container of the old month and only the new one\n                const previousWeekdaysEl = queryWeekdaysEl(previousMonthEl);\n                if (previousWeekdaysEl) {\n                    previousWeekdaysEl.style.opacity = \"0\";\n                }\n                const previousCaptionEl = queryCaptionEl(previousMonthEl);\n                if (previousCaptionEl) {\n                    previousCaptionEl.classList.add(isAfterPreviousMonth\n                        ? classNames[Animation.caption_before_exit]\n                        : classNames[Animation.caption_after_exit]);\n                    previousCaptionEl.addEventListener(\"animationend\", cleanUp);\n                }\n                const previousWeeksEl = queryWeeksEl(previousMonthEl);\n                if (previousWeeksEl) {\n                    previousWeeksEl.classList.add(isAfterPreviousMonth\n                        ? classNames[Animation.weeks_before_exit]\n                        : classNames[Animation.weeks_after_exit]);\n                }\n                currentMonthEl.insertBefore(previousMonthEl, currentMonthEl.firstChild);\n            });\n        }\n    });\n}\n","/**\n * Returns all the dates to display in the calendar.\n *\n * This function calculates the range of dates to display based on the provided\n * display months, constraints, and calendar configuration.\n *\n * @param displayMonths The months to display in the calendar.\n * @param maxDate The maximum date to include in the range.\n * @param props The DayPicker props, including calendar configuration options.\n * @param dateLib The date library to use for date manipulation.\n * @returns An array of dates to display in the calendar.\n */\nexport function getDates(displayMonths, maxDate, props, dateLib) {\n    const firstMonth = displayMonths[0];\n    const lastMonth = displayMonths[displayMonths.length - 1];\n    const { ISOWeek, fixedWeeks, broadcastCalendar } = props ?? {};\n    const { addDays, differenceInCalendarDays, differenceInCalendarMonths, endOfBroadcastWeek, endOfISOWeek, endOfMonth, endOfWeek, isAfter, startOfBroadcastWeek, startOfISOWeek, startOfWeek, } = dateLib;\n    const startWeekFirstDate = broadcastCalendar\n        ? startOfBroadcastWeek(firstMonth, dateLib)\n        : ISOWeek\n            ? startOfISOWeek(firstMonth)\n            : startOfWeek(firstMonth);\n    const displayMonthsWeekEnd = broadcastCalendar\n        ? endOfBroadcastWeek(lastMonth)\n        : ISOWeek\n            ? endOfISOWeek(endOfMonth(lastMonth))\n            : endOfWeek(endOfMonth(lastMonth));\n    // If maxDate is set, clamp the grid to the end of that week.\n    const constraintWeekEnd = maxDate &&\n        (broadcastCalendar\n            ? endOfBroadcastWeek(maxDate)\n            : ISOWeek\n                ? endOfISOWeek(maxDate)\n                : endOfWeek(maxDate));\n    // Pick the earliest week end between the displayed months and the constraint.\n    const gridEndDate = constraintWeekEnd && isAfter(displayMonthsWeekEnd, constraintWeekEnd)\n        ? constraintWeekEnd\n        : displayMonthsWeekEnd;\n    const nOfDays = differenceInCalendarDays(gridEndDate, startWeekFirstDate);\n    const nOfMonths = differenceInCalendarMonths(lastMonth, firstMonth) + 1;\n    const dates = [];\n    for (let i = 0; i <= nOfDays; i++) {\n        const date = addDays(startWeekFirstDate, i);\n        dates.push(date);\n    }\n    // If fixed weeks is enabled, add the extra dates to the array\n    const nrOfDaysWithFixedWeeks = broadcastCalendar ? 35 : 42;\n    const extraDates = nrOfDaysWithFixedWeeks * nOfMonths;\n    if (fixedWeeks && dates.length < extraDates) {\n        const daysToAdd = extraDates - dates.length;\n        for (let i = 0; i < daysToAdd; i++) {\n            const date = addDays(dates[dates.length - 1], 1);\n            dates.push(date);\n        }\n    }\n    return dates;\n}\n","/**\n * Returns all the days belonging to the calendar by merging the days in the\n * weeks for each month.\n *\n * @param calendarMonths The array of calendar months.\n * @returns An array of `CalendarDay` objects representing all the days in the\n *   calendar.\n */\nexport function getDays(calendarMonths) {\n    const initialDays = [];\n    return calendarMonths.reduce((days, month) => {\n        const weekDays = month.weeks.reduce((weekDays, week) => {\n            return weekDays.concat(week.days.slice());\n        }, initialDays.slice());\n        return days.concat(weekDays.slice());\n    }, initialDays.slice());\n}\n","/**\n * Returns the months to display in the calendar.\n *\n * @param firstDisplayedMonth The first month currently displayed in the\n *   calendar.\n * @param calendarEndMonth The latest month the user can navigate to.\n * @param props The DayPicker props, including `numberOfMonths`.\n * @param dateLib The date library to use for date manipulation.\n * @returns An array of dates representing the months to display.\n */\nexport function getDisplayMonths(firstDisplayedMonth, calendarEndMonth, props, dateLib) {\n    const { numberOfMonths = 1 } = props;\n    const months = [];\n    for (let i = 0; i < numberOfMonths; i++) {\n        const month = dateLib.addMonths(firstDisplayedMonth, i);\n        if (calendarEndMonth && month > calendarEndMonth) {\n            break;\n        }\n        months.push(month);\n    }\n    return months;\n}\n","/**\n * Determines the initial month to display in the calendar based on the provided\n * props.\n *\n * This function calculates the starting month, considering constraints such as\n * `startMonth`, `endMonth`, and the number of months to display.\n *\n * @param props The DayPicker props, including navigation and date constraints.\n * @param dateLib The date library to use for date manipulation.\n * @returns The initial month to display.\n */\nexport function getInitialMonth(props, navStart, navEnd, dateLib) {\n    const { month, defaultMonth, today = dateLib.today(), numberOfMonths = 1, } = props;\n    let initialMonth = month || defaultMonth || today;\n    const { differenceInCalendarMonths, addMonths, startOfMonth } = dateLib;\n    if (navEnd &&\n        differenceInCalendarMonths(navEnd, initialMonth) < numberOfMonths - 1) {\n        const offset = -1 * (numberOfMonths - 1);\n        initialMonth = addMonths(navEnd, offset);\n    }\n    if (navStart && differenceInCalendarMonths(initialMonth, navStart) < 0) {\n        initialMonth = navStart;\n    }\n    return startOfMonth(initialMonth);\n}\n","import { CalendarDay, CalendarMonth, CalendarWeek } from \"../classes/index.js\";\n/**\n * Returns the months to display in the calendar.\n *\n * This function generates `CalendarMonth` objects for each month to be\n * displayed, including their weeks and days, based on the provided display\n * months and dates.\n *\n * @param displayMonths The months (as dates) to display in the calendar.\n * @param dates The dates to display in the calendar.\n * @param props Options from the DayPicker props context.\n * @param dateLib The date library to use for date manipulation.\n * @returns An array of `CalendarMonth` objects representing the months to\n *   display.\n */\nexport function getMonths(displayMonths, dates, props, dateLib) {\n    const { addDays, endOfBroadcastWeek, endOfISOWeek, endOfMonth, endOfWeek, getISOWeek, getWeek, startOfBroadcastWeek, startOfISOWeek, startOfWeek, } = dateLib;\n    const dayPickerMonths = displayMonths.reduce((months, month) => {\n        const firstDateOfFirstWeek = props.broadcastCalendar\n            ? startOfBroadcastWeek(month, dateLib)\n            : props.ISOWeek\n                ? startOfISOWeek(month)\n                : startOfWeek(month);\n        const lastDateOfLastWeek = props.broadcastCalendar\n            ? endOfBroadcastWeek(month)\n            : props.ISOWeek\n                ? endOfISOWeek(endOfMonth(month))\n                : endOfWeek(endOfMonth(month));\n        /** The dates to display in the month. */\n        const monthDates = dates.filter((date) => {\n            return date >= firstDateOfFirstWeek && date <= lastDateOfLastWeek;\n        });\n        const nrOfDaysWithFixedWeeks = props.broadcastCalendar ? 35 : 42;\n        if (props.fixedWeeks && monthDates.length < nrOfDaysWithFixedWeeks) {\n            const extraDates = dates.filter((date) => {\n                const daysToAdd = nrOfDaysWithFixedWeeks - monthDates.length;\n                return (date > lastDateOfLastWeek &&\n                    date <= addDays(lastDateOfLastWeek, daysToAdd));\n            });\n            monthDates.push(...extraDates);\n        }\n        const weeks = monthDates.reduce((weeks, date) => {\n            const weekNumber = props.ISOWeek ? getISOWeek(date) : getWeek(date);\n            const week = weeks.find((week) => week.weekNumber === weekNumber);\n            const day = new CalendarDay(date, month, dateLib);\n            if (!week) {\n                weeks.push(new CalendarWeek(weekNumber, [day]));\n            }\n            else {\n                week.days.push(day);\n            }\n            return weeks;\n        }, []);\n        const dayPickerMonth = new CalendarMonth(month, weeks);\n        months.push(dayPickerMonth);\n        return months;\n    }, []);\n    if (!props.reverseMonths) {\n        return dayPickerMonths;\n    }\n    else {\n        return dayPickerMonths.reverse();\n    }\n}\n","/**\n * Returns the start and end months for calendar navigation.\n *\n * @param props The DayPicker props, including navigation and layout options.\n * @param dateLib The date library to use for date manipulation.\n * @returns A tuple containing the start and end months for navigation.\n */\nexport function getNavMonths(props, dateLib) {\n    let { startMonth, endMonth } = props;\n    const { startOfYear, startOfDay, startOfMonth, endOfMonth, addYears, endOfYear, newDate, today, } = dateLib;\n    // Handle deprecated code\n    const { fromYear, toYear, fromMonth, toMonth } = props;\n    if (!startMonth && fromMonth) {\n        startMonth = fromMonth;\n    }\n    if (!startMonth && fromYear) {\n        startMonth = dateLib.newDate(fromYear, 0, 1);\n    }\n    if (!endMonth && toMonth) {\n        endMonth = toMonth;\n    }\n    if (!endMonth && toYear) {\n        endMonth = newDate(toYear, 11, 31);\n    }\n    const hasYearDropdown = props.captionLayout === \"dropdown\" ||\n        props.captionLayout === \"dropdown-years\";\n    if (startMonth) {\n        startMonth = startOfMonth(startMonth);\n    }\n    else if (fromYear) {\n        startMonth = newDate(fromYear, 0, 1);\n    }\n    else if (!startMonth && hasYearDropdown) {\n        startMonth = startOfYear(addYears(props.today ?? today(), -100));\n    }\n    if (endMonth) {\n        endMonth = endOfMonth(endMonth);\n    }\n    else if (toYear) {\n        endMonth = newDate(toYear, 11, 31);\n    }\n    else if (!endMonth && hasYearDropdown) {\n        endMonth = endOfYear(props.today ?? today());\n    }\n    return [\n        startMonth ? startOfDay(startMonth) : startMonth,\n        endMonth ? startOfDay(endMonth) : endMonth,\n    ];\n}\n","/**\n * Returns the next month the user can navigate to, based on the given options.\n *\n * The next month is not always the next calendar month:\n *\n * - If it is after the `calendarEndMonth`, it returns `undefined`.\n * - If paged navigation is enabled, it skips forward by the number of displayed\n *   months.\n *\n * @param firstDisplayedMonth The first month currently displayed in the\n *   calendar.\n * @param calendarEndMonth The latest month the user can navigate to.\n * @param options Navigation options, including `numberOfMonths` and\n *   `pagedNavigation`.\n * @param dateLib The date library to use for date manipulation.\n * @returns The next month, or `undefined` if navigation is not possible.\n */\nexport function getNextMonth(firstDisplayedMonth, calendarEndMonth, options, dateLib) {\n    if (options.disableNavigation) {\n        return undefined;\n    }\n    const { pagedNavigation, numberOfMonths = 1 } = options;\n    const { startOfMonth, addMonths, differenceInCalendarMonths } = dateLib;\n    const offset = pagedNavigation ? numberOfMonths : 1;\n    const month = startOfMonth(firstDisplayedMonth);\n    if (!calendarEndMonth) {\n        return addMonths(month, offset);\n    }\n    const monthsDiff = differenceInCalendarMonths(calendarEndMonth, firstDisplayedMonth);\n    if (monthsDiff < numberOfMonths) {\n        return undefined;\n    }\n    return addMonths(month, offset);\n}\n","/**\n * Returns the previous month the user can navigate to, based on the given\n * options.\n *\n * The previous month is not always the previous calendar month:\n *\n * - If it is before the `calendarStartMonth`, it returns `undefined`.\n * - If paged navigation is enabled, it skips back by the number of displayed\n *   months.\n *\n * @param firstDisplayedMonth The first month currently displayed in the\n *   calendar.\n * @param calendarStartMonth The earliest month the user can navigate to.\n * @param options Navigation options, including `numberOfMonths` and\n *   `pagedNavigation`.\n * @param dateLib The date library to use for date manipulation.\n * @returns The previous month, or `undefined` if navigation is not possible.\n */\nexport function getPreviousMonth(firstDisplayedMonth, calendarStartMonth, options, dateLib) {\n    if (options.disableNavigation) {\n        return undefined;\n    }\n    const { pagedNavigation, numberOfMonths } = options;\n    const { startOfMonth, addMonths, differenceInCalendarMonths } = dateLib;\n    const offset = pagedNavigation ? (numberOfMonths ?? 1) : 1;\n    const month = startOfMonth(firstDisplayedMonth);\n    if (!calendarStartMonth) {\n        return addMonths(month, -offset);\n    }\n    const monthsDiff = differenceInCalendarMonths(month, calendarStartMonth);\n    if (monthsDiff <= 0) {\n        return undefined;\n    }\n    return addMonths(month, -offset);\n}\n","/**\n * Returns an array of calendar weeks from an array of calendar months.\n *\n * @param months The array of calendar months.\n * @returns An array of calendar weeks.\n */\nexport function getWeeks(months) {\n    const initialWeeks = [];\n    return months.reduce((weeks, month) => {\n        return weeks.concat(month.weeks.slice());\n    }, initialWeeks.slice());\n}\n","import { useState } from \"react\";\n/**\n * A custom hook for managing both controlled and uncontrolled component states.\n *\n * This hook allows a component to support both controlled and uncontrolled\n * states by determining whether the `controlledValue` is provided. If it is\n * undefined, the hook falls back to using the internal state.\n *\n * @example\n *   // Uncontrolled usage\n *   const [value, setValue] = useControlledValue(0, undefined);\n *\n *   // Controlled usage\n *   const [value, setValue] = useControlledValue(0, props.value);\n *\n * @template T - The type of the value.\n * @param defaultValue The initial value for the uncontrolled state.\n * @param controlledValue The value for the controlled state. If undefined, the\n *   component will use the uncontrolled state.\n * @returns A tuple where the first element is the current value (either\n *   controlled or uncontrolled) and the second element is a setter function to\n *   update the value.\n */\nexport function useControlledValue(defaultValue, controlledValue) {\n    const [uncontrolledValue, setValue] = useState(defaultValue);\n    const value = controlledValue === undefined ? uncontrolledValue : controlledValue;\n    return [value, setValue];\n}\n","import { useEffect, useMemo } from \"react\";\nimport { getDates } from \"./helpers/getDates.js\";\nimport { getDays } from \"./helpers/getDays.js\";\nimport { getDisplayMonths } from \"./helpers/getDisplayMonths.js\";\nimport { getInitialMonth } from \"./helpers/getInitialMonth.js\";\nimport { getMonths } from \"./helpers/getMonths.js\";\nimport { getNavMonths } from \"./helpers/getNavMonth.js\";\nimport { getNextMonth } from \"./helpers/getNextMonth.js\";\nimport { getPreviousMonth } from \"./helpers/getPreviousMonth.js\";\nimport { getWeeks } from \"./helpers/getWeeks.js\";\nimport { useControlledValue } from \"./helpers/useControlledValue.js\";\n/**\n * Provides the calendar object to work with the calendar in custom components.\n *\n * @private\n * @param props - The DayPicker props related to calendar configuration.\n * @param dateLib - The date utility library instance.\n * @returns The calendar object containing displayed days, weeks, months, and\n *   navigation methods.\n */\nexport function useCalendar(props, dateLib) {\n    const [navStart, navEnd] = getNavMonths(props, dateLib);\n    const { startOfMonth, endOfMonth } = dateLib;\n    const initialMonth = getInitialMonth(props, navStart, navEnd, dateLib);\n    const [firstMonth, setFirstMonth] = useControlledValue(initialMonth, \n    // initialMonth is always computed from props.month if provided\n    props.month ? initialMonth : undefined);\n    // biome-ignore lint/correctness/useExhaustiveDependencies: change the initial month when the time zone changes.\n    useEffect(() => {\n        const newInitialMonth = getInitialMonth(props, navStart, navEnd, dateLib);\n        setFirstMonth(newInitialMonth);\n    }, [props.timeZone]);\n    /** The months displayed in the calendar. */\n    // biome-ignore lint/correctness/useExhaustiveDependencies: We want to recompute only when specific props change.\n    const { months, weeks, days, previousMonth, nextMonth } = useMemo(() => {\n        const displayMonths = getDisplayMonths(firstMonth, navEnd, { numberOfMonths: props.numberOfMonths }, dateLib);\n        const dates = getDates(displayMonths, props.endMonth ? endOfMonth(props.endMonth) : undefined, {\n            ISOWeek: props.ISOWeek,\n            fixedWeeks: props.fixedWeeks,\n            broadcastCalendar: props.broadcastCalendar,\n        }, dateLib);\n        const months = getMonths(displayMonths, dates, {\n            broadcastCalendar: props.broadcastCalendar,\n            fixedWeeks: props.fixedWeeks,\n            ISOWeek: props.ISOWeek,\n            reverseMonths: props.reverseMonths,\n        }, dateLib);\n        const weeks = getWeeks(months);\n        const days = getDays(months);\n        const previousMonth = getPreviousMonth(firstMonth, navStart, props, dateLib);\n        const nextMonth = getNextMonth(firstMonth, navEnd, props, dateLib);\n        return {\n            months,\n            weeks,\n            days,\n            previousMonth,\n            nextMonth,\n        };\n    }, [\n        dateLib,\n        firstMonth.getTime(),\n        navEnd?.getTime(),\n        navStart?.getTime(),\n        props.disableNavigation,\n        props.broadcastCalendar,\n        props.endMonth?.getTime(),\n        props.fixedWeeks,\n        props.ISOWeek,\n        props.numberOfMonths,\n        props.pagedNavigation,\n        props.reverseMonths,\n    ]);\n    const { disableNavigation, onMonthChange } = props;\n    const isDayInCalendar = (day) => weeks.some((week) => week.days.some((d) => d.isEqualTo(day)));\n    const goToMonth = (date) => {\n        if (disableNavigation) {\n            return;\n        }\n        let newMonth = startOfMonth(date);\n        // if month is before start, use the first month instead\n        if (navStart && newMonth < startOfMonth(navStart)) {\n            newMonth = startOfMonth(navStart);\n        }\n        // if month is after endMonth, use the last month instead\n        if (navEnd && newMonth > startOfMonth(navEnd)) {\n            newMonth = startOfMonth(navEnd);\n        }\n        setFirstMonth(newMonth);\n        onMonthChange?.(newMonth);\n    };\n    const goToDay = (day) => {\n        // is this check necessary?\n        if (isDayInCalendar(day)) {\n            return;\n        }\n        goToMonth(day.date);\n    };\n    const calendar = {\n        months,\n        weeks,\n        days,\n        navStart,\n        navEnd,\n        previousMonth,\n        nextMonth,\n        goToMonth,\n        goToDay,\n    };\n    return calendar;\n}\n","import { DayFlag } from \"../UI.js\";\nvar FocusTargetPriority;\n(function (FocusTargetPriority) {\n    FocusTargetPriority[FocusTargetPriority[\"Today\"] = 0] = \"Today\";\n    FocusTargetPriority[FocusTargetPriority[\"Selected\"] = 1] = \"Selected\";\n    FocusTargetPriority[FocusTargetPriority[\"LastFocused\"] = 2] = \"LastFocused\";\n    FocusTargetPriority[FocusTargetPriority[\"FocusedModifier\"] = 3] = \"FocusedModifier\";\n})(FocusTargetPriority || (FocusTargetPriority = {}));\n/**\n * Determines if a day is focusable based on its modifiers.\n *\n * A day is considered focusable if it is not disabled, hidden, or outside the\n * displayed month.\n *\n * @param modifiers The modifiers applied to the day.\n * @returns `true` if the day is focusable, otherwise `false`.\n */\nfunction isFocusableDay(modifiers) {\n    return (!modifiers[DayFlag.disabled] &&\n        !modifiers[DayFlag.hidden] &&\n        !modifiers[DayFlag.outside]);\n}\n/**\n * Calculates the focus target day based on priority.\n *\n * This function determines the day that should receive focus in the calendar,\n * prioritizing days with specific modifiers (e.g., \"focused\", \"today\") or\n * selection states.\n *\n * @param days The array of `CalendarDay` objects to evaluate.\n * @param getModifiers A function to retrieve the modifiers for a given day.\n * @param isSelected A function to determine if a day is selected.\n * @param lastFocused The last focused day, if any.\n * @returns The `CalendarDay` that should receive focus, or `undefined` if no\n *   focusable day is found.\n */\nexport function calculateFocusTarget(days, getModifiers, isSelected, lastFocused) {\n    let focusTarget;\n    let foundFocusTargetPriority = -1;\n    for (const day of days) {\n        const modifiers = getModifiers(day);\n        if (isFocusableDay(modifiers)) {\n            if (modifiers[DayFlag.focused] &&\n                foundFocusTargetPriority < FocusTargetPriority.FocusedModifier) {\n                focusTarget = day;\n                foundFocusTargetPriority = FocusTargetPriority.FocusedModifier;\n            }\n            else if (lastFocused?.isEqualTo(day) &&\n                foundFocusTargetPriority < FocusTargetPriority.LastFocused) {\n                focusTarget = day;\n                foundFocusTargetPriority = FocusTargetPriority.LastFocused;\n            }\n            else if (isSelected(day.date) &&\n                foundFocusTargetPriority < FocusTargetPriority.Selected) {\n                focusTarget = day;\n                foundFocusTargetPriority = FocusTargetPriority.Selected;\n            }\n            else if (modifiers[DayFlag.today] &&\n                foundFocusTargetPriority < FocusTargetPriority.Today) {\n                focusTarget = day;\n                foundFocusTargetPriority = FocusTargetPriority.Today;\n            }\n        }\n    }\n    if (!focusTarget) {\n        // Return the first day that is focusable\n        focusTarget = days.find((day) => isFocusableDay(getModifiers(day)));\n    }\n    return focusTarget;\n}\n","/**\n * Calculates the next date that should be focused in the calendar.\n *\n * This function determines the next focusable date based on the movement\n * direction, constraints, and calendar configuration.\n *\n * @param moveBy The unit of movement (e.g., \"day\", \"week\").\n * @param moveDir The direction of movement (\"before\" or \"after\").\n * @param refDate The reference date from which to calculate the next focusable\n *   date.\n * @param navStart The earliest date the user can navigate to.\n * @param navEnd The latest date the user can navigate to.\n * @param props The DayPicker props, including calendar configuration options.\n * @param dateLib The date library to use for date manipulation.\n * @returns The next focusable date.\n */\nexport function getFocusableDate(moveBy, moveDir, refDate, navStart, navEnd, props, dateLib) {\n    const { ISOWeek, broadcastCalendar } = props;\n    const { addDays, addMonths, addWeeks, addYears, endOfBroadcastWeek, endOfISOWeek, endOfWeek, max, min, startOfBroadcastWeek, startOfISOWeek, startOfWeek, } = dateLib;\n    const moveFns = {\n        day: addDays,\n        week: addWeeks,\n        month: addMonths,\n        year: addYears,\n        startOfWeek: (date) => broadcastCalendar\n            ? startOfBroadcastWeek(date, dateLib)\n            : ISOWeek\n                ? startOfISOWeek(date)\n                : startOfWeek(date),\n        endOfWeek: (date) => broadcastCalendar\n            ? endOfBroadcastWeek(date)\n            : ISOWeek\n                ? endOfISOWeek(date)\n                : endOfWeek(date),\n    };\n    let focusableDate = moveFns[moveBy](refDate, moveDir === \"after\" ? 1 : -1);\n    if (moveDir === \"before\" && navStart) {\n        focusableDate = max([navStart, focusableDate]);\n    }\n    else if (moveDir === \"after\" && navEnd) {\n        focusableDate = min([navEnd, focusableDate]);\n    }\n    return focusableDate;\n}\n","import { CalendarDay } from \"../classes/index.js\";\nimport { dateMatchModifiers } from \"../utils/dateMatchModifiers.js\";\nimport { getFocusableDate } from \"./getFocusableDate.js\";\n/**\n * Determines the next focusable day in the calendar.\n *\n * This function recursively calculates the next focusable day based on the\n * movement direction and modifiers applied to the days.\n *\n * @param moveBy The unit of movement (e.g., \"day\", \"week\").\n * @param moveDir The direction of movement (\"before\" or \"after\").\n * @param refDay The currently focused day.\n * @param calendarStartMonth The earliest month the user can navigate to.\n * @param calendarEndMonth The latest month the user can navigate to.\n * @param props The DayPicker props, including modifiers and configuration\n *   options.\n * @param dateLib The date library to use for date manipulation.\n * @param attempt The current recursion attempt (used to limit recursion depth).\n * @returns The next focusable day, or `undefined` if no focusable day is found.\n */\nexport function getNextFocus(moveBy, moveDir, refDay, calendarStartMonth, calendarEndMonth, props, dateLib, attempt = 0) {\n    if (attempt > 365) {\n        // Limit the recursion to 365 attempts\n        return undefined;\n    }\n    const focusableDate = getFocusableDate(moveBy, moveDir, refDay.date, calendarStartMonth, calendarEndMonth, props, dateLib);\n    const isDisabled = Boolean(props.disabled &&\n        dateMatchModifiers(focusableDate, props.disabled, dateLib));\n    const isHidden = Boolean(props.hidden && dateMatchModifiers(focusableDate, props.hidden, dateLib));\n    const targetMonth = focusableDate;\n    const focusDay = new CalendarDay(focusableDate, targetMonth, dateLib);\n    if (!isDisabled && !isHidden) {\n        return focusDay;\n    }\n    // Recursively attempt to find the next focusable date\n    return getNextFocus(moveBy, moveDir, focusDay, calendarStartMonth, calendarEndMonth, props, dateLib, attempt + 1);\n}\n","import { useState } from \"react\";\nimport { calculateFocusTarget } from \"./helpers/calculateFocusTarget.js\";\nimport { getNextFocus } from \"./helpers/getNextFocus.js\";\n/**\n * Manages focus behavior for the DayPicker component, including setting,\n * moving, and blurring focus on calendar days.\n *\n * @template T - The type of DayPicker props.\n * @param props - The DayPicker props.\n * @param calendar - The calendar object containing the displayed days and\n *   months.\n * @param getModifiers - A function to retrieve modifiers for a given day.\n * @param isSelected - A function to check if a date is selected.\n * @param dateLib - The date utility library instance.\n * @returns An object containing focus-related methods and the currently focused\n *   day.\n */\nexport function useFocus(props, calendar, getModifiers, isSelected, dateLib) {\n    const { autoFocus } = props;\n    const [lastFocused, setLastFocused] = useState();\n    const focusTarget = calculateFocusTarget(calendar.days, getModifiers, isSelected || (() => false), lastFocused);\n    const [focusedDay, setFocused] = useState(autoFocus ? focusTarget : undefined);\n    const blur = () => {\n        setLastFocused(focusedDay);\n        setFocused(undefined);\n    };\n    const moveFocus = (moveBy, moveDir) => {\n        if (!focusedDay)\n            return;\n        const nextFocus = getNextFocus(moveBy, moveDir, focusedDay, calendar.navStart, calendar.navEnd, props, dateLib);\n        if (!nextFocus)\n            return;\n        if (props.disableNavigation) {\n            const isNextInCalendar = calendar.days.some((day) => day.isEqualTo(nextFocus));\n            if (!isNextInCalendar) {\n                return;\n            }\n        }\n        calendar.goToDay(nextFocus);\n        setFocused(nextFocus);\n    };\n    const isFocusTarget = (day) => {\n        return Boolean(focusTarget?.isEqualTo(day));\n    };\n    const useFocus = {\n        isFocusTarget,\n        setFocused,\n        focused: focusedDay,\n        blur,\n        moveFocus,\n    };\n    return useFocus;\n}\n","import { useControlledValue } from \"../helpers/useControlledValue.js\";\n/**\n * Hook to manage multiple-date selection in the DayPicker component.\n *\n * @template T - The type of DayPicker props.\n * @param props - The DayPicker props.\n * @param dateLib - The date utility library instance.\n * @returns An object containing the selected dates, a function to select dates,\n *   and a function to check if a date is selected.\n */\nexport function useMulti(props, dateLib) {\n    const { selected: initiallySelected, required, onSelect, } = props;\n    const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : undefined);\n    const selected = !onSelect ? internallySelected : initiallySelected;\n    const { isSameDay } = dateLib;\n    const isSelected = (date) => {\n        return selected?.some((d) => isSameDay(d, date)) ?? false;\n    };\n    const { min, max } = props;\n    const select = (triggerDate, modifiers, e) => {\n        let newDates = [...(selected ?? [])];\n        if (isSelected(triggerDate)) {\n            if (selected?.length === min) {\n                // Min value reached, do nothing\n                return;\n            }\n            if (required && selected?.length === 1) {\n                // Required value already selected do nothing\n                return;\n            }\n            newDates = selected?.filter((d) => !isSameDay(d, triggerDate));\n        }\n        else {\n            if (selected?.length === max) {\n                // Max value reached, reset the selection to date\n                newDates = [triggerDate];\n            }\n            else {\n                // Add the date to the selection\n                newDates = [...newDates, triggerDate];\n            }\n        }\n        if (!onSelect) {\n            setSelected(newDates);\n        }\n        onSelect?.(newDates, triggerDate, modifiers, e);\n        return newDates;\n    };\n    return {\n        selected,\n        select,\n        isSelected,\n    };\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\n/**\n * Adds a date to an existing range, considering constraints like minimum and\n * maximum range size.\n *\n * @param date - The date to add to the range.\n * @param initialRange - The initial range to which the date will be added.\n * @param min - The minimum number of days in the range.\n * @param max - The maximum number of days in the range.\n * @param required - Whether the range must always include at least one date.\n * @param dateLib - The date utility library instance.\n * @returns The updated date range, or `undefined` if the range is cleared.\n * @group Utilities\n */\nexport function addToRange(date, initialRange, min = 0, max = 0, required = false, dateLib = defaultDateLib) {\n    const { from, to } = initialRange || {};\n    const { isSameDay, isAfter, isBefore } = dateLib;\n    let range;\n    if (!from && !to) {\n        // the range is empty, add the date\n        range = { from: date, to: min > 0 ? undefined : date };\n    }\n    else if (from && !to) {\n        // adding date to an incomplete range\n        if (isSameDay(from, date)) {\n            // adding a date equal to the start of the range\n            if (min === 0) {\n                range = { from, to: date };\n            }\n            else if (required) {\n                range = { from, to: undefined };\n            }\n            else {\n                range = undefined;\n            }\n        }\n        else if (isBefore(date, from)) {\n            // adding a date before the start of the range\n            range = { from: date, to: from };\n        }\n        else {\n            // adding a date after the start of the range\n            range = { from, to: date };\n        }\n    }\n    else if (from && to) {\n        // adding date to a complete range\n        if (isSameDay(from, date) && isSameDay(to, date)) {\n            // adding a date that is equal to both start and end of the range\n            if (required) {\n                range = { from, to };\n            }\n            else {\n                range = undefined;\n            }\n        }\n        else if (isSameDay(from, date)) {\n            // adding a date equal to the the start of the range\n            range = { from, to: min > 0 ? undefined : date };\n        }\n        else if (isSameDay(to, date)) {\n            // adding a dare equal to the end of the range\n            range = { from: date, to: min > 0 ? undefined : date };\n        }\n        else if (isBefore(date, from)) {\n            // adding a date before the start of the range\n            range = { from: date, to: to };\n        }\n        else if (isAfter(date, from)) {\n            // adding a date after the start of the range\n            range = { from, to: date };\n        }\n        else if (isAfter(date, to)) {\n            // adding a date after the end of the range\n            range = { from, to: date };\n        }\n        else {\n            throw new Error(\"Invalid range\");\n        }\n    }\n    // check for min / max\n    if (range?.from && range?.to) {\n        const diff = dateLib.differenceInCalendarDays(range.to, range.from);\n        if (max > 0 && diff > max) {\n            range = { from: date, to: undefined };\n        }\n        else if (min > 1 && diff < min) {\n            range = { from: date, to: undefined };\n        }\n    }\n    return range;\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\n/**\n * Checks if a date range contains one or more specified days of the week.\n *\n * @since 9.2.2\n * @param range - The date range to check.\n * @param dayOfWeek - The day(s) of the week to check for (`0-6`, where `0` is\n *   Sunday).\n * @param dateLib - The date utility library instance.\n * @returns `true` if the range contains the specified day(s) of the week,\n *   otherwise `false`.\n * @group Utilities\n */\nexport function rangeContainsDayOfWeek(range, dayOfWeek, dateLib = defaultDateLib) {\n    const dayOfWeekArr = !Array.isArray(dayOfWeek) ? [dayOfWeek] : dayOfWeek;\n    let date = range.from;\n    const totalDays = dateLib.differenceInCalendarDays(range.to, range.from);\n    // iterate at maximum one week or the total days if the range is shorter than one week\n    const totalDaysLimit = Math.min(totalDays, 6);\n    for (let i = 0; i <= totalDaysLimit; i++) {\n        if (dayOfWeekArr.includes(date.getDay())) {\n            return true;\n        }\n        date = dateLib.addDays(date, 1);\n    }\n    return false;\n}\n","import { defaultDateLib } from \"../classes/index.js\";\nimport { rangeIncludesDate } from \"./rangeIncludesDate.js\";\n/**\n * Determines if two date ranges overlap.\n *\n * @since 9.2.2\n * @param rangeLeft - The first date range.\n * @param rangeRight - The second date range.\n * @param dateLib - The date utility library instance.\n * @returns `true` if the ranges overlap, otherwise `false`.\n * @group Utilities\n */\nexport function rangeOverlaps(rangeLeft, rangeRight, dateLib = defaultDateLib) {\n    return (rangeIncludesDate(rangeLeft, rangeRight.from, false, dateLib) ||\n        rangeIncludesDate(rangeLeft, rangeRight.to, false, dateLib) ||\n        rangeIncludesDate(rangeRight, rangeLeft.from, false, dateLib) ||\n        rangeIncludesDate(rangeRight, rangeLeft.to, false, dateLib));\n}\n","import { defaultDateLib } from \"../classes/DateLib.js\";\nimport { dateMatchModifiers } from \"./dateMatchModifiers.js\";\nimport { rangeContainsDayOfWeek } from \"./rangeContainsDayOfWeek.js\";\nimport { rangeIncludesDate } from \"./rangeIncludesDate.js\";\nimport { rangeOverlaps } from \"./rangeOverlaps.js\";\nimport { isDateAfterType, isDateBeforeType, isDateInterval, isDateRange, isDatesArray, isDayOfWeekType, } from \"./typeguards.js\";\n/**\n * Checks if a date range contains dates that match the given modifiers.\n *\n * @since 9.2.2\n * @param range - The date range to check.\n * @param modifiers - The modifiers to match against.\n * @param dateLib - The date utility library instance.\n * @returns `true` if the range contains matching dates, otherwise `false`.\n * @group Utilities\n */\nexport function rangeContainsModifiers(range, modifiers, dateLib = defaultDateLib) {\n    const matchers = Array.isArray(modifiers) ? modifiers : [modifiers];\n    // Defer function matchers evaluation as they are the least performant.\n    const nonFunctionMatchers = matchers.filter((matcher) => typeof matcher !== \"function\");\n    const nonFunctionMatchersResult = nonFunctionMatchers.some((matcher) => {\n        if (typeof matcher === \"boolean\")\n            return matcher;\n        if (dateLib.isDate(matcher)) {\n            return rangeIncludesDate(range, matcher, false, dateLib);\n        }\n        if (isDatesArray(matcher, dateLib)) {\n            return matcher.some((date) => rangeIncludesDate(range, date, false, dateLib));\n        }\n        if (isDateRange(matcher)) {\n            if (matcher.from && matcher.to) {\n                return rangeOverlaps(range, { from: matcher.from, to: matcher.to }, dateLib);\n            }\n            return false;\n        }\n        if (isDayOfWeekType(matcher)) {\n            return rangeContainsDayOfWeek(range, matcher.dayOfWeek, dateLib);\n        }\n        if (isDateInterval(matcher)) {\n            const isClosedInterval = dateLib.isAfter(matcher.before, matcher.after);\n            if (isClosedInterval) {\n                return rangeOverlaps(range, {\n                    from: dateLib.addDays(matcher.after, 1),\n                    to: dateLib.addDays(matcher.before, -1),\n                }, dateLib);\n            }\n            return (dateMatchModifiers(range.from, matcher, dateLib) ||\n                dateMatchModifiers(range.to, matcher, dateLib));\n        }\n        if (isDateAfterType(matcher) || isDateBeforeType(matcher)) {\n            return (dateMatchModifiers(range.from, matcher, dateLib) ||\n                dateMatchModifiers(range.to, matcher, dateLib));\n        }\n        return false;\n    });\n    if (nonFunctionMatchersResult) {\n        return true;\n    }\n    const functionMatchers = matchers.filter((matcher) => typeof matcher === \"function\");\n    if (functionMatchers.length) {\n        let date = range.from;\n        const totalDays = dateLib.differenceInCalendarDays(range.to, range.from);\n        for (let i = 0; i <= totalDays; i++) {\n            if (functionMatchers.some((matcher) => matcher(date))) {\n                return true;\n            }\n            date = dateLib.addDays(date, 1);\n        }\n    }\n    return false;\n}\n","import { useControlledValue } from \"../helpers/useControlledValue.js\";\nimport { addToRange, rangeContainsModifiers } from \"../utils/index.js\";\nimport { rangeIncludesDate } from \"../utils/rangeIncludesDate.js\";\n/**\n * Hook to manage range selection in the DayPicker component.\n *\n * @template T - The type of DayPicker props.\n * @param props - The DayPicker props.\n * @param dateLib - The date utility library instance.\n * @returns An object containing the selected range, a function to select a\n *   range, and a function to check if a date is within the range.\n */\nexport function useRange(props, dateLib) {\n    const { disabled, excludeDisabled, selected: initiallySelected, required, onSelect, } = props;\n    const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : undefined);\n    const selected = !onSelect ? internallySelected : initiallySelected;\n    const isSelected = (date) => selected && rangeIncludesDate(selected, date, false, dateLib);\n    const select = (triggerDate, modifiers, e) => {\n        const { min, max } = props;\n        const newRange = triggerDate\n            ? addToRange(triggerDate, selected, min, max, required, dateLib)\n            : undefined;\n        if (excludeDisabled && disabled && newRange?.from && newRange.to) {\n            if (rangeContainsModifiers({ from: newRange.from, to: newRange.to }, disabled, dateLib)) {\n                // if a disabled days is found, the range is reset\n                newRange.from = triggerDate;\n                newRange.to = undefined;\n            }\n        }\n        if (!onSelect) {\n            setSelected(newRange);\n        }\n        onSelect?.(newRange, triggerDate, modifiers, e);\n        return newRange;\n    };\n    return {\n        selected,\n        select,\n        isSelected,\n    };\n}\n","import { useControlledValue } from \"../helpers/useControlledValue.js\";\n/**\n * Hook to manage single-date selection in the DayPicker component.\n *\n * @template T - The type of DayPicker props.\n * @param props - The DayPicker props.\n * @param dateLib - The date utility library instance.\n * @returns An object containing the selected date, a function to select a date,\n *   and a function to check if a date is selected.\n */\nexport function useSingle(props, dateLib) {\n    const { selected: initiallySelected, required, onSelect, } = props;\n    const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : undefined);\n    const selected = !onSelect ? internallySelected : initiallySelected;\n    const { isSameDay } = dateLib;\n    const isSelected = (compareDate) => {\n        return selected ? isSameDay(selected, compareDate) : false;\n    };\n    const select = (triggerDate, modifiers, e) => {\n        let newDate = triggerDate;\n        if (!required && selected && selected && isSameDay(triggerDate, selected)) {\n            // If the date is the same, clear the selection.\n            newDate = undefined;\n        }\n        if (!onSelect) {\n            setSelected(newDate);\n        }\n        if (required) {\n            onSelect?.(newDate, triggerDate, modifiers, e);\n        }\n        else {\n            onSelect?.(newDate, triggerDate, modifiers, e);\n        }\n        return newDate;\n    };\n    return {\n        selected,\n        select,\n        isSelected,\n    };\n}\n","import { useMulti } from \"./selection/useMulti.js\";\nimport { useRange } from \"./selection/useRange.js\";\nimport { useSingle } from \"./selection/useSingle.js\";\n/**\n * Determines the appropriate selection hook to use based on the selection mode\n * and returns the corresponding selection object.\n *\n * @template T - The type of DayPicker props.\n * @param props - The DayPicker props.\n * @param dateLib - The date utility library instance.\n * @returns The selection object for the specified mode, or `undefined` if no\n *   mode is set.\n */\nexport function useSelection(props, dateLib) {\n    const single = useSingle(props, dateLib);\n    const multi = useMulti(props, dateLib);\n    const range = useRange(props, dateLib);\n    switch (props.mode) {\n        case \"single\":\n            return single;\n        case \"multiple\":\n            return multi;\n        case \"range\":\n            return range;\n        default:\n            return undefined;\n    }\n}\n","import { TZDate } from \"@date-fns/tz\";\n/**\n * Convert a {@link Date} or {@link TZDate} instance to the given time zone.\n * Reuses the same instance when it is already a {@link TZDate} using the target\n * time zone to avoid extra allocations.\n */\nexport function toTimeZone(date, timeZone) {\n    if (date instanceof TZDate && date.timeZone === timeZone) {\n        return date;\n    }\n    return new TZDate(date, timeZone);\n}\n","import { toTimeZone } from \"./toTimeZone.js\";\nimport { isDateAfterType, isDateBeforeType, isDateInterval, isDateRange, } from \"./typeguards.js\";\nfunction convertMatcher(matcher, timeZone) {\n    if (typeof matcher === \"boolean\" || typeof matcher === \"function\") {\n        return matcher;\n    }\n    if (matcher instanceof Date) {\n        return toTimeZone(matcher, timeZone);\n    }\n    if (Array.isArray(matcher)) {\n        return matcher.map((value) => value instanceof Date ? toTimeZone(value, timeZone) : value);\n    }\n    if (isDateRange(matcher)) {\n        return {\n            ...matcher,\n            from: matcher.from ? toTimeZone(matcher.from, timeZone) : matcher.from,\n            to: matcher.to ? toTimeZone(matcher.to, timeZone) : matcher.to,\n        };\n    }\n    if (isDateInterval(matcher)) {\n        return {\n            before: toTimeZone(matcher.before, timeZone),\n            after: toTimeZone(matcher.after, timeZone),\n        };\n    }\n    if (isDateAfterType(matcher)) {\n        return {\n            after: toTimeZone(matcher.after, timeZone),\n        };\n    }\n    if (isDateBeforeType(matcher)) {\n        return {\n            before: toTimeZone(matcher.before, timeZone),\n        };\n    }\n    return matcher;\n}\n/**\n * Convert any {@link Matcher} or array of matchers to the specified time zone.\n *\n * @param matchers - The matcher or matchers to convert.\n * @param timeZone - The target IANA time zone.\n * @returns The converted matcher(s).\n * @group Utilities\n */\nexport function convertMatchersToTimeZone(matchers, timeZone) {\n    if (!matchers) {\n        return matchers;\n    }\n    if (Array.isArray(matchers)) {\n        return matchers.map((matcher) => convertMatcher(matcher, timeZone));\n    }\n    return convertMatcher(matchers, timeZone);\n}\n","import React, { useCallback, useMemo, useRef } from \"react\";\nimport { DateLib, defaultLocale } from \"./classes/DateLib.js\";\nimport { createGetModifiers } from \"./helpers/createGetModifiers.js\";\nimport { getClassNamesForModifiers } from \"./helpers/getClassNamesForModifiers.js\";\nimport { getComponents } from \"./helpers/getComponents.js\";\nimport { getDataAttributes } from \"./helpers/getDataAttributes.js\";\nimport { getDefaultClassNames } from \"./helpers/getDefaultClassNames.js\";\nimport { getFormatters } from \"./helpers/getFormatters.js\";\nimport { getLabels } from \"./helpers/getLabels.js\";\nimport { getMonthOptions } from \"./helpers/getMonthOptions.js\";\nimport { getStyleForModifiers } from \"./helpers/getStyleForModifiers.js\";\nimport { getWeekdays } from \"./helpers/getWeekdays.js\";\nimport { getYearOptions } from \"./helpers/getYearOptions.js\";\nimport { DayFlag, SelectionState, UI } from \"./UI.js\";\nimport { useAnimation } from \"./useAnimation.js\";\nimport { useCalendar } from \"./useCalendar.js\";\nimport { dayPickerContext } from \"./useDayPicker.js\";\nimport { useFocus } from \"./useFocus.js\";\nimport { useSelection } from \"./useSelection.js\";\nimport { convertMatchersToTimeZone } from \"./utils/convertMatchersToTimeZone.js\";\nimport { rangeIncludesDate } from \"./utils/rangeIncludesDate.js\";\nimport { toTimeZone } from \"./utils/toTimeZone.js\";\nimport { isDateRange } from \"./utils/typeguards.js\";\n/**\n * Renders the DayPicker calendar component.\n *\n * @param initialProps - The props for the DayPicker component.\n * @returns The rendered DayPicker component.\n * @group DayPicker\n * @see https://daypicker.dev\n */\nexport function DayPicker(initialProps) {\n    let props = initialProps;\n    const timeZone = props.timeZone;\n    if (timeZone) {\n        props = {\n            ...initialProps,\n            timeZone,\n        };\n        if (props.today) {\n            props.today = toTimeZone(props.today, timeZone);\n        }\n        if (props.month) {\n            props.month = toTimeZone(props.month, timeZone);\n        }\n        if (props.defaultMonth) {\n            props.defaultMonth = toTimeZone(props.defaultMonth, timeZone);\n        }\n        if (props.startMonth) {\n            props.startMonth = toTimeZone(props.startMonth, timeZone);\n        }\n        if (props.endMonth) {\n            props.endMonth = toTimeZone(props.endMonth, timeZone);\n        }\n        if (props.mode === \"single\" && props.selected) {\n            props.selected = toTimeZone(props.selected, timeZone);\n        }\n        else if (props.mode === \"multiple\" && props.selected) {\n            props.selected = props.selected?.map((date) => toTimeZone(date, timeZone));\n        }\n        else if (props.mode === \"range\" && props.selected) {\n            props.selected = {\n                from: props.selected.from\n                    ? toTimeZone(props.selected.from, timeZone)\n                    : props.selected.from,\n                to: props.selected.to\n                    ? toTimeZone(props.selected.to, timeZone)\n                    : props.selected.to,\n            };\n        }\n        if (props.disabled !== undefined) {\n            props.disabled = convertMatchersToTimeZone(props.disabled, timeZone);\n        }\n        if (props.hidden !== undefined) {\n            props.hidden = convertMatchersToTimeZone(props.hidden, timeZone);\n        }\n        if (props.modifiers) {\n            const nextModifiers = {};\n            Object.keys(props.modifiers).forEach((key) => {\n                nextModifiers[key] = convertMatchersToTimeZone(props.modifiers?.[key], timeZone);\n            });\n            props.modifiers = nextModifiers;\n        }\n    }\n    const { components, formatters, labels, dateLib, locale, classNames } = useMemo(() => {\n        const locale = { ...defaultLocale, ...props.locale };\n        const dateLib = new DateLib({\n            locale,\n            weekStartsOn: props.broadcastCalendar ? 1 : props.weekStartsOn,\n            firstWeekContainsDate: props.firstWeekContainsDate,\n            useAdditionalWeekYearTokens: props.useAdditionalWeekYearTokens,\n            useAdditionalDayOfYearTokens: props.useAdditionalDayOfYearTokens,\n            timeZone: props.timeZone,\n            numerals: props.numerals,\n        }, props.dateLib);\n        return {\n            dateLib,\n            components: getComponents(props.components),\n            formatters: getFormatters(props.formatters),\n            labels: getLabels(props.labels, dateLib.options),\n            locale,\n            classNames: { ...getDefaultClassNames(), ...props.classNames },\n        };\n    }, [\n        props.locale,\n        props.broadcastCalendar,\n        props.weekStartsOn,\n        props.firstWeekContainsDate,\n        props.useAdditionalWeekYearTokens,\n        props.useAdditionalDayOfYearTokens,\n        props.timeZone,\n        props.numerals,\n        props.dateLib,\n        props.components,\n        props.formatters,\n        props.labels,\n        props.classNames,\n    ]);\n    if (!props.today) {\n        props = { ...props, today: dateLib.today() };\n    }\n    const { captionLayout, mode, navLayout, numberOfMonths = 1, onDayBlur, onDayClick, onDayFocus, onDayKeyDown, onDayMouseEnter, onDayMouseLeave, onNextClick, onPrevClick, showWeekNumber, styles, } = props;\n    const { formatCaption, formatDay, formatMonthDropdown, formatWeekNumber, formatWeekNumberHeader, formatWeekdayName, formatYearDropdown, } = formatters;\n    const calendar = useCalendar(props, dateLib);\n    const { days, months, navStart, navEnd, previousMonth, nextMonth, goToMonth, } = calendar;\n    const getModifiers = createGetModifiers(days, props, navStart, navEnd, dateLib);\n    const { isSelected, select, selected: selectedValue, } = useSelection(props, dateLib) ?? {};\n    const { blur, focused, isFocusTarget, moveFocus, setFocused } = useFocus(props, calendar, getModifiers, isSelected ?? (() => false), dateLib);\n    const { labelDayButton, labelGridcell, labelGrid, labelMonthDropdown, labelNav, labelPrevious, labelNext, labelWeekday, labelWeekNumber, labelWeekNumberHeader, labelYearDropdown, } = labels;\n    const weekdays = useMemo(() => getWeekdays(dateLib, props.ISOWeek, props.broadcastCalendar, props.today), [dateLib, props.ISOWeek, props.broadcastCalendar, props.today]);\n    const isInteractive = mode !== undefined || onDayClick !== undefined;\n    const handlePreviousClick = useCallback(() => {\n        if (!previousMonth)\n            return;\n        goToMonth(previousMonth);\n        onPrevClick?.(previousMonth);\n    }, [previousMonth, goToMonth, onPrevClick]);\n    const handleNextClick = useCallback(() => {\n        if (!nextMonth)\n            return;\n        goToMonth(nextMonth);\n        onNextClick?.(nextMonth);\n    }, [goToMonth, nextMonth, onNextClick]);\n    const handleDayClick = useCallback((day, m) => (e) => {\n        e.preventDefault();\n        e.stopPropagation();\n        setFocused(day);\n        if (m.disabled) {\n            return;\n        }\n        select?.(day.date, m, e);\n        onDayClick?.(day.date, m, e);\n    }, [select, onDayClick, setFocused]);\n    const handleDayFocus = useCallback((day, m) => (e) => {\n        setFocused(day);\n        onDayFocus?.(day.date, m, e);\n    }, [onDayFocus, setFocused]);\n    const handleDayBlur = useCallback((day, m) => (e) => {\n        blur();\n        onDayBlur?.(day.date, m, e);\n    }, [blur, onDayBlur]);\n    const handleDayKeyDown = useCallback((day, modifiers) => (e) => {\n        const keyMap = {\n            ArrowLeft: [\n                e.shiftKey ? \"month\" : \"day\",\n                props.dir === \"rtl\" ? \"after\" : \"before\",\n            ],\n            ArrowRight: [\n                e.shiftKey ? \"month\" : \"day\",\n                props.dir === \"rtl\" ? \"before\" : \"after\",\n            ],\n            ArrowDown: [e.shiftKey ? \"year\" : \"week\", \"after\"],\n            ArrowUp: [e.shiftKey ? \"year\" : \"week\", \"before\"],\n            PageUp: [e.shiftKey ? \"year\" : \"month\", \"before\"],\n            PageDown: [e.shiftKey ? \"year\" : \"month\", \"after\"],\n            Home: [\"startOfWeek\", \"before\"],\n            End: [\"endOfWeek\", \"after\"],\n        };\n        if (keyMap[e.key]) {\n            e.preventDefault();\n            e.stopPropagation();\n            const [moveBy, moveDir] = keyMap[e.key];\n            moveFocus(moveBy, moveDir);\n        }\n        onDayKeyDown?.(day.date, modifiers, e);\n    }, [moveFocus, onDayKeyDown, props.dir]);\n    const handleDayMouseEnter = useCallback((day, modifiers) => (e) => {\n        onDayMouseEnter?.(day.date, modifiers, e);\n    }, [onDayMouseEnter]);\n    const handleDayMouseLeave = useCallback((day, modifiers) => (e) => {\n        onDayMouseLeave?.(day.date, modifiers, e);\n    }, [onDayMouseLeave]);\n    const handleMonthChange = useCallback((date) => (e) => {\n        const selectedMonth = Number(e.target.value);\n        const month = dateLib.setMonth(dateLib.startOfMonth(date), selectedMonth);\n        goToMonth(month);\n    }, [dateLib, goToMonth]);\n    const handleYearChange = useCallback((date) => (e) => {\n        const selectedYear = Number(e.target.value);\n        const month = dateLib.setYear(dateLib.startOfMonth(date), selectedYear);\n        goToMonth(month);\n    }, [dateLib, goToMonth]);\n    const { className, style } = useMemo(() => ({\n        className: [classNames[UI.Root], props.className]\n            .filter(Boolean)\n            .join(\" \"),\n        style: { ...styles?.[UI.Root], ...props.style },\n    }), [classNames, props.className, props.style, styles]);\n    const dataAttributes = getDataAttributes(props);\n    const rootElRef = useRef(null);\n    useAnimation(rootElRef, Boolean(props.animate), {\n        classNames,\n        months,\n        focused,\n        dateLib,\n    });\n    const contextValue = {\n        dayPickerProps: props,\n        selected: selectedValue,\n        select: select,\n        isSelected,\n        months,\n        nextMonth,\n        previousMonth,\n        goToMonth,\n        getModifiers,\n        components,\n        classNames,\n        styles,\n        labels,\n        formatters,\n    };\n    return (React.createElement(dayPickerContext.Provider, { value: contextValue },\n        React.createElement(components.Root, { rootRef: props.animate ? rootElRef : undefined, className: className, style: style, dir: props.dir, id: props.id, lang: props.lang, nonce: props.nonce, title: props.title, role: props.role, \"aria-label\": props[\"aria-label\"], \"aria-labelledby\": props[\"aria-labelledby\"], ...dataAttributes },\n            React.createElement(components.Months, { className: classNames[UI.Months], style: styles?.[UI.Months] },\n                !props.hideNavigation && !navLayout && (React.createElement(components.Nav, { \"data-animated-nav\": props.animate ? \"true\" : undefined, className: classNames[UI.Nav], style: styles?.[UI.Nav], \"aria-label\": labelNav(), onPreviousClick: handlePreviousClick, onNextClick: handleNextClick, previousMonth: previousMonth, nextMonth: nextMonth })),\n                months.map((calendarMonth, displayIndex) => {\n                    return (React.createElement(components.Month, { \"data-animated-month\": props.animate ? \"true\" : undefined, className: classNames[UI.Month], style: styles?.[UI.Month], \n                        // biome-ignore lint/suspicious/noArrayIndexKey: breaks animation\n                        key: displayIndex, displayIndex: displayIndex, calendarMonth: calendarMonth },\n                        navLayout === \"around\" &&\n                            !props.hideNavigation &&\n                            displayIndex === 0 && (React.createElement(components.PreviousMonthButton, { type: \"button\", className: classNames[UI.PreviousMonthButton], tabIndex: previousMonth ? undefined : -1, \"aria-disabled\": previousMonth ? undefined : true, \"aria-label\": labelPrevious(previousMonth), onClick: handlePreviousClick, \"data-animated-button\": props.animate ? \"true\" : undefined },\n                            React.createElement(components.Chevron, { disabled: previousMonth ? undefined : true, className: classNames[UI.Chevron], orientation: props.dir === \"rtl\" ? \"right\" : \"left\" }))),\n                        React.createElement(components.MonthCaption, { \"data-animated-caption\": props.animate ? \"true\" : undefined, className: classNames[UI.MonthCaption], style: styles?.[UI.MonthCaption], calendarMonth: calendarMonth, displayIndex: displayIndex }, captionLayout?.startsWith(\"dropdown\") ? (React.createElement(components.DropdownNav, { className: classNames[UI.Dropdowns], style: styles?.[UI.Dropdowns] },\n                            (() => {\n                                const monthControl = captionLayout === \"dropdown\" ||\n                                    captionLayout === \"dropdown-months\" ? (React.createElement(components.MonthsDropdown, { key: \"month\", className: classNames[UI.MonthsDropdown], \"aria-label\": labelMonthDropdown(), classNames: classNames, components: components, disabled: Boolean(props.disableNavigation), onChange: handleMonthChange(calendarMonth.date), options: getMonthOptions(calendarMonth.date, navStart, navEnd, formatters, dateLib), style: styles?.[UI.Dropdown], value: dateLib.getMonth(calendarMonth.date) })) : (React.createElement(\"span\", { key: \"month\" }, formatMonthDropdown(calendarMonth.date, dateLib)));\n                                const yearControl = captionLayout === \"dropdown\" ||\n                                    captionLayout === \"dropdown-years\" ? (React.createElement(components.YearsDropdown, { key: \"year\", className: classNames[UI.YearsDropdown], \"aria-label\": labelYearDropdown(dateLib.options), classNames: classNames, components: components, disabled: Boolean(props.disableNavigation), onChange: handleYearChange(calendarMonth.date), options: getYearOptions(navStart, navEnd, formatters, dateLib, Boolean(props.reverseYears)), style: styles?.[UI.Dropdown], value: dateLib.getYear(calendarMonth.date) })) : (React.createElement(\"span\", { key: \"year\" }, formatYearDropdown(calendarMonth.date, dateLib)));\n                                const controls = dateLib.getMonthYearOrder() === \"year-first\"\n                                    ? [yearControl, monthControl]\n                                    : [monthControl, yearControl];\n                                return controls;\n                            })(),\n                            React.createElement(\"span\", { role: \"status\", \"aria-live\": \"polite\", style: {\n                                    border: 0,\n                                    clip: \"rect(0 0 0 0)\",\n                                    height: \"1px\",\n                                    margin: \"-1px\",\n                                    overflow: \"hidden\",\n                                    padding: 0,\n                                    position: \"absolute\",\n                                    width: \"1px\",\n                                    whiteSpace: \"nowrap\",\n                                    wordWrap: \"normal\",\n                                } }, formatCaption(calendarMonth.date, dateLib.options, dateLib)))) : (React.createElement(components.CaptionLabel, { className: classNames[UI.CaptionLabel], role: \"status\", \"aria-live\": \"polite\" }, formatCaption(calendarMonth.date, dateLib.options, dateLib)))),\n                        navLayout === \"around\" &&\n                            !props.hideNavigation &&\n                            displayIndex === numberOfMonths - 1 && (React.createElement(components.NextMonthButton, { type: \"button\", className: classNames[UI.NextMonthButton], tabIndex: nextMonth ? undefined : -1, \"aria-disabled\": nextMonth ? undefined : true, \"aria-label\": labelNext(nextMonth), onClick: handleNextClick, \"data-animated-button\": props.animate ? \"true\" : undefined },\n                            React.createElement(components.Chevron, { disabled: nextMonth ? undefined : true, className: classNames[UI.Chevron], orientation: props.dir === \"rtl\" ? \"left\" : \"right\" }))),\n                        displayIndex === numberOfMonths - 1 &&\n                            navLayout === \"after\" &&\n                            !props.hideNavigation && (React.createElement(components.Nav, { \"data-animated-nav\": props.animate ? \"true\" : undefined, className: classNames[UI.Nav], style: styles?.[UI.Nav], \"aria-label\": labelNav(), onPreviousClick: handlePreviousClick, onNextClick: handleNextClick, previousMonth: previousMonth, nextMonth: nextMonth })),\n                        React.createElement(components.MonthGrid, { role: \"grid\", \"aria-multiselectable\": mode === \"multiple\" || mode === \"range\", \"aria-label\": labelGrid(calendarMonth.date, dateLib.options, dateLib) ||\n                                undefined, className: classNames[UI.MonthGrid], style: styles?.[UI.MonthGrid] },\n                            !props.hideWeekdays && (React.createElement(components.Weekdays, { \"data-animated-weekdays\": props.animate ? \"true\" : undefined, className: classNames[UI.Weekdays], style: styles?.[UI.Weekdays] },\n                                showWeekNumber && (React.createElement(components.WeekNumberHeader, { \"aria-label\": labelWeekNumberHeader(dateLib.options), className: classNames[UI.WeekNumberHeader], style: styles?.[UI.WeekNumberHeader], scope: \"col\" }, formatWeekNumberHeader())),\n                                weekdays.map((weekday) => (React.createElement(components.Weekday, { \"aria-label\": labelWeekday(weekday, dateLib.options, dateLib), className: classNames[UI.Weekday], key: String(weekday), style: styles?.[UI.Weekday], scope: \"col\" }, formatWeekdayName(weekday, dateLib.options, dateLib)))))),\n                            React.createElement(components.Weeks, { \"data-animated-weeks\": props.animate ? \"true\" : undefined, className: classNames[UI.Weeks], style: styles?.[UI.Weeks] }, calendarMonth.weeks.map((week) => {\n                                return (React.createElement(components.Week, { className: classNames[UI.Week], key: week.weekNumber, style: styles?.[UI.Week], week: week },\n                                    showWeekNumber && (React.createElement(components.WeekNumber, { week: week, style: styles?.[UI.WeekNumber], \"aria-label\": labelWeekNumber(week.weekNumber, {\n                                            locale,\n                                        }), className: classNames[UI.WeekNumber], scope: \"row\", role: \"rowheader\" }, formatWeekNumber(week.weekNumber, dateLib))),\n                                    week.days.map((day) => {\n                                        const { date } = day;\n                                        const modifiers = getModifiers(day);\n                                        modifiers[DayFlag.focused] =\n                                            !modifiers.hidden &&\n                                                Boolean(focused?.isEqualTo(day));\n                                        modifiers[SelectionState.selected] =\n                                            isSelected?.(date) || modifiers.selected;\n                                        if (isDateRange(selectedValue)) {\n                                            // add range modifiers\n                                            const { from, to } = selectedValue;\n                                            modifiers[SelectionState.range_start] = Boolean(from && to && dateLib.isSameDay(date, from));\n                                            modifiers[SelectionState.range_end] = Boolean(from && to && dateLib.isSameDay(date, to));\n                                            modifiers[SelectionState.range_middle] =\n                                                rangeIncludesDate(selectedValue, date, true, dateLib);\n                                        }\n                                        const style = getStyleForModifiers(modifiers, styles, props.modifiersStyles);\n                                        const className = getClassNamesForModifiers(modifiers, classNames, props.modifiersClassNames);\n                                        const ariaLabel = !isInteractive && !modifiers.hidden\n                                            ? labelGridcell(date, modifiers, dateLib.options, dateLib)\n                                            : undefined;\n                                        return (React.createElement(components.Day, { key: `${day.isoDate}_${day.displayMonthId}`, day: day, modifiers: modifiers, className: className.join(\" \"), style: style, role: \"gridcell\", \"aria-selected\": modifiers.selected || undefined, \"aria-label\": ariaLabel, \"data-day\": day.isoDate, \"data-month\": day.outside ? day.dateMonthId : undefined, \"data-selected\": modifiers.selected || undefined, \"data-disabled\": modifiers.disabled || undefined, \"data-hidden\": modifiers.hidden || undefined, \"data-outside\": day.outside || undefined, \"data-focused\": modifiers.focused || undefined, \"data-today\": modifiers.today || undefined }, !modifiers.hidden && isInteractive ? (React.createElement(components.DayButton, { className: classNames[UI.DayButton], style: styles?.[UI.DayButton], type: \"button\", day: day, modifiers: modifiers, disabled: (!modifiers.focused &&\n                                                modifiers.disabled) ||\n                                                undefined, \"aria-disabled\": (modifiers.focused &&\n                                                modifiers.disabled) ||\n                                                undefined, tabIndex: isFocusTarget(day) ? 0 : -1, \"aria-label\": labelDayButton(date, modifiers, dateLib.options, dateLib), onClick: handleDayClick(day, modifiers), onBlur: handleDayBlur(day, modifiers), onFocus: handleDayFocus(day, modifiers), onKeyDown: handleDayKeyDown(day, modifiers), onMouseEnter: handleDayMouseEnter(day, modifiers), onMouseLeave: handleDayMouseLeave(day, modifiers) }, formatDay(date, dateLib.options, dateLib))) : (!modifiers.hidden &&\n                                            formatDay(day.date, dateLib.options, dateLib))));\n                                    })));\n                            })))));\n                })),\n            props.footer && (React.createElement(components.Footer, { className: classNames[UI.Footer], style: styles?.[UI.Footer], role: \"status\", \"aria-live\": \"polite\" }, props.footer)))));\n}\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n        var _config_compoundVariants;\n        if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n        const { variants, defaultVariants } = config;\n        const getVariantClassNames = Object.keys(variants).map((variant)=>{\n            const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n            const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n            if (variantProp === null) return null;\n            const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n            return variants[variant][variantKey];\n        });\n        const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n            let [key, value] = param;\n            if (value === undefined) {\n                return acc;\n            }\n            acc[key] = value;\n            return acc;\n        }, {});\n        const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n            let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n            return Object.entries(compoundVariantOptions).every((param)=>{\n                let [key, value] = param;\n                return Array.isArray(value) ? value.includes({\n                    ...defaultVariants,\n                    ...propsWithoutUndefined\n                }[key]) : ({\n                    ...defaultVariants,\n                    ...propsWithoutUndefined\n                })[key] === value;\n            }) ? [\n                ...acc,\n                cvClass,\n                cvClassName\n            ] : acc;\n        }, []);\n        return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n    };\n\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n  \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n        destructive:\n          \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n        outline:\n          \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n        secondary:\n          \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n        ghost:\n          \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n        link: \"text-primary underline-offset-4 hover:underline\",\n      },\n      size: {\n        default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n        sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n        lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n        icon: \"size-9\",\n        \"icon-sm\": \"size-8\",\n        \"icon-lg\": \"size-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nfunction Button({\n  className,\n  variant,\n  size,\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"button\"> &\n  VariantProps<typeof buttonVariants> & {\n    asChild?: boolean\n  }) {\n  const Comp = asChild ? Slot : \"button\"\n\n  return (\n    <Comp\n      data-slot=\"button\"\n      className={cn(buttonVariants({ variant, size, className }))}\n      {...props}\n    />\n  )\n}\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport {\n  ChevronDownIcon,\n  ChevronLeftIcon,\n  ChevronRightIcon,\n} from \"lucide-react\"\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, buttonVariants } from \"@/presets/ui/button\"\n\nfunction Calendar({\n  className,\n  classNames,\n  showOutsideDays = true,\n  captionLayout = \"label\",\n  buttonVariant = \"ghost\",\n  formatters,\n  components,\n  ...props\n}: React.ComponentProps<typeof DayPicker> & {\n  buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n  const defaultClassNames = getDefaultClassNames()\n\n  return (\n    <DayPicker\n      showOutsideDays={showOutsideDays}\n      className={cn(\n        \"bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n        String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n        String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n        className\n      )}\n      captionLayout={captionLayout}\n      formatters={{\n        formatMonthDropdown: (date) =>\n          date.toLocaleString(\"default\", { month: \"short\" }),\n        ...formatters,\n      }}\n      classNames={{\n        root: cn(\"w-fit\", defaultClassNames.root),\n        months: cn(\n          \"flex gap-4 flex-col md:flex-row relative\",\n          defaultClassNames.months\n        ),\n        month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n        nav: cn(\n          \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n          defaultClassNames.nav\n        ),\n        button_previous: cn(\n          buttonVariants({ variant: buttonVariant }),\n          \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n          defaultClassNames.button_previous\n        ),\n        button_next: cn(\n          buttonVariants({ variant: buttonVariant }),\n          \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n          defaultClassNames.button_next\n        ),\n        month_caption: cn(\n          \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n          defaultClassNames.month_caption\n        ),\n        dropdowns: cn(\n          \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n          defaultClassNames.dropdowns\n        ),\n        dropdown_root: cn(\n          \"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md\",\n          defaultClassNames.dropdown_root\n        ),\n        dropdown: cn(\n          \"absolute bg-popover inset-0 opacity-0\",\n          defaultClassNames.dropdown\n        ),\n        caption_label: cn(\n          \"select-none font-medium\",\n          captionLayout === \"label\"\n            ? \"text-sm\"\n            : \"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n          defaultClassNames.caption_label\n        ),\n        table: \"w-full border-collapse\",\n        weekdays: cn(\"flex\", defaultClassNames.weekdays),\n        weekday: cn(\n          \"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none\",\n          defaultClassNames.weekday\n        ),\n        week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n        week_number_header: cn(\n          \"select-none w-(--cell-size)\",\n          defaultClassNames.week_number_header\n        ),\n        week_number: cn(\n          \"text-[0.8rem] select-none text-muted-foreground\",\n          defaultClassNames.week_number\n        ),\n        day: cn(\n          \"relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none\",\n          props.showWeekNumber\n            ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n            : \"[&:first-child[data-selected=true]_button]:rounded-l-md\",\n          defaultClassNames.day\n        ),\n        range_start: cn(\n          \"rounded-l-md bg-accent\",\n          defaultClassNames.range_start\n        ),\n        range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n        range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n        today: cn(\n          \"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none\",\n          defaultClassNames.today\n        ),\n        outside: cn(\n          \"text-muted-foreground aria-selected:text-muted-foreground\",\n          defaultClassNames.outside\n        ),\n        disabled: cn(\n          \"text-muted-foreground opacity-50\",\n          defaultClassNames.disabled\n        ),\n        hidden: cn(\"invisible\", defaultClassNames.hidden),\n        ...classNames,\n      }}\n      components={{\n        Root: ({ className, rootRef, ...props }) => {\n          return (\n            <div\n              data-slot=\"calendar\"\n              ref={rootRef}\n              className={cn(className)}\n              {...props}\n            />\n          )\n        },\n        Chevron: ({ className, orientation, ...props }) => {\n          if (orientation === \"left\") {\n            return (\n              <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\n            )\n          }\n\n          if (orientation === \"right\") {\n            return (\n              <ChevronRightIcon\n                className={cn(\"size-4\", className)}\n                {...props}\n              />\n            )\n          }\n\n          return (\n            <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n          )\n        },\n        DayButton: CalendarDayButton,\n        WeekNumber: ({ children, ...props }) => {\n          return (\n            <td {...props}>\n              <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n                {children}\n              </div>\n            </td>\n          )\n        },\n        ...components,\n      }}\n      {...props}\n    />\n  )\n}\n\nfunction CalendarDayButton({\n  className,\n  day,\n  modifiers,\n  ...props\n}: React.ComponentProps<typeof DayButton>) {\n  const defaultClassNames = getDefaultClassNames()\n\n  const ref = React.useRef<HTMLButtonElement>(null)\n  React.useEffect(() => {\n    if (modifiers.focused) ref.current?.focus()\n  }, [modifiers.focused])\n\n  return (\n    <Button\n      ref={ref}\n      variant=\"ghost\"\n      size=\"icon\"\n      data-day={day.date.toLocaleDateString()}\n      data-selected-single={\n        modifiers.selected &&\n        !modifiers.range_start &&\n        !modifiers.range_end &&\n        !modifiers.range_middle\n      }\n      data-range-start={modifiers.range_start}\n      data-range-end={modifiers.range_end}\n      data-range-middle={modifiers.range_middle}\n      className={cn(\n        \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70\",\n        defaultClassNames.day,\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport { Calendar, CalendarDayButton }\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport {\r\n    Select,\r\n    SelectTrigger,\r\n    SelectValue,\r\n    SelectContent,\r\n    SelectItem,\r\n} from \"@/presets/ui/select\";\r\n\r\nexport interface TimeDropdownsProps {\r\n    /**\r\n     * Current date-time value.\r\n     * Only the time portion will be modified; date part is preserved.\r\n     */\r\n    value: Date | undefined;\r\n\r\n    /**\r\n     * Called whenever any of the time parts change.\r\n     */\r\n    onChange(next: Date | undefined): void;\r\n\r\n    /**\r\n     * Whether to show seconds dropdown.\r\n     * Default: false.\r\n     */\r\n    showSeconds?: boolean;\r\n\r\n    /**\r\n     * Step between minutes in the dropdown.\r\n     * Default: 5.\r\n     */\r\n    minuteStep?: number;\r\n\r\n    /**\r\n     * Step between seconds in the dropdown.\r\n     * Default: 5.\r\n     */\r\n    secondStep?: number;\r\n\r\n    /**\r\n     * If true, show 12-hour clock with AM/PM toggle.\r\n     * If false, show 24-hour clock (00–23).\r\n     * Default: false (24-hour).\r\n     */\r\n    use12Hour?: boolean;\r\n\r\n    /**\r\n     * Optional label to show above or beside the dropdowns.\r\n     */\r\n    label?: React.ReactNode;\r\n\r\n    /**\r\n     * Custom className for the outer wrapper.\r\n     */\r\n    className?: string;\r\n\r\n    /**\r\n     * Custom className for each SelectTrigger (hours/minutes/seconds).\r\n     */\r\n    triggerClassName?: string;\r\n\r\n    /**\r\n     * Compact / normal layout toggle.\r\n     * Just a quick spacing switch for now.\r\n     */\r\n    density?: \"compact\" | \"normal\";\r\n}\r\n\r\nfunction pad2(n: number): string {\r\n    return n.toString().padStart(2, \"0\");\r\n}\r\n\r\nfunction buildMinuteOptions(step: number): string[] {\r\n    const items: string[] = [];\r\n    for (let m = 0; m < 60; m += step) {\r\n        items.push(pad2(m));\r\n    }\r\n    return items;\r\n}\r\n\r\nfunction buildSecondOptions(step: number): string[] {\r\n    const items: string[] = [];\r\n    for (let s = 0; s < 60; s += step) {\r\n        items.push(pad2(s));\r\n    }\r\n    return items;\r\n}\r\n\r\nfunction buildHourOptions24(): string[] {\r\n    const items: string[] = [];\r\n    for (let h = 0; h < 24; h++) {\r\n        items.push(pad2(h));\r\n    }\r\n    return items;\r\n}\r\n\r\nfunction buildHourOptions12(): string[] {\r\n    const items: string[] = [];\r\n    for (let h = 1; h <= 12; h++) {\r\n        items.push(h.toString());\r\n    }\r\n    return items;\r\n}\r\n\r\n/**\r\n * Safely create a new Date instance with updated time parts,\r\n * preserving the original date portion when possible.\r\n */\r\nfunction withTime(\r\n    base: Date | undefined,\r\n    opts: { hours?: number; minutes?: number; seconds?: number },\r\n): Date {\r\n    const src = base ? new Date(base.getTime()) : new Date();\r\n    const h = opts.hours ?? src.getHours();\r\n    const m = opts.minutes ?? src.getMinutes();\r\n    const s = opts.seconds ?? src.getSeconds();\r\n    src.setHours(h, m, s, 0);\r\n    return src;\r\n}\r\n\r\n/**\r\n * Drop-in time dropdown cluster for use in the date popover.\r\n *\r\n * Renders hour / minute (and optionally second) Selects plus\r\n * an AM/PM toggle when `use12Hour` is true.\r\n */\r\nexport const TimeDropdowns: React.FC<TimeDropdownsProps> = (props) => {\r\n    const {\r\n        value,\r\n        onChange,\r\n        showSeconds = false,\r\n        minuteStep = 5,\r\n        secondStep = 5,\r\n        use12Hour = false,\r\n        label,\r\n        className,\r\n        triggerClassName,\r\n        density = \"normal\",\r\n    } = props;\r\n\r\n    const minuteOptions = React.useMemo(\r\n        () => buildMinuteOptions(minuteStep),\r\n        [minuteStep],\r\n    );\r\n    const secondOptions = React.useMemo(\r\n        () => buildSecondOptions(secondStep),\r\n        [secondStep],\r\n    );\r\n\r\n    const hourOptions = React.useMemo(\r\n        () => (use12Hour ? buildHourOptions12() : buildHourOptions24()),\r\n        [use12Hour],\r\n    );\r\n\r\n    // Derive current parts from value.\r\n    let hours24 = value ? value.getHours() : 0;\r\n    let minutes = value ? value.getMinutes() : 0;\r\n    let seconds = value ? value.getSeconds() : 0;\r\n\r\n    let hourDisplay: string;\r\n    let period: \"am\" | \"pm\" | null = null;\r\n\r\n    if (use12Hour) {\r\n        period = hours24 >= 12 ? \"pm\" : \"am\";\r\n        let h12 = hours24 % 12;\r\n        if (h12 === 0) h12 = 12;\r\n        hourDisplay = h12.toString();\r\n    } else {\r\n        hourDisplay = pad2(hours24);\r\n    }\r\n\r\n    const minuteDisplay = pad2(minutes);\r\n    const secondDisplay = pad2(seconds);\r\n\r\n    const baseTriggerClasses = cn(\r\n        \"h-8 w-[4.2rem] px-2 py-0 text-xs\",\r\n        \"whitespace-nowrap\",\r\n        \"border-input bg-background\",\r\n        \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\r\n    );\r\n\r\n    const triggerClasses = cn(\r\n        baseTriggerClasses,\r\n        triggerClassName,\r\n        density === \"compact\" && \"h-7 text-[0.7rem] px-1.5\",\r\n    );\r\n\r\n    const gapClass = density === \"compact\" ? \"gap-1\" : \"gap-2\";\r\n\r\n    const handleHourChange = (hStr: string) => {\r\n        let nextHours24: number;\r\n\r\n        if (use12Hour) {\r\n            const h12 = parseInt(hStr, 10) || 0;\r\n            if (!period) {\r\n                // fallback: assume AM\r\n                nextHours24 = h12 % 12;\r\n            } else {\r\n                if (period === \"am\") {\r\n                    nextHours24 = h12 % 12; // 12am → 0\r\n                } else {\r\n                    nextHours24 = h12 % 12 + 12; // 12pm → 12, 1pm → 13\r\n                }\r\n            }\r\n        } else {\r\n            nextHours24 = parseInt(hStr, 10) || 0;\r\n        }\r\n\r\n        const nextDate = withTime(value, { hours: nextHours24 });\r\n        onChange(nextDate);\r\n    };\r\n\r\n    const handleMinuteChange = (mStr: string) => {\r\n        const m = parseInt(mStr, 10) || 0;\r\n        const nextDate = withTime(value, { minutes: m });\r\n        onChange(nextDate);\r\n    };\r\n\r\n    const handleSecondChange = (sStr: string) => {\r\n        const s = parseInt(sStr, 10) || 0;\r\n        const nextDate = withTime(value, { seconds: s });\r\n        onChange(nextDate);\r\n    };\r\n\r\n    const handlePeriodChange = (p: string) => {\r\n        if (!use12Hour) return;\r\n        const nextPeriod = p === \"pm\" ? \"pm\" : \"am\";\r\n\r\n        // Convert from current hours24 + new period.\r\n        let h12 = hours24 % 12;\r\n        if (h12 === 0) h12 = 12;\r\n\r\n        let nextHours24: number;\r\n        if (nextPeriod === \"am\") {\r\n            nextHours24 = h12 % 12; // 12am → 0\r\n        } else {\r\n            nextHours24 = h12 % 12 + 12; // 12pm → 12, etc.\r\n        }\r\n\r\n        const nextDate = withTime(value, { hours: nextHours24 });\r\n        onChange(nextDate);\r\n    };\r\n\r\n    return (\r\n        <div\r\n            className={cn(\r\n                \"flex w-full flex-col gap-2\",\r\n                density === \"compact\" && \"gap-1\",\r\n                className,\r\n            )}\r\n            data-slot=\"time-dropdowns\"\r\n        >\r\n            {label && (\r\n                <div className=\"text-xs font-medium text-muted-foreground\">\r\n                    {label}\r\n                </div>\r\n            )}\r\n\r\n            <div\r\n                className={cn(\r\n                    \"flex w-full items-center\",\r\n                    gapClass,\r\n                )}\r\n                data-slot=\"time-dropdowns-row\"\r\n            >\r\n                {/* Hour */}\r\n                <Select value={hourDisplay} onValueChange={handleHourChange}>\r\n                    <SelectTrigger\r\n                        className={triggerClasses}\r\n                        data-slot=\"time-hour\"\r\n                    >\r\n                        <SelectValue placeholder=\"HH\" />\r\n                    </SelectTrigger>\r\n                    <SelectContent>\r\n                        {hourOptions.map((h) => (\r\n                            <SelectItem key={h} value={h}>\r\n                                {use12Hour ? h.padStart(2, \" \") : pad2(Number(h))}\r\n                            </SelectItem>\r\n                        ))}\r\n                    </SelectContent>\r\n                </Select>\r\n\r\n                {/* Minute */}\r\n                <Select\r\n                    value={minuteDisplay}\r\n                    onValueChange={handleMinuteChange}\r\n                >\r\n                    <SelectTrigger\r\n                        className={triggerClasses}\r\n                        data-slot=\"time-minute\"\r\n                    >\r\n                        <SelectValue placeholder=\"MM\" />\r\n                    </SelectTrigger>\r\n                    <SelectContent>\r\n                        {minuteOptions.map((m) => (\r\n                            <SelectItem key={m} value={m}>\r\n                                {m}\r\n                            </SelectItem>\r\n                        ))}\r\n                    </SelectContent>\r\n                </Select>\r\n\r\n                {/* Second (optional) */}\r\n                {showSeconds && (\r\n                    <Select\r\n                        value={secondDisplay}\r\n                        onValueChange={handleSecondChange}\r\n                    >\r\n                        <SelectTrigger\r\n                            className={triggerClasses}\r\n                            data-slot=\"time-second\"\r\n                        >\r\n                            <SelectValue placeholder=\"SS\" />\r\n                        </SelectTrigger>\r\n                        <SelectContent>\r\n                            {secondOptions.map((s) => (\r\n                                <SelectItem key={s} value={s}>\r\n                                    {s}\r\n                                </SelectItem>\r\n                            ))}\r\n                        </SelectContent>\r\n                    </Select>\r\n                )}\r\n\r\n                {/* AM/PM (optional) */}\r\n                {use12Hour && (\r\n                    <Select\r\n                        value={period ?? \"am\"}\r\n                        onValueChange={handlePeriodChange}\r\n                    >\r\n                        <SelectTrigger\r\n                            className={cn(\r\n                                triggerClasses,\r\n                                \"w-[3.8rem]\",\r\n                            )}\r\n                            data-slot=\"time-period\"\r\n                        >\r\n                            <SelectValue />\r\n                        </SelectTrigger>\r\n                        <SelectContent>\r\n                            <SelectItem value=\"am\">AM</SelectItem>\r\n                            <SelectItem value=\"pm\">PM</SelectItem>\r\n                        </SelectContent>\r\n                    </Select>\r\n                )}\r\n            </div>\r\n        </div>\r\n    );\r\n};","import * as React from \"react\";\r\nimport { Calendar as CalendarIcon, X as XIcon } from \"lucide-react\";\r\n\r\nimport type { VariantBaseProps, ChangeDetail } from \"@/variants/shared\";\r\nimport type { ShadcnTextVariantProps } from \"@/presets/shadcn-variants/text\";\r\nimport { Input } from \"@/presets/ui/input\";\r\nimport { Popover, PopoverTrigger, PopoverContent } from \"@/presets/ui/popover\";\r\nimport { Calendar } from \"@/presets/ui/calendar\";\r\nimport { TimeDropdowns } from \"../ui/time-dropdowns\";\r\n\r\ntype DateMode = \"single\" | \"range\";\r\n\r\nexport interface DateRange {\r\n   from?: Date;\r\n   to?: Date;\r\n}\r\n\r\ntype DateValue = Date | DateRange | undefined;\r\n\r\ntype BaseProps = VariantBaseProps<DateValue>;\r\n\r\n// Calendar disabled type from your calendar wrapper\r\ntype DisabledDays = React.ComponentProps<typeof Calendar>[\"disabled\"];\r\n\r\n/**\r\n * Logical temporal \"kind\" for the field.\r\n *\r\n * This controls the default mask + formatting/parsing.\r\n *\r\n * - \"date\"      → yyyy-MM-dd (default)\r\n * - \"datetime\"  → yyyy-MM-dd HH:mm\r\n * - \"time\"      → HH:mm\r\n * - \"hour\"      → HH\r\n * - \"monthYear\" → MM/yyyy\r\n * - \"year\"      → yyyy\r\n */\r\nexport type DateKind =\r\n   | \"date\"\r\n   | \"datetime\"\r\n   | \"time\"\r\n   | \"hour\"\r\n   | \"monthYear\"\r\n   | \"year\"\r\n   | (string & {});\r\n\r\n/**\r\n * Public props for the date variant (legacy + mask extensions).\r\n */\r\nexport interface DateVariantProps {\r\n   mode?: DateMode;\r\n   placeholder?: React.ReactNode;\r\n\r\n   clearable?: boolean;\r\n\r\n   minDate?: Date;\r\n   maxDate?: Date;\r\n   disabledDays?: DisabledDays;\r\n\r\n   /**\r\n    * Pattern for single dates.\r\n    *\r\n    * Tokens:\r\n    * - yyyy → full year\r\n    * - MM   → month (01–12)\r\n    * - dd   → day (01–31)\r\n    * - HH   → hours (00–23)\r\n    * - mm   → minutes (00–59)\r\n    *\r\n    * Default depends on `kind`:\r\n    * - date      → \"yyyy-MM-dd\"\r\n    * - datetime  → \"yyyy-MM-dd HH:mm\"\r\n    * - time      → \"HH:mm\"\r\n    * - hour      → \"HH\"\r\n    * - monthYear → \"MM/yyyy\"\r\n    * - year      → \"yyyy\"\r\n    */\r\n   formatSingle?: string;\r\n\r\n   /**\r\n    * String pattern or custom formatter for ranges.\r\n    *\r\n    * - string → same token rules as formatSingle, applied to both ends\r\n    * - function → full control over display text\r\n    */\r\n   formatRange?:\r\n   | string\r\n   | ((range: DateRange | undefined) => string);\r\n\r\n   /**\r\n    * Separator when formatRange is a string pattern.\r\n    * Default: \" – \"\r\n    */\r\n   rangeSeparator?: string;\r\n\r\n   /**\r\n    * When true, keep the calendar open after a selection.\r\n    *\r\n    * For range mode, the picker also stays open until both\r\n    * `from` and `to` are chosen.\r\n    */\r\n   stayOpenOnSelect?: boolean;\r\n\r\n   /**\r\n    * Controlled open state for the popover.\r\n    */\r\n   open?: boolean;\r\n   onOpenChange?(o: boolean): void;\r\n\r\n   /**\r\n    * Temporal kind (controls default mask + formatting/parsing).\r\n    *\r\n    * Default: \"date\".\r\n    */\r\n   kind?: DateKind;\r\n\r\n   /**\r\n    * Optional explicit input mask pattern for the text input.\r\n    *\r\n    * If omitted, a sensible default based on `kind` is used.\r\n    *\r\n    * Mask tokens follow the same rules as the underlying Input mask:\r\n    *   9 = digit, a = letter, * = alphanumeric.\r\n    */\r\n   inputMask?: string;\r\n\r\n   /**\r\n    * Whether to render the calendar popover.\r\n    *\r\n    * Defaults:\r\n    * - true  for `kind` = \"date\" | \"datetime\"\r\n    * - false for time-only kinds (\"time\", \"hour\", \"monthYear\", \"year\")\r\n    */\r\n   showCalendar?: boolean;\r\n}\r\n\r\n/**\r\n * We still reuse the Shadcn text UI props (size, density, icons, etc.),\r\n * but we take over type/value/onValue and the controls.\r\n */\r\ntype TextUiProps = Omit<\r\n   ShadcnTextVariantProps,\r\n   | \"type\"\r\n   | \"inputMode\"\r\n   | \"leadingControl\"\r\n   | \"trailingControl\"\r\n   | \"value\"\r\n   | \"onValue\"\r\n>;\r\n\r\n/**\r\n * Full props for the Shadcn-based date variant.\r\n */\r\nexport type ShadcnDateVariantProps = TextUiProps &\r\n   DateVariantProps &\r\n   Pick<BaseProps, \"value\" | \"onValue\" | \"error\">;\r\n\r\n// ─────────────────────────────────────────────\r\n// Helpers\r\n// ─────────────────────────────────────────────\r\n\r\nfunction isRange(value: DateValue): value is DateRange {\r\n   return !!value && !(value instanceof Date);\r\n}\r\n\r\nfunction normalizeValueForMode(\r\n   value: DateValue,\r\n   mode: DateMode,\r\n): { single: Date | undefined; range: DateRange | undefined } {\r\n   if (mode === \"single\") {\r\n      if (value instanceof Date) {\r\n         return { single: value, range: undefined };\r\n      }\r\n      if (isRange(value)) {\r\n         // prefer \"from\" when coming from a range\r\n         return { single: value.from ?? value.to, range: undefined };\r\n      }\r\n      return { single: undefined, range: undefined };\r\n   }\r\n\r\n   // range mode\r\n   if (isRange(value)) {\r\n      return { single: undefined, range: value };\r\n   }\r\n   if (value instanceof Date) {\r\n      return { single: undefined, range: { from: value } };\r\n   }\r\n   return { single: undefined, range: undefined };\r\n}\r\n\r\nfunction hasSelection(value: DateValue): boolean {\r\n   if (!value) return false;\r\n   if (value instanceof Date) return true;\r\n   return !!value.from || !!value.to;\r\n}\r\n\r\nfunction isRangeComplete(range: DateRange | undefined): boolean {\r\n   return !!(range && range.from && range.to);\r\n}\r\n\r\nfunction pad2(n: number): string {\r\n   return n.toString().padStart(2, \"0\");\r\n}\r\n\r\ninterface KindConfig {\r\n   mask: string;\r\n   singlePattern: string;\r\n}\r\n\r\nfunction resolveKindConfig(kind: DateKind | undefined): KindConfig {\r\n   const k = (kind ?? \"date\") as DateKind;\r\n\r\n   switch (k) {\r\n      case \"datetime\":\r\n         return {\r\n            mask: \"9999-99-99 99:99\",\r\n            singlePattern: \"yyyy-MM-dd HH:mm\",\r\n         };\r\n      case \"time\":\r\n         return {\r\n            mask: \"99:99\",\r\n            singlePattern: \"HH:mm\",\r\n         };\r\n      case \"hour\":\r\n         return {\r\n            mask: \"99\",\r\n            singlePattern: \"HH\",\r\n         };\r\n      case \"monthYear\":\r\n         return {\r\n            mask: \"99/9999\",\r\n            singlePattern: \"MM/yyyy\",\r\n         };\r\n      case \"year\":\r\n         return {\r\n            mask: \"9999\",\r\n            singlePattern: \"yyyy\",\r\n         };\r\n      case \"date\":\r\n      default:\r\n         return {\r\n            mask: \"9999-99-99\",\r\n            singlePattern: \"yyyy-MM-dd\",\r\n         };\r\n   }\r\n}\r\n\r\nfunction formatDateWithPattern(\r\n   date: Date,\r\n   pattern: string | undefined,\r\n): string {\r\n   const p = pattern ?? \"yyyy-MM-dd\";\r\n\r\n   const yyyy = date.getFullYear().toString();\r\n   const MM = pad2(date.getMonth() + 1);\r\n   const dd = pad2(date.getDate());\r\n   const HH = pad2(date.getHours());\r\n   const mm = pad2(date.getMinutes());\r\n\r\n   return p\r\n      .replace(/yyyy/g, yyyy)\r\n      .replace(/MM/g, MM)\r\n      .replace(/dd/g, dd)\r\n      .replace(/HH/g, HH)\r\n      .replace(/mm/g, mm);\r\n}\r\n\r\nfunction formatDisplaySingle(\r\n   date: Date | undefined,\r\n   pattern?: string,\r\n): string {\r\n   if (!date) return \"\";\r\n   return formatDateWithPattern(date, pattern);\r\n}\r\n\r\nfunction formatDisplayRange(\r\n   range: DateRange | undefined,\r\n   formatRange: DateVariantProps[\"formatRange\"],\r\n   singlePattern?: string,\r\n   separator?: string,\r\n): string {\r\n   if (!range || (!range.from && !range.to)) return \"\";\r\n\r\n   if (typeof formatRange === \"function\") {\r\n      return formatRange(range);\r\n   }\r\n\r\n   const pattern = formatRange ?? singlePattern ?? \"yyyy-MM-dd\";\r\n   const sep = separator ?? \" – \";\r\n\r\n   const fromStr = range.from\r\n      ? formatDateWithPattern(range.from, pattern)\r\n      : \"\";\r\n   const toStr = range.to\r\n      ? formatDateWithPattern(range.to, pattern)\r\n      : \"\";\r\n\r\n   if (!fromStr && !toStr) return \"\";\r\n   if (!fromStr) return toStr;\r\n   if (!toStr) return fromStr;\r\n\r\n   return `${fromStr}${sep}${toStr}`;\r\n}\r\n\r\n/**\r\n * Parse a raw digit string (unmasked) into a Date based on `kind`.\r\n *\r\n * Returns null when the input is incomplete or invalid.\r\n */\r\nfunction parseRawToDate(rawDigits: string, kind: DateKind): Date | null {\r\n   const len = rawDigits.length;\r\n\r\n   switch (kind) {\r\n      case \"datetime\": {\r\n         if (len < 12) return null;\r\n         const year = Number(rawDigits.slice(0, 4));\r\n         const month = Number(rawDigits.slice(4, 6));\r\n         const day = Number(rawDigits.slice(6, 8));\r\n         const hour = Number(rawDigits.slice(8, 10));\r\n         const minute = Number(rawDigits.slice(10, 12));\r\n         if (!year || month < 1 || month > 12 || day < 1 || day > 31) {\r\n            return null;\r\n         }\r\n         if (hour < 0 || hour > 23 || minute < 0 || minute > 59) {\r\n            return null;\r\n         }\r\n         return new Date(year, month - 1, day, hour, minute, 0, 0);\r\n      }\r\n\r\n      case \"time\": {\r\n         if (len < 4) return null;\r\n         const hour = Number(rawDigits.slice(0, 2));\r\n         const minute = Number(rawDigits.slice(2, 4));\r\n         if (hour < 0 || hour > 23 || minute < 0 || minute > 59) {\r\n            return null;\r\n         }\r\n         const d = new Date();\r\n         d.setSeconds(0, 0);\r\n         d.setHours(hour, minute);\r\n         return d;\r\n      }\r\n\r\n      case \"hour\": {\r\n         if (len < 2) return null;\r\n         const hour = Number(rawDigits.slice(0, 2));\r\n         if (hour < 0 || hour > 23) return null;\r\n         const d = new Date();\r\n         d.setSeconds(0, 0);\r\n         d.setHours(hour, 0);\r\n         return d;\r\n      }\r\n\r\n      case \"monthYear\": {\r\n         if (len < 6) return null;\r\n         const month = Number(rawDigits.slice(0, 2));\r\n         const year = Number(rawDigits.slice(2, 6));\r\n         if (!year || month < 1 || month > 12) {\r\n            return null;\r\n         }\r\n         return new Date(year, month - 1, 1, 0, 0, 0, 0);\r\n      }\r\n\r\n      case \"year\": {\r\n         if (len < 4) return null;\r\n         const year = Number(rawDigits.slice(0, 4));\r\n         if (!year) return null;\r\n         return new Date(year, 0, 1, 0, 0, 0, 0);\r\n      }\r\n\r\n      case \"date\":\r\n      default: {\r\n         if (len < 8) return null;\r\n         const year = Number(rawDigits.slice(0, 4));\r\n         const month = Number(rawDigits.slice(4, 6));\r\n         const day = Number(rawDigits.slice(6, 8));\r\n         if (!year || month < 1 || month > 12 || day < 1 || day > 31) {\r\n            return null;\r\n         }\r\n         return new Date(year, month - 1, day, 0, 0, 0, 0);\r\n      }\r\n   }\r\n}\r\n\r\nfunction meterSafeDigits(masked: string): string {\r\n   return masked.replace(/\\D+/g, \"\");\r\n}\r\n\r\n// ─────────────────────────────────────────────\r\n// Component\r\n// ─────────────────────────────────────────────\r\n\r\nexport const ShadcnDateVariant = React.forwardRef<\r\n   HTMLInputElement,\r\n   ShadcnDateVariantProps\r\n>(function ShadcnDateVariant(props, ref) {\r\n   const {\r\n      // variant base bits\r\n      value,\r\n      onValue,\r\n      error,\r\n\r\n      // date props\r\n      mode: modeProp = \"single\",\r\n      placeholder,\r\n      clearable = true,\r\n      minDate,\r\n      maxDate,\r\n      disabledDays,\r\n      formatSingle: formatSingleProp,\r\n      formatRange,\r\n      rangeSeparator,\r\n      stayOpenOnSelect,\r\n      open,\r\n      onOpenChange,\r\n\r\n      kind: kindProp = \"date\",\r\n      inputMask,\r\n      showCalendar: showCalendarProp,\r\n\r\n      //@ts-ignore text UI bits (size, density, className, icons, etc.)\r\n      className,\r\n      ...restTextProps\r\n   } = props;\r\n\r\n   const mode: DateMode = modeProp ?? \"single\";\r\n   const kind: DateKind = kindProp ?? \"date\";\r\n\r\n   const kindConfig = resolveKindConfig(kind);\r\n   const singlePattern = formatSingleProp ?? kindConfig.singlePattern;\r\n   const resolvedMask = inputMask ?? kindConfig.mask;\r\n\r\n   const defaultShowCalendar =\r\n      kind === \"date\" || kind === \"datetime\";\r\n   const showCalendar =\r\n      typeof showCalendarProp === \"boolean\"\r\n         ? showCalendarProp\r\n         : defaultShowCalendar;\r\n\r\n   const [internalOpen, setInternalOpen] = React.useState(false);\r\n   const isControlledOpen = open !== undefined;\r\n   const currentOpen = isControlledOpen ? !!open : internalOpen;\r\n\r\n   const handleOpenChange = React.useCallback(\r\n      (next: boolean) => {\r\n         if (!isControlledOpen) {\r\n            setInternalOpen(next);\r\n         }\r\n         onOpenChange?.(next);\r\n      },\r\n      [isControlledOpen, onOpenChange],\r\n   );\r\n\r\n   const { single, range } = normalizeValueForMode(value, mode);\r\n\r\n   const displayValue = React.useMemo(() => {\r\n      if (mode === \"single\") {\r\n         return formatDisplaySingle(single, singlePattern);\r\n      }\r\n      return formatDisplayRange(\r\n         range,\r\n         formatRange,\r\n         singlePattern,\r\n         rangeSeparator,\r\n      );\r\n   }, [mode, single, range, singlePattern, formatRange, rangeSeparator]);\r\n\r\n   const [localText, setLocalText] = React.useState<string>(displayValue);\r\n\r\n   // Sync local text with external value / formatting\r\n   React.useEffect(() => {\r\n      setLocalText(displayValue);\r\n   }, [displayValue]);\r\n\r\n   // Time dropdown visibility:\r\n   // - Only for mode=\"single\"\r\n   // - For datetime/time/hour kinds\r\n   const showTimeDropdowns =\r\n      mode === \"single\" &&\r\n      (kind === \"datetime\" || kind === \"time\" || kind === \"hour\");\r\n\r\n   const handleSelect = React.useCallback(\r\n      (next: Date | DateRange | undefined) => {\r\n         let nextValue: DateValue;\r\n         let nextRange: DateRange | undefined;\r\n\r\n         if (mode === \"single\") {\r\n            if (next instanceof Date) {\r\n               let selected = next;\r\n\r\n               // For datetime, preserve previously chosen time (if any)\r\n               if (kind === \"datetime\" && single) {\r\n                  selected = new Date(\r\n                     selected.getFullYear(),\r\n                     selected.getMonth(),\r\n                     selected.getDate(),\r\n                     single.getHours(),\r\n                     single.getMinutes(),\r\n                     single.getSeconds(),\r\n                     0,\r\n                  );\r\n               }\r\n\r\n               nextValue = selected;\r\n            } else {\r\n               nextValue = undefined;\r\n            }\r\n            nextRange = undefined;\r\n         } else {\r\n            if (next && next instanceof Date) {\r\n               nextRange = { from: next };\r\n            } else {\r\n               nextRange = (next as DateRange | undefined) ?? undefined;\r\n            }\r\n            nextValue = nextRange;\r\n         }\r\n\r\n         const rangeComplete =\r\n            mode === \"range\" ? isRangeComplete(nextRange) : !!nextValue;\r\n\r\n         const detail: ChangeDetail<{\r\n            mode: DateMode;\r\n            from: \"calendar\";\r\n            rangeComplete: boolean;\r\n         }> = {\r\n            source: \"variant\",\r\n            raw: nextValue,\r\n            nativeEvent: undefined,\r\n            meta: {\r\n               mode,\r\n               from: \"calendar\",\r\n               rangeComplete,\r\n            },\r\n         };\r\n\r\n         onValue?.(nextValue, detail);\r\n\r\n         const shouldStayOpen =\r\n            stayOpenOnSelect ||\r\n            (mode === \"range\" && !rangeComplete);\r\n\r\n         if (!shouldStayOpen) {\r\n            handleOpenChange(false);\r\n         }\r\n      },\r\n      [mode, stayOpenOnSelect, onValue, handleOpenChange, kind, single],\r\n   );\r\n\r\n   const handleTimeChange = React.useCallback(\r\n      (next: Date | undefined) => {\r\n         if (!next) {\r\n            const detail: ChangeDetail<{\r\n               mode: DateMode;\r\n               kind: DateKind;\r\n               from: \"time\";\r\n               cleared: boolean;\r\n            }> = {\r\n               source: \"variant\",\r\n               raw: undefined,\r\n               nativeEvent: undefined,\r\n               meta: {\r\n                  mode,\r\n                  kind,\r\n                  from: \"time\",\r\n                  cleared: true,\r\n               },\r\n            };\r\n            onValue?.(undefined, detail);\r\n            return;\r\n         }\r\n\r\n         const detail: ChangeDetail<{\r\n            mode: DateMode;\r\n            kind: DateKind;\r\n            from: \"time\";\r\n         }> = {\r\n            source: \"variant\",\r\n            raw: next,\r\n            nativeEvent: undefined,\r\n            meta: {\r\n               mode,\r\n               kind,\r\n               from: \"time\",\r\n            },\r\n         };\r\n\r\n         onValue?.(next, detail);\r\n      },\r\n      [mode, kind, onValue],\r\n   );\r\n\r\n   const handleClear = React.useCallback(\r\n      (ev: React.MouseEvent) => {\r\n         ev.preventDefault();\r\n         ev.stopPropagation();\r\n\r\n         const detail: ChangeDetail<{\r\n            mode: DateMode;\r\n            cleared: boolean;\r\n         }> = {\r\n            source: \"variant\",\r\n            raw: undefined,\r\n            nativeEvent: ev as any,\r\n            meta: {\r\n               mode,\r\n               cleared: true,\r\n            },\r\n         };\r\n         onValue?.(undefined, detail);\r\n      },\r\n      [mode, onValue],\r\n   );\r\n\r\n   const hasValue = hasSelection(value);\r\n   const placeholderText =\r\n      typeof placeholder === \"string\"\r\n         ? placeholder\r\n         : mode === \"range\"\r\n            ? \"Select date range\"\r\n            : \"Select date\";\r\n\r\n   /**\r\n    * Manual text input (mask-driven) — only for `mode = \"single\"`.\r\n    * Range editing via text gets very hairy, so we keep range as\r\n    * a calendar-driven control for now.\r\n    */\r\n   const handleInputChange = React.useCallback(\r\n      (event: any) => {\r\n         if (mode !== \"single\") return;\r\n\r\n         const masked = (event?.value ??\r\n            event?.target?.value ??\r\n            \"\") as string;\r\n\r\n         setLocalText(masked);\r\n\r\n         const digits = meterSafeDigits(masked);\r\n\r\n         if (!digits.length) {\r\n            const detail: ChangeDetail<{\r\n               mode: DateMode;\r\n               kind: DateKind;\r\n               from: \"text\";\r\n               cleared: boolean;\r\n            }> = {\r\n               source: \"variant\",\r\n               raw: undefined,\r\n               nativeEvent: event,\r\n               meta: {\r\n                  mode,\r\n                  kind,\r\n                  from: \"text\",\r\n                  cleared: true,\r\n               },\r\n            };\r\n            onValue?.(undefined, detail);\r\n            return;\r\n         }\r\n\r\n         const parsed = parseRawToDate(digits, kind);\r\n         if (!parsed) {\r\n            // Incomplete or invalid — keep local text but don't\r\n            // push a Date value yet.\r\n            return;\r\n         }\r\n\r\n         // If min/max are set, enforce them here.\r\n         if (minDate && parsed < minDate) return;\r\n         if (maxDate && parsed > maxDate) return;\r\n\r\n         const detail: ChangeDetail<{\r\n            mode: DateMode;\r\n            kind: DateKind;\r\n            from: \"text\";\r\n         }> = {\r\n            source: \"variant\",\r\n            raw: parsed,\r\n            nativeEvent: event,\r\n            meta: {\r\n               mode,\r\n               kind,\r\n               from: \"text\",\r\n            },\r\n         };\r\n\r\n         onValue?.(parsed, detail);\r\n      },\r\n      [mode, kind, minDate, maxDate, onValue],\r\n   );\r\n\r\n   const trailingControl = (\r\n      <div\r\n         className=\"flex h-full items-center gap-1 pr-1\"\r\n         data-slot=\"date-controls\"\r\n      >\r\n         {clearable && hasValue && (\r\n            <button\r\n               type=\"button\"\r\n               onClick={handleClear}\r\n               className=\"inline-flex h-6 w-6 items-center justify-center rounded-full text-xs text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\"\r\n               aria-label=\"Clear date\"\r\n               data-slot=\"date-clear\"\r\n            >\r\n               <XIcon className=\"h-3 w-3\" />\r\n            </button>\r\n         )}\r\n\r\n         {showCalendar && (\r\n            <button\r\n               type=\"button\"\r\n               onClick={() => handleOpenChange(!currentOpen)}\r\n               className=\"inline-flex h-6 w-6 items-center justify-center rounded-full text-xs text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\"\r\n               aria-label=\"Open calendar\"\r\n               data-slot=\"date-toggle\"\r\n            >\r\n               <CalendarIcon className=\"h-4 w-4\" />\r\n            </button>\r\n         )}\r\n      </div>\r\n   );\r\n\r\n   const inputNode = (\r\n      <Input\r\n         ref={ref}\r\n         {...restTextProps}\r\n         type=\"text\"\r\n         value={localText}\r\n         onChange={mode === \"single\" ? (handleInputChange as any) : undefined}\r\n         readOnly={mode !== \"single\" && showCalendar}\r\n         placeholder={placeholderText}\r\n         trailingControl={trailingControl}\r\n         aria-invalid={error ? \"true\" : undefined}\r\n         // Mask only makes sense when we allow typing.\r\n         mask={mode === \"single\" ? resolvedMask : undefined}\r\n      />\r\n   );\r\n\r\n   // If calendar is disabled completely, just render the masked input.\r\n   if (!showCalendar) {\r\n      return (\r\n         <div className={className} data-slot=\"date-field\">\r\n            {inputNode}\r\n         </div>\r\n      );\r\n   }\r\n\r\n   const showCalendarBody = kind !== \"time\" && kind !== \"hour\";\r\n\r\n   // Calendar / time popover.\r\n   return (\r\n      <Popover open={currentOpen} onOpenChange={handleOpenChange}>\r\n         <PopoverTrigger asChild>\r\n            <div className={className} data-slot=\"date-field\">\r\n               {inputNode}\r\n            </div>\r\n         </PopoverTrigger>\r\n         <PopoverContent\r\n            align=\"start\"\r\n            className=\"w-auto p-0\"\r\n            data-slot=\"date-popover\"\r\n         >\r\n            <div className=\"flex flex-col gap-2 p-2\">\r\n               {showCalendarBody && (\r\n                  <Calendar\r\n                     mode={mode}\r\n                     //@ts-ignore date UI bits\r\n                     selected={mode === \"single\" ? single : range}\r\n                     onSelect={handleSelect as any}\r\n                     disabled={disabledDays}\r\n                     fromDate={minDate}\r\n                     toDate={maxDate}\r\n                     initialFocus\r\n                  />\r\n               )}\r\n\r\n               {showTimeDropdowns && (\r\n                  <TimeDropdowns\r\n                     value={single ?? undefined}\r\n                     onChange={handleTimeChange}\r\n                     label={\r\n                        kind === \"datetime\"\r\n                           ? \"Time\"\r\n                           : undefined\r\n                     }\r\n                     minuteStep={5}\r\n                     showSeconds={false}\r\n                     density=\"compact\"\r\n                  />\r\n               )}\r\n            </div>\r\n         </PopoverContent>\r\n      </Popover>\r\n   );\r\n});\r\n\r\nShadcnDateVariant.displayName = \"ShadcnDateVariant\";\r\n\r\nexport default ShadcnDateVariant;","import ShadcnDateVariant from \"@/presets/shadcn-variants/date\";\r\nimport { VariantModuleFor } from \"@/schema/variant\";\r\n\r\n\r\nexport const dateVariant: VariantModuleFor<\"date\"> = {\r\n   variant: \"date\",\r\n   Variant: ShadcnDateVariant as any,\r\n\r\n   // Optional layout defaults – tweak as you like\r\n   defaults: {\r\n      layout: {\r\n         fullWidth: true,\r\n         // You can set defaultSize/defaultDensity here if you want:\r\n         // defaultSize: \"md\",\r\n         // defaultDensity: \"normal\",\r\n      },\r\n   },\r\n\r\n   meta: {\r\n      label: \"Date\",\r\n      description:\r\n         \"Date input with calendar picker.\",\r\n      tags: [\"date\", \"calendar\", \"picker\"],\r\n   },\r\n}","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface TextareaIconControlProps {\n  // lower icons (overlaid in textarea-field)\n  leadingIcons?: React.ReactNode[];\n  trailingIcons?: React.ReactNode[];\n  icon?: React.ReactNode;\n\n  iconGap?: number;\n  leadingIconSpacing?: number;\n  trailingIconSpacing?: number;\n\n  // lower side controls (outside the text area by default)\n  leadingControl?: React.ReactNode;\n  trailingControl?: React.ReactNode;\n  leadingControlClassName?: string;\n  trailingControlClassName?: string;\n\n  /**\n   * If true, move the visual box (border, bg, radius, focus) from\n   * `textarea-field` to `textarea-inner` so the side controls are\n   * inside the same frame.\n   *\n   * Default: false (controls sit outside the border).\n   */\n  extendBoxToControls?: boolean;\n\n  /**\n   * If true, move the visual box all the way up to `textarea-box`,\n   * so the upper toolbox and the inner row share a single frame.\n   *\n   * When this is true, it overrides `extendBoxToControls`.\n   *\n   * Default: false.\n   */\n  extendBoxToToolbox?: boolean;\n\n  /**\n   * Extra padding knobs (same semantics as Input).\n   *\n   * px → symmetric horizontal padding\n   * py → symmetric vertical padding\n   * ps/pe → logical start/end padding adjustments\n   * pb → extra bottom padding (stacked with py)\n   */\n  px?: number;\n  py?: number;\n  ps?: number;\n  pe?: number;\n  pb?: number;\n\n  /**\n   * Extra classes merged into the raw <textarea>.\n   * (The box padding/border live on the wrappers.)\n   */\n  inputClassName?: string;\n}\n\nexport interface TextareaSizeProps {\n  size?: \"sm\" | \"md\" | \"lg\" | (string & {});\n  density?:\n  | \"compact\"\n  | \"normal\"\n  | \"relaxed\"\n  | \"dense\"\n  | \"loose\"\n  | (string & {});\n}\n\nexport interface TextareaProps\n  extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\">,\n  TextareaIconControlProps,\n  TextareaSizeProps {\n  /**\n   * Auto-resize based on content.\n   * Default: true.\n   */\n  autoResize?: boolean;\n\n  /**\n   * Minimum number of visual rows.\n   * Default: 1.\n   */\n  rows?: number;\n\n  /**\n   * Maximum number of visual rows.\n   * Undefined → unlimited.\n   */\n  maxRows?: number;\n\n  /**\n   * Optional upper toolbox area.\n   */\n  upperControl?: React.ReactNode;\n  upperControlClassName?: string;\n}\n\n// ─────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────\n\nfunction resolveSizeDensityClasses(size: unknown, density: unknown) {\n  const s = (size as string | undefined) ?? \"md\";\n  const d = (density as string | undefined) ?? \"normal\";\n\n  let textCls = \"text-base md:text-sm\";\n\n  if (s === \"sm\") {\n    textCls = \"text-sm\";\n  } else if (s === \"lg\") {\n    textCls = \"text-base\";\n  }\n\n  let densityCls = \"\";\n  if (d === \"dense\" || d === \"compact\") {\n    densityCls = \"leading-tight\";\n  } else if (d === \"relaxed\" || d === \"loose\") {\n    densityCls = \"leading-relaxed\";\n  }\n\n  return { textCls, densityCls };\n}\n\nfunction resolveBasePadding(size: unknown, density: unknown) {\n  // mirror Input baseline\n  let px = 12;\n  let py = 8;\n\n  const s = (size as string | undefined) ?? \"md\";\n  const d = (density as string | undefined) ?? \"normal\";\n\n  if (s === \"sm\") {\n    px = 10;\n    py = 6;\n  } else if (s === \"lg\") {\n    px = 14;\n    py = 10;\n  }\n\n  if (d === \"dense\" || d === \"compact\") {\n    py = Math.max(2, py - 1);\n  } else if (d === \"relaxed\" || d === \"loose\") {\n    py = py + 1;\n  }\n\n  return { px, py };\n}\n\n// ─────────────────────────────────────────────\n// Component\n// ─────────────────────────────────────────────\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n  function Textarea(rawProps, forwardedRef) {\n    const {\n      // layout wrapper\n      className,\n      style,\n\n      // native textarea bits\n      disabled,\n      readOnly,\n      required,\n      onChange,\n      onFocus,\n      onBlur,\n      placeholder,\n\n      // size / density\n      size = \"md\",\n      density = \"normal\",\n\n      // auto-resize\n      autoResize = true,\n      rows: minRowsProp,\n      maxRows,\n\n      // controls / icons\n      leadingIcons,\n      trailingIcons,\n      icon,\n      iconGap,\n      leadingIconSpacing,\n      trailingIconSpacing,\n      leadingControl,\n      trailingControl,\n      leadingControlClassName,\n      trailingControlClassName,\n      extendBoxToControls = false,\n      extendBoxToToolbox = false,\n      px,\n      py,\n      ps,\n      pe,\n      pb,\n      inputClassName,\n\n      // upper toolbox\n      upperControl,\n      upperControlClassName,\n\n      // rest of <textarea> props\n      ...rest\n    } = rawProps;\n\n    const sizeKey = (size as string | undefined) ?? \"md\";\n    const densityKey = (density as string | undefined) ?? \"normal\";\n\n    const innerRef = React.useRef<HTMLTextAreaElement | null>(null);\n    React.useImperativeHandle(\n      forwardedRef,\n      () => innerRef.current as HTMLTextAreaElement,\n      []\n    );\n\n    // icons\n    const resolvedLeadingIcons: React.ReactNode[] = (() => {\n      if (leadingIcons && leadingIcons.length) return leadingIcons;\n      if (icon) return [icon];\n      return [];\n    })();\n    const resolvedTrailingIcons: React.ReactNode[] = trailingIcons ?? [];\n\n    const hasLeadingIcons = resolvedLeadingIcons.length > 0;\n    const hasTrailingIcons = resolvedTrailingIcons.length > 0;\n    const hasLeadingControl = !!leadingControl;\n    const hasTrailingControl = !!trailingControl;\n\n    const hasIcons = hasLeadingIcons || hasTrailingIcons;\n    const hasControls = hasLeadingControl || hasTrailingControl;\n    const hasExtras = hasIcons || hasControls;\n\n    const baseIconGap = iconGap ?? 1;\n    const leadingGap = leadingIconSpacing ?? baseIconGap;\n    const trailingGap = trailingIconSpacing ?? baseIconGap;\n\n    const leadingIconsRef = React.useRef<HTMLDivElement | null>(null);\n    const trailingIconsRef = React.useRef<HTMLDivElement | null>(null);\n    const [leadingIconsWidth, setLeadingIconsWidth] = React.useState(0);\n    const [trailingIconsWidth, setTrailingIconsWidth] = React.useState(0);\n\n    const measureIconWidths = React.useCallback(() => {\n      if (typeof window === \"undefined\") return;\n\n      const lead = leadingIconsRef.current;\n      const trail = trailingIconsRef.current;\n\n      if (lead) {\n        const rect = lead.getBoundingClientRect();\n        setLeadingIconsWidth(rect.width);\n      } else {\n        setLeadingIconsWidth(0);\n      }\n\n      if (trail) {\n        const rect = trail.getBoundingClientRect();\n        setTrailingIconsWidth(rect.width);\n      } else {\n        setTrailingIconsWidth(0);\n      }\n    }, []);\n\n    // MutationObserver → recompute icon widths when content changes\n    React.useLayoutEffect(() => {\n      if (\n        typeof window === \"undefined\" ||\n        typeof MutationObserver === \"undefined\"\n      ) {\n        measureIconWidths();\n        return;\n      }\n\n      const observers: MutationObserver[] = [];\n      const lead = leadingIconsRef.current;\n      const trail = trailingIconsRef.current;\n\n      if (lead) {\n        const obs = new MutationObserver(() => measureIconWidths());\n        obs.observe(lead, {\n          childList: true,\n          subtree: true,\n          attributes: true,\n        });\n        observers.push(obs);\n      }\n\n      if (trail) {\n        const obs = new MutationObserver(() => measureIconWidths());\n        obs.observe(trail, {\n          childList: true,\n          subtree: true,\n          attributes: true,\n        });\n        observers.push(obs);\n      }\n\n      measureIconWidths();\n\n      return () => observers.forEach((o) => o.disconnect());\n    }, [measureIconWidths, hasLeadingIcons, hasTrailingIcons]);\n\n    // row height / rows\n    const [rowHeight, setRowHeight] = React.useState<number | null>(null);\n    const baseMinRows = Math.max(minRowsProp ?? 1, 1);\n    const [rows, setRows] = React.useState<number>(baseMinRows);\n\n    // measure a single-row height from the textarea itself\n    React.useLayoutEffect(() => {\n      if (typeof window === \"undefined\") return;\n      const el = innerRef.current;\n      if (!el) return;\n\n      const prevValue = el.value;\n      const prevHeight = el.style.height;\n\n      el.value = \"X\";\n      el.style.height = \"0px\";\n      const singleRowHeight = el.scrollHeight;\n\n      el.value = prevValue;\n      el.style.height = prevHeight;\n\n      if (singleRowHeight > 0 && Number.isFinite(singleRowHeight)) {\n        setRowHeight(singleRowHeight);\n        setRows(baseMinRows);\n      }\n    }, [sizeKey, densityKey, baseMinRows]);\n\n    // auto-resize helper\n    const recomputeHeight = React.useCallback(() => {\n      if (!autoResize) return;\n      if (!innerRef.current) return;\n      if (!rowHeight) return;\n\n      const el = innerRef.current;\n\n      el.style.height = \"0px\";\n      const scrollH = el.scrollHeight;\n\n      // if empty, keep exactly minRows\n      if (!el.value || el.value.length === 0) {\n        const h = baseMinRows * rowHeight;\n        el.style.height = `${h}px`;\n        setRows(baseMinRows);\n        return;\n      }\n\n      const rawRows = scrollH / rowHeight;\n      let nextRows = Math.max(baseMinRows, Math.ceil(rawRows));\n      if (typeof maxRows === \"number\" && maxRows > 0) {\n        nextRows = Math.min(nextRows, maxRows);\n      }\n\n      const nextHeight = nextRows * rowHeight;\n      el.style.height = `${nextHeight}px`;\n      setRows(nextRows);\n    }, [autoResize, rowHeight, baseMinRows, maxRows]);\n\n    // run when controlled value changes or initial mount\n    React.useLayoutEffect(() => {\n      recomputeHeight();\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [recomputeHeight, rest.value, rest.defaultValue]);\n\n    // padding (frame-level)\n    const { px: pxDefault, py: pyDefault } = resolveBasePadding(size, density);\n\n    const extraPx = typeof px === \"number\" ? px : 0;\n    const extraPy = typeof py === \"number\" ? py : 0;\n    const extraPs = typeof ps === \"number\" ? ps : 0;\n    const extraPe = typeof pe === \"number\" ? pe : 0;\n    const extraPb = typeof pb === \"number\" ? pb : 0;\n\n    const basePaddingStart = pxDefault + extraPx + extraPs;\n    const basePaddingEnd = pxDefault + extraPx + extraPe;\n    const paddingTop = pyDefault + extraPy;\n    const paddingBottom = pyDefault + extraPy + extraPb;\n\n    // extra space text needs because of icons\n    const iconsLeftExtra =\n      hasLeadingIcons && leadingIconsWidth > 0\n        ? leadingIconsWidth + baseIconGap\n        : 0;\n\n    const iconsRightExtra =\n      hasTrailingIcons && trailingIconsWidth > 0\n        ? trailingIconsWidth + baseIconGap\n        : 0;\n\n    const { textCls, densityCls } = resolveSizeDensityClasses(size, density);\n\n    // vars for the frame: both base + adjusted\n    const vars: React.CSSProperties = {\n      \"--fp-pl-base\": `${basePaddingStart}px`,\n      \"--fp-pr-base\": `${basePaddingEnd}px`,\n      \"--fp-pl\": `${basePaddingStart + iconsLeftExtra}px`,\n      \"--fp-pr\": `${basePaddingEnd + iconsRightExtra}px`,\n      \"--fp-pt\": `${paddingTop}px`,\n      \"--fp-pb\": `${paddingBottom}px`,\n      \"--fp-row-height\": rowHeight ? `${rowHeight}px` : undefined,\n      \"--fp-rows\": rows,\n    } as React.CSSProperties;\n\n    const mergedWrapperStyle: React.CSSProperties = {\n      ...(style ?? {}),\n      ...vars,\n    };\n\n    // visual frame (border/background/focus)\n    const frameClasses = cn(\n      \"border-input placeholder:text-muted-foreground focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]\",\n      \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n      \"dark:bg-input/30 rounded-md border bg-[var(--surfaces-input,_transparent)] shadow-xs transition-[color,box-shadow] outline-none\",\n      \"disabled:cursor-not-allowed disabled:opacity-50\"\n    );\n\n    // padding utility using adjusted vars (--fp-pl / --fp-pr)\n    const framePaddingClasses = cn(\n      \"px-(--fp-pl,--spacing(3)) pr-(--fp-pr,--spacing(3))\",\n      \"pt-(--fp-pt,--spacing(1)) pb-(--fp-pb,--spacing(1))\"\n    );\n\n    // which element owns the frame?\n    const boxOnToolbox = extendBoxToToolbox;\n    const boxOnInner = !boxOnToolbox && extendBoxToControls;\n    const boxOnField = !boxOnToolbox && !boxOnInner;\n\n    const wrapperClasses = cn(\"w-full\", className);\n\n    const boxClasses = cn(\n      \"flex flex-col gap-1\",\n      boxOnToolbox && frameClasses,\n      boxOnToolbox && framePaddingClasses\n    );\n\n    const innerRowClasses = cn(\n      \"flex items-stretch gap-1\",\n      boxOnInner && frameClasses,\n      boxOnInner && framePaddingClasses\n    );\n\n    const fieldWrapperClasses = cn(\n      \"relative flex-1 min-w-0\",\n      boxOnField && frameClasses,\n      boxOnField && framePaddingClasses\n    );\n\n    const textareaClasses = cn(\n      \"block w-full min-h-[1px] resize-none bg-transparent border-none outline-none shadow-none\",\n      \"px-0 py-0\",\n      \"placeholder:text-muted-foreground\",\n      textCls,\n      densityCls,\n      inputClassName\n    );\n\n    const focusTextarea = () => {\n      if (innerRef.current) innerRef.current.focus();\n    };\n\n    const handleFocus = React.useCallback(\n      (event: React.FocusEvent<HTMLTextAreaElement>) => {\n        onFocus?.(event);\n      },\n      [onFocus]\n    );\n\n    const handleBlur = React.useCallback(\n      (event: React.FocusEvent<HTMLTextAreaElement>) => {\n        onBlur?.(event);\n      },\n      [onBlur]\n    );\n\n    const handleChange = React.useCallback(\n      (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n        onChange?.(event);\n        // for uncontrolled usage, recompute on each keystroke\n        recomputeHeight();\n      },\n      [onChange, recomputeHeight]\n    );\n\n    const handleIconMouseDown = (e: React.MouseEvent) => {\n      e.preventDefault();\n      focusTextarea();\n    };\n\n    const controlCellStyle: React.CSSProperties | undefined =\n      rowHeight != null ? { height: `${rowHeight}px` } : undefined;\n\n    const lowerControlAlignStyle: React.CSSProperties = {\n      marginTop: \"auto\",\n      ...controlCellStyle,\n    };\n\n    const leadingArea = hasLeadingControl ? (\n      <div\n        data-slot=\"textarea-leading-area\"\n        className={cn(\"flex flex-col h-full\", leadingControlClassName)}\n      >\n        <div\n          data-slot=\"textarea-leading-control\"\n          className=\"flex items-center mt-auto\"\n          style={lowerControlAlignStyle}\n          onMouseDown={(e) => {\n            e.preventDefault();\n            focusTextarea();\n          }}\n        >\n          {leadingControl}\n        </div>\n      </div>\n    ) : null;\n\n    const trailingArea = hasTrailingControl ? (\n      <div\n        data-slot=\"textarea-trailing-area\"\n        className={cn(\"flex flex-col h-full mt-auto\", trailingControlClassName)}\n      >\n        <div\n          data-slot=\"textarea-trailing-control\"\n          className=\"flex items-center\"\n          style={lowerControlAlignStyle}\n          onMouseDown={(e) => {\n            e.preventDefault();\n            focusTextarea();\n          }}\n        >\n          {trailingControl}\n        </div>\n      </div>\n    ) : null;\n\n    return (\n      <div\n        data-slot=\"textarea-wrapper\"\n        className={wrapperClasses}\n        style={mergedWrapperStyle}\n        data-size={sizeKey}\n        data-density={densityKey}\n      >\n        <div\n          data-slot=\"textarea-box\"\n          className={boxClasses}\n          data-has-extras={hasExtras ? \"true\" : \"false\"}\n        >\n          {upperControl && (\n            <div\n              data-slot=\"textarea-upper\"\n              className={cn(\"flex items-center\", upperControlClassName)}\n            >\n              {upperControl}\n            </div>\n          )}\n\n          <div data-slot=\"textarea-inner\" className={innerRowClasses}>\n            {leadingArea}\n\n            <div data-slot=\"textarea-field\" className={fieldWrapperClasses}>\n              <textarea\n                ref={innerRef}\n                data-slot=\"textarea\"\n                className={textareaClasses}\n                disabled={disabled}\n                readOnly={readOnly}\n                aria-required={required ? \"true\" : undefined}\n                rows={autoResize ? undefined : baseMinRows}\n                placeholder={placeholder}\n                onChange={handleChange}\n                onFocus={handleFocus}\n                onBlur={handleBlur}\n                {...rest}\n              />\n\n              {hasLeadingIcons && (\n                <div\n                  ref={leadingIconsRef}\n                  data-slot=\"textarea-leading-icons\"\n                  className=\"pointer-events-auto absolute left-0 flex items-end\"\n                  style={{\n                    gap: leadingGap,\n                    // anchor from base padding, NOT icon-adjusted padding\n                    paddingLeft: \"var(--fp-pl-base)\",\n                    bottom: \"calc(var(--fp-pb, 0px) + 2px)\",\n                  }}\n                  onMouseDown={handleIconMouseDown}\n                >\n                  {resolvedLeadingIcons.map((node, idx) => (\n                    <span\n                      key={idx}\n                      className=\"flex items-center justify-center\"\n                    >\n                      {node}\n                    </span>\n                  ))}\n                </div>\n              )}\n\n              {hasTrailingIcons && (\n                <div\n                  ref={trailingIconsRef}\n                  data-slot=\"textarea-trailing-icons\"\n                  className=\"pointer-events-auto absolute right-0 flex items-end\"\n                  style={{\n                    gap: trailingGap,\n                    paddingRight: \"var(--fp-pr-base)\",\n                    bottom: \"calc(var(--fp-pb, 0px) + 2px)\",\n                  }}\n                  onMouseDown={handleIconMouseDown}\n                >\n                  {resolvedTrailingIcons.map((node, idx) => (\n                    <span\n                      key={idx}\n                      className=\"flex items-center justify-center\"\n                    >\n                      {node}\n                    </span>\n                  ))}\n                </div>\n              )}\n            </div>\n\n            {trailingArea}\n          </div>\n        </div>\n      </div>\n    );\n  }\n);\n\nTextarea.displayName = \"Textarea\";","// src/presets/shadcn-variants/chips.tsx\r\n\r\nimport * as React from \"react\";\r\n\r\nimport type { VariantBaseProps, ChangeDetail } from \"@/variants/shared\";\r\nimport type { ShadcnTextVariantProps } from \"@/presets/shadcn-variants/text\";\r\nimport { Input } from \"@/presets/ui/input\";\r\nimport { Textarea } from \"@/presets/ui/textarea\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { X } from \"lucide-react\";\r\n\r\ntype ChipsValue = string[] | undefined;\r\ntype BaseProps = VariantBaseProps<ChipsValue>;\r\n\r\n/**\r\n * How we split text into chips when committing.\r\n */\r\nexport type ChipsSeparator =\r\n   | string\r\n   | RegExp\r\n   | (string | RegExp)[];\r\n\r\n/**\r\n * Placement of chips relative to the entry control.\r\n *\r\n * - \"inline\" → inside the same visual box (Input) or in the textarea toolbox.\r\n * - \"below\"  → chips rendered as a block underneath the field.\r\n */\r\nexport type ChipsPlacement = \"inline\" | \"below\";\r\n\r\n/**\r\n * Actions reported via ChangeDetail.meta.\r\n */\r\nexport type ChipsChangeAction = \"add\" | \"remove\" | \"clear\";\r\n\r\n/**\r\n * Extra metadata sent with onValue() via ChangeDetail.\r\n */\r\nexport interface ChipsChangeMeta {\r\n   action: ChipsChangeAction;\r\n   added?: string[];\r\n   removed?: string[];\r\n   chips: string[];\r\n}\r\n\r\n/**\r\n * Chips-only props, on top of the injected ones.\r\n */\r\nexport interface ChipsVariantProps {\r\n   /**\r\n    * Placeholder shown when there are no chips and input is empty.\r\n    */\r\n   placeholder?: string;\r\n\r\n   /**\r\n    * Separators used to split raw input into chips.\r\n    *\r\n    * - string  → split on that string\r\n    * - RegExp  → split with regex\r\n    * - array   → try each in order\r\n    *\r\n    * Default: [\",\", \";\"]\r\n    */\r\n   separators?: ChipsSeparator;\r\n\r\n   /**\r\n    * When true, pressing Enter commits the current input as chips.\r\n    * Default: true\r\n    */\r\n   addOnEnter?: boolean;\r\n\r\n   /**\r\n    * When true, pressing Tab commits the current input as chips.\r\n    * Default: true\r\n    */\r\n   addOnTab?: boolean;\r\n\r\n   /**\r\n    * When true, blurring the field commits any remaining input as chips.\r\n    * Default: true\r\n    */\r\n   addOnBlur?: boolean;\r\n\r\n   /**\r\n    * When false, duplicate chips are ignored.\r\n    * Default: false\r\n    */\r\n   allowDuplicates?: boolean;\r\n\r\n   /**\r\n    * Maximum number of chips allowed.\r\n    * Undefined → unlimited.\r\n    */\r\n   maxChips?: number;\r\n\r\n   /**\r\n    * When true, Backspace on empty input removes the last chip.\r\n    * Default: true\r\n    */\r\n   backspaceRemovesLast?: boolean;\r\n\r\n   /**\r\n    * Show a small clear-all button.\r\n    * Default: false\r\n    */\r\n   clearable?: boolean;\r\n\r\n   /**\r\n    * Called when chips are added.\r\n    */\r\n   onAddChips?(added: string[], next: string[]): void;\r\n\r\n   /**\r\n    * Called when chips are removed.\r\n    */\r\n   onRemoveChips?(removed: string[], next: string[]): void;\r\n\r\n   /**\r\n    * Optional custom chip renderer.\r\n    *\r\n    * If provided, you are responsible for calling onRemove(index)\r\n    * from your UI when you want to remove a chip.\r\n    */\r\n   renderChip?(\r\n      chip: string,\r\n      index: number,\r\n      ctx: {\r\n         remove(): void;\r\n         chips: string[];\r\n      },\r\n   ): React.ReactNode;\r\n\r\n   /**\r\n    * Optional custom overflow chip renderer.\r\n    *\r\n    * Receives the hidden count and the full chip list.\r\n    */\r\n   renderOverflowChip?(\r\n      hiddenCount: number,\r\n      chips: string[],\r\n   ): React.ReactNode;\r\n\r\n   /**\r\n    * Max number of chips to *render*.\r\n    * Extra chips are summarized as \"+N more\".\r\n    */\r\n   maxVisibleChips?: number;\r\n\r\n   /**\r\n    * Max number of characters to *display* per chip.\r\n    * The underlying value is not truncated.\r\n    */\r\n   maxChipChars?: number;\r\n\r\n   /**\r\n    * CSS max-width for chip labels (e.g. 160 or \"12rem\").\r\n    */\r\n   maxChipWidth?: number | string;\r\n\r\n   /**\r\n    * When true, the entry control is a Textarea instead of Input.\r\n    * Good for comment-style chip entry.\r\n    */\r\n   textareaMode?: boolean;\r\n\r\n   /**\r\n    * Where chips are rendered relative to the entry.\r\n    *\r\n    * Default:\r\n    * - Input mode → \"inline\"\r\n    * - Textarea mode → \"inline\"\r\n    */\r\n   placement?: ChipsPlacement;\r\n\r\n   // UI hooks\r\n   className?: string;              // outer wrapper\r\n   chipsClassName?: string;         // <div> that holds all chips\r\n   chipClassName?: string;          // each chip container\r\n   chipLabelClassName?: string;     // inner label span\r\n   chipRemoveClassName?: string;    // remove \"x\" button/span\r\n   inputClassName?: string;         // entry text input / textarea overrides\r\n}\r\n\r\n/**\r\n * We still type against ShadcnTextVariantProps so chips can reuse\r\n * size/density/icon props etc. We take control of:\r\n * - type / value / onValue\r\n * - leadingControl / trailingControl\r\n */\r\ntype TextUiProps = Omit<\r\n   ShadcnTextVariantProps,\r\n   | \"type\"\r\n   | \"inputMode\"\r\n   | \"leadingControl\"\r\n   | \"trailingControl\"\r\n   | \"value\"\r\n   | \"onValue\"\r\n>;\r\n\r\n/**\r\n * Full props for the Shadcn-based chips variant.\r\n */\r\nexport type ShadcnChipsVariantProps = TextUiProps &\r\n   ChipsVariantProps &\r\n   Pick<BaseProps, \"value\" | \"onValue\" | \"error\">;\r\n\r\n// ─────────────────────────────────────────────\r\n// Helpers\r\n// ─────────────────────────────────────────────\r\n\r\nfunction normalizeSeparators(sep?: ChipsSeparator): (string | RegExp)[] {\r\n   if (!sep) return [\",\", \";\"];\r\n   if (Array.isArray(sep)) return sep;\r\n   return [sep];\r\n}\r\n\r\nfunction splitIntoTokens(raw: string, sep?: ChipsSeparator): string[] {\r\n   const separators = normalizeSeparators(sep);\r\n   let acc: string[] = [raw];\r\n\r\n   for (const s of separators) {\r\n      const next: string[] = [];\r\n      for (const chunk of acc) {\r\n         if (!chunk) continue;\r\n         if (typeof s === \"string\") {\r\n            next.push(...chunk.split(s));\r\n         } else {\r\n            next.push(...chunk.split(s));\r\n         }\r\n      }\r\n      acc = next;\r\n   }\r\n\r\n   return acc\r\n      .map((t) => t.trim())\r\n      .filter((t) => t.length > 0);\r\n}\r\n\r\n// ─────────────────────────────────────────────\r\n// Component\r\n// ─────────────────────────────────────────────\r\n\r\nexport const ShadcnChipsVariant = React.forwardRef<\r\n   HTMLInputElement | HTMLTextAreaElement,\r\n   ShadcnChipsVariantProps\r\n>(function ShadcnChipsVariant(props, ref) {\r\n   const {\r\n      // variant base bits\r\n      value,\r\n      onValue,\r\n      error,\r\n\r\n      // chips behaviour\r\n      placeholder,\r\n      separators,\r\n      addOnEnter = true,\r\n      addOnTab = true,\r\n      addOnBlur = true,\r\n      allowDuplicates = false,\r\n      maxChips,\r\n      backspaceRemovesLast = true,\r\n      clearable = false,\r\n      onAddChips,\r\n      onRemoveChips,\r\n      renderChip,\r\n      renderOverflowChip,\r\n      maxVisibleChips,\r\n      maxChipChars,\r\n      maxChipWidth,\r\n      textareaMode = false,\r\n      placement,\r\n\r\n      // UI classNames\r\n      className,\r\n      chipsClassName,\r\n      chipClassName,\r\n      chipLabelClassName,\r\n      chipRemoveClassName,\r\n      inputClassName,\r\n\r\n      // rest of text UI bits (size, density, icons, etc.)\r\n      ...restTextProps\r\n   } = props;\r\n\r\n   const hasInvalidIncomingValue =\n      value !== undefined && !Array.isArray(value);\n\n   React.useEffect(() => {\n      if (process.env.NODE_ENV === \"production\") return;\n      if (!hasInvalidIncomingValue) return;\n\n      // Chips always render from an array; non-array controlled values\n      // are treated as empty to prevent runtime crashes.\n      // eslint-disable-next-line no-console\n      console.warn(\n         \"[form-palette] ShadcnChipsVariant expected `value` to be `string[] | undefined`; received:\",\n         value,\n      );\n   }, [hasInvalidIncomingValue, value]);\n\n   const chips = React.useMemo(\n      () => (Array.isArray(value) ? value : []),\n      [value],\n   );\n   const hasChips = chips.length > 0;\r\n\r\n   const [inputText, setInputText] = React.useState(\"\");\r\n\r\n   // ─────────────────────────────────────────────\r\n   // Value emit\r\n   // ─────────────────────────────────────────────\r\n\r\n   const emitChange = React.useCallback(\r\n      (\r\n         nextChips: string[],\r\n         meta: Omit<ChipsChangeMeta, \"chips\">,\r\n      ) => {\r\n         const detail: ChangeDetail<ChipsChangeMeta> = {\r\n            source: \"variant\",\r\n            raw: nextChips,\r\n            nativeEvent: undefined,\r\n            meta: {\r\n               ...meta,\r\n               chips: nextChips,\r\n            },\r\n         };\r\n         onValue?.(nextChips.length ? nextChips : undefined, detail);\r\n      },\r\n      [onValue],\r\n   );\r\n\r\n   const commitFromRaw = React.useCallback(\r\n      (raw: string) => {\r\n         const tokens = splitIntoTokens(raw, separators);\r\n         if (!tokens.length) return;\r\n\r\n         let next = [...chips];\r\n         const added: string[] = [];\r\n\r\n         for (const token of tokens) {\r\n            if (!allowDuplicates && next.includes(token)) continue;\r\n            if (typeof maxChips === \"number\" && next.length >= maxChips) {\r\n               break;\r\n            }\r\n            next.push(token);\r\n            added.push(token);\r\n         }\r\n\r\n         if (!added.length) return;\r\n\r\n         emitChange(next, { action: \"add\", added });\r\n         onAddChips?.(added, next);\r\n         setInputText(\"\");\r\n      },\r\n      [chips, separators, allowDuplicates, maxChips, emitChange, onAddChips],\r\n   );\r\n\r\n   const handleRemoveAt = React.useCallback(\r\n      (index: number) => {\r\n         if (index < 0 || index >= chips.length) return;\r\n         const removed = [chips[index]];\r\n         const next = chips.filter((_, i) => i !== index);\r\n\r\n         emitChange(next, { action: \"remove\", removed });\r\n         onRemoveChips?.(removed, next);\r\n      },\r\n      [chips, emitChange, onRemoveChips],\r\n   );\r\n\r\n   const handleClear = React.useCallback(\r\n      (ev?: React.MouseEvent) => {\r\n         ev?.preventDefault();\r\n         ev?.stopPropagation();\r\n         if (!chips.length) return;\r\n         emitChange([], { action: \"clear\", removed: [...chips] });\r\n         onRemoveChips?.([...chips], []);\r\n         setInputText(\"\");\r\n      },\r\n      [chips, emitChange, onRemoveChips],\r\n   );\r\n\r\n   // ─────────────────────────────────────────────\r\n   // Entry events (Input or Textarea)\r\n   // ─────────────────────────────────────────────\r\n\r\n   const handleEntryChange = React.useCallback(\r\n      (\r\n         event:\r\n            | React.ChangeEvent<HTMLInputElement>\r\n            | React.ChangeEvent<HTMLTextAreaElement>,\r\n      ) => {\r\n         const next = event.target.value ?? \"\";\r\n         setInputText(next);\r\n      },\r\n      [],\r\n   );\r\n\r\n   const handleEntryKeyDown = React.useCallback(\r\n      (\r\n         event:\r\n            | React.KeyboardEvent<HTMLInputElement>\r\n            | React.KeyboardEvent<HTMLTextAreaElement>,\r\n      ) => {\r\n         const key = event.key;\r\n\r\n         if (key === \"Enter\" && addOnEnter) {\r\n            event.preventDefault();\r\n            if (inputText.trim().length) {\r\n               commitFromRaw(inputText);\r\n            }\r\n            return;\r\n         }\r\n\r\n         if (key === \"Tab\" && addOnTab && inputText.trim().length) {\r\n            event.preventDefault();\r\n            commitFromRaw(inputText);\r\n            return;\r\n         }\r\n\r\n         // Backspace on empty input → remove last chip\r\n         if (\r\n            key === \"Backspace\" &&\r\n            backspaceRemovesLast &&\r\n            !inputText.length &&\r\n            chips.length\r\n         ) {\r\n            event.preventDefault();\r\n            handleRemoveAt(chips.length - 1);\r\n            return;\r\n         }\r\n      },\r\n      [\r\n         inputText,\r\n         addOnEnter,\r\n         addOnTab,\r\n         backspaceRemovesLast,\r\n         chips.length,\r\n         commitFromRaw,\r\n         handleRemoveAt,\r\n      ],\r\n   );\r\n\r\n   const handleEntryBlur = React.useCallback(\r\n      (\r\n         event:\r\n            | React.FocusEvent<HTMLInputElement>\r\n            | React.FocusEvent<HTMLTextAreaElement>,\r\n      ) => {\r\n         if (addOnBlur && inputText.trim().length) {\r\n            commitFromRaw(inputText);\r\n         }\r\n\r\n         // Forward to host onBlur if provided in restTextProps\r\n         const anyProps = restTextProps as any;\r\n         const hostOnBlur = anyProps?.onBlur as\r\n            | ((e: typeof event) => void)\r\n            | undefined;\r\n         hostOnBlur?.(event);\r\n      },\r\n      [addOnBlur, inputText, commitFromRaw, restTextProps],\r\n   );\r\n\r\n   const effectivePlaceholder =\r\n      placeholder ?? (hasChips ? \"\" : \"Add item…\");\r\n\r\n   // ─────────────────────────────────────────────\r\n   // Chip rendering (maxVisible / overflow / truncation)\r\n   // ─────────────────────────────────────────────\r\n\r\n   let visibleChips = chips;\r\n   let hiddenCount = 0;\r\n\r\n   if (\r\n      typeof maxVisibleChips === \"number\" &&\r\n      maxVisibleChips > 0 &&\r\n      chips.length > maxVisibleChips\r\n   ) {\r\n      visibleChips = chips.slice(0, maxVisibleChips);\r\n      hiddenCount = chips.length - visibleChips.length;\r\n   }\r\n\r\n   const maxWidthStyle: React.CSSProperties | undefined =\r\n      maxChipWidth !== undefined\r\n         ? {\r\n            maxWidth:\r\n               typeof maxChipWidth === \"number\"\r\n                  ? `${maxChipWidth}px`\r\n                  : maxChipWidth,\r\n         }\r\n         : undefined;\r\n\r\n   const baseChipClasses = textareaMode\r\n      ? \"inline-flex min-w-0 gap-1 items-center justify-between rounded-md bg-muted px-2 py-2 text-muted-foreground\"\r\n      : \"inline-flex max-w-full items-center gap-1 rounded bg-muted px-2 py-0.5 text-muted-foreground hover:bg-muted/80\";\r\n\r\n   const baseRemoveClasses = textareaMode\r\n      ? \"cursor-pointer text-[16px] opacity-70 hover:opacity-100 mt-0.5\"\r\n      : \"cursor-pointer text-[16px] opacity-70 hover:opacity-100\";\r\n\r\n   const chipNodes = visibleChips.map((chip, index) => {\r\n      if (renderChip) {\r\n         return (\r\n            <React.Fragment key={`${chip}-${index}`}>\r\n               {renderChip(chip, index, {\r\n                  remove: () => handleRemoveAt(index),\r\n                  chips,\r\n               })}\r\n            </React.Fragment>\r\n         );\r\n      }\r\n\r\n      let label = chip;\r\n      if (\r\n         typeof maxChipChars === \"number\" &&\r\n         maxChipChars > 0 &&\r\n         label.length > maxChipChars\r\n      ) {\r\n         label = label.slice(0, maxChipChars) + \"…\";\r\n      }\r\n\r\n      return (\r\n         <button\r\n            key={`${chip}-${index}`}\r\n            type=\"button\"\r\n            className={cn(baseChipClasses, chipClassName)}\r\n            onClick={(e) => {\r\n               e.preventDefault();\r\n            }}\r\n            data-slot=\"chip\"\r\n         >\r\n            <span\r\n               className={cn(\r\n                  \"truncate\",\r\n                  chipLabelClassName,\r\n               )}\r\n               style={maxWidthStyle}\r\n            >\r\n               {label}\r\n            </span>\r\n            <span\r\n               className={cn(baseRemoveClasses, chipRemoveClassName)}\r\n               onClick={(e) => {\r\n                  e.preventDefault();\r\n                  e.stopPropagation();\r\n                  handleRemoveAt(index);\r\n               }}\r\n               aria-hidden=\"true\"\r\n            >\r\n               <X size={16} />\r\n            </span>\r\n         </button>\r\n      );\r\n   });\r\n\r\n   if (hiddenCount > 0) {\r\n      const defaultOverflow = (\r\n         <span\r\n            className={cn(\r\n               baseChipClasses,\r\n               \"cursor-default\",\r\n               chipClassName,\r\n            )}\r\n            data-slot=\"chip-overflow\"\r\n         >\r\n            +{hiddenCount} more\r\n         </span>\r\n      );\r\n\r\n      const node =\r\n         renderOverflowChip?.(hiddenCount, chips) ?? defaultOverflow;\r\n\r\n      chipNodes.push(\r\n         <React.Fragment key=\"__overflow\">\r\n            {node}\r\n         </React.Fragment>,\r\n      );\r\n   }\r\n\r\n   // ─────────────────────────────────────────────\r\n   // Placement (inline vs below)\r\n   // ─────────────────────────────────────────────\r\n\r\n   const effectivePlacement: ChipsPlacement = textareaMode\r\n      ? (placement ?? \"inline\")\r\n      : (placement ?? \"inline\");\r\n\r\n   const inlinePlacement = effectivePlacement === \"inline\";\r\n\r\n   // Input-mode inline controls (inside the Input frame)\r\n   let leadingControl: React.ReactNode | undefined;\r\n   let trailingControl: React.ReactNode | undefined;\r\n\r\n   // Below-the-field block (both modes)\r\n   let chipsBelowBlock: React.ReactNode | undefined;\r\n\r\n   // Textarea-mode upper toolbox (instead of leadingControl/trailingControl)\r\n   let textareaUpperControl: React.ReactNode | undefined;\r\n   let textareaUpperClassName: string | undefined;\r\n\r\n   if (hasChips) {\r\n      if (textareaMode) {\r\n         if (inlinePlacement) {\r\n            // chips live in the upper toolbox row, single-line row by default\r\n            textareaUpperControl = (\r\n               <div\r\n                  data-slot=\"chips-upper\"\r\n                  className={cn(\r\n                     \"flex items-center gap-1 text-xs flex-wrap\",\r\n                     chipsClassName,\r\n                  )}\r\n               >\r\n                  {chipNodes}\r\n                  {clearable && (\r\n                     <button\r\n                        type=\"button\"\r\n                        onClick={handleClear}\r\n                        className=\"ml-auto inline-flex h-6 px-2 items-center justify-center rounded-full text-[0.72rem] text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\"\r\n                        data-slot=\"chips-clear\"\r\n                     >\r\n                        Clear\r\n                     </button>\r\n                  )}\r\n               </div>\r\n            );\r\n            textareaUpperClassName = chipsClassName;\r\n         } else {\r\n            // textareaMode + placement=below → block under the textarea box\r\n            chipsBelowBlock = (\r\n               <div\r\n                  className={cn(\r\n                     \"mt-2 flex items-center gap-2 text-xs\",\r\n                     chipsClassName,\r\n                  )}\r\n                  data-slot=\"chips-list-below\"\r\n               >\r\n                  {chipNodes}\r\n                  {clearable && (\r\n                     <button\r\n                        type=\"button\"\r\n                        onClick={handleClear}\r\n                        className=\"self-start inline-flex h-6 px-2 items-center justify-center rounded-full text-[0.72rem] text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\"\r\n                        data-slot=\"chips-clear\"\r\n                     >\r\n                        Clear\r\n                     </button>\r\n                  )}\r\n               </div>\r\n            );\r\n         }\r\n      } else {\r\n         // INPUT MODE\r\n         if (inlinePlacement) {\r\n            leadingControl = (\r\n               <div\r\n                  className={cn(\r\n                     \"flex min-w-0 flex-row items-center gap-1 pr-1 py-1 text-xs pl-2\",\r\n                     chipsClassName,\r\n                  )}\r\n                  data-slot=\"chips-list\"\r\n               >\r\n                  {chipNodes}\r\n               </div>\r\n            );\r\n\r\n            if (clearable) {\r\n               trailingControl = (\r\n                  <div\r\n                     className=\"flex h-full items-center pr-1\"\r\n                     data-slot=\"chips-trailing\"\r\n                  >\r\n                     <button\r\n                        type=\"button\"\r\n                        onClick={handleClear}\r\n                        className=\"inline-flex h-6 w-6 items-center justify-center rounded-full text-xs text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\"\r\n                        data-slot=\"chips-clear\"\r\n                        aria-label=\"Clear chips\"\r\n                     >\r\n                        ×\r\n                     </button>\r\n                  </div>\r\n               );\r\n            }\r\n         } else {\r\n            chipsBelowBlock = (\r\n               <div\r\n                  className={cn(\r\n                     \"mt-1 flex flex-row items-center gap-1 text-xs\",\r\n                     chipsClassName,\r\n                  )}\r\n                  data-slot=\"chips-list-below\"\r\n               >\r\n                  {chipNodes}\r\n                  {clearable && (\r\n                     <button\r\n                        type=\"button\"\r\n                        onClick={handleClear}\r\n                        className=\"inline-flex h-6 px-2 items-center justify-center rounded-full text-[0.72rem] text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\"\r\n                        data-slot=\"chips-clear\"\r\n                     >\r\n                        Clear\r\n                     </button>\r\n                  )}\r\n               </div>\r\n            );\r\n         }\r\n      }\r\n   }\r\n\r\n   const joinControls = !textareaMode && inlinePlacement && hasChips;\r\n   const extendBoxToControls = !textareaMode && inlinePlacement && hasChips;\r\n\r\n   // ─────────────────────────────────────────────\r\n   // Entry control (Input vs Textarea)\r\n   // ─────────────────────────────────────────────\r\n\r\n   return (\r\n      <div className={className} data-slot=\"chips-field\">\r\n         {textareaMode ? (\r\n            <>\r\n               {/* @ts-ignore */}\r\n               <Textarea\r\n                  ref={ref as any}\r\n                  {...restTextProps}\r\n                  value={inputText}\r\n                  onChange={handleEntryChange}\r\n                  onKeyDown={handleEntryKeyDown as any}\r\n                  onBlur={handleEntryBlur as any}\r\n                  extendBoxToToolbox={effectivePlacement === \"inline\"}\r\n                  placeholder={effectivePlaceholder}\r\n                  // textarea-specific defaults\r\n                  autoResize={true}\r\n                  rows={1}\r\n                  upperControl={textareaUpperControl}\r\n                  upperControlClassName={textareaUpperClassName}\r\n                  inputClassName={inputClassName}\r\n                  aria-invalid={error ? \"true\" : undefined}\r\n               />\r\n               {!inlinePlacement && hasChips && chipsBelowBlock}\r\n            </>\r\n         ) : (\r\n            <>\r\n               <Input\r\n                  ref={ref as any}\r\n                  {...restTextProps}\r\n                  type=\"text\"\r\n                  // The Input's value is the *draft* text, not the chips.\r\n                  value={inputText}\r\n                  onChange={handleEntryChange as any}\r\n                  onKeyDown={handleEntryKeyDown as any}\r\n                  onBlur={handleEntryBlur as any}\r\n                  placeholder={effectivePlaceholder}\r\n                  // ONLY pass controls when chips are inline\r\n                  leadingControl={inlinePlacement ? leadingControl : undefined}\r\n                  trailingControl={inlinePlacement ? trailingControl : undefined}\r\n                  // Only flip into \"group box\" mode when there are chips inline\r\n                  joinControls={joinControls}\r\n                  extendBoxToControls={extendBoxToControls}\r\n                  inputClassName={cn(\r\n                     \"min-w-[4ch] flex-1 py-0\",\r\n                     inlinePlacement &&\r\n                     hasChips &&\r\n                     \"bg-transparent border-none shadow-none outline-none\",\r\n                     inputClassName,\r\n                  )}\r\n                  aria-invalid={error ? \"true\" : undefined}\r\n               />\r\n               {!inlinePlacement && hasChips && chipsBelowBlock}\r\n            </>\r\n         )}\r\n      </div>\r\n   );\r\n});\r\n\r\nShadcnChipsVariant.displayName = \"ShadcnChipsVariant\";\r\n\r\nexport default ShadcnChipsVariant;\n","import ShadcnChipsVariant from \"@/presets/shadcn-variants/chips\";\r\nimport { VariantModuleFor } from \"@/schema/variant\";\r\n\r\n\r\nexport const chipVariant: VariantModuleFor<\"chips\"> = {\r\n   variant: \"chips\",\r\n   Variant: ShadcnChipsVariant as any,\r\n   // Optional layout defaults – tweak as you like\r\n   defaults: {\r\n      layout: {\r\n         fullWidth: true,\r\n         // You can set defaultSize/defaultDensity here if you want:\r\n         // defaultSize: \"md\",\r\n         // defaultDensity: \"normal\",\r\n      },\r\n   },\r\n   meta: {\r\n      label: \"Chips\",\r\n      description: \"Chips input allowing multiple selections.\",\r\n      tags: [\"chips\", \"multi-select\", \"tags\"],\r\n   },\r\n}","// src/presets/shadcn-variants/textarea.tsx\r\n\r\nimport * as React from \"react\";\r\n\r\nimport type { VariantBaseProps, ChangeDetail } from \"@/variants/shared\";\r\nimport { Textarea } from \"@/presets/ui/textarea\";\r\nimport type { TextareaProps as UiTextareaProps } from \"@/presets/ui/textarea\";\r\n\r\ntype TextareaValue = string | undefined;\r\ntype BaseProps = VariantBaseProps<TextareaValue>;\r\n\r\n/**\r\n * Full props for the Shadcn-based textarea variant.\r\n *\r\n * - Reuses all UI-level behaviour from `Textarea` (autoResize, upperControl,\r\n *   leading/trailing controls, icons, size/density, padding knobs, etc.).\r\n * - Takes over `value` / `onChange` so it can emit through `onValue` with\r\n *   a `ChangeDetail`.\r\n */\r\nexport interface ShadcnTextareaVariantProps\r\n   extends Omit<UiTextareaProps, \"value\" | \"defaultValue\" | \"onChange\">,\r\n   Pick<BaseProps, \"value\" | \"onValue\" | \"error\"> { }\r\n\r\nexport const ShadcnTextareaVariant = React.forwardRef<\r\n   HTMLTextAreaElement,\r\n   ShadcnTextareaVariantProps\r\n>(function ShadcnTextareaVariant(props, ref) {\r\n   const {\r\n      value,\r\n      onValue,\r\n      error,\r\n      // everything else goes straight to the UI Textarea\r\n      ...rest\r\n   } = props;\r\n\r\n   const handleChange = React.useCallback(\r\n      (event: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n         const next = event.target.value ?? \"\";\r\n\r\n         const detail: ChangeDetail = {\r\n            source: \"variant\",\r\n            raw: next,\r\n            nativeEvent: event,\r\n            meta: undefined,\r\n         };\r\n\r\n         // empty string → undefined, same convention as text/chips\r\n         onValue?.(next.length ? next : undefined, detail);\r\n      },\r\n      [onValue],\r\n   );\r\n\r\n   return (\r\n      <Textarea\r\n         ref={ref}\r\n         {...rest}\r\n         value={value ?? \"\"}\r\n         onChange={handleChange}\r\n         aria-invalid={error ? \"true\" : undefined}\r\n      />\r\n   );\r\n});\r\n\r\nShadcnTextareaVariant.displayName = \"ShadcnTextareaVariant\";\r\n\r\nexport default ShadcnTextareaVariant;","import ShadcnTextareaVariant from \"@/presets/shadcn-variants/textarea\";\r\nimport { VariantModuleFor } from \"@/schema/variant\";\r\n\r\n\r\nexport const textareaVariant: VariantModuleFor<\"textarea\"> = {\r\n   variant: \"textarea\",\r\n   Variant: ShadcnTextareaVariant as any,\r\n   // Optional layout defaults – tweak as you like\r\n   defaults: {\r\n      layout: {\r\n         fullWidth: true,\r\n         // You can set defaultSize/defaultDensity here if you want:\r\n         // defaultSize: \"md\",\r\n         // defaultDensity: \"normal\",\r\n      },\r\n   },\r\n   meta: {\r\n      label: \"Textarea\",\r\n      description: \"Multi-line text input area.\",\r\n      tags: [\"text\", \"multiline\", \"comments\", \"notes\"],\r\n   },\r\n}","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Switch({\n  className,\n  thumbClassName,\n  ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & { thumbClassName?: string }) {\n  return (\n    <SwitchPrimitive.Root\n      data-slot=\"switch\"\n      className={cn(\n        \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n        className\n      )}\n      {...props}\n    >\n      <SwitchPrimitive.Thumb\n        data-slot=\"switch-thumb\"\n        className={cn(\n          \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\", thumbClassName\n        )}\n      />\n    </SwitchPrimitive.Root>\n  )\n}\n\nexport { Switch }\n","// src/presets/shadcn-variants/toggle.tsx\r\n\r\nimport * as React from \"react\";\r\n\r\nimport type { VariantBaseProps, ChangeDetail } from \"@/variants/shared\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Switch } from \"@/presets/ui/switch\"; // adjust path if your Switch lives elsewhere\r\n\r\ntype ToggleValue = boolean | undefined;\r\ntype BaseProps = VariantBaseProps<ToggleValue>;\r\n\r\ntype Size = \"sm\" | \"md\" | \"lg\";\r\ntype Density = \"default\" | \"dense\";\r\n\r\n/**\r\n * UI props specific to the Shadcn-based toggle.\r\n *\r\n * This uses Switch as the underlying control, but we keep\r\n * the API surface small and focused.\r\n */\r\nexport interface ShadcnToggleUiProps\r\n   extends Omit<\r\n      React.ComponentProps<typeof Switch>,\r\n      \"checked\" | \"onCheckedChange\" | \"className\" | 'defaultValue' | 'onChange' | 'value'\r\n   > {\r\n   /**\r\n    * Visual size of the switch / text.\r\n    * Default: \"md\".\r\n    */\r\n   size?: Size;\r\n\r\n   /**\r\n    * Row density (vertical padding & gap).\r\n    * Default: \"default\".\r\n    */\r\n   density?: Density;\r\n\r\n   /**\r\n    * Place the switch on the left or right of the state text.\r\n    * Default: \"left\".\r\n    */\r\n   controlPlacement?: \"left\" | \"right\";\r\n\r\n   /**\r\n    * Optional state text shown next to the control when ON.\r\n    */\r\n   onText?: React.ReactNode;\r\n\r\n   /**\r\n    * Optional state text shown next to the control when OFF.\r\n    */\r\n   offText?: React.ReactNode;\r\n\r\n   /**\r\n    * Wrapper class for the whole toggle row.\r\n    */\r\n   className?: string;\r\n\r\n   /**\r\n    * Extra classes for the Switch root.\r\n    */\r\n   switchClassName?: string;\r\n\r\n   /**\r\n    * Extra classes for the Switch thumb.\r\n    * (Your patched Switch should support thumbClassName.)\r\n    */\r\n   switchThumbClassName?: string;\r\n}\r\n\r\n/**\r\n * Full props for the Shadcn-based toggle variant.\r\n *\r\n * We only pick value/onValue/error from the variant base props;\r\n * everything else (id, disabled, aria-*) flows via Switch props.\r\n */\r\nexport type ShadcnToggleVariantProps = ShadcnToggleUiProps &\r\n   Pick<BaseProps, \"value\" | \"onValue\" | \"error\">;\r\n\r\n// ─────────────────────────────────────────────\r\n// Helpers\r\n// ─────────────────────────────────────────────\r\n\r\nfunction rowGap(density: Density) {\r\n   return density === \"dense\" ? \"gap-2\" : \"gap-3\";\r\n}\r\n\r\nfunction rowPadding(density: Density) {\r\n   return density === \"dense\" ? \"py-0.5\" : \"py-1\";\r\n}\r\n\r\nfunction textSize(size: Size) {\r\n   if (size === \"sm\") return \"text-sm\";\r\n   if (size === \"lg\") return \"text-base\";\r\n   return \"text-sm\";\r\n}\r\n\r\n// Map size → Switch track + thumb sizing\r\nfunction switchRootSize(size: Size) {\r\n   if (size === \"sm\") return \"h-5 w-9\";\r\n   if (size === \"lg\") return \"h-7 w-12\";\r\n   // default shadcn-ish base\r\n   return \"h-[1.15rem] w-8\";\r\n}\r\n\r\nfunction switchThumbSize(size: Size) {\r\n   if (size === \"sm\") return \"size-3.5\";\r\n   if (size === \"lg\") return \"size-5\";\r\n   return \"size-4\";\r\n}\r\n\r\n// ─────────────────────────────────────────────\r\n// Component\r\n// ─────────────────────────────────────────────\r\n\r\nexport const ShadcnToggleVariant = React.forwardRef<\r\n   HTMLButtonElement,\r\n   ShadcnToggleVariantProps\r\n>(function ShadcnToggleVariant(props, _ref) {\r\n   const {\r\n      // variant bits\r\n      value,\r\n      onValue,\r\n      error,\r\n\r\n      // UI config\r\n      size = \"md\",\r\n      density = \"default\",\r\n      controlPlacement = \"left\",\r\n      onText,\r\n      offText,\r\n      className,\r\n      switchClassName,\r\n      switchThumbClassName,\r\n\r\n      // Switch passthroughs\r\n      disabled,\r\n      id,\r\n      \"aria-describedby\": describedBy,\r\n      ...restSwitchProps\r\n   } = props;\r\n\r\n   const checked = !!value;\r\n\r\n   const handleToggle = React.useCallback(\r\n      (next: boolean) => {\r\n         const nextVal = Boolean(next);\r\n         const detail: ChangeDetail = {\r\n            source: \"variant\",\r\n            raw: nextVal,\r\n            nativeEvent: undefined,\r\n            meta: undefined,\r\n         };\r\n         onValue?.(nextVal, detail);\r\n      },\r\n      [onValue],\r\n   );\r\n\r\n   const rowCls = cn(\r\n      \"flex w-fit items-center\",\r\n      rowGap(density),\r\n      rowPadding(density),\r\n   );\r\n\r\n   const stateText =\r\n      onText != null || offText != null ? (\r\n         <span\r\n            className={cn(\"select-none text-muted-foreground\", textSize(size))}\r\n         >\r\n            {checked ? onText : offText}\r\n         </span>\r\n      ) : null;\r\n\r\n   const switchEl = (\r\n      <Switch\r\n         id={id}\r\n         checked={checked}\r\n         onCheckedChange={handleToggle}\r\n         disabled={disabled}\r\n         aria-describedby={describedBy}\r\n         aria-checked={checked}\r\n         className={cn(switchRootSize(size), switchClassName)}\r\n         thumbClassName={cn(switchThumbSize(size), switchThumbClassName)}\r\n         {...restSwitchProps}\r\n      />\r\n   );\r\n\r\n   return (\r\n      <div\r\n         data-slot=\"toggle-field\"\r\n         className={cn(\r\n            \"w-fit\",\r\n            disabled && \"opacity-50 cursor-not-allowed\",\r\n            className,\r\n         )}\r\n         aria-disabled={disabled || undefined}\r\n         aria-invalid={error ? \"true\" : undefined}\r\n      >\r\n         <div className={rowCls}>\r\n            {controlPlacement === \"left\" ? (\r\n               <>\r\n                  {switchEl}\r\n                  {stateText}\r\n               </>\r\n            ) : (\r\n               <>\r\n                  {stateText}\r\n                  {switchEl}\r\n               </>\r\n            )}\r\n         </div>\r\n      </div>\r\n   );\r\n});\r\n\r\nShadcnToggleVariant.displayName = \"ShadcnToggleVariant\";\r\n\r\nexport default ShadcnToggleVariant;","// src/variants/core/toggle.ts\r\n\r\nimport type { VariantModuleFor } from \"@/schema/variant\";\r\nimport type { FieldLayoutConfig } from \"@/schema/input-field\";\r\nimport ShadcnToggleVariant from \"@/presets/shadcn-variants/toggle\";\r\n\r\nexport const toggleLayoutDefaults: FieldLayoutConfig = {\r\n   // Render label + control in a single row\r\n   inline: true,\r\n\r\n   // Semantically: label is to the \"right\" of the control for this variant.\r\n   // (Your InputField can use this to decide macro-level positioning.)\r\n   labelPlacement: \"right\",\r\n\r\n   // Attach all helpers to the label root by default.\r\n   // Sublabel will still use its own placement (default: \"right\"),\r\n   // but it's logically anchored to the label block.\r\n   relativeRoots: {\r\n      sublabel: \"label\",\r\n      description: \"label\",\r\n      helpText: \"label\",\r\n      errorText: \"label\",\r\n   },\r\n\r\n   fullWidth: false,\r\n\r\n   // Within the label root, show error first, then description, then help,\r\n   // then sublabel (all still respecting their individual placements).\r\n   ordering: {\r\n      label: [\"errorText\", \"description\", \"helpText\", \"sublabel\"],\r\n      // For this variant we don't really use input-root helpers,\r\n      // but we keep the key for completeness.\r\n      input: [],\r\n   },\r\n};\r\n\r\nexport const ToggleVariantModule: VariantModuleFor<\"toggle\"> = {\r\n   variant: \"toggle\",\r\n   Variant: ShadcnToggleVariant as any,\r\n   defaults: {\r\n      layout: toggleLayoutDefaults,\r\n   },\r\n   meta: {\r\n      label: \"Toggle\",\r\n      description: \"Boolean on/off switch\",\r\n      tags: [\"boolean\", \"toggle\", \"switch\"],\r\n   },\r\n};\r\n\r\nexport default ToggleVariantModule;","// src/lib/group-layout.ts\r\nimport type * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport type GroupLayoutMode = \"list\" | \"grid\";\r\n\r\nexport interface BuildGroupLayoutOptions {\r\n    layout: GroupLayoutMode;\r\n    columns: number;\r\n    itemGapPx?: number;\r\n\r\n    // outer classes\r\n    groupClassName?: string;\r\n    className?: string; // alias fallback used by some variants\r\n\r\n    // option row classes\r\n    optionClassName?: string;\r\n\r\n    // text classes\r\n    labelClassName?: string;\r\n    descriptionClassName?: string;\r\n\r\n    // precomputed style tokens that differ per variant\r\n    densityPaddingClass: string;\r\n    labelTextSizeClass: string;\r\n    descriptionTextSizeClass: string;\r\n}\r\n\r\nexport interface BuildGroupLayoutResult {\r\n    groupStyle: React.CSSProperties | undefined;\r\n    groupClasses: string;\r\n    baseOptionClass: string;\r\n    labelClassesBase: string;\r\n    descriptionClassesBase: string;\r\n}\r\n\r\n/**\r\n * Shared helper to compute group layout style + classes for list/grid option groups.\r\n * Variants provide their own density and text-size class tokens.\r\n */\r\nexport function buildGroupLayoutClasses(\r\n    opts: BuildGroupLayoutOptions\r\n): BuildGroupLayoutResult {\r\n    const {\r\n        layout,\r\n        columns,\r\n        itemGapPx,\r\n        groupClassName,\r\n        className,\r\n        optionClassName,\r\n        labelClassName,\r\n        descriptionClassName,\r\n        densityPaddingClass,\r\n        labelTextSizeClass,\r\n        descriptionTextSizeClass,\r\n    } = opts;\r\n\r\n    let groupStyle: React.CSSProperties | undefined;\r\n    if (!itemGapPx) {\r\n        if (layout === \"grid\") {\r\n            groupStyle = {\r\n                gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,\r\n            } as React.CSSProperties;\r\n        }\r\n    } else if (layout === \"list\") {\r\n        groupStyle = { rowGap: itemGapPx } as React.CSSProperties;\r\n    } else {\r\n        groupStyle = {\r\n            gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,\r\n            gap: itemGapPx,\r\n        } as React.CSSProperties;\r\n    }\r\n\r\n    const groupClasses = cn(\r\n        layout === \"grid\" ? \"grid\" : \"flex flex-col\",\r\n        groupClassName ?? className\r\n    );\r\n\r\n    const baseOptionClass = cn(\r\n        \"relative flex items-start\",\r\n        \"data-[disabled=true]:opacity-60 data-[disabled=true]:cursor-not-allowed\",\r\n        densityPaddingClass,\r\n        optionClassName\r\n    );\r\n\r\n    const labelClassesBase = cn(\r\n        \"font-medium text-foreground\",\r\n        labelTextSizeClass,\r\n        labelClassName\r\n    );\r\n\r\n    const descriptionClassesBase = cn(\r\n        \"mt-0.5 text-muted-foreground\",\r\n        descriptionTextSizeClass,\r\n        descriptionClassName\r\n    );\r\n\r\n    return {\r\n        groupStyle,\r\n        groupClasses,\r\n        baseOptionClass,\r\n        labelClassesBase,\r\n        descriptionClassesBase,\r\n    };\r\n}\r\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n  \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n  {\n    variants: {\n      variant: {\n        default:\n          \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n        secondary:\n          \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n        destructive:\n          \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n        outline:\n          \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n)\n\nfunction Badge({\n  className,\n  variant,\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"span\"> &\n  VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n  const Comp = asChild ? Slot : \"span\"\n\n  return (\n    <Comp\n      data-slot=\"badge\"\n      className={cn(badgeVariants({ variant }), className)}\n      {...props}\n    />\n  )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction RadioGroup({\n  className,\n  ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n  return (\n    <RadioGroupPrimitive.Root\n      data-slot=\"radio-group\"\n      className={cn(\"grid gap-3\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction RadioGroupItem({\n  className,\n  ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n  return (\n    <RadioGroupPrimitive.Item\n      data-slot=\"radio-group-item\"\n      className={cn(\n        \"border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n        className\n      )}\n      {...props}\n    >\n      <RadioGroupPrimitive.Indicator\n        data-slot=\"radio-group-indicator\"\n        className=\"relative flex items-center justify-center\"\n      >\n        <CircleIcon className=\"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2\" />\n      </RadioGroupPrimitive.Indicator>\n    </RadioGroupPrimitive.Item>\n  )\n}\n\nexport { RadioGroup, RadioGroupItem }\n","// noinspection SuspiciousTypeOfGuard\n\nimport { SelectPrimitive } from \"@/variants/helpers/selection-summary\";\nimport React from \"react\";\nimport { ShadcnTreeSelectVariantProps } from \"@/presets/shadcn-variants/treeselect\";\nimport {\n    NormalizedTreeItem,\n    TreeKey,\n    TreeSelectOption,\n} from \"@/presets/shadcn-variants/tree-select-types\";\n\n/* ──────────────────────────────────────────────────────────────\n * Types\n * ────────────────────────────────────────────────────────────── */\n\nexport type OptionRenderFn = (...args: any[]) => React.ReactNode;\n\nexport type OptionAccessor<TItem, TValue> =\n    | ((item: TItem, index: number) => TValue)\n    | keyof TItem\n    | string\n    | null\n    | undefined;\n\nexport type OptionAccessorNoIndex<TItem, TValue> =\n    | ((item: TItem) => TValue)\n    | keyof TItem\n    | string\n    | null\n    | undefined;\n\nexport interface NormalizedOptionTag {\n    label: React.ReactNode;\n    icon?: React.ReactNode;\n    className?: string;\n    color?: string;\n    bgColor?: string;\n    onClick?: React.MouseEventHandler<HTMLSpanElement>;\n    raw: unknown;\n}\n\nexport type OptionKeyAccessor<TItem> =\n    | ((item: TItem, index: number) => React.Key)\n    | keyof TItem\n    | string\n    | null\n    | undefined;\n\nexport interface GlobalNormalizeConfig<TItem, TValue = SelectPrimitive> {\n    autoCap?: boolean;\n\n    optionLabel?: OptionAccessorNoIndex<TItem, React.ReactNode>;\n    optionValue?: OptionAccessorNoIndex<TItem, TValue>;\n    optionDescription?: OptionAccessorNoIndex<TItem, React.ReactNode>;\n    optionDisabled?: OptionAccessorNoIndex<TItem, boolean>;\n    optionIcon?: OptionAccessorNoIndex<TItem, React.ReactNode>;\n    optionKey?: OptionKeyAccessor<TItem>;\n    optionTags?: OptionAccessorNoIndex<TItem, unknown[]>;\n    optionTagLabel?: OptionAccessorNoIndex<unknown, React.ReactNode>;\n    optionTagIcon?: OptionAccessorNoIndex<unknown, React.ReactNode>;\n    optionTagClassName?: OptionAccessorNoIndex<unknown, string>;\n    optionTagColor?: OptionAccessorNoIndex<unknown, string>;\n    optionTagBgColor?: OptionAccessorNoIndex<unknown, string>;\n    optionTagOnClick?: OptionAccessorNoIndex<\n        unknown,\n        React.MouseEventHandler<HTMLSpanElement>\n    >;\n}\n\nexport interface GlobalNormalizedOption<TItem, TValue = SelectPrimitive> {\n    key: string;\n    value: TValue;\n    labelNode: React.ReactNode;\n    labelText: string;\n    description?: React.ReactNode;\n    disabled: boolean;\n    icon?: React.ReactNode;\n    tags?: NormalizedOptionTag[];\n\n    /** Option-level renderer (falls back to global renderOption in the variant) */\n    render?: OptionRenderFn;\n\n    raw: TItem;\n}\n\n/* ──────────────────────────────────────────────────────────────\n * Shared core normalizer (used by list + tree)\n * ────────────────────────────────────────────────────────────── */\n\nfunction isPrimitiveOption(raw: unknown): raw is string | number {\n    return typeof raw === \"string\" || typeof raw === \"number\";\n}\n\nfunction asObject(raw: any): any {\n    return isPrimitiveOption(raw) ? { label: String(raw), value: raw } : raw;\n}\n\n/**\n * Support option-level renderers without introducing a new prop name.\n * First function found wins.\n */\nconst RENDER_KEYS = [\n    \"render\",\n    \"renderOption\",\n    \"renderItem\",\n    \"renderLabel\",\n    \"renderer\",\n] as const;\n\nfunction resolveRender(obj: any): OptionRenderFn | undefined {\n    if (!obj) return undefined;\n\n    for (const k of RENDER_KEYS) {\n        const maybe = obj[k];\n        if (typeof maybe === \"function\") return maybe as OptionRenderFn;\n    }\n\n    return undefined;\n}\n\nfunction resolveByAccessor<TInput, TOutput>(\n    input: TInput,\n    accessor: OptionAccessorNoIndex<TInput, TOutput>,\n    fallback?: TOutput,\n): TOutput | undefined {\n    if (typeof accessor === \"function\") return accessor(input);\n    if (typeof accessor === \"string\") return (input as any)?.[accessor];\n    return fallback;\n}\n\nfunction normalizeOptionTags<TItem, TValue>(\n    raw: TItem,\n    obj: any,\n    config: GlobalNormalizeConfig<TItem, TValue>,\n): NormalizedOptionTag[] | undefined {\n    const rawTags =\n        resolveByAccessor(raw, config.optionTags) ??\n        (Array.isArray(obj?.tags) ? obj.tags : undefined);\n\n    if (!Array.isArray(rawTags) || rawTags.length === 0) return undefined;\n\n    const tags = rawTags\n        .map((tag: unknown) => {\n            const tagObj =\n                tag != null && typeof tag === \"object\"\n                    ? (tag as Record<string, unknown>)\n                    : undefined;\n\n            const label =\n                resolveByAccessor(tag, config.optionTagLabel) ??\n                tagObj?.label ??\n                (typeof tag === \"string\" || typeof tag === \"number\"\n                    ? String(tag)\n                    : undefined);\n\n            if (label === undefined || label === null || label === \"\") {\n                return null;\n            }\n\n            return {\n                label,\n                icon:\n                    resolveByAccessor(tag, config.optionTagIcon) ??\n                    (tagObj?.icon as React.ReactNode | undefined),\n                className:\n                    resolveByAccessor(tag, config.optionTagClassName) ??\n                    (tagObj?.className as string | undefined),\n                color:\n                    resolveByAccessor(tag, config.optionTagColor) ??\n                    (tagObj?.color as string | undefined),\n                bgColor:\n                    resolveByAccessor(tag, config.optionTagBgColor) ??\n                    (tagObj?.bgColor as string | undefined),\n                onClick:\n                    resolveByAccessor(tag, config.optionTagOnClick) ??\n                    (tagObj?.onClick as\n                        | React.MouseEventHandler<HTMLSpanElement>\n                        | undefined),\n                raw: tag,\n            } satisfies NormalizedOptionTag;\n        })\n        .filter(Boolean) as NormalizedOptionTag[];\n\n    return tags.length ? tags : undefined;\n}\n\nfunction resolveValue<TItem, TValue>(\n    raw: TItem,\n    obj: any,\n    index: number,\n    optionValue: GlobalNormalizeConfig<TItem, TValue>[\"optionValue\"]\n): TValue {\n    // EXACT behaviour preserved:\n    // - if fn: call with *raw*\n    // - if string: read obj[key]\n    // - else: fallback chain obj.value ?? obj.id ?? obj.key ?? String(index)\n    return typeof optionValue === \"function\"\n        ? optionValue(raw)\n        : typeof optionValue === \"string\"\n          ? (obj[optionValue] as TValue)\n          : ((obj.value ?? obj.id ?? obj.key ?? String(index)) as TValue);\n}\n\nfunction resolveLabelNode<TItem, TValue>(\n    raw: TItem,\n    obj: any,\n    value: TValue,\n    optionLabel: GlobalNormalizeConfig<TItem, TValue>[\"optionLabel\"]\n): React.ReactNode {\n    // EXACT behaviour preserved:\n    // - if fn: call with raw\n    // - if string: obj[key] ?? obj.label ?? String(value)\n    // - else: obj.label ?? String(value)\n    return typeof optionLabel === \"function\"\n        ? optionLabel(raw)\n        : typeof optionLabel === \"string\"\n          ? (obj[optionLabel] ?? obj.label ?? String(value))\n          : (obj.label ?? String(value));\n}\n\nfunction resolveDescription<TItem, TValue>(\n    raw: TItem,\n    obj: any,\n    optionDescription: GlobalNormalizeConfig<TItem, TValue>[\"optionDescription\"]\n): React.ReactNode {\n    // EXACT behaviour preserved:\n    return typeof optionDescription === \"function\"\n        ? optionDescription(raw)\n        : typeof optionDescription === \"string\"\n          ? obj[optionDescription]\n          : obj.description;\n}\n\nfunction resolveDisabled<TItem, TValue>(\n    raw: TItem,\n    obj: any,\n    optionDisabled: GlobalNormalizeConfig<TItem, TValue>[\"optionDisabled\"]\n): boolean {\n    // EXACT behaviour preserved:\n    return typeof optionDisabled === \"function\"\n        ? optionDisabled(raw)\n        : typeof optionDisabled === \"string\"\n          ? !!obj[optionDisabled]\n          : !!obj.disabled;\n}\n\nfunction resolveIcon<TItem, TValue>(\n    raw: TItem,\n    obj: any,\n    optionIcon: GlobalNormalizeConfig<TItem, TValue>[\"optionIcon\"]\n): React.ReactNode {\n    // EXACT behaviour preserved:\n    return typeof optionIcon === \"function\"\n        ? optionIcon(raw)\n        : typeof optionIcon === \"string\"\n          ? obj[optionIcon]\n          : obj.icon;\n}\n\nfunction resolveKey<TItem, TValue>(\n    raw: TItem,\n    obj: any,\n    index: number,\n    value: TValue,\n    optionKey: GlobalNormalizeConfig<TItem, TValue>[\"optionKey\"]\n): React.Key {\n    // EXACT behaviour preserved:\n    return typeof optionKey === \"function\"\n        ? optionKey(raw, index)\n        : typeof optionKey === \"string\"\n          ? (obj[optionKey] ?? (value as any) ?? index)\n          : (obj.key ?? (value as any) ?? index);\n}\n\nfunction resolveLabelText<TValue>(\n    labelNode: React.ReactNode,\n    obj: any,\n    value: TValue\n): string {\n    // EXACT behaviour preserved:\n    return typeof labelNode === \"string\"\n        ? labelNode\n        : typeof labelNode === \"number\"\n          ? String(labelNode)\n          : (obj.labelText ?? String(value));\n}\n\nfunction normalizeOne<TItem, TValue>(\n    raw: TItem,\n    index: number,\n    config: GlobalNormalizeConfig<TItem, TValue>\n): GlobalNormalizedOption<TItem, TValue> {\n    const obj = asObject(raw);\n\n    const value = resolveValue(raw, obj, index, config.optionValue);\n\n    let labelNode = resolveLabelNode(raw, obj, value, config.optionLabel);\n\n    if (config.autoCap && typeof labelNode === \"string\") {\n        labelNode = capitalizeFirst(labelNode);\n    }\n\n    const labelText = resolveLabelText(labelNode, obj, value);\n\n    const description = resolveDescription(raw, obj, config.optionDescription);\n    const disabled = resolveDisabled(raw, obj, config.optionDisabled);\n    const icon = resolveIcon(raw, obj, config.optionIcon);\n    const key = resolveKey(raw, obj, index, value, config.optionKey);\n    const tags = normalizeOptionTags(raw, obj, config);\n\n    const render = resolveRender(obj);\n\n    return {\n        key: String(key),\n        value,\n        labelNode,\n        labelText,\n        description,\n        disabled,\n        icon,\n        tags,\n        render,\n        raw,\n    };\n}\n\n/* ──────────────────────────────────────────────────────────────\n * Public exports\n * ────────────────────────────────────────────────────────────── */\n\n// Overload kept to avoid breaking call-sites that were using <T> as a cast.\nexport function globalNormalizeOptions<T>(opts: any, config: any): T[];\nexport function globalNormalizeOptions<TItem, TValue = SelectPrimitive>(\n    opts: readonly TItem[] | undefined | null,\n    config: GlobalNormalizeConfig<TItem, TValue>\n): GlobalNormalizedOption<TItem, TValue>[];\nexport function globalNormalizeOptions(opts: any, config: any) {\n    if (!opts || !opts.length) return [];\n    return opts.map((raw: any, index: number) =>\n        normalizeOne(raw, index, config)\n    );\n}\n\nexport function globalNormalizeCheckBasedOptions<\n    TItem extends Record<string, any>,\n    TLabelKey extends keyof TItem | null | undefined,\n    TValueKey extends keyof TItem | null | undefined,\n>(\n    item: TItem,\n    index: number,\n    optionLabelKey: TLabelKey,\n    optionValueKey: TValueKey,\n    tagConfig?: Pick<\n        GlobalNormalizeConfig<any, any>,\n        | \"optionTags\"\n        | \"optionTagLabel\"\n        | \"optionTagIcon\"\n        | \"optionTagClassName\"\n        | \"optionTagColor\"\n        | \"optionTagBgColor\"\n        | \"optionTagOnClick\"\n    >,\n) {\n    const anyItem = item as any;\n\n    const rawValue =\n        optionValueKey != null\n            ? anyItem[optionValueKey as string]\n            : anyItem.value;\n\n    const value = rawValue as any;\n\n    const rawLabel =\n        optionLabelKey != null\n            ? anyItem[optionLabelKey as string]\n            : (anyItem.label ?? String(rawValue ?? index));\n\n    const description = anyItem.description;\n    const disabled = !!anyItem.disabled;\n    const key: React.Key = anyItem.key ?? index;\n    const tags = normalizeOptionTags(item, anyItem, tagConfig ?? {});\n\n    const render = resolveRender(anyItem);\n\n    return {\n        key: String(key),\n        value,\n        label: rawLabel,\n        description,\n        disabled,\n        tags,\n        render,\n        raw: item,\n    };\n}\n\nexport type NormalizedTreeItemWithRender = NormalizedTreeItem & {\n    render?: OptionRenderFn;\n};\n\nexport function normalizeTree(\n    opts: readonly TreeSelectOption[] | undefined,\n    config: Pick<\n        ShadcnTreeSelectVariantProps,\n        | \"autoCap\"\n        | \"optionLabel\"\n        | \"optionValue\"\n        | \"optionDescription\"\n        | \"optionDisabled\"\n        | \"optionIcon\"\n        | \"optionKey\"\n        | \"optionTags\"\n        | \"optionTagLabel\"\n        | \"optionTagIcon\"\n        | \"optionTagClassName\"\n        | \"optionTagColor\"\n        | \"optionTagBgColor\"\n        | \"optionTagOnClick\"\n    >,\n    level = 0,\n    parentValue?: TreeKey,\n    path: TreeKey[] = []\n): NormalizedTreeItemWithRender[] {\n    if (!opts || !opts.length) return [];\n\n    return opts.map((raw, index) => {\n        // We keep the same “primitive -> {label,value}” coercion\n        const obj = asObject(raw);\n\n        // Reuse the same normalization core, but with TreeKey value typing\n        const base = normalizeOne<TreeSelectOption, TreeKey>(\n            raw,\n            index,\n            config as any // (config shape matches; this avoids duplicating the resolver types)\n        );\n\n        const childrenRaw: TreeSelectOption[] | undefined = obj.children;\n\n        const nextPath = [...path, base.value];\n\n        const children = normalizeTree(\n            childrenRaw ?? [],\n            config,\n            level + 1,\n            base.value,\n            nextPath\n        );\n\n        return {\n            ...base,\n            level,\n            parentValue,\n            path, // ancestors only (EXACT behaviour preserved)\n            hasChildren: !!children.length,\n            children,\n        };\n    });\n}\n\nexport function capitalizeFirst(label: string): string {\n    if (!label) return label;\n    return label.charAt(0).toUpperCase() + label.slice(1);\n}\n","// src/presets/shadcn-variants/radio.tsx\r\n// noinspection GrazieInspection\r\n\r\nimport * as React from \"react\";\nimport type { VariantBaseProps, ChangeDetail } from \"@/variants/shared\";\nimport { buildGroupLayoutClasses } from \"@/lib/group-layout\";\nimport { cn } from \"@/lib/utils\";\nimport { Badge } from \"@/presets/ui/badge\";\n\r\n// Adjust path if your radio group lives elsewhere\r\nimport { RadioGroup, RadioGroupItem } from \"@/presets/ui/radio-group\";\r\nimport { globalNormalizeCheckBasedOptions } from \"@/lib/normalise-options\";\r\n\r\n// ─────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────\r\n\r\n/**\r\n * Visual size of the radio UI.\r\n */\r\nexport type RadioSize = \"sm\" | \"md\" | \"lg\";\r\n\r\n/**\r\n * Vertical density of each radio row.\r\n *\r\n * Names aligned with your FieldDensity, but local to this variant.\r\n */\r\nexport type RadioDensity = \"compact\" | \"comfortable\" | \"loose\";\r\n\r\n/**\r\n * Layout mode for the group.\r\n *\r\n * - \"list\" → stacked rows\r\n * - \"grid\" → CSS grid with `columns`\r\n */\r\nexport type RadioLayoutMode = \"list\" | \"grid\";\r\n\r\n/**\r\n * Base radio item shape.\r\n */\r\nexport interface RadioItem<TValue> {\n    value: TValue;\n    label: React.ReactNode;\n    description?: React.ReactNode;\n    disabled?: boolean;\n    key?: React.Key;\n    raw?: unknown;\n    tags?: Array<{\n        label: React.ReactNode;\n        icon?: React.ReactNode;\n        className?: string;\n        color?: string;\n        bgColor?: string;\n        onClick?: React.MouseEventHandler<HTMLSpanElement>;\n        raw: unknown;\n    }>;\n\r\n    /**\r\n     * Option-level renderer (provided by the normaliser).\r\n     * If present, it overrides the variant-level `renderOption` for this item.\r\n     */\r\n    render?: (ctx: RadioRenderOptionContext<TValue>) => React.ReactNode;\r\n}\r\n\r\n/**\r\n * Mapping functions used when TItem is not `RadioItem<TValue>`.\r\n */\r\nexport interface RadioMappers<TItem, TValue> {\r\n    getValue: (item: TItem, index: number) => TValue;\r\n    getLabel: (item: TItem, index: number) => React.ReactNode;\r\n    getDescription?: (item: TItem, index: number) => React.ReactNode;\r\n    isDisabled?: (item: TItem, index: number) => boolean;\r\n    getKey?: (item: TItem, index: number) => React.Key;\r\n}\r\n\r\n/**\r\n * Context passed to a custom renderOption callback.\r\n */\r\nexport interface RadioRenderOptionContext<TValue> {\r\n    item: RadioItem<TValue>;\r\n    index: number;\r\n    selected: boolean;\r\n    disabled: boolean;\r\n    size: RadioSize;\r\n    density: RadioDensity;\r\n    click(): void;\r\n    /**\r\n     * DOM id of this option (tied to the underlying RadioGroupItem).\r\n     */\r\n    optionId?: string;\r\n\r\n    /**\r\n     * Prebuilt radio control for convenience.\r\n     * You can ignore this and render your own if you want.\r\n     */\r\n    radio: React.ReactNode;\r\n}\r\n\r\n/**\r\n * UI-specific radio props (independent of VariantBaseProps).\r\n */\r\nexport interface ShadcnRadioUiProps<TItem, TValue> {\r\n    /**\r\n     * Items to render as choices.\r\n     *\r\n     * Can be:\r\n     * - `RadioItem<TValue>[]`, or\r\n     * - any custom TItem[] when used with mapping functions\r\n     *   or optionValue/optionLabel keys.\r\n     * - primitive arrays such as `string[]` or `number[]` (fallback).\r\n     */\r\n    options?: readonly TItem[];\r\n    items?: readonly TItem[];\r\n\r\n    /**\r\n     * Mapping functions for TItem → value/label/etc.\r\n     *\r\n     * Takes precedence over optionValue/optionLabel if provided.\r\n     */\r\n    mappers?: RadioMappers<TItem, TValue>;\r\n\r\n    /**\r\n     * Property name on TItem that holds the **value**.\r\n     *\r\n     * Example:\r\n     *   items = [{ id: \"free\", title: \"Free\" }]\r\n     *   optionValue = \"id\"\r\n     */\r\n    optionValue?: keyof TItem | string;\r\n\r\n    /**\r\n     * Property name on TItem that holds the **label**.\r\n     *\r\n     * Example:\r\n     *   items = [{ id: \"free\", title: \"Free\" }]\r\n     *   optionLabel = \"title\"\r\n     */\r\n    optionLabel?: keyof TItem | string;\n    optionTags?: keyof TItem | string;\n    optionTagLabel?: string | ((tag: unknown) => React.ReactNode);\n    optionTagIcon?: string | ((tag: unknown) => React.ReactNode);\n    optionTagClassName?: string | ((tag: unknown) => string);\n    optionTagColor?: string | ((tag: unknown) => string);\n    optionTagBgColor?: string | ((tag: unknown) => string);\n    optionTagOnClick?:\n        | string\n        | ((tag: unknown) => React.MouseEventHandler<HTMLSpanElement>);\n\r\n    /**\r\n     * Optional custom renderer for each option.\r\n     *\r\n     * If provided, the default label/description layout is skipped and\r\n     * this function is responsible for rendering the row.\r\n     */\r\n    renderOption?: (ctx: RadioRenderOptionContext<TValue>) => React.ReactNode;\r\n\r\n    /**\r\n     * Layout mode for the group.\r\n     * Default: \"list\".\r\n     */\r\n    layout?: RadioLayoutMode;\r\n\r\n    /**\r\n     * Number of columns in grid mode.\r\n     * Default: 2.\r\n     */\r\n    columns?: number;\r\n\r\n    /**\r\n     * Gap between items (list rows or grid cells) in px.\r\n     * If omitted, Tailwind gaps/classes can handle spacing.\r\n     */\r\n    itemGapPx?: number;\r\n\r\n    /**\r\n     * Visual size of the radios.\r\n     * Default: \"md\".\r\n     */\r\n    size?: RadioSize;\r\n\r\n    /**\r\n     * Vertical density (padding) of each row.\r\n     * Default: \"comfortable\".\r\n     */\r\n    density?: RadioDensity;\r\n\r\n    /**\r\n     * When true, capitalizes the **first letter** of the label\r\n     * (only applied when the label is a string).\r\n     */\r\n    autoCap?: boolean;\r\n\r\n    /**\r\n     * ARIA overrides for the group.\r\n     */\r\n    \"aria-label\"?: string;\r\n    \"aria-labelledby\"?: string;\r\n\r\n    /**\r\n     * Wrapper class for the whole radio group.\r\n     */\r\n    optGroupClassName?: string;\r\n\r\n    /**\r\n     * Extra classes for each radio option row.\r\n     */\r\n    optionClassName?: string;\r\n\r\n    /**\r\n     * Extra classes for the option label node.\r\n     */\r\n    labelClassName?: string;\r\n\r\n    /**\r\n     * Extra classes for the description text under the label.\r\n     */\r\n    descriptionClassName?: string;\r\n}\r\n\r\n/**\r\n * Full props for the Shadcn-based radio variant.\r\n */\r\nexport type ShadcnRadioVariantProps<\r\n    TValue,\r\n    TItem = RadioItem<TValue>,\r\n> = ShadcnRadioUiProps<TItem, TValue> &\r\n    Pick<\r\n        VariantBaseProps<TValue | undefined>,\r\n        \"value\" | \"onValue\" | \"error\" | \"disabled\" | \"required\"\r\n    > & {\r\n        id?: string;\r\n        name?: string;\r\n        className?: string; // alias for groupClassName\r\n        \"aria-describedby\"?: string;\r\n    };\r\n\r\n/**\r\n * Convenience type for the concrete React component.\r\n */\r\nexport interface ShadcnRadioVariantComponent<\r\n    TValue,\r\n    TItem = RadioItem<TValue>,\r\n> extends React.ForwardRefExoticComponent<\r\n    ShadcnRadioVariantProps<TValue, TItem> & React.RefAttributes<HTMLDivElement>\r\n> {}\r\n\r\n// ─────────────────────────────────────────────\r\n// Helpers\r\n// ─────────────────────────────────────────────\r\n\r\nfunction paddingForDensity(density: RadioDensity): string {\r\n    switch (density) {\r\n        case \"compact\":\r\n            return \"py-1.5\";\r\n        case \"loose\":\r\n            return \"py-3\";\r\n        case \"comfortable\":\r\n        default:\r\n            return \"py-1\";\r\n    }\r\n}\r\n\r\nfunction labelTextSize(size: RadioSize): string {\r\n    switch (size) {\r\n        case \"sm\":\r\n            return \"text-xs\";\r\n        case \"lg\":\r\n            return \"text-base\";\r\n        case \"md\":\r\n        default:\r\n            return \"text-sm\";\r\n    }\r\n}\r\n\r\nfunction descriptionTextSize(size: RadioSize): string {\r\n    switch (size) {\r\n        case \"sm\":\r\n            return \"text-[0.7rem]\";\r\n        case \"lg\":\r\n            return \"text-sm\";\r\n        case \"md\":\r\n        default:\r\n            return \"text-xs\";\r\n    }\r\n}\r\n\r\nfunction capitalizeFirst(label: string): string {\r\n    if (!label) return label;\r\n    return label.charAt(0).toUpperCase() + label.slice(1);\r\n}\r\n\r\n/**\r\n * Normalise TItem[] into RadioItem<TValue>[] using one of:\r\n * - explicit mappers\r\n * - optionValue/optionLabel keys\r\n * - native RadioItem fields\r\n * - primitive arrays (string[] / number[] / boolean[])\r\n */\r\nfunction normalizeItems<TItem, TValue>(\n    items: readonly TItem[],\n    mappers?: RadioMappers<TItem, TValue>,\n    optionValueKey?: keyof TItem,\n    optionLabelKey?: keyof TItem,\n    optionTagsKey?: keyof TItem,\n    optionTagLabel?: string | ((tag: unknown) => React.ReactNode),\n    optionTagIcon?: string | ((tag: unknown) => React.ReactNode),\n    optionTagClassName?: string | ((tag: unknown) => string),\n    optionTagColor?: string | ((tag: unknown) => string),\n    optionTagBgColor?: string | ((tag: unknown) => string),\n    optionTagOnClick?:\n        | string\n        | ((tag: unknown) => React.MouseEventHandler<HTMLSpanElement>),\n): RadioItem<TValue>[] {\n    // 1) Full mappers win – most explicit\r\n    if (mappers) {\n        return items.map((item, index) => ({\n            value: mappers.getValue(item, index),\n            label: mappers.getLabel(item, index),\n            description: mappers.getDescription\n                ? mappers.getDescription(item, index)\n                : undefined,\n            disabled: mappers.isDisabled\n                ? mappers.isDisabled(item, index)\n                : false,\n            key: mappers.getKey ? mappers.getKey(item, index) : index,\n            raw: item,\n        }));\n    }\n\r\n    // 2) optionValue / optionLabel keys\r\n    if (optionValueKey || optionLabelKey) {\r\n        return items.map((item, index) => {\n            return {\n                ...globalNormalizeCheckBasedOptions(\n                item as any,\n                index,\n                optionLabelKey,\n                optionValueKey,\n                {\n                    optionTags: optionTagsKey as string | undefined,\n                    optionTagLabel,\n                    optionTagIcon,\n                    optionTagClassName,\n                    optionTagColor,\n                    optionTagBgColor,\n                    optionTagOnClick,\n                },\n            ),\n                raw: item,\n            };\n        });\n    }\n\r\n    // 3) Fallbacks:\r\n    //    - primitive arrays (string[] / number[] / boolean[])\r\n    //    - already-shaped RadioItem<TValue>[]\r\n    return items.map((item, index) => {\r\n        // Primitive → use as both value and label\r\n        if (\r\n            typeof item === \"string\" ||\r\n            typeof item === \"number\" ||\r\n            typeof item === \"boolean\"\r\n        ) {\r\n            const v = item as unknown as TValue;\r\n            return {\n                value: v,\n                label: String(item),\n                description: undefined,\n                disabled: false,\n                key: index,\n                raw: item,\n            } satisfies RadioItem<TValue>;\n        }\n\r\n        // Assume it's already a RadioItem<TValue>-like object\r\n        return item as unknown as RadioItem<TValue>;\r\n    });\r\n}\r\n\r\n/**\r\n * Shallow-ish equality for values.\r\n */\r\nfunction isEqualValue(a: unknown, b: unknown): boolean {\r\n    return Object.is(a, b);\r\n}\r\n\r\n// ─────────────────────────────────────────────\r\n// Component\r\n// ─────────────────────────────────────────────\r\n\r\nconst InnerShadcnRadioVariant = <TValue, TItem = RadioItem<TValue>>(\r\n    props: ShadcnRadioVariantProps<TValue, TItem>,\r\n    ref: React.Ref<HTMLDivElement>\r\n) => {\r\n    const {\r\n        // variant base\r\n        value,\r\n        onValue,\r\n        error,\r\n        disabled,\r\n        required,\r\n\r\n        // radio UI\r\n        items,\r\n        options,\r\n        mappers,\r\n        optionValue,\n        optionLabel,\n        optionTags,\n        optionTagLabel,\n        optionTagIcon,\n        optionTagClassName,\n        optionTagColor,\n        optionTagBgColor,\n        optionTagOnClick,\n        renderOption,\r\n        layout = \"list\",\r\n        columns = 2,\r\n        itemGapPx,\r\n        size = \"md\",\r\n        density = \"comfortable\",\r\n        autoCap = false,\r\n        \"aria-label\": ariaLabel,\r\n        \"aria-labelledby\": ariaLabelledBy,\r\n        \"aria-describedby\": ariaDescribedBy,\r\n        name,\r\n\r\n        optGroupClassName,\r\n        optionClassName,\r\n        labelClassName,\r\n        descriptionClassName,\r\n\r\n        className, // alias for groupClassName\r\n        id,\r\n\r\n        // passthrough to RadioGroup\r\n        ...restGroupProps\r\n    } = props;\r\n\r\n    const hasError = !!error;\r\n\r\n    const normalized = React.useMemo(\r\n        () =>\r\n            normalizeItems<TItem, TValue>(\r\n                (items ?? options)!,\r\n                mappers,\r\n                //@ts-ignore\n                optionValue,\n                optionLabel,\n                //@ts-ignore\n                optionTags,\n                optionTagLabel,\n                optionTagIcon,\n                optionTagClassName,\n                optionTagColor,\n                optionTagBgColor,\n                optionTagOnClick,\n            ),\n        [\n            items,\n            options,\n            mappers,\n            optionValue,\n            optionLabel,\n            optionTags,\n            optionTagLabel,\n            optionTagIcon,\n            optionTagClassName,\n            optionTagColor,\n            optionTagBgColor,\n            optionTagOnClick,\n        ]\n    );\n\r\n    // Map TValue → string for RadioGroup\r\n    const selectedString = React.useMemo(() => {\r\n        if (value === undefined) return undefined;\r\n        const found = normalized.find((item) =>\r\n            isEqualValue(item.value, value)\r\n        );\r\n        return found ? String(found.value) : undefined;\r\n    }, [normalized, value]);\r\n\r\n    const handleSelect = React.useCallback(\n        (next: TValue, selectedRaw?: unknown) => {\n            if (!onValue || disabled) return;\n\n            const detail: ChangeDetail = {\n                source: \"variant\",\n                raw: selectedRaw ?? next,\n                selectedOptions: [selectedRaw ?? next],\n                nativeEvent: undefined,\n                meta: undefined,\n            };\n\r\n            onValue(next, detail);\r\n        },\r\n        [onValue, disabled]\r\n    );\r\n\r\n    const handleRadioChange = React.useCallback(\n        (raw: string) => {\n            const found = normalized.find((item) => String(item.value) === raw);\n            if (!found) return;\n            handleSelect(found.value, found.raw ?? found.value);\n        },\n        [normalized, handleSelect]\n    );\n\r\n    const {\r\n        groupStyle,\r\n        groupClasses,\r\n        baseOptionClass,\r\n        labelClassesBase,\r\n        descriptionClassesBase,\r\n    } = buildGroupLayoutClasses({\r\n        layout,\r\n        columns,\r\n        itemGapPx,\r\n        groupClassName: optGroupClassName,\r\n        className,\r\n        optionClassName,\r\n        labelClassName,\r\n        descriptionClassName,\r\n        densityPaddingClass: paddingForDensity(density),\r\n        labelTextSizeClass: labelTextSize(size),\r\n        descriptionTextSizeClass: descriptionTextSize(size),\r\n    });\r\n\r\n    return (\r\n        <RadioGroup\r\n            ref={ref}\r\n            id={id}\r\n            name={name}\r\n            value={selectedString}\r\n            onValueChange={handleRadioChange}\r\n            disabled={disabled}\r\n            aria-label={ariaLabel}\r\n            aria-labelledby={ariaLabelledBy}\r\n            aria-describedby={ariaDescribedBy}\r\n            aria-invalid={hasError || undefined}\r\n            aria-required={required || undefined}\r\n            className={groupClasses}\r\n            style={groupStyle}\r\n            data-slot=\"radio-group\"\r\n            {...restGroupProps}\r\n        >\r\n            {normalized.map((item, index) => {\r\n                const itemString = String(item.value);\r\n                const selected = selectedString === itemString;\r\n                const optionDisabled = !!disabled || !!item.disabled;\r\n                const optionKey = item.key ?? index;\r\n                const optionId = id ? `${id}-option-${optionKey}` : undefined;\r\n\r\n                // Apply autoCap to string labels for display\r\n                let displayItem: RadioItem<TValue> = item;\r\n                if (autoCap && typeof item.label === \"string\") {\r\n                    displayItem = {\r\n                        ...item,\r\n                        label: capitalizeFirst(item.label),\r\n                    };\r\n                }\r\n\r\n                const radioNode = (\r\n                    <RadioGroupItem\r\n                        id={optionId}\r\n                        value={itemString}\r\n                        disabled={optionDisabled}\r\n                        className=\"mt-1\"\r\n                    />\r\n                );\r\n\r\n                const renderer = (item as RadioItem<TValue>).render ?? renderOption;\r\n\r\n                // Custom renderer path\r\n                if (renderer) {\r\n                    return (\r\n                        <div\r\n                            key={optionKey}\r\n                            data-slot=\"radio-option\"\r\n                            data-checked={selected ? \"true\" : \"false\"}\r\n                            data-disabled={optionDisabled ? \"true\" : \"false\"}\r\n                            className={baseOptionClass}\r\n                        >\r\n                            {renderer({\r\n                                item: displayItem,\r\n                                index,\r\n                                selected,\r\n                                disabled: optionDisabled,\r\n                                size,\r\n                                density,\r\n                                optionId,\r\n                                click() {\r\n                                    if (optionDisabled) return;\r\n                                    handleSelect(displayItem.value);\r\n                                },\r\n                                radio: radioNode,\r\n                            })}\r\n                        </div>\r\n                    );\r\n                }\r\n\r\n                // Default rendering\r\n                return (\r\n                    <div\r\n                        key={optionKey}\r\n                        data-slot=\"radio-option\"\r\n                        data-checked={selected ? \"true\" : \"false\"}\r\n                        data-disabled={optionDisabled ? \"true\" : \"false\"}\r\n                        className={baseOptionClass}\r\n                    >\r\n                        <label\r\n                            htmlFor={optionId}\r\n                            className=\"flex cursor-pointer items-start gap-3 w-full\"\r\n                        >\r\n                            {radioNode}\r\n\r\n                            <div className=\"flex flex-col min-w-0\">\n                                <span className=\"flex min-w-0 items-start gap-2\">\n                                    <span className={cn(labelClassesBase, \"truncate\")}>\n                                        {displayItem.label}\n                                    </span>\n                                    {!!displayItem.tags?.length && (\n                                        <span className=\"ml-auto flex shrink-0 flex-wrap gap-1\">\n                                            {displayItem.tags.map((tag, tagIndex) => (\n                                                <Badge\n                                                    key={tagIndex}\n                                                    className={cn(\"text-xs\", tag.className)}\n                                                    onClick={tag.onClick}\n                                                    style={{\n                                                        color: tag.color,\n                                                        backgroundColor: tag.bgColor,\n                                                    }}\n                                                >\n                                                    {tag.icon && (\n                                                        <span className=\"shrink-0\">\n                                                            {tag.icon}\n                                                        </span>\n                                                    )}\n                                                    <span>{tag.label}</span>\n                                                </Badge>\n                                            ))}\n                                        </span>\n                                    )}\n                                </span>\n                                {displayItem.description != null && (\n                                    <span className={descriptionClassesBase}>\n                                        {displayItem.description}\n                                    </span>\n                                )}\n                            </div>\n                        </label>\n                    </div>\n                );\r\n            })}\r\n        </RadioGroup>\r\n    );\r\n};\r\n\r\n/**\r\n * Concrete Shadcn radio variant component.\r\n *\r\n * Cast to a generic-friendly type so TS can still infer TValue/TItem.\r\n */\r\nexport const ShadcnRadioVariant = React.forwardRef(\r\n    InnerShadcnRadioVariant\r\n) as unknown as <TValue, TItem = RadioItem<TValue>>(\r\n    props: ShadcnRadioVariantProps<TValue, TItem> & {\r\n        ref?: React.Ref<HTMLDivElement>;\r\n    }\r\n) => React.ReactElement | null;\r\n\r\nexport default ShadcnRadioVariant;\r\n","// src/variants/core/radio.ts\r\n\r\nimport type { VariantModuleFor } from \"@/schema/variant\";\r\nimport { ShadcnRadioVariant } from \"@/presets/shadcn-variants/radio\";\r\n\r\n/**\r\n * Built-in \"radio\" variant module.\r\n *\r\n * Uses the Shadcn-based implementation in presets/shadcn-variants/radio.tsx\r\n */\r\nexport const radioVariantModule: VariantModuleFor<\"radio\"> = {\r\n   variant: \"radio\",\r\n   // Note: registry-level typing uses unknown, but the component itself is generic.\r\n   Variant: ShadcnRadioVariant as any,\r\n   defaults: {\r\n      layout: {\r\n         // Standard stacked field layout; the smart renderer still\r\n         // handles ordering/relative roots for helpers.\r\n         labelPlacement: \"top\",\r\n         sublabelPlacement: \"right\",\r\n         descriptionPlacement: \"below\",\r\n         helpTextPlacement: \"below\",\r\n         errorTextPlacement: \"below\",\r\n         inline: false,\r\n         fullWidth: true,\r\n\r\n         // Explicit layout hints\r\n         defaultSize: \"md\",\r\n         defaultDensity: \"comfortable\", // ← uses your FieldDensity union\r\n      },\r\n   },\r\n   meta: {\r\n      label: \"Radio group\",\r\n      description:\r\n         \"Choose one option from a list of mutually exclusive choices.\",\r\n      tags: [\"choice\", \"select\", \"exclusive\", \"radio\"],\r\n   },\r\n};","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { CheckIcon, MinusIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype TriState = boolean | \"none\"\ntype BaseProps = React.ComponentProps<typeof CheckboxPrimitive.Root>\n\nexport interface CheckboxProps\n  extends Omit<BaseProps, \"checked\" | \"onCheckedChange\"> {\n  checked?: TriState\n  onCheckedChange?: (checked: TriState) => void\n  /**\n   * Enable tri-state behaviour:\n   *  - true  → checked (✓)\n   *  - false → partial (−)\n   *  - \"none\" → unchecked (empty)\n   */\n  tristate?: boolean\n}\n\nfunction Checkbox({\n  className,\n  checked = false,\n  onCheckedChange,\n  tristate = false,\n  ...props\n}: CheckboxProps) {\n  // Map our states → Radix checked value\n  // - in tri-state mode:\n  //   true  → true\n  //   false → \"indeterminate\" (minus)\n  //   \"none\" → false (unchecked)\n  // - non-tristate: normal boolean\n  const internalChecked: boolean | \"indeterminate\" =\n    tristate\n      ? checked === true\n        ? true\n        : checked === false\n          ? \"indeterminate\"\n          : false // \"none\"\n      : checked === true\n\n  const handleCheckedChange: CheckboxPrimitive.CheckboxProps[\"onCheckedChange\"] =\n    () => {\n      if (!onCheckedChange) return\n\n      if (tristate) {\n        // Cycle: \"none\" (empty) → true (check) → false (minus) → \"none\"\n        const prev: TriState = checked ?? \"none\"\n        const next: TriState =\n          prev === \"none\"\n            ? true\n            : prev === true\n              ? false\n              : \"none\"\n\n        onCheckedChange(next)\n      } else {\n        // Simple toggle boolean (treat \"none\" as false)\n        const next = checked === true ? false : true\n        onCheckedChange(next)\n      }\n    }\n\n  // Icon mapping:\n  // - tri-state:\n  //   false → minus\n  //   true  → check\n  //   \"none\" → nothing\n  // - non-tristate:\n  //   true  → check\n  //   else → nothing\n  const icon = tristate\n    ? checked === false\n      ? <MinusIcon className=\"size-3.5\" />\n      : checked === true\n        ? <CheckIcon className=\"size-3.5\" />\n        : null\n    : checked\n      ? <CheckIcon className=\"size-3.5\" />\n      : null\n\n  return (\n    <CheckboxPrimitive.Root\n      data-slot=\"checkbox\"\n      checked={internalChecked}\n      onCheckedChange={handleCheckedChange}\n      className={cn(\n        \"peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs outline-none transition-shadow\",\n        \"dark:bg-input/30\",\n        // checked & indeterminate share \"selected\" styling\n        \"data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary\",\n        \"data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground data-[state=indeterminate]:border-primary\",\n        \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n        \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\n        \"disabled:cursor-not-allowed disabled:opacity-50\",\n        className,\n      )}\n      {...props}\n    >\n      <CheckboxPrimitive.Indicator\n        data-slot=\"checkbox-indicator\"\n        className=\"grid place-content-center text-current transition-none\"\n      >\n        {icon}\n      </CheckboxPrimitive.Indicator>\n    </CheckboxPrimitive.Root>\n  )\n}\n\nexport { Checkbox }","// noinspection RedundantConditionalExpressionJS,PointlessBooleanExpressionJS,SuspiciousTypeOfGuard,GrazieInspection,GrazieStyle\r\n\r\nimport * as React from \"react\";\r\nimport type { ChangeDetail, VariantBaseProps } from \"@/variants/shared\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Checkbox } from \"@/presets/ui/checkbox\";\r\nimport { Badge } from \"@/presets/ui/badge\";\r\nimport { globalNormalizeCheckBasedOptions } from \"@/lib/normalise-options\";\r\nimport { buildGroupLayoutClasses } from \"@/lib/group-layout\";\r\n\r\n// ─────────────────────────────────────────────\r\n// Types`\r\n// ─────────────────────────────────────────────\r\n\r\nexport type CheckboxSize = \"sm\" | \"md\" | \"lg\";\r\nexport type CheckboxDensity = \"compact\" | \"comfortable\" | \"loose\";\r\nexport type CheckboxLayoutMode = \"list\" | \"grid\";\r\n\r\n/**\r\n * Internal state we store in the value list.\r\n * \"none\" never goes into the external value.\r\n */\r\nexport type CheckboxTriStateValue = true | false;\r\n\r\n/**\r\n * Internal state we pass to the Shadcn checkbox.\r\n * \"none\" is used to represent \"no stance yet\".\r\n */\r\nexport type CheckboxInternalState = true | false | \"none\";\r\n\r\nexport interface CheckboxGroupEntry<TValue> {\r\n    value: TValue;\r\n    state: CheckboxTriStateValue; // true or false only\r\n}\r\n\r\nexport type CheckboxGroupValue<TValue> =\r\n    | readonly CheckboxGroupEntry<TValue>[]\r\n    | undefined;\r\nexport type CheckboxGroupSelectedValue<TValue> = readonly TValue[] | undefined;\r\n\r\nexport type CheckboxGroupValueMain<TValue extends string | number | symbol> =\r\n    Record<TValue, CheckboxTriStateValue>;\r\n/**\r\n * Single checkbox value.\r\n * undefined → \"none\"\r\n */\r\nexport type CheckboxSingleValue = boolean | undefined;\r\n\r\n/**\r\n * Public union type for the variant's value.\r\n *\r\n * - In single mode: we expect CheckboxSingleValue\r\n * - In group mode: we expect CheckboxGroupValue<TValue>\r\n *\r\n * At the type level this is a union; at runtime we branch using `single`.\r\n */\r\nexport type CheckboxVariantValue<TValue> =\r\n    | CheckboxSingleValue\r\n    //@ts-ignore\r\n    | CheckboxGroupValueMain<TValue>\r\n    | CheckboxGroupSelectedValue<TValue>;\r\n\r\nexport interface CheckboxItem<TValue> {\r\n    value: TValue;\r\n    label: React.ReactNode;\r\n    description?: React.ReactNode;\r\n    disabled?: boolean;\r\n    key?: React.Key;\r\n    raw?: unknown;\r\n    tags?: Array<{\r\n        label: React.ReactNode;\r\n        icon?: React.ReactNode;\r\n        className?: string;\r\n        color?: string;\r\n        bgColor?: string;\r\n        onClick?: React.MouseEventHandler<HTMLSpanElement>;\r\n        raw: unknown;\r\n    }>;\r\n\r\n    /**\r\n     * Option-level renderer (provided by the normaliser).\r\n     * If present, it should override the variant-level `renderOption` for this item.\r\n     */\r\n    render?: (ctx: CheckboxRenderOptionContext<TValue>) => React.ReactNode;\r\n\r\n    /**\r\n     * Override tri-state behaviour for this item.\r\n     * If undefined, variant-level `tristate` is used.\r\n     */\r\n    tristate?: boolean;\r\n}\r\n\r\nexport interface CheckboxMappers<TItem, TValue> {\r\n    getValue: (item: TItem, index: number) => TValue;\r\n    getLabel: (item: TItem, index: number) => React.ReactNode;\r\n    getDescription?: (item: TItem, index: number) => React.ReactNode;\r\n    isDisabled?: (item: TItem, index: number) => boolean;\r\n    getKey?: (item: TItem, index: number) => React.Key;\r\n    getTristate?: (item: TItem, index: number) => boolean | undefined;\r\n}\r\n\r\nexport interface CheckboxRenderOptionContext<TValue> {\r\n    item: CheckboxItem<TValue>;\r\n    index: number;\r\n    state: CheckboxInternalState;\r\n    effectiveTristate: boolean;\r\n    disabled: boolean;\r\n    size: CheckboxSize;\r\n    density: CheckboxDensity;\r\n    checkboxId?: string;\r\n    click(): void;\r\n    /**\r\n     * Prebuilt Shadcn checkbox node.\r\n     */\r\n    checkbox: React.ReactNode;\r\n}\r\n\r\n/**\r\n * UI props for both single and group modes.\r\n */\r\nexport interface ShadcnCheckboxUiProps<TItem, TValue> {\r\n    /**\r\n     * Group mode:\r\n     *  - Required when `single` is not true.\r\n     *\r\n     * Single mode:\r\n     *  - Optional; if provided, `items[0]` can supply label/description.\r\n     */\r\n    options?: readonly TItem[];\r\n    /**\r\n     * Group mode:\r\n     *  - Optional; if provided, `items` can supply label/description.\r\n     *\r\n     * Single mode:\r\n     *  - Required when `single` is true.\r\n     */\r\n    items?: readonly TItem[];\r\n\r\n    /**\r\n     * Mapping functions for arbitrary item shapes.\r\n     * Takes precedence over optionValue/optionLabel.\r\n     */\r\n    mappers?: CheckboxMappers<TItem, TValue>;\r\n\r\n    /**\r\n     * Property name that holds the value on each item.\r\n     *\r\n     * Example:\r\n     *   items = [{ id: \"read\", label: \"Read\" }]\r\n     *   optionValue = \"id\"\r\n     */\r\n    optionValue?: keyof TItem;\r\n\r\n    /**\r\n     * Property name that holds the label on each item.\r\n     *\r\n     * Example:\r\n     *   items = [{ id: \"read\", title: \"Read\" }]\r\n     *   optionLabel = \"title\"\r\n     */\r\n    optionLabel?: keyof TItem;\r\n    optionTags?: keyof TItem;\r\n    optionTagLabel?: string | ((tag: unknown) => React.ReactNode);\r\n    optionTagIcon?: string | ((tag: unknown) => React.ReactNode);\r\n    optionTagClassName?: string | ((tag: unknown) => string);\r\n    optionTagColor?: string | ((tag: unknown) => string);\r\n    optionTagBgColor?: string | ((tag: unknown) => string);\r\n    optionTagOnClick?:\r\n        | string\r\n        | ((tag: unknown) => React.MouseEventHandler<HTMLSpanElement>);\r\n\r\n    /**\r\n     * Custom renderer for each option row.\r\n     */\r\n    renderOption?: (\r\n        ctx: CheckboxRenderOptionContext<TValue>,\r\n    ) => React.ReactNode;\r\n\r\n    /**\r\n     * If true, treat this variant as a single checkbox instead of a group.\r\n     *\r\n     * Value is then CheckboxSingleValue (boolean | undefined).\r\n     */\r\n    single?: boolean;\r\n\r\n    /**\r\n     * Variant-level default tri-state behaviour.\r\n     *\r\n     * - In single mode: directly controls tri-state for the single checkbox.\r\n     * - In group mode: default for all items, unless item.tristate overrides.\r\n     */\r\n    tristate?: boolean;\r\n\r\n    /**\r\n     * Layout mode in group mode: vertical list or CSS grid.\r\n     */\r\n    layout?: CheckboxLayoutMode;\r\n\r\n    /**\r\n     * Number of columns in grid mode.\r\n     * Default: 2.\r\n     */\r\n    columns?: number;\r\n\r\n    /**\r\n     * Gap between items in px.\r\n     */\r\n    itemGapPx?: number;\r\n\r\n    /**\r\n     * Visual size of the checkbox / text.\r\n     * Default: \"md\".\r\n     */\r\n    size?: CheckboxSize;\r\n\r\n    /**\r\n     * Vertical density of each row.\r\n     * Default: \"comfortable\".\r\n     */\r\n    density?: CheckboxDensity;\r\n\r\n    /**\r\n     * When true, capitalizes the first letter of the label\r\n     * (only applied when the label is a string).\r\n     */\r\n    autoCap?: boolean;\r\n\r\n    /**\r\n     * ARIA attributes for the group wrapper.\r\n     */\r\n    \"aria-label\"?: string;\r\n    \"aria-labelledby\"?: string;\r\n\r\n    /**\r\n     * Wrapper class for the entire group (or single field).\r\n     */\r\n    optGroupClassName?: string;\r\n\r\n    /**\r\n     * Extra classes for each option row (group mode).\r\n     */\r\n    optionClassName?: string;\r\n\r\n    /**\r\n     * Extra classes for the option label text.\r\n     */\r\n    labelClassName?: string;\r\n\r\n    /**\r\n     * Extra classes for the option label text in group mode only.\r\n     * This allows styling group item labels without affecting single mode labels.\r\n     */\r\n    optionLabelClassName?: string;\r\n\r\n    /**\r\n     * Extra classes for the option description text.\r\n     */\r\n    descriptionClassName?: string;\r\n\r\n    /**\r\n     * Single-mode inline label (if you want variant-level text).\r\n     * Usually you'll rely on InputField's label instead.\r\n     */\r\n    singleLabel?: React.ReactNode;\r\n\r\n    /**\r\n     * Single-mode description text under the label.\r\n     */\r\n    singleDescription?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Full props for the Shadcn-based checkbox variant.\r\n *\r\n * TValue: primitive or object key\r\n * TItem: item shape used to build checkbox items\r\n */\r\nexport type ShadcnCheckboxVariantProps<\r\n    TValue,\r\n    TItem = CheckboxItem<TValue>,\r\n> = ShadcnCheckboxUiProps<TItem, TValue> &\r\n    Pick<\r\n        VariantBaseProps<CheckboxVariantValue<TValue>>,\r\n        \"value\" | \"onValue\" | \"error\" | \"disabled\" | \"required\"\r\n    > & {\r\n        id?: string;\r\n        className?: string; // alias for groupClassName\r\n        name?: string; // optional: name for native form post in group mode\r\n        \"aria-describedby\"?: string;\r\n    };\r\n\r\n// ─────────────────────────────────────────────\r\n// Helpers\r\n// ─────────────────────────────────────────────\r\n\r\nfunction paddingForDensity(density: CheckboxDensity): string {\r\n    switch (density) {\r\n        case \"compact\":\r\n        // return \"py-1.5\";\r\n        case \"loose\":\r\n            return \"py-2\";\r\n        case \"comfortable\":\r\n        default:\r\n            return \"py-0\";\r\n    }\r\n}\r\n\r\nfunction labelTextSize(size: CheckboxSize): string {\r\n    switch (size) {\r\n        case \"sm\":\r\n            return \"text-xs\";\r\n        case \"lg\":\r\n            return \"text-base\";\r\n        case \"md\":\r\n        default:\r\n            return \"text-sm\";\r\n    }\r\n}\r\n\r\nfunction descriptionTextSize(size: CheckboxSize): string {\r\n    switch (size) {\r\n        case \"sm\":\r\n            return \"text-[0.7rem]\";\r\n        case \"lg\":\r\n            return \"text-sm\";\r\n        case \"md\":\r\n        default:\r\n            return \"text-xs\";\r\n    }\r\n}\r\n\r\nfunction capitalizeFirst(label: string): string {\r\n    if (!label) return label;\r\n    return label.charAt(0).toUpperCase() + label.slice(1);\r\n}\r\n\r\n/**\r\n * Normalize arbitrary items to CheckboxItem<TValue>[] using:\r\n * 1) mappers,\r\n * 2) optionValue/optionLabel,\r\n * 3) native CheckboxItem fields,\r\n * 4) primitive arrays (string[] / number[] / boolean[]).\r\n */\r\nfunction normalizeItems<TItem, TValue>(\r\n    items: readonly TItem[] | undefined,\r\n    mappers?: CheckboxMappers<TItem, TValue>,\r\n    optionValueKey?: keyof TItem,\r\n    optionLabelKey?: keyof TItem,\r\n    optionTagsKey?: keyof TItem,\r\n    optionTagLabel?: string | ((tag: unknown) => React.ReactNode),\r\n    optionTagIcon?: string | ((tag: unknown) => React.ReactNode),\r\n    optionTagClassName?: string | ((tag: unknown) => string),\r\n    optionTagColor?: string | ((tag: unknown) => string),\r\n    optionTagBgColor?: string | ((tag: unknown) => string),\r\n    optionTagOnClick?:\r\n        | string\r\n        | ((tag: unknown) => React.MouseEventHandler<HTMLSpanElement>),\r\n): CheckboxItem<TValue>[] {\r\n    if (!items || !items.length) return [];\r\n\r\n    // 1) Explicit mappers win\r\n    if (mappers) {\r\n        return items.map((item, index) => ({\r\n            value: mappers.getValue(item, index),\r\n            label: mappers.getLabel(item, index),\r\n            description: mappers.getDescription\r\n                ? mappers.getDescription(item, index)\r\n                : undefined,\r\n            disabled: mappers.isDisabled\r\n                ? mappers.isDisabled(item, index)\r\n                : false,\r\n            key: mappers.getKey ? mappers.getKey(item, index) : index,\r\n            tristate: mappers.getTristate\r\n                ? mappers.getTristate(item, index)\r\n                : undefined,\r\n            raw: item,\r\n        }));\r\n    }\r\n\r\n    // 2) optionValue / optionLabel\r\n    if (optionValueKey || optionLabelKey) {\r\n        return items.map((item, index) => {\r\n            const anyItem = item as any;\r\n            const normalised = globalNormalizeCheckBasedOptions(\r\n                item as any,\r\n                index,\r\n                optionLabelKey,\r\n                optionValueKey,\r\n                {\r\n                    optionTags: optionTagsKey as string | undefined,\r\n                    optionTagLabel,\r\n                    optionTagIcon,\r\n                    optionTagClassName,\r\n                    optionTagColor,\r\n                    optionTagBgColor,\r\n                    optionTagOnClick,\r\n                },\r\n            );\r\n            const tristate = anyItem.tristate as boolean | undefined;\r\n\r\n            return {\r\n                ...normalised,\r\n                tristate,\r\n                raw: item,\r\n            };\r\n        });\r\n    }\r\n\r\n    // 3 & 4) Fallbacks:\r\n    //    - primitive arrays (string[] / number[] / boolean[])\r\n    //    - already-shaped CheckboxItem<TValue>[]\r\n    return items.map((item, index) => {\r\n        if (\r\n            typeof item === \"string\" ||\r\n            typeof item === \"number\" ||\r\n            typeof item === \"boolean\"\r\n        ) {\r\n            const v = item as unknown as TValue;\r\n            return {\r\n                value: v,\r\n                label: String(item),\r\n                description: undefined,\r\n                disabled: false,\r\n                key: index,\r\n                tristate: undefined,\r\n                raw: item,\r\n            } satisfies CheckboxItem<TValue>;\r\n        }\r\n\r\n        const existing = item as unknown as CheckboxItem<TValue>;\r\n        return {\r\n            ...existing,\r\n            raw: existing.raw ?? item,\r\n        };\r\n    });\r\n}\r\n\r\nfunction isEqualValue(a: unknown, b: unknown): boolean {\r\n    return Object.is(a, b);\r\n}\r\n\r\nfunction valueLookupKey(value: unknown): string {\r\n    return `${typeof value}:${String(value)}`;\r\n}\r\n\r\n/**\r\n * Extract group value from the union.\r\n */\r\nfunction asGroupValue<TValue>(\r\n    value: CheckboxVariantValue<TValue>,\r\n): CheckboxGroupValue<TValue> {\r\n    if (!value) return undefined;\r\n    if (Array.isArray(value)) {\r\n        if (value.length === 0) return undefined;\r\n        const first = value[0] as any;\r\n        // Legacy/object-entry shape: [{ value, state }]\r\n        if (\r\n            first &&\r\n            typeof first === \"object\" &&\r\n            \"value\" in first &&\r\n            \"state\" in first\r\n        ) {\r\n            return value as CheckboxGroupValue<TValue>;\r\n        }\r\n        // Non-tristate shape: [value, value, ...]\r\n        return (value as TValue[]).map((item) => ({\r\n            value: item,\r\n            state: true,\r\n        }));\r\n    }\r\n    if (typeof value == \"object\") {\r\n        return Reflect.ownKeys(value).map(\r\n            (key) =>\r\n                ({\r\n                    value: key as TValue,\r\n                    state: (value as any)[key] as CheckboxTriStateValue,\r\n                }) as CheckboxGroupEntry<TValue>,\r\n        );\r\n    }\r\n    return undefined;\r\n}\r\n\r\n/**\r\n * Extract single value from the union.\r\n */\r\nfunction asSingleValue(\r\n    value: CheckboxVariantValue<unknown>,\r\n): CheckboxSingleValue {\r\n    if (Array.isArray(value)) return undefined;\r\n    if (typeof value === \"boolean\" || value === undefined) return value;\r\n    return undefined;\r\n}\r\n\r\n// ─────────────────────────────────────────────\r\n// Component\r\n// ─────────────────────────────────────────────\r\n\r\nconst InnerShadcnCheckboxVariant = <TValue, TItem = CheckboxItem<TValue>>(\r\n    props: ShadcnCheckboxVariantProps<TValue, TItem>,\r\n    ref: React.Ref<HTMLDivElement>,\r\n) => {\r\n    const {\r\n        // variant base\r\n        value,\r\n        onValue,\r\n        error,\r\n        disabled,\r\n        required,\r\n\r\n        // UI / behaviour\r\n        items,\r\n        options,\r\n        mappers,\r\n        optionValue,\r\n        optionLabel,\r\n        optionTags,\r\n        optionTagLabel,\r\n        optionTagIcon,\r\n        optionTagClassName,\r\n        optionTagColor,\r\n        optionTagBgColor,\r\n        optionTagOnClick,\r\n        renderOption,\r\n        single,\r\n        tristate: tristateDefault,\r\n        layout = \"list\",\r\n        columns = 2,\r\n        itemGapPx,\r\n        size = \"md\",\r\n        density = \"comfortable\",\r\n        autoCap = false,\r\n\r\n        \"aria-label\": ariaLabel,\r\n        \"aria-labelledby\": ariaLabelledBy,\r\n        \"aria-describedby\": ariaDescribedBy,\r\n        name,\r\n\r\n        optGroupClassName,\r\n        optionClassName,\r\n        labelClassName,\r\n        optionLabelClassName,\r\n        descriptionClassName,\r\n\r\n        className, // alias for groupClassName\r\n\r\n        singleLabel,\r\n        singleDescription,\r\n\r\n        id,\r\n        ...restProps\r\n    } = props;\r\n\r\n    const hasError = !!error;\r\n    const isSingle = !!single;\r\n    const normalized = React.useMemo(\r\n        () =>\r\n            normalizeItems<TItem, TValue>(\r\n                items ?? options,\r\n                mappers,\r\n                optionValue,\r\n                optionLabel,\r\n                optionTags,\r\n                optionTagLabel,\r\n                optionTagIcon,\r\n                optionTagClassName,\r\n                optionTagColor,\r\n                optionTagBgColor,\r\n                optionTagOnClick,\r\n            ),\r\n        [\r\n            items,\r\n            options,\r\n            mappers,\r\n            optionValue,\r\n            optionLabel,\r\n            optionTags,\r\n            optionTagLabel,\r\n            optionTagIcon,\r\n            optionTagClassName,\r\n            optionTagColor,\r\n            optionTagBgColor,\r\n            optionTagOnClick,\r\n        ],\r\n    );\r\n\r\n    // ─────────────────────────────────────────\r\n    // Single mode\r\n    // ─────────────────────────────────────────\r\n    if (isSingle) {\r\n        const singleVal = asSingleValue(value);\r\n        const effectiveTristate = !!tristateDefault;\r\n\r\n        const internalState: CheckboxInternalState = effectiveTristate\r\n            ? (singleVal ?? \"none\")\r\n            : !!singleVal;\r\n\r\n        const handleSingleChange = (next: CheckboxInternalState) => {\r\n            if (!onValue || disabled) return;\r\n\r\n            let nextPublic: CheckboxSingleValue;\r\n\r\n            if (effectiveTristate) {\r\n                // tri-state single:\r\n                // \"none\" → undefined\r\n                // true/false → same\r\n                nextPublic = next === \"none\" ? undefined : !!next;\r\n            } else {\r\n                // non-tristate: behave like normal checkbox\r\n                nextPublic = next === true;\r\n            }\r\n\r\n            const detail: ChangeDetail = {\r\n                source: \"variant\",\r\n                raw: nextPublic,\r\n                selectedOptions:\r\n                    nextPublic === true\r\n                        ? normalized[0]\r\n                            ? [normalized[0].raw ?? normalized[0].value]\r\n                            : []\r\n                        : [],\r\n                nativeEvent: undefined,\r\n                meta: undefined,\r\n            };\r\n\r\n            onValue(nextPublic, detail);\r\n        };\r\n\r\n        let labelText = singleLabel ?? undefined;\r\n        if (autoCap && typeof labelText === \"string\") {\r\n            labelText = capitalizeFirst(labelText);\r\n        }\r\n\r\n        const descriptionText = singleDescription ?? undefined;\r\n\r\n        const labelCls = cn(\r\n            \"text-foreground\",\r\n            labelTextSize(size),\r\n            labelClassName,\r\n        );\r\n\r\n        const descriptionCls = cn(\r\n            \"mt-0.5 text-muted-foreground\",\r\n            descriptionTextSize(size),\r\n            descriptionClassName,\r\n        );\r\n\r\n        return (\r\n            <div\r\n                ref={ref}\r\n                role=\"group\"\r\n                aria-label={ariaLabel}\r\n                aria-labelledby={ariaLabelledBy}\r\n                aria-describedby={ariaDescribedBy}\r\n                aria-invalid={hasError || undefined}\r\n                aria-required={required || undefined}\r\n                data-slot=\"checkbox-single\"\r\n                className={cn(\r\n                    \"flex items-start gap-3\",\r\n                    paddingForDensity(density),\r\n                    optGroupClassName ?? className,\r\n                )}\r\n                {...restProps}\r\n            >\r\n                <Checkbox\r\n                    id={id}\r\n                    checked={internalState}\r\n                    tristate={effectiveTristate}\r\n                    disabled={disabled}\r\n                    onCheckedChange={handleSingleChange}\r\n                    className=\"mt-0.5\"\r\n                />\r\n\r\n                {(labelText || descriptionText) && (\r\n                    <div className=\"flex min-w-0 flex-col\">\r\n                        {labelText && (\r\n                            <span className={labelCls}>{labelText}</span>\r\n                        )}\r\n                        {descriptionText && (\r\n                            <span className={descriptionCls}>\r\n                                {descriptionText}\r\n                            </span>\r\n                        )}\r\n                    </div>\r\n                )}\r\n            </div>\r\n        );\r\n    }\r\n\r\n    // ─────────────────────────────────────────\r\n    // Group mode\r\n    // ─────────────────────────────────────────\r\n\r\n    const normalizedByValueKey = React.useMemo(() => {\r\n        const lookup = new Map<string, CheckboxItem<TValue>>();\r\n        normalized.forEach((item) => {\r\n            lookup.set(valueLookupKey(item.value), item);\r\n        });\r\n        return lookup;\r\n    }, [normalized]);\r\n\r\n    const groupValue = React.useMemo<CheckboxGroupValue<TValue>>(() => {\r\n        const source = asGroupValue<TValue>(value);\r\n        if (!source?.length) return source;\r\n\r\n        return source.map((entry) => {\r\n            const byExact = normalized.find((item) =>\r\n                isEqualValue(item.value, entry.value),\r\n            );\r\n            if (byExact) return { ...entry, value: byExact.value };\r\n\r\n            const byKey = normalizedByValueKey.get(valueLookupKey(entry.value));\r\n            if (byKey) return { ...entry, value: byKey.value };\r\n\r\n            if (typeof entry.value === \"string\") {\r\n                const byString = normalized.find(\r\n                    (item) =>\r\n                        typeof item.value !== \"object\" &&\r\n                        String(item.value) === entry.value,\r\n                );\r\n                if (byString) return { ...entry, value: byString.value };\r\n            }\r\n\r\n            return entry;\r\n        });\r\n    }, [value, normalized, normalizedByValueKey]);\r\n\r\n    const {\r\n        groupStyle,\r\n        groupClasses,\r\n        baseOptionClass,\r\n        labelClassesBase,\r\n        descriptionClassesBase,\r\n    } = buildGroupLayoutClasses({\r\n        layout,\r\n        columns,\r\n        itemGapPx,\r\n        groupClassName: optGroupClassName,\r\n        className,\r\n        optionClassName,\r\n        labelClassName,\r\n        descriptionClassName,\r\n        densityPaddingClass: paddingForDensity(density),\r\n        labelTextSizeClass: labelTextSize(size),\r\n        descriptionTextSizeClass: descriptionTextSize(size),\r\n    });\r\n    const hasAnyTristate = React.useMemo(\r\n        () => normalized.some((item) => item.tristate ?? tristateDefault ?? false),\r\n        [normalized, tristateDefault],\r\n    );\r\n\r\n    const findEntryIndex = React.useCallback(\r\n        (val: TValue): number => {\r\n            if (!groupValue) return -1;\r\n            return groupValue.findIndex((e) => isEqualValue(e.value, val));\r\n        },\r\n        [groupValue],\r\n    );\r\n\r\n    const getEntryState = React.useCallback(\r\n        (val: TValue): CheckboxTriStateValue | \"none\" => {\r\n            const idx = findEntryIndex(val);\r\n            if (!groupValue || idx === -1) return \"none\";\r\n            return groupValue[idx].state;\r\n        },\r\n        [groupValue, findEntryIndex],\r\n    );\r\n\r\n    const updateGroupValue = React.useCallback(\r\n        (\r\n            itemValue: TValue,\r\n            nextInternal: CheckboxInternalState,\r\n            effectiveTristate: boolean,\r\n        ) => {\r\n            if (!onValue || disabled) return;\r\n\r\n            const currentList = groupValue ? [...groupValue] : [];\r\n            const idx = currentList.findIndex((e) =>\r\n                isEqualValue(e.value, itemValue),\r\n            );\r\n\r\n            let nextList: CheckboxGroupEntry<TValue>[] = currentList;\r\n\r\n            if (effectiveTristate) {\r\n                // Tri-state:\r\n                // \"none\" → remove\r\n                // true/false → ensure entry is present with state\r\n                if (nextInternal === \"none\") {\r\n                    if (idx !== -1) {\r\n                        nextList = [\r\n                            ...currentList.slice(0, idx),\r\n                            ...currentList.slice(idx + 1),\r\n                        ];\r\n                    }\r\n                } else {\r\n                    const nextState: CheckboxTriStateValue =\r\n                        nextInternal === true;\r\n                    if (idx === -1) {\r\n                        nextList = [\r\n                            ...currentList,\r\n                            { value: itemValue, state: nextState },\r\n                        ];\r\n                    } else {\r\n                        nextList = [...currentList];\r\n                        nextList[idx] = {\r\n                            ...nextList[idx],\r\n                            state: nextState,\r\n                        };\r\n                    }\r\n                }\r\n            } else {\r\n                // Non tri-state:\r\n                // true → ensure present\r\n                // false/\"none\" → remove entry (false acts as none)\r\n                if (nextInternal === true) {\r\n                    if (idx === -1) {\r\n                        nextList = [\r\n                            ...currentList,\r\n                            { value: itemValue, state: true },\r\n                        ];\r\n                    } else {\r\n                        nextList = [...currentList];\r\n                        nextList[idx] = {\r\n                            ...nextList[idx],\r\n                            state: true,\r\n                        };\r\n                    }\r\n                } else {\r\n                    // false / \"none\": remove\r\n                    if (idx !== -1) {\r\n                        nextList = [\r\n                            ...currentList.slice(0, idx),\r\n                            ...currentList.slice(idx + 1),\r\n                        ];\r\n                    }\r\n                }\r\n            }\r\n\r\n            const detail: ChangeDetail = {\r\n                source: \"variant\",\r\n                raw: nextList,\r\n                selectedOptions: nextList.map(\r\n                    (entry) => {\r\n                        const normalizedItem =\r\n                            normalizedByValueKey.get(\r\n                                valueLookupKey(entry.value),\r\n                            ) ??\r\n                            normalized.find((item) =>\r\n                                isEqualValue(item.value, entry.value),\r\n                            );\r\n                        return normalizedItem?.raw ?? normalizedItem ?? entry.value;\r\n                    },\r\n                ),\r\n                nativeEvent: undefined,\r\n                meta: undefined,\r\n            };\r\n\r\n            if (hasAnyTristate) {\r\n                const value: CheckboxGroupValueMain<any> = {};\r\n                nextList.forEach(\r\n                    (item) => (value[item.value as any] = item.state),\r\n                );\r\n                onValue(value, detail);\r\n                return;\r\n            }\r\n\r\n            // Non-tristate group mode emits selected keys only.\r\n            onValue(nextList.map((item) => item.value) as any, detail);\r\n        },\r\n        [onValue, disabled, groupValue, normalizedByValueKey, normalized, hasAnyTristate],\r\n    );\r\n\r\n    return (\r\n        <div\r\n            ref={ref}\r\n            id={id}\r\n            role=\"group\"\r\n            aria-label={ariaLabel}\r\n            aria-labelledby={ariaLabelledBy}\r\n            aria-describedby={ariaDescribedBy}\r\n            aria-invalid={hasError || undefined}\r\n            aria-required={required || undefined}\r\n            data-slot=\"checkbox-group\"\r\n            className={groupClasses}\r\n            style={groupStyle}\r\n            {...restProps}\r\n        >\r\n            {normalized.map((item, index) => {\r\n                const effectiveTristate =\r\n                    item.tristate ?? tristateDefault ?? false;\r\n\r\n                const currentState = getEntryState(item.value);\r\n                const internalState: CheckboxInternalState = effectiveTristate\r\n                    ? currentState // \"none\" | true | false\r\n                    : currentState === \"none\"\r\n                      ? false\r\n                      : currentState;\r\n\r\n                const optionDisabled = !!disabled || !!item.disabled;\r\n                const optionKey = item.key ?? index;\r\n                const checkboxId = id ? `${id}-option-${optionKey}` : undefined;\r\n\r\n                // Apply autoCap to string labels for display\r\n                let displayItem: CheckboxItem<TValue> = item;\r\n                if (autoCap && typeof item.label === \"string\") {\r\n                    displayItem = {\r\n                        ...item,\r\n                        label: capitalizeFirst(item.label),\r\n                    };\r\n                }\r\n\r\n                const checkboxNode = (\r\n                    <Checkbox\r\n                        id={checkboxId}\r\n                        checked={internalState}\r\n                        disabled={optionDisabled}\r\n                        tristate={effectiveTristate}\r\n                        onCheckedChange={(next) =>\r\n                            updateGroupValue(\r\n                                item.value,\r\n                                next as CheckboxInternalState,\r\n                                effectiveTristate,\r\n                            )\r\n                        }\r\n                        className=\"mt-1\"\r\n                    />\r\n                );\r\n\r\n                const hiddenInput =\r\n                    name != null ? (\r\n                        <input\r\n                            type=\"hidden\"\r\n                            name={name}\r\n                            value={String(item.value)}\r\n                            // Only send if in list; tri-state false still \"has standing\"\r\n                            // in code, but native form post is simple and you can\r\n                            // derive negative states server-side if you want.\r\n                            disabled={getEntryState(item.value) === \"none\"}\r\n                        />\r\n                    ) : null;\r\n\r\n                const renderer =\r\n                    (item as CheckboxItem<TValue>).render ?? renderOption;\r\n\r\n                if (renderer) {\r\n                    return (\r\n                        <div\r\n                            key={optionKey}\r\n                            data-slot=\"checkbox-option\"\r\n                            data-disabled={optionDisabled ? \"true\" : \"false\"}\r\n                            className={baseOptionClass}\r\n                        >\r\n                            {renderer({\r\n                                item: displayItem,\r\n                                index,\r\n                                state: internalState,\r\n                                effectiveTristate,\r\n                                disabled: optionDisabled,\r\n                                size,\r\n                                density,\r\n                                checkboxId,\r\n                                click() {\r\n                                    if (optionDisabled) return;\r\n\r\n                                    const nextInternal: CheckboxInternalState =\r\n                                        effectiveTristate\r\n                                            ? internalState === \"none\"\r\n                                                ? true\r\n                                                : internalState === true\r\n                                                  ? false\r\n                                                  : \"none\"\r\n                                            : internalState === true\r\n                                              ? false\r\n                                              : true;\r\n\r\n                                    updateGroupValue(\r\n                                        item.value,\r\n                                        nextInternal,\r\n                                        effectiveTristate,\r\n                                    );\r\n                                },\r\n                                checkbox: checkboxNode,\r\n                            })}\r\n                            {hiddenInput}\r\n                        </div>\r\n                    );\r\n                }\r\n\r\n                // Default row layout: checkbox + label + description\r\n                return (\r\n                    <div\r\n                        key={optionKey}\r\n                        data-slot=\"checkbox-option\"\r\n                        data-disabled={optionDisabled ? \"true\" : \"false\"}\r\n                        className={baseOptionClass}\r\n                    >\r\n                        <label\r\n                            htmlFor={checkboxId}\r\n                            className=\"flex w-full cursor-pointer items-start gap-3 select-none\"\r\n                        >\r\n                            {checkboxNode}\r\n\r\n                            <div className=\"flex min-w-0 flex-col\">\r\n                                <span className=\"flex min-w-0 items-start gap-2\">\r\n                                    <span\r\n                                        className={cn(\r\n                                            labelClassesBase,\r\n                                            optionLabelClassName,\r\n                                            \"truncate\",\r\n                                        )}\r\n                                    >\r\n                                        {displayItem.label}\r\n                                    </span>\r\n                                    {!!displayItem.tags?.length && (\r\n                                        <span className=\"ml-auto flex shrink-0 flex-wrap gap-1\">\r\n                                            {displayItem.tags.map((tag, tagIndex) => (\r\n                                                <Badge\r\n                                                    key={tagIndex}\r\n                                                    className={cn(\"text-xs\", tag.className)}\r\n                                                    onClick={tag.onClick}\r\n                                                    style={{\r\n                                                        color: tag.color,\r\n                                                        backgroundColor: tag.bgColor,\r\n                                                    }}\r\n                                                >\r\n                                                    {tag.icon && (\r\n                                                        <span className=\"shrink-0\">\r\n                                                            {tag.icon}\r\n                                                        </span>\r\n                                                    )}\r\n                                                    <span>{tag.label}</span>\r\n                                                </Badge>\r\n                                            ))}\r\n                                        </span>\r\n                                    )}\r\n                                </span>\r\n                                {displayItem.description != null && (\r\n                                    <span className={descriptionClassesBase}>\r\n                                        {displayItem.description}\r\n                                    </span>\r\n                                )}\r\n                            </div>\r\n                        </label>\r\n\r\n                        {hiddenInput}\r\n                    </div>\r\n                );\r\n            })}\r\n        </div>\r\n    );\r\n};\r\n\r\nexport const ShadcnCheckboxVariant = React.forwardRef(\r\n    InnerShadcnCheckboxVariant,\r\n) as unknown as <TValue, TItem = CheckboxItem<TValue>>(\r\n    props: ShadcnCheckboxVariantProps<TValue, TItem> & {\r\n        ref?: React.Ref<HTMLDivElement>;\r\n    },\r\n) => React.ReactElement | null;\r\n\r\n// ShadcnCheckboxVariant.displayName = \"ShadcnCheckboxVariant\";\r\n\r\nexport default ShadcnCheckboxVariant;\r\n\r\n// ─────────────────────────────────────────────\r\n// Public aliases for the registry\r\n// ─────────────────────────────────────────────\r\n\r\n/**\r\n * Default item value type for the checkbox variant.\r\n *\r\n * You can still use the generic ShadcnCheckboxVariantProps<TValue, TItem>\r\n * directly if you need a different TValue; the registry uses this alias.\r\n */\r\nexport type DefaultCheckboxItemValue = string | number;\r\n\r\n/**\r\n * Public \"value\" type for the checkbox variant used by the registry:\r\n *\r\n * - Single mode: boolean | undefined\r\n * - Group mode (non-tristate): DefaultCheckboxItemValue[] | undefined\r\n * - Group mode (tristate): Record<DefaultCheckboxItemValue, true | false>\r\n *\r\n * In tri-state group mode, both `true` and `false` entries are present;\r\n * `\"none\"` never appears in this type.\r\n */\r\nexport type CheckboxVariantPublicValue =\r\n    CheckboxVariantValue<DefaultCheckboxItemValue>;\r\n\r\n/**\r\n * Public props type for the checkbox variant used by the registry.\r\n *\r\n * This is ShadcnCheckboxVariantProps with TValue fixed to DefaultCheckboxItemValue.\r\n */\r\nexport type ShadcnCheckboxVariantPublicProps =\r\n    ShadcnCheckboxVariantProps<DefaultCheckboxItemValue>;\r\n","// src/variants/core/checkbox.ts\r\n\r\nimport type { VariantModuleFor } from \"@/schema/variant\";\r\nimport { ShadcnCheckboxVariant } from \"@/presets/shadcn-variants/checkbox\";\r\nimport type {\r\n   ShadcnCheckboxVariantPublicProps,\r\n   CheckboxVariantPublicValue,\r\n} from \"@/presets/shadcn-variants/checkbox\";\r\nimport type { VariantBaseProps } from \"@/variants/shared\";\r\nimport { toggleLayoutDefaults } from \"./toggle\";\r\n\r\n/**\r\n * Public props type you can import elsewhere:\r\n *\r\n *   import type { CheckboxVariantProps } from \"@/variants/core/checkbox\";\r\n */\r\nexport type CheckboxVariantProps = ShadcnCheckboxVariantPublicProps;\r\n\r\n/**\r\n * Concrete Variant component type, if you need it:\r\n *\r\n *   VariantBaseProps<CheckboxVariantPublicValue> & CheckboxVariantProps\r\n */\r\ntype CheckboxVariantComponentProps =\r\n   VariantBaseProps<CheckboxVariantPublicValue> & CheckboxVariantProps;\r\n\r\n/**\r\n * Runtime module for the \"checkbox\" variant.\r\n *\r\n * This wires the Shadcn preset into the core registry with sensible defaults.\r\n */\r\nexport const checkboxModule: VariantModuleFor<\"checkbox\"> = {\r\n   variant: \"checkbox\",\r\n\r\n   // ShadcnCheckboxVariant is generic; we fix it to the public aliases\r\n   // via this cast. At call sites you'll still get strong typing because\r\n   // the registry types know the concrete value/props.\r\n   Variant: ShadcnCheckboxVariant as unknown as React.ComponentType<CheckboxVariantComponentProps>,\r\n\r\n   resolveLayout({ props }) {\r\n      if (props.single) {\r\n         return toggleLayoutDefaults\r\n      }\r\n\r\n      return {};\r\n   },\r\n\r\n   meta: {\r\n      label: \"Checkbox\",\r\n      description:\r\n         \"Single or group checkboxes with optional per-item tri-state support.\",\r\n      tags: [\"checkbox\", \"group\", \"boolean\", \"tri-state\"],\r\n   },\r\n};","import * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction ScrollArea({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n  return (\n    <ScrollAreaPrimitive.Root\n      data-slot=\"scroll-area\"\n      className={cn(\"relative\", className)}\n      {...props}\n    >\n      <ScrollAreaPrimitive.Viewport\n        data-slot=\"scroll-area-viewport\"\n        className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n      >\n        {children}\n      </ScrollAreaPrimitive.Viewport>\n      <ScrollBar />\n      <ScrollAreaPrimitive.Corner />\n    </ScrollAreaPrimitive.Root>\n  )\n}\n\nfunction ScrollBar({\n  className,\n  orientation = \"vertical\",\n  ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n  return (\n    <ScrollAreaPrimitive.ScrollAreaScrollbar\n      data-slot=\"scroll-area-scrollbar\"\n      orientation={orientation}\n      className={cn(\n        \"flex touch-none p-px transition-colors select-none\",\n        orientation === \"vertical\" &&\n          \"h-full w-2.5 border-l border-l-transparent\",\n        orientation === \"horizontal\" &&\n          \"h-2.5 flex-col border-t border-t-transparent\",\n        className\n      )}\n      {...props}\n    >\n      <ScrollAreaPrimitive.ScrollAreaThumb\n        data-slot=\"scroll-area-thumb\"\n        className=\"bg-border relative flex-1 rounded-full\"\n      />\n    </ScrollAreaPrimitive.ScrollAreaScrollbar>\n  )\n}\n\nexport { ScrollArea, ScrollBar }\n","// noinspection DuplicatedCode\r\n\r\nimport * as React from \"react\";\r\nimport type { VariantBaseProps, ChangeDetail } from \"@/variants/shared\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport {\n    Select,\n    SelectTrigger,\n    SelectContent,\n    SelectItem,\n} from \"@/presets/ui/select\";\nimport { Badge } from \"@/presets/ui/badge\";\nimport { Input } from \"@/presets/ui/input\";\nimport { ScrollArea } from \"@/presets/ui/scroll-area\";\nimport { Search, X } from \"lucide-react\";\nimport { globalNormalizeOptions } from \"@/lib/normalise-options\";\nimport { Virtuoso } from \"react-virtuoso\";\n\r\ntype SelectPrimitive = string | number;\r\n\r\ntype Size = \"sm\" | \"md\" | \"lg\";\r\ntype Density = \"compact\" | \"comfortable\" | \"loose\";\r\n\r\nexport type SelectOption =\r\n    | SelectPrimitive\r\n    | {\r\n          label?: React.ReactNode;\r\n          value?: SelectPrimitive;\r\n          description?: React.ReactNode;\r\n          disabled?: boolean;\r\n          [key: string]: any;\r\n      };\r\n\r\ntype NormalizedSelectItem = {\n    key: string;\r\n    value: SelectPrimitive;\r\n    labelNode: React.ReactNode;\r\n    labelText: string;\r\n    description?: React.ReactNode;\n    disabled?: boolean;\n    icon?: React.ReactNode;\n    tags?: Array<{\n        label: React.ReactNode;\n        icon?: React.ReactNode;\n        className?: string;\n        color?: string;\n        bgColor?: string;\n        onClick?: React.MouseEventHandler<HTMLSpanElement>;\n        raw: unknown;\n    }>;\n    /** Option-level renderer (falls back to global renderOption) */\r\n    render?: (...args: any[]) => React.ReactNode;\r\n    raw: SelectOption;\r\n};\r\n\r\n/**\r\n * Shadcn-based Select variant.\r\n */\r\nexport interface SelectBaseProps extends Pick<\r\n    VariantBaseProps<SelectPrimitive | undefined>,\r\n    \"value\" | \"onValue\" | \"error\" | \"disabled\" | \"readOnly\" | \"size\" | \"density\"\r\n> {\r\n    /**\r\n     * Options for the select.\r\n     *\r\n     * You can pass:\r\n     * - primitives: [\"ng\", \"gh\", \"ke\"]\r\n     * - objects:    [{ label, value, ...extra }]\r\n     */\r\n    options?: SelectOption[];\r\n\r\n    /**\r\n     * Automatically capitalise the first letter of the label\r\n     * (when the resolved label is a string).\r\n     */\r\n    autoCap?: boolean;\r\n\r\n    /**\r\n     * How to read the label from each option.\r\n     *\r\n     * - string → key on the option object\r\n     * - function → custom mapper\r\n     * - omitted → tries `label`, else String(value)\r\n     */\r\n    optionLabel?: string | ((item: SelectOption) => React.ReactNode);\r\n\r\n    /**\r\n     * How to read the value from each option.\r\n     *\r\n     * - string → key on the option object\r\n     * - function → custom mapper\r\n     * - omitted → uses `value`, or `id`, or `key`, or index\r\n     */\r\n    optionValue?: string | ((item: SelectOption) => SelectPrimitive);\r\n\r\n    /**\r\n     * Optional description line under the label.\r\n     */\r\n    optionDescription?: string | ((item: SelectOption) => React.ReactNode);\r\n\r\n    /**\r\n     * How to determine if an option is disabled.\r\n     */\r\n    optionDisabled?: string | ((item: SelectOption) => boolean);\r\n\r\n    /**\r\n     * How to extract an icon for each option.\r\n     *\r\n     * - string → key on the option object (default \"icon\")\r\n     * - function → custom mapper\r\n     */\r\n    optionIcon?: string | ((item: SelectOption) => React.ReactNode);\n    optionTags?: string | ((item: SelectOption) => unknown[]);\n    optionTagLabel?: string | ((tag: unknown) => React.ReactNode);\n    optionTagIcon?: string | ((tag: unknown) => React.ReactNode);\n    optionTagClassName?: string | ((tag: unknown) => string);\n    optionTagColor?: string | ((tag: unknown) => string);\n    optionTagBgColor?: string | ((tag: unknown) => string);\n    optionTagOnClick?:\n        | string\n        | ((tag: unknown) => React.MouseEventHandler<HTMLSpanElement>);\n\r\n    /**\r\n     * How to compute the React key for each option.\r\n     */\r\n    optionKey?: string | ((item: SelectOption, index: number) => React.Key);\r\n\r\n    /**\r\n     * Enable inline search inside the dropdown.\r\n     */\r\n    searchable?: boolean;\r\n\r\n    /**\r\n     * Placeholder for the search input.\r\n     */\r\n    searchPlaceholder?: string;\r\n\r\n    /**\r\n     * Label shown when there are no options available at all.\r\n     *\r\n     * If omitted, falls back to `emptySearchText` or a default message.\r\n     */\r\n    emptyLabel?: React.ReactNode;\r\n\r\n    /**\r\n     * Text to show when search yields no results\r\n     * (but there *are* options in general).\r\n     */\r\n    emptySearchText?: React.ReactNode;\r\n\r\n    /**\r\n     * Show a small clear button in the trigger when a value is selected.\r\n     */\r\n    clearable?: boolean;\r\n\r\n    /**\r\n     * Placeholder when nothing is selected.\r\n     */\r\n    placeholder?: React.ReactNode;\r\n\r\n    /**\r\n     * Wrapper class for the whole variant.\r\n     */\r\n    className?: string;\r\n\r\n    /**\r\n     * Extra classes for the SelectTrigger.\r\n     */\r\n    triggerClassName?: string;\r\n\r\n    /**\r\n     * Extra classes for the SelectContent popover.\r\n     */\r\n    contentClassName?: string;\r\n\r\n    /**\r\n     * Custom renderer for each option row.\r\n     */\r\n    renderOption?: (ctx: {\r\n        item: NormalizedSelectItem;\r\n        selected: boolean;\r\n        index: number;\r\n        option: React.ReactNode; // prebuilt <SelectItem> you can wrap\r\n        click(): void;\r\n    }) => React.ReactNode;\r\n\r\n    /**\r\n     * Custom renderer for the trigger value.\r\n     */\r\n    renderValue?: (ctx: {\r\n        selectedItem: NormalizedSelectItem | null;\r\n        placeholder?: React.ReactNode;\r\n    }) => React.ReactNode;\r\n\r\n    // ─────────────────────────────────────────────\r\n    // Icons & controls (mirror text variant concepts)\r\n    // ─────────────────────────────────────────────\r\n\r\n    // (moved to default-mode props)\r\n\r\n    /**\r\n     * Icons displayed on the right side of the trigger,\r\n     * near the clear button / chevron area.\r\n     */\r\n    trailingIcons?: React.ReactNode[];\r\n\r\n    /**\r\n     * Convenience single-icon prop for the left side.\r\n     */\r\n    icon?: React.ReactNode;\r\n\r\n    /**\r\n     * Base gap between icons and text.\r\n     * Defaults to 4px-ish via `gap-1`.\r\n     */\r\n    iconGap?: number;\r\n\r\n    /**\r\n     * Extra spacing to apply between leading icons and the text.\r\n     */\r\n    leadingIconSpacing?: number;\r\n\r\n    /**\r\n     * Extra spacing to apply between trailing icons and the clear button.\r\n     */\r\n    trailingIconSpacing?: number;\r\n\r\n    /**\r\n     * Arbitrary React node rendered before the select (e.g. a button).\r\n     */\r\n    leadingControl?: React.ReactNode;\r\n\r\n    /**\r\n     * Arbitrary React node rendered after the select (e.g. a button).\r\n     */\r\n    trailingControl?: React.ReactNode;\r\n\r\n    /**\r\n     * Extra classes for the leading control wrapper.\r\n     */\r\n    leadingControlClassName?: string;\r\n\r\n    /**\r\n     * Extra classes for the trailing control wrapper.\r\n     */\r\n    trailingControlClassName?: string;\r\n\r\n    /**\r\n     * If true and there are controls, the select trigger + controls share\r\n     * a single visual box (borders, radius, focus states).\r\n     */\r\n    joinControls?: boolean;\r\n\r\n    /**\r\n     * When joinControls is true, whether the box styling extends over controls\r\n     * (true) or controls are visually separate (false).\r\n     */\r\n    extendBoxToControls?: boolean;\r\n\r\n    // ─────────────────────────────────────────────\r\n    // Virtual-scroll-ish incremental rendering\r\n    // ─────────────────────────────────────────────\r\n\r\n    /**\n     * Enable virtualized rendering for large option lists.\n     * Default: true.\n     */\n    virtualScroll?: boolean;\n\n    /**\n     * @deprecated No longer used with react-virtuoso.\n     */\n    virtualScrollPageSize?: number;\n\n    /**\n     * @deprecated No longer used with react-virtuoso.\n     */\n    virtualScrollThreshold?: number;\n}\n\r\ntype SelectDefaultModeProps = {\r\n    mode?: \"default\";\r\n\r\n    // Icons & controls (default mode only)\r\n    leadingIcons?: React.ReactNode[];\r\n    trailingIcons?: React.ReactNode[];\r\n    icon?: React.ReactNode;\r\n    iconGap?: number;\r\n    leadingIconSpacing?: number;\r\n    trailingIconSpacing?: number;\r\n\r\n    leadingControl?: React.ReactNode;\r\n    trailingControl?: React.ReactNode;\r\n    leadingControlClassName?: string;\r\n    trailingControlClassName?: string;\r\n\r\n    joinControls?: boolean;\r\n    extendBoxToControls?: boolean;\r\n\r\n    // Not supported in default mode\r\n    button?: never;\r\n    children?: never;\r\n};\r\n\r\ntype SelectButtonModeButton =\r\n    | React.ReactNode\r\n    | ((ctx: {\r\n          open: boolean;\r\n          selectedItem: NormalizedSelectItem | null;\r\n          selectedValue: SelectPrimitive | undefined;\r\n          placeholder?: React.ReactNode;\r\n      }) => React.ReactNode);\r\n\r\ntype SelectButtonModeProps = {\r\n    mode: \"button\";\r\n\r\n    /**\r\n     * Used when mode=\"button\". If provided, this is the trigger.\r\n     * If not provided, `children` is used.\r\n     */\r\n    button?: SelectButtonModeButton;\r\n    children?: SelectButtonModeButton;\r\n\r\n    // Icons & controls NOT supported in button mode\r\n    leadingIcons?: never;\r\n    trailingIcons?: never;\r\n    icon?: never;\r\n    iconGap?: never;\r\n    leadingIconSpacing?: never;\r\n    trailingIconSpacing?: never;\r\n\r\n    leadingControl?: never;\r\n    trailingControl?: never;\r\n    leadingControlClassName?: never;\r\n    trailingControlClassName?: never;\r\n\r\n    joinControls?: never;\r\n    extendBoxToControls?: never;\r\n};\r\n\r\nexport type ShadcnSelectVariantProps = SelectBaseProps &\r\n    (SelectDefaultModeProps | SelectButtonModeProps);\r\n\r\n// ─────────────────────────────────────────────\r\n// Helpers\r\n// ─────────────────────────────────────────────\r\n\r\nfunction normalizeOptions(\r\n    opts: readonly SelectOption[] | undefined,\r\n    config: Pick<\r\n        SelectBaseProps,\r\n        | \"autoCap\"\r\n        | \"optionLabel\"\r\n        | \"optionValue\"\r\n        | \"optionDescription\"\n        | \"optionDisabled\"\n        | \"optionKey\"\n        | \"optionIcon\"\n        | \"optionTags\"\n        | \"optionTagLabel\"\n        | \"optionTagIcon\"\n        | \"optionTagClassName\"\n        | \"optionTagColor\"\n        | \"optionTagBgColor\"\n        | \"optionTagOnClick\"\n    >,\n): NormalizedSelectItem[] {\n    return globalNormalizeOptions(opts, config);\r\n}\r\n\r\nfunction triggerHeight(size?: Size) {\r\n    switch (size) {\r\n        case \"sm\":\r\n            return \"h-8 text-xs\";\r\n        case \"lg\":\r\n            return \"h-11 text-base\";\r\n        default:\r\n            return \"h-9 text-sm\";\r\n    }\r\n}\r\n\r\nfunction triggerPadding(density?: Density) {\r\n    switch (density) {\r\n        case \"compact\":\r\n            return \"py-1\";\r\n        case \"loose\":\r\n            return \"py-2\";\r\n        case \"comfortable\":\r\n        default:\r\n            return \"py-1.5\";\r\n    }\r\n}\r\n\r\n// ─────────────────────────────────────────────\r\n// Component\r\n// ─────────────────────────────────────────────\r\n\r\nexport const ShadcnSelectVariant = React.forwardRef<\r\n    HTMLButtonElement,\r\n    ShadcnSelectVariantProps\r\n>(function ShadcnSelectVariant(props, _ref) {\r\n    const {\r\n        value,\r\n        onValue,\r\n        error,\r\n        disabled,\r\n        readOnly,\r\n        size,\r\n        density,\r\n\r\n        options,\r\n\r\n        autoCap,\r\n        optionLabel,\r\n        optionValue,\r\n        optionDescription,\n        optionDisabled,\n        optionIcon,\n        optionKey,\n        optionTags,\n        optionTagLabel,\n        optionTagIcon,\n        optionTagClassName,\n        optionTagColor,\n        optionTagBgColor,\n        optionTagOnClick,\n\r\n        searchable,\r\n        searchPlaceholder,\r\n\r\n        emptyLabel,\r\n        emptySearchText,\r\n\r\n        clearable,\r\n\r\n        placeholder,\r\n\r\n        className,\r\n        triggerClassName,\r\n        contentClassName,\r\n\r\n        renderOption,\r\n        renderValue,\r\n\r\n        // Mode\r\n        mode = \"default\",\r\n\r\n        // Icons & controls\r\n        leadingIcons,\r\n        trailingIcons,\r\n        icon,\r\n        iconGap,\r\n        leadingIconSpacing,\r\n        trailingIconSpacing,\r\n        leadingControl,\r\n        trailingControl,\r\n        leadingControlClassName,\r\n        trailingControlClassName,\r\n        joinControls = true,\r\n        extendBoxToControls = true,\r\n\r\n        // Button mode only\r\n        button,\r\n        children,\r\n\r\n        // Virtualization\n        virtualScroll = true,\n    } = props;\n\r\n    const isButtonMode = mode === \"button\";\r\n\r\n    const [open, setOpen] = React.useState(false);\r\n    const [query, setQuery] = React.useState(\"\");\r\n\r\n    const items = React.useMemo(\r\n        () =>\r\n            normalizeOptions(options ?? [], {\r\n                autoCap,\r\n                optionLabel,\r\n                optionValue,\r\n                optionDescription,\n                optionDisabled,\n                optionKey,\n                optionIcon,\n                optionTags,\n                optionTagLabel,\n                optionTagIcon,\n                optionTagClassName,\n                optionTagColor,\n                optionTagBgColor,\n                optionTagOnClick,\n            }),\n        [\r\n            options,\r\n            autoCap,\r\n            optionLabel,\r\n            optionValue,\r\n            optionDescription,\n            optionDisabled,\n            optionKey,\n            optionIcon,\n            optionTags,\n            optionTagLabel,\n            optionTagIcon,\n            optionTagClassName,\n            optionTagColor,\n            optionTagBgColor,\n            optionTagOnClick,\n        ],\n    );\n\r\n    const normalizedValue: SelectPrimitive | undefined =\r\n        value === \"\" || value == null ? undefined : (value as SelectPrimitive);\r\n\r\n    const valueMap = React.useMemo(() => {\r\n        const map = new Map<string, SelectPrimitive>();\r\n        for (const item of items) {\r\n            map.set(String(item.value), item.value);\r\n        }\r\n        return map;\r\n    }, [items]);\r\n\r\n    const selectedItem =\r\n        normalizedValue == null\r\n            ? null\r\n            : (items.find(\r\n                  (it) => String(it.value) === String(normalizedValue),\r\n              ) ?? null);\r\n\r\n\r\n    const filteredItems = React.useMemo(() => {\r\n        if (!query) return items;\r\n        const q = query.toLowerCase();\r\n        return items.filter((it) => it.labelText.toLowerCase().includes(q));\r\n    }, [items, query]);\r\n\r\n    // ─────────────────────────────────────────────\r\n    // Incremental render state\r\n    // ─────────────────────────────────────────────\r\n\r\n    const useVirtualization = virtualScroll !== false;\n    const estimatedRowHeight = 36;\n    const listMaxHeight = 240;\n    const listHeight = Math.min(\n        listMaxHeight,\n        Math.max(estimatedRowHeight, filteredItems.length * estimatedRowHeight),\n    );\n\r\n    const handleChange = React.useCallback(\r\n        (rawKey: string) => {\r\n            if (!onValue || rawKey === \"\") return;\r\n\r\n            const primitive =\r\n                valueMap.get(rawKey) ?? (rawKey as unknown as SelectPrimitive);\r\n\r\n            const item =\r\n                items.find((it) => String(it.value) === String(primitive)) ??\r\n                null;\r\n\r\n            const detail: ChangeDetail = {\n                source: \"variant\",\n                raw: item?.raw ?? primitive,\n                selectedOptions: [item?.raw ?? primitive],\n                nativeEvent: undefined,\n                meta: undefined,\n            };\n\r\n            onValue(primitive, detail);\r\n        },\r\n        [onValue, valueMap, items],\r\n    );\r\n\r\n    const currentKey = selectedItem != null ? String(selectedItem.value) : \"\";\r\n\r\n    const heightCls = triggerHeight(size as Size | undefined);\r\n    const padCls = triggerPadding(density as Density | undefined);\r\n\r\n    const showClear = clearable && value != null;\r\n\r\n    // ─────────────────────────────────────────────\r\n    // Icons setup (similar to text variant)\r\n    // ─────────────────────────────────────────────\r\n\r\n    const resolvedLeadingIcons: React.ReactNode[] = (() => {\r\n        if (isButtonMode) return [];\r\n        if (leadingIcons && leadingIcons.length) return leadingIcons;\r\n        if (icon) return [icon];\r\n        return [];\r\n    })();\r\n\r\n    const resolvedTrailingIcons: React.ReactNode[] = isButtonMode\r\n        ? []\r\n        : (trailingIcons ?? []);\r\n\r\n    const baseIconGap = iconGap ?? 4;\r\n    const leadingGap = leadingIconSpacing ?? baseIconGap;\r\n    const trailingGap = trailingIconSpacing ?? baseIconGap;\r\n\r\n    const hasLeadingIcons = resolvedLeadingIcons.length > 0;\r\n    const hasTrailingIcons = resolvedTrailingIcons.length > 0;\r\n\r\n    const hasLeadingControl = !isButtonMode && !!leadingControl;\r\n    const hasTrailingControl = !isButtonMode && !!trailingControl;\r\n    const hasControls = hasLeadingControl || hasTrailingControl;\r\n\r\n    const triggerInner = renderValue ? (\r\n        renderValue({\r\n            selectedItem,\r\n            placeholder,\r\n        })\r\n    ) : selectedItem ? (\r\n        <span className=\"truncate flex items-center gap-2\">\r\n            {selectedItem.icon && (\r\n                <span className=\"shrink-0\">{selectedItem.icon}</span>\r\n            )}\r\n            <span className=\"truncate\">{selectedItem.labelNode}</span>\r\n        </span>\r\n    ) : (\r\n        <span className=\"truncate text-muted-foreground\">\r\n            {placeholder ?? \"Select...\"}\r\n        </span>\r\n    );\r\n\r\n    const baseBoxClasses = cn(\r\n        \"border-input w-full min-w-0 rounded-md border bg-transparent shadow-xs\",\r\n        \"transition-[color,box-shadow] outline-none\",\r\n        \"focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]\",\r\n        \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\r\n    );\r\n\r\n    const ButtonModeTrigger = React.useMemo(() => {\r\n        if (!isButtonMode) return null;\r\n\r\n        const selectedValue = value as SelectPrimitive | undefined;\r\n        const renderable = button ?? children;\r\n\r\n        const content: React.ReactNode = (() => {\r\n            if (typeof renderable === \"function\") {\r\n                return renderable({\r\n                    open,\r\n                    selectedItem,\r\n                    selectedValue,\r\n                    placeholder,\r\n                });\r\n            }\r\n\r\n            if (renderable != null) return renderable;\r\n\r\n            // Default fallback:\r\n            // - if options have icons, show selected icon (or first icon)\r\n            // - else show simple label\r\n            const iconNode =\r\n                selectedItem?.icon ?? items.find((it) => it.icon)?.icon ?? null;\r\n\r\n            if (iconNode) {\r\n                return (\r\n                    <span className=\"inline-flex items-center justify-center\">\r\n                        {iconNode}\r\n                    </span>\r\n                );\r\n            }\r\n\r\n            return (\r\n                <span className=\"truncate\">\r\n                    {selectedItem?.labelNode ?? placeholder ?? \"Select...\"}\r\n                </span>\r\n            );\r\n        })();\r\n\r\n        // Important: SelectTrigger wants a single element child when asChild.\r\n        // Use a button by default to keep it accessible.\r\n        return (\r\n            <button\r\n                ref={_ref}\r\n                type=\"button\"\r\n                disabled={disabled || readOnly}\r\n                className={cn(\r\n                    \"inline-flex items-center justify-center\",\r\n                    \"focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50\",\r\n                    triggerClassName,\r\n                )}\r\n                aria-label={\r\n                    selectedItem?.labelText\r\n                        ? `Selected: ${selectedItem.labelText}`\r\n                        : \"Select\"\r\n                }\r\n            >\r\n                {content}\r\n            </button>\r\n        );\r\n    }, [\r\n        isButtonMode,\r\n        button,\r\n        children,\r\n        open,\r\n        selectedItem,\r\n        value,\r\n        placeholder,\r\n        items,\r\n        disabled,\r\n        readOnly,\r\n        triggerClassName,\r\n        _ref,\r\n    ]);\r\n    // Trigger content (inner layout: icons + label + clear + trailing icons)\r\n    const TriggerBody = isButtonMode ? (\r\n        <SelectTrigger asChild>{ButtonModeTrigger}</SelectTrigger>\r\n    ) : (\r\n        <SelectTrigger\r\n            onPointerDown={(e) => {\r\n                if (e.target instanceof HTMLButtonElement) {\r\n                    if (e.target.getAttribute(\"data-slot\") == \"clear\") {\r\n                        e.preventDefault();\r\n                        e.stopPropagation();\r\n                        if (!onValue) return;\r\n                        const detail: ChangeDetail = {\n                            source: \"variant\",\n                            raw: undefined,\n                            selectedOptions: [],\n                            nativeEvent: undefined,\n                            meta: { action: \"clear\" },\n                        };\n                        onValue(undefined, detail);\r\n                    }\r\n                }\r\n            }}\r\n            className={cn(\r\n                \"w-full justify-between\",\r\n                heightCls,\r\n                padCls,\r\n                hasControls && joinControls && extendBoxToControls\r\n                    ? \"border-none shadow-none focus:ring-0 focus:outline-none\"\r\n                    : \"\",\r\n                triggerClassName,\r\n            )}\r\n        >\r\n            <div className=\"flex w-full items-center justify-between gap-2\">\r\n                {/* Left side: leading icons + label */}\r\n                <div className=\"flex min-w-0 items-center gap-2\">\r\n                    {hasLeadingIcons && (\r\n                        <span\r\n                            className=\"flex items-center gap-1 shrink-0\"\r\n                            style={{ columnGap: leadingGap }}\r\n                            data-slot=\"leading-icons\"\r\n                        >\r\n                            {resolvedLeadingIcons.map((node, idx) => (\r\n                                <span\r\n                                    key={idx}\r\n                                    className=\"flex items-center justify-center\"\r\n                                >\r\n                                    {node}\r\n                                </span>\r\n                            ))}\r\n                        </span>\r\n                    )}\r\n                    <div className=\"min-w-0 flex-1\">{triggerInner}</div>\r\n                </div>\r\n\r\n                {/* Right side: clear button + trailing icons */}\r\n                <div className=\"flex items-center gap-1 shrink-0\">\r\n                    {showClear && (\r\n                        <button\r\n                            data-slot={\"clear\"}\r\n                            type=\"button\"\r\n                            aria-label=\"Clear selection\"\r\n                            className=\"flex h-4 w-4 items-center justify-center rounded hover:bg-muted\"\r\n                        >\r\n                            <X className=\"h-3 w-3 pointer-events-none\" />\r\n                        </button>\r\n                    )}\r\n\r\n                    {hasTrailingIcons && (\r\n                        <span\r\n                            className=\"flex items-center gap-1\"\r\n                            style={{ columnGap: trailingGap }}\r\n                            data-slot=\"trailing-icons\"\r\n                        >\r\n                            {resolvedTrailingIcons.map((node, idx) => (\r\n                                <span\r\n                                    key={idx}\r\n                                    className=\"flex items-center justify-center\"\r\n                                >\r\n                                    {node}\r\n                                </span>\r\n                            ))}\r\n                        </span>\r\n                    )}\r\n                </div>\r\n            </div>\r\n        </SelectTrigger>\r\n    );\r\n\r\n    const SelectWithTrigger = (\r\n        <Select\r\n            value={currentKey}\r\n            onValueChange={handleChange}\r\n            disabled={disabled || readOnly}\r\n            open={open}\r\n            onOpenChange={(nextOpen) => {\r\n                setOpen(nextOpen);\r\n                if (!nextOpen) setQuery(\"\");\r\n            }}\r\n        >\r\n            {TriggerBody}\r\n\r\n            <SelectContent className={cn(\"min-w-32\", contentClassName)}>\r\n                {searchable && (\r\n                    <div className=\"p-1\">\r\n                        <Input\r\n                            autoFocus\r\n                            icon={<Search className=\"size-4\" />}\r\n                            value={query}\r\n                            onChange={(e) => setQuery(e.target.value)}\r\n                            placeholder={searchPlaceholder ?? \"Search...\"}\r\n                            size={size}\r\n                            density={density}\r\n                        />\r\n                    </div>\r\n                )}\r\n\r\n                {/* CASE 1: no options at all */}\r\n                {items.length === 0 ? (\r\n                    <div className=\"px-2 py-1.5 text-xs text-muted-foreground\">\r\n                        {emptyLabel ??\r\n                            emptySearchText ??\r\n                            \"No options available\"}\r\n                    </div>\r\n                ) : /* CASE 2: have options, but search filters everything out */ filteredItems.length ===\r\n                  0 ? (\r\n                    <div className=\"px-2 py-1.5 text-xs text-muted-foreground\">\r\n                        {emptySearchText ?? \"No results found\"}\r\n                    </div>\r\n                ) : useVirtualization ? (\n                    // CASE 3: normal list, virtualized\n                    <Virtuoso\n                        style={{ height: listHeight }}\n                        data={filteredItems}\n                        computeItemKey={(_index, item) => item.key}\n                        itemContent={(index, item) => {\n                            const optionNode = (\n                                <SelectItem\n                                    key={item.key}\n                                    value={String(item.value)}\n                                    disabled={item.disabled}\n                                >\n                                    <div className=\"flex items-start gap-2\">\n                                        {item.icon && (\n                                            <span className=\"mt-0.5 shrink-0\">\n                                                {item.icon}\n                                            </span>\n                                        )}\n                                        <div className=\"flex min-w-0 flex-col\">\n                                            <span className=\"flex min-w-0 items-start gap-2\">\n                                                <span className=\"truncate\">\n                                                    {item.labelNode}\n                                                </span>\n                                                {!!item.tags?.length && (\n                                                    <span className=\"ml-auto flex shrink-0 flex-wrap gap-1\">\n                                                        {item.tags.map(\n                                                            (tag, tagIndex) => (\n                                                                <Badge\n                                                                    key={tagIndex}\n                                                                    className={cn(\n                                                                        \"text-xs\",\n                                                                        tag.className,\n                                                                    )}\n                                                                    onClick={\n                                                                        tag.onClick\n                                                                    }\n                                                                    style={{\n                                                                        color: tag.color,\n                                                                        backgroundColor:\n                                                                            tag.bgColor,\n                                                                    }}\n                                                                >\n                                                                    {tag.icon && (\n                                                                        <span className=\"shrink-0\">\n                                                                            {tag.icon}\n                                                                        </span>\n                                                                    )}\n                                                                    <span>\n                                                                        {tag.label}\n                                                                    </span>\n                                                                </Badge>\n                                                            ),\n                                                        )}\n                                                    </span>\n                                                )}\n                                            </span>\n                                            {item.description && (\n                                                <span className=\"text-xs text-muted-foreground\">\n                                                    {item.description}\n                                                </span>\n                                            )}\n                                        </div>\n                                    </div>\n                                </SelectItem>\n                            );\n\n                            // Prefer per-option renderer (normalized) if present; fall back to global renderOption\n                            const renderer =\n                                (item as any).render ?? renderOption;\n\n                            if (!renderer) return optionNode;\n\n                            return renderer({\n                                item,\n                                selected:\n                                    selectedItem != null &&\n                                    String(selectedItem.value) ===\n                                        String(item.value),\n                                index,\n                                option: optionNode,\n                                click() {\n                                    if (disabled || readOnly || item.disabled)\n                                        return;\n                                    handleChange(String(item.value));\n                                    setOpen(false);\n                                    setQuery(\"\");\n                                },\n                            });\n                        }}\n                    />\n                ) : (\n                    <ScrollArea className=\"max-h-60\">\n                        <div>\n                            {filteredItems.map((item, index) => {\n                            const optionNode = (\n                                <SelectItem\n                                    key={item.key}\n                                    value={String(item.value)}\n                                    disabled={item.disabled}\n                                >\n                                    <div className=\"flex items-start gap-2\">\n                                        {item.icon && (\n                                            <span className=\"mt-0.5 shrink-0\">\n                                                {item.icon}\n                                            </span>\n                                        )}\n                                        <div className=\"flex min-w-0 flex-col\">\n                                            <span className=\"flex min-w-0 items-start gap-2\">\n                                                <span className=\"truncate\">\n                                                    {item.labelNode}\n                                                </span>\n                                                {!!item.tags?.length && (\n                                                    <span className=\"ml-auto flex shrink-0 flex-wrap gap-1\">\n                                                        {item.tags.map(\n                                                            (tag, tagIndex) => (\n                                                                <Badge\n                                                                    key={tagIndex}\n                                                                    className={cn(\n                                                                        \"text-xs\",\n                                                                        tag.className,\n                                                                    )}\n                                                                    onClick={\n                                                                        tag.onClick\n                                                                    }\n                                                                    style={{\n                                                                        color: tag.color,\n                                                                        backgroundColor:\n                                                                            tag.bgColor,\n                                                                    }}\n                                                                >\n                                                                    {tag.icon && (\n                                                                        <span className=\"shrink-0\">\n                                                                            {tag.icon}\n                                                                        </span>\n                                                                    )}\n                                                                    <span>\n                                                                        {tag.label}\n                                                                    </span>\n                                                                </Badge>\n                                                            ),\n                                                        )}\n                                                    </span>\n                                                )}\n                                            </span>\n                                            {item.description && (\n                                                <span className=\"text-xs text-muted-foreground\">\n                                                    {item.description}\n                                                </span>\n                                            )}\n                                        </div>\n                                    </div>\n                                </SelectItem>\n                            );\n\n                            const renderer =\n                                (item as any).render ?? renderOption;\n\n                            if (!renderer) return optionNode;\n\n                            return renderer({\n                                item,\n                                selected:\n                                    selectedItem != null &&\n                                    String(selectedItem.value) ===\n                                        String(item.value),\n                                index,\n                                option: optionNode,\n                                click() {\n                                    if (disabled || readOnly || item.disabled)\n                                        return;\n                                    handleChange(String(item.value));\n                                    setOpen(false);\n                                    setQuery(\"\");\n                                },\n                            });\n                        })}\n                        </div>\n                    </ScrollArea>\n                )}\n            </SelectContent>\n        </Select>\n    );\r\n\r\n    // ─────────────────────────────────────────────\r\n    // Layout modes:\r\n    // - no controls\r\n    // - controls + joinControls\r\n    // - controls, separate boxes\r\n    // ─────────────────────────────────────────────\r\n\r\n    // CASE 1: button mode OR no controls → just the select\r\n    if (isButtonMode || !hasControls) {\r\n        return (\r\n            <div\r\n                data-slot=\"select-field\"\r\n                className={cn(\r\n                    \"w-full\",\r\n                    disabled && \"opacity-50 cursor-not-allowed\",\r\n                    className,\r\n                )}\r\n                aria-disabled={disabled || undefined}\r\n                aria-invalid={error ? \"true\" : undefined}\r\n            >\r\n                {SelectWithTrigger}\r\n            </div>\r\n        );\r\n    }\r\n\r\n    // CASE 2: controls + joinControls → share single box like text variant\r\n    if (joinControls) {\r\n        const groupClassName = cn(\r\n            \"flex items-stretch w-full\",\r\n            extendBoxToControls &&\r\n                cn(\r\n                    \"relative\",\r\n                    baseBoxClasses, // ring via :focus-within\r\n                ),\r\n            !extendBoxToControls &&\r\n                \"relative border-none shadow-none bg-transparent\",\r\n            className,\r\n        );\r\n\r\n        return (\r\n            <div\r\n                data-slot=\"select-field\"\r\n                className=\"w-full\"\r\n                aria-disabled={disabled || undefined}\r\n                aria-invalid={error ? \"true\" : undefined}\r\n            >\r\n                <div\r\n                    className={groupClassName}\r\n                    data-slot=\"select-group\"\r\n                    data-disabled={disabled ? \"true\" : \"false\"}\r\n                >\r\n                    {hasLeadingControl && (\r\n                        <div\r\n                            className={cn(\r\n                                \"flex items-center px-2\",\r\n                                leadingControlClassName,\r\n                            )}\r\n                            data-slot=\"leading-control\"\r\n                        >\r\n                            {leadingControl}\r\n                        </div>\r\n                    )}\r\n\r\n                    <div\r\n                        className={cn(\"flex-1 min-w-0 flex items-stretch\")}\r\n                        data-slot=\"select-region\"\r\n                    >\r\n                        {SelectWithTrigger}\r\n                    </div>\r\n\r\n                    {hasTrailingControl && (\r\n                        <div\r\n                            className={cn(\r\n                                \"flex items-center px-2\",\r\n                                trailingControlClassName,\r\n                            )}\r\n                            data-slot=\"trailing-control\"\r\n                        >\r\n                            {trailingControl}\r\n                        </div>\r\n                    )}\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    // CASE 3: controls present, but separate (no joined box)\r\n    return (\r\n        <div\r\n            data-slot=\"select-field\"\r\n            className={cn(\r\n                \"flex items-stretch w-full\",\r\n                disabled && \"opacity-50 cursor-not-allowed\",\r\n                className,\r\n            )}\r\n            aria-disabled={disabled || undefined}\r\n            aria-invalid={error ? \"true\" : undefined}\r\n        >\r\n            {hasLeadingControl && (\r\n                <div\r\n                    className={cn(\r\n                        \"flex items-center mr-1\",\r\n                        leadingControlClassName,\r\n                    )}\r\n                    data-slot=\"leading-control\"\r\n                >\r\n                    {leadingControl}\r\n                </div>\r\n            )}\r\n\r\n            <div className=\"flex-1 min-w-0\">{SelectWithTrigger}</div>\r\n\r\n            {hasTrailingControl && (\r\n                <div\r\n                    className={cn(\r\n                        \"flex items-center ml-1\",\r\n                        trailingControlClassName,\r\n                    )}\r\n                    data-slot=\"trailing-control\"\r\n                >\r\n                    {trailingControl}\r\n                </div>\r\n            )}\r\n        </div>\r\n    );\r\n});\r\n\r\nShadcnSelectVariant.displayName = \"ShadcnSelectVariant\";\r\n\r\nexport default ShadcnSelectVariant;\r\n","import ShadcnSelectVariant, { ShadcnSelectVariantProps } from \"@/presets/shadcn-variants/select\";\r\nimport { VariantModuleFor } from \"@/schema/variant\";\r\n\r\nexport type SelectVariantProps = ShadcnSelectVariantProps;\r\n\r\nexport const selectModule: VariantModuleFor<\"select\"> = {\r\n   variant: \"select\",\r\n   Variant: ShadcnSelectVariant,\r\n\r\n   meta: {\r\n      label: \"Select\",\r\n      description: \"Single-value dropdown based on Shadcn Select.\",\r\n      tags: [\"select\", \"dropdown\", \"single-value\"],\r\n   },\r\n};","import * as React from \"react\";\r\nimport { X } from \"lucide-react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport {\r\n   Popover,\r\n   PopoverTrigger,\r\n   PopoverContent,\r\n} from \"@/presets/ui/popover\";\r\n\r\ntype NormalizedMultiItem = {\r\n   key: string;\r\n   value: string | number;\r\n   labelNode: React.ReactNode;\r\n   labelText: string; // Used for width calculation\r\n   disabled?: boolean;\r\n};\r\n\r\nexport interface SelectionSummaryProps {\r\n   selectedItems: NormalizedMultiItem[];\r\n   placeholder?: React.ReactNode;\r\n   onRemoveValue?: (value: NormalizedMultiItem) => void;\r\n}\r\n\r\n/**\r\n * Helper: Measure text width using a canvas.\r\n * Much faster than rendering hidden DOM elements.\r\n */\r\nfunction getTextWidth(text: string, font: string) {\r\n   if (typeof window === \"undefined\") return 0;\r\n   const canvas =\r\n      (window as any).__canvas ||\r\n      ((window as any).__canvas = document.createElement(\"canvas\"));\r\n   const context = canvas.getContext(\"2d\");\r\n   context.font = font;\r\n   const metrics = context.measureText(text);\r\n   return metrics.width;\r\n}\r\n\r\nexport const SelectionSummary: React.FC<SelectionSummaryProps> = ({\r\n   selectedItems,\r\n   placeholder,\r\n   onRemoveValue,\r\n}) => {\r\n   const containerRef = React.useRef<HTMLSpanElement | null>(null);\r\n   const [visibleCount, setVisibleCount] = React.useState(0);\r\n   const [moreOpen, setMoreOpen] = React.useState(false);\r\n\r\n   // Measure available width and calculate how many items fit\r\n   React.useLayoutEffect(() => {\r\n      const el = containerRef.current;\r\n      if (!el) return;\r\n\r\n      const computeVisibleItems = () => {\r\n         const containerWidth = el.clientWidth;\r\n\r\n         // 1. Get current font styles to ensure accurate measurement\r\n         const computedStyle = window.getComputedStyle(el);\r\n         const font = `${computedStyle.fontWeight} ${computedStyle.fontSize} ${computedStyle.fontFamily}`;\r\n\r\n         // 2. Calculate the \"Buffer\" (12 characters width)\r\n         // This is the space reserved for the \"+ N more\" trigger if truncation happens.\r\n         // We use 'M' or '0' as an average widest character approximation, or a standard string.\r\n         const bufferWidth = getTextWidth(\"000000000000\", font);\r\n\r\n         // 3. Width of the separator (e.g., \", \")\r\n         const commaWidth = getTextWidth(\", \", font);\r\n\r\n         let usedWidth = 0;\r\n         let count = 0;\r\n         const totalItems = selectedItems.length;\r\n\r\n         for (let i = 0; i < totalItems; i++) {\r\n            const item = selectedItems[i];\r\n            const itemWidth = getTextWidth(item.labelText, font);\r\n\r\n            // Is this the very last item in the entire list?\r\n            const isLastItem = i === totalItems - 1;\r\n\r\n            // If it's the last item, we don't need the buffer space.\r\n            // If it's NOT the last item, we must ensure we have space for this item AND the buffer.\r\n            // (Because if we can't fit the *next* item, we'll need the buffer to show the badge).\r\n            const spaceNeeded = isLastItem\r\n               ? itemWidth\r\n               : itemWidth + commaWidth + bufferWidth;\r\n\r\n            if (usedWidth + spaceNeeded <= containerWidth) {\r\n               usedWidth += itemWidth + commaWidth;\r\n               count++;\r\n            } else {\r\n               // No more space\r\n               break;\r\n            }\r\n         }\r\n\r\n         // Ensure we show at least 1 item if there are items, \r\n         // unless even the first item is wider than the container (then CSS truncation handles it).\r\n         setVisibleCount(Math.max(1, count));\r\n      };\r\n\r\n      computeVisibleItems();\r\n\r\n      const ro = new ResizeObserver(computeVisibleItems);\r\n      ro.observe(el);\r\n      return () => ro.disconnect();\r\n   }, [selectedItems, selectedItems.length]); // Re-run if items change\r\n\r\n   const totalCount = selectedItems.length;\r\n\r\n   if (!totalCount) {\r\n      return (\r\n         <span ref={containerRef} className=\"truncate text-muted-foreground w-full block\">\r\n            {placeholder ?? \"Select options…\"}\r\n         </span>\r\n      );\r\n   }\r\n\r\n   const visibleItems = selectedItems.slice(0, visibleCount);\r\n   // If visible count covers everything, overflow is 0\r\n   const overflowCount = totalCount - visibleItems.length;\r\n\r\n   // Safety check: if our calculation says we can show X, but X < Total, \r\n   // strictly ensure we render the \"More\" chip.\r\n   // If calculation resulted in showing all items, overflow is 0.\r\n   const showMore = overflowCount > 0;\r\n\r\n   const handleRemove = (value: NormalizedMultiItem) => {\r\n      if (!onRemoveValue) return;\r\n      onRemoveValue(value);\r\n   };\r\n\r\n   return (\r\n      <span\r\n         ref={containerRef}\r\n         className=\"flex items-center w-full overflow-hidden whitespace-nowrap\"\r\n      >\r\n         {/* Render Visible Items */}\r\n         {visibleItems.map((item, index) => (\r\n            <React.Fragment key={item.key}>\r\n               <span className=\"truncate flex-shrink-0\">\r\n                  {item.labelNode}\r\n               </span>\r\n               {/* Add comma if it's not the last visible item */}\r\n               {index < visibleItems.length - 1 && (\r\n                  <span className=\"text-muted-foreground mr-1\">,</span>\r\n               )}\r\n            </React.Fragment>\r\n         ))}\r\n\r\n         {/* Render Separator before \"More\" if needed */}\r\n         {showMore && (\r\n            <span className=\"text-muted-foreground mr-1\">,</span>\r\n         )}\r\n\r\n         {/* Render \"+N more\" Chip */}\r\n         {showMore && (\r\n            <Popover open={moreOpen} onOpenChange={setMoreOpen}>\r\n               <PopoverTrigger asChild>\r\n                  <button\r\n                     type=\"button\"\r\n                     className=\"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground underline underline-offset-2 flex-shrink-0\"\r\n                     onClick={(e) => e.stopPropagation()}\r\n                  >\r\n                     +{overflowCount} more\r\n                  </button>\r\n               </PopoverTrigger>\r\n               <PopoverContent\r\n                  align=\"start\"\r\n                  className=\"w-56 max-h-64 overflow-y-auto p-2 text-sm\"\r\n                  onClick={(e) => e.stopPropagation()}\r\n               >\r\n                  <div className=\"flex items-center justify-between mb-1\">\r\n                     <span className=\"font-medium text-xs text-muted-foreground\">\r\n                        Selected ({totalCount})\r\n                     </span>\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"p-1 rounded hover:bg-muted\"\r\n                        onClick={() => setMoreOpen(false)}\r\n                     >\r\n                        <X className=\"h-3 w-3\" />\r\n                     </button>\r\n                  </div>\r\n\r\n                  <div className=\"space-y-1\">\r\n                     {selectedItems.map((item) => (\r\n                        <div\r\n                           key={item.key}\r\n                           className={cn(\r\n                              \"flex items-center justify-between gap-2 rounded px-2 py-1\",\r\n                              \"bg-muted/40\"\r\n                           )}\r\n                        >\r\n                           <span className=\"truncate\">{item.labelNode}</span>\r\n                           {onRemoveValue && (\r\n                              <button\r\n                                 type=\"button\"\r\n                                 className=\"flex h-4 w-4 shrink-0 items-center justify-center rounded hover:bg-muted text-muted-foreground hover:text-foreground\"\r\n                                 onClick={(e) => {\r\n                                    e.stopPropagation();\r\n                                    handleRemove(item);\r\n                                 }}\r\n                              >\r\n                                 <X className=\"h-3 w-3\" />\r\n                              </button>\r\n                           )}\r\n                        </div>\r\n                     ))}\r\n                  </div>\r\n               </PopoverContent>\r\n            </Popover>\r\n         )}\r\n      </span>\r\n   );\r\n};\r\n\r\n\r\n// src/variants/select-utils.ts (or wherever you keep small helpers)\r\n\r\nexport type SelectPrimitive = string | number;\r\n\r\n/**\r\n * Remove a single value from a selection array.\r\n *\r\n * - Works even if the selection is undefined/null.\r\n * - Compares using String() so \"1\" and 1 are treated consistently.\r\n */\r\nexport function removeSelectValue<T extends SelectPrimitive>(\r\n   current: readonly T[] | undefined | null,\r\n   valueToRemove: T\r\n): T[] {\r\n   if (!current || current.length === 0) return [];\r\n\r\n   const target = String(valueToRemove);\r\n\r\n   return current.filter((v) => String(v) !== target);\r\n}","// src/presets/shadcn-variants/multi-select.tsx\n// noinspection DuplicatedCode\n\nimport * as React from \"react\";\nimport type { ChangeDetail, VariantBaseProps } from \"@/variants/shared\";\nimport { cn } from \"@/lib/utils\";\nimport { Input } from \"@/presets/ui/input\";\nimport { Checkbox } from \"@/presets/ui/checkbox\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/presets/ui/popover\";\nimport { ChevronDown, Search, X } from \"lucide-react\";\nimport { Badge } from \"@/presets/ui/badge\";\nimport {\n    removeSelectValue,\n    SelectionSummary,\n} from \"@/variants/helpers/selection-summary\";\nimport { globalNormalizeOptions } from \"@/lib/normalise-options\";\nimport { keyBy } from \"lodash\";\nimport { Virtuoso } from \"react-virtuoso\";\n\ntype SelectPrimitive = string | number;\n\ntype Size = \"sm\" | \"md\" | \"lg\";\ntype Density = \"compact\" | \"comfortable\" | \"loose\";\n\nexport type MultiSelectOption =\n    | SelectPrimitive\n    | {\n          label?: React.ReactNode;\n          value?: SelectPrimitive;\n          description?: React.ReactNode;\n          disabled?: boolean;\n          icon?: React.ReactNode;\n          [key: string]: any;\n      };\n\ntype NormalizedMultiItem = {\n    key: string;\n    value: SelectPrimitive;\n    labelNode: React.ReactNode;\n    labelText: string;\n    description?: React.ReactNode;\n    disabled?: boolean;\n    icon?: React.ReactNode;\n    tags?: Array<{\n        label: React.ReactNode;\n        icon?: React.ReactNode;\n        className?: string;\n        color?: string;\n        bgColor?: string;\n        onClick?: React.MouseEventHandler<HTMLSpanElement>;\n        raw: unknown;\n    }>;\n    /** Option-level renderer (falls back to global renderOption) */\n    render?: (...args: any[]) => React.ReactNode;\n    raw: MultiSelectOption;\n};\n\ntype MultiSelectBaseProps = Pick<\n    VariantBaseProps<SelectPrimitive[] | undefined>,\n    \"value\" | \"onValue\" | \"error\" | \"disabled\" | \"readOnly\" | \"size\" | \"density\"\n> & {\n    /**\n     * Options for the multi-select.\n     *\n     * You can pass:\n     * - primitives: [\"ng\", \"gh\", \"ke\"]\n     * - objects:    [{ label, value, ...extra }]\n     */\n    options?: MultiSelectOption[];\n\n    /**\n     * Automatically capitalise the first letter of the label\n     * (when the resolved label is a string).\n     */\n    autoCap?: boolean;\n\n    /**\n     * How to read the label from each option.\n     *\n     * - string → key on the option object\n     * - function → custom mapper\n     * - omitted → tries `label`, else String(value)\n     */\n    optionLabel?: string | ((item: MultiSelectOption) => React.ReactNode);\n\n    /**\n     * How to read the value from each option.\n     *\n     * - string → key on the option object\n     * - function → custom mapper\n     * - omitted → uses `value`, or `id`, or `key`, or index\n     */\n    optionValue?: string | ((item: MultiSelectOption) => SelectPrimitive);\n\n    /**\n     * Optional description line under the label.\n     */\n    optionDescription?: string | ((item: MultiSelectOption) => React.ReactNode);\n\n    /**\n     * How to determine if an option is disabled.\n     */\n    optionDisabled?: string | ((item: MultiSelectOption) => boolean);\n\n    /**\n     * How to extract an icon for each option.\n     *\n     * - string → key on the option object (default \"icon\")\n     * - function → custom mapper\n     */\n    optionIcon?: string | ((item: MultiSelectOption) => React.ReactNode);\n    optionTags?: string | ((item: MultiSelectOption) => unknown[]);\n    optionTagLabel?: string | ((tag: unknown) => React.ReactNode);\n    optionTagIcon?: string | ((tag: unknown) => React.ReactNode);\n    optionTagClassName?: string | ((tag: unknown) => string);\n    optionTagColor?: string | ((tag: unknown) => string);\n    optionTagBgColor?: string | ((tag: unknown) => string);\n    optionTagOnClick?:\n        | string\n        | ((tag: unknown) => React.MouseEventHandler<HTMLSpanElement>);\n\n    /**\n     * How to compute the React key for each option.\n     */\n    optionKey?:\n        | string\n        | ((item: MultiSelectOption, index: number) => React.Key);\n\n    /**\n     * Enable inline search inside the dropdown.\n     */\n    searchable?: boolean;\n\n    /**\n     * Placeholder for the search input.\n     */\n    searchPlaceholder?: string;\n\n    /**\n     * Text to show when search yields no results.\n     */\n    emptySearchText?: React.ReactNode;\n\n    /**\n     * Placeholder when nothing is selected.\n     */\n    placeholder?: React.ReactNode;\n\n    /**\n     * Show a small clear button in the trigger when any value is selected.\n     */\n    clearable?: boolean;\n\n    /**\n     * Whether to show a \"Select all\" row.\n     */\n    showSelectAll?: boolean;\n\n    /**\n     * Label for the \"Select all\" row.\n     * Default: \"Select all\".\n     */\n    selectAllLabel?: React.ReactNode;\n\n    /**\n     * Where to place the \"Select all\" row.\n     * Default: \"top\".\n     */\n    selectAllPosition?: \"top\" | \"bottom\";\n\n    /**\n     * Custom renderer for each option row (checkbox + label).\n     */\n    renderOption?: (ctx: {\n        item: NormalizedMultiItem;\n        selected: boolean;\n        index: number;\n        option: React.ReactNode; // prebuilt row you can wrap\n        click(): void;\n    }) => React.ReactNode;\n\n    /**\n     * Custom renderer for the trigger summary.\n     */\n    renderValue?: (ctx: {\n        selectedItems: NormalizedMultiItem[];\n        placeholder?: React.ReactNode;\n    }) => React.ReactNode;\n\n    /**\n     * Custom renderer for the checkbox.\n     *\n     * - item: the option item (or null for \"select all\")\n     * - selected: whether this row is currently fully selected\n     * - indeterminate: partially selected (used for \"select all\")\n     * - isSelectAll: true for the \"select all\" row\n     */\n    renderCheckbox?: (ctx: {\n        item: NormalizedMultiItem | null;\n        selected: boolean;\n        indeterminate: boolean;\n        isSelectAll: boolean;\n    }) => React.ReactNode;\n\n    /**\n     * Max height (in px) for the dropdown list before scrolling.\n     * Default: 260.\n     */\n    maxListHeight?: number;\n\n    /**\n     * Wrapper class for the whole variant.\n     */\n    className?: string;\n\n    /**\n     * Extra classes for the trigger button.\n     */\n    triggerClassName?: string;\n\n    /**\n     * Extra classes for the popover content.\n     */\n    contentClassName?: string;\n};\n\ntype MultiSelectDefaultModeProps = {\n    mode?: \"default\";\n\n    // Icons & controls (default mode only)\n    leadingIcons?: React.ReactNode[];\n    trailingIcons?: React.ReactNode[];\n    icon?: React.ReactNode;\n    iconGap?: number;\n    leadingIconSpacing?: number;\n    trailingIconSpacing?: number;\n\n    leadingControl?: React.ReactNode;\n    trailingControl?: React.ReactNode;\n    leadingControlClassName?: string;\n    trailingControlClassName?: string;\n\n    joinControls?: boolean;\n    extendBoxToControls?: boolean;\n\n    // Not supported in default mode\n    button?: never;\n    children?: never;\n    selectedBadge?: never;\n    selectedBadgeHiddenWhenZero?: never;\n    selectedBadgeClassName?: never;\n    selectedBadgePlacement?: never;\n};\n\ntype MultiSelectButtonModeButton =\n    | React.ReactNode\n    | ((ctx: {\n          open: boolean;\n          selectedItems: NormalizedMultiItem[];\n          selectedCount: number;\n      }) => React.ReactNode);\n\ntype MultiSelectButtonModeProps = {\n    mode: \"button\";\n\n    /**\n     * Used when mode=\"button\". If provided, this is the trigger.\n     * If not provided, `children` is used.\n     */\n    button?: MultiSelectButtonModeButton;\n    children?: MultiSelectButtonModeButton;\n\n    /**\n     * Selected-count badge (mode=\"button\" only)\n     */\n    selectedBadge?: boolean;\n    selectedBadgeHiddenWhenZero?: boolean;\n    selectedBadgeClassName?: string;\n    selectedBadgePlacement?: \"end\" | \"corner\";\n\n    // Icons & controls NOT supported in button mode\n    leadingIcons?: never;\n    trailingIcons?: never;\n    icon?: never;\n    iconGap?: never;\n    leadingIconSpacing?: never;\n    trailingIconSpacing?: never;\n\n    leadingControl?: never;\n    trailingControl?: never;\n    leadingControlClassName?: never;\n    trailingControlClassName?: never;\n\n    joinControls?: never;\n    extendBoxToControls?: never;\n};\n\nexport type ShadcnMultiSelectVariantProps = MultiSelectBaseProps &\n    (MultiSelectDefaultModeProps | MultiSelectButtonModeProps);\n\n// ─────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────\n\nfunction normalizeOptions(\n    opts: readonly MultiSelectOption[] | undefined,\n    config: Pick<\n        ShadcnMultiSelectVariantProps,\n        | \"autoCap\"\n        | \"optionLabel\"\n        | \"optionValue\"\n        | \"optionDescription\"\n        | \"optionDisabled\"\n        | \"optionKey\"\n        | \"optionIcon\"\n        | \"optionTags\"\n        | \"optionTagLabel\"\n        | \"optionTagIcon\"\n        | \"optionTagClassName\"\n        | \"optionTagColor\"\n        | \"optionTagBgColor\"\n        | \"optionTagOnClick\"\n    >,\n): NormalizedMultiItem[] {\n    return globalNormalizeOptions(opts, config);\n}\n\nfunction triggerHeight(size?: Size) {\n    switch (size) {\n        case \"sm\":\n            return \"h-8 text-xs\";\n        case \"lg\":\n            return \"h-11 text-base\";\n        default:\n            return \"h-9 text-sm\";\n    }\n}\n\nfunction triggerPadding(density?: Density) {\n    switch (density) {\n        case \"compact\":\n            return \"py-1\";\n        case \"loose\":\n            return \"py-2\";\n        case \"comfortable\":\n        default:\n            return \"py-1.5\";\n    }\n}\n\n// ─────────────────────────────────────────────\n// Component\n// ─────────────────────────────────────────────\n\nexport const ShadcnMultiSelectVariant = React.forwardRef<\n    HTMLButtonElement,\n    ShadcnMultiSelectVariantProps\n>(function ShadcnMultiSelectVariant(props, _ref) {\n    const {\n        value,\n        onValue,\n        error,\n        disabled,\n        readOnly,\n        size,\n        density,\n\n        options,\n\n        autoCap,\n        optionLabel,\n        optionValue,\n        optionDescription,\n        optionDisabled,\n        optionIcon,\n        optionKey,\n        optionTags,\n        optionTagLabel,\n        optionTagIcon,\n        optionTagClassName,\n        optionTagColor,\n        optionTagBgColor,\n        optionTagOnClick,\n\n        searchable,\n        searchPlaceholder,\n        emptySearchText,\n\n        placeholder,\n        clearable,\n\n        showSelectAll,\n        selectAllLabel,\n        selectAllPosition = \"top\",\n\n        renderOption,\n        renderValue,\n        renderCheckbox,\n\n        maxListHeight = 260,\n\n        className,\n        triggerClassName,\n        contentClassName,\n\n        // Mode\n        mode = \"default\",\n\n        // Icons & controls (default mode only)\n        leadingIcons,\n        trailingIcons,\n        icon,\n        iconGap,\n        leadingIconSpacing,\n        trailingIconSpacing,\n        leadingControl,\n        trailingControl,\n        leadingControlClassName,\n        trailingControlClassName,\n        joinControls = true,\n        extendBoxToControls = true,\n\n        // Button mode only\n        button,\n        children,\n        selectedBadge,\n        selectedBadgeHiddenWhenZero,\n        selectedBadgeClassName,\n        selectedBadgePlacement = \"end\",\n    } = props;\n\n    const [open, setOpen] = React.useState(false);\n    const [query, setQuery] = React.useState(\"\");\n\n    const { items, keyedItems } = React.useMemo(() => {\n        const items = normalizeOptions(options ?? [], {\n            autoCap,\n            optionLabel,\n            optionValue,\n            optionDescription,\n            optionDisabled,\n            optionKey,\n            optionIcon,\n            optionTags,\n            optionTagLabel,\n            optionTagIcon,\n            optionTagClassName,\n            optionTagColor,\n            optionTagBgColor,\n            optionTagOnClick,\n        });\n\n        return { items, keyedItems: keyBy(items, \"value\") };\n    }, [\n        options,\n        autoCap,\n        optionLabel,\n        optionValue,\n        optionDescription,\n        optionDisabled,\n        optionKey,\n        optionIcon,\n        optionTags,\n        optionTagLabel,\n        optionTagIcon,\n        optionTagClassName,\n        optionTagColor,\n        optionTagBgColor,\n        optionTagOnClick,\n    ]);\n\n    const selectedValues = React.useMemo(\n        () => new Set<SelectPrimitive>((value ?? []) as SelectPrimitive[]),\n        [value],\n    );\n\n    const selectedItems = React.useMemo(\n        () => items.filter((it) => selectedValues.has(it.value)),\n        [items, selectedValues],\n    );\n\n    const filteredItems = React.useMemo(() => {\n        if (!query) return items;\n        const q = query.toLowerCase();\n        return items.filter((it) => it.labelText.toLowerCase().includes(q));\n    }, [items, query]);\n\n    const selectableItems = React.useMemo(\n        () => items.filter((it) => !it.disabled),\n        [items],\n    );\n\n    const allSelectableValues = React.useMemo(\n        () => new Set<SelectPrimitive>(selectableItems.map((it) => it.value)),\n        [selectableItems],\n    );\n\n    const allSelected =\n        selectableItems.length > 0 &&\n        selectableItems.every((it) => selectedValues.has(it.value));\n\n    const someSelected =\n        selectableItems.length > 0 &&\n        !allSelected &&\n        selectableItems.some((it) => selectedValues.has(it.value));\n\n    const heightCls = triggerHeight(size as Size | undefined);\n    const padCls = triggerPadding(density as Density | undefined);\n\n    const showClear = clearable && (value?.length ?? 0) > 0;\n\n    const disabledTrigger = disabled || readOnly;\n\n    const estimatedRowHeight = 40;\n    const headerHeight =\n        showSelectAll && selectAllPosition === \"top\" ? estimatedRowHeight : 0;\n    const footerHeight =\n        showSelectAll && selectAllPosition === \"bottom\"\n            ? estimatedRowHeight\n            : 0;\n    const listHeight = Math.min(\n        maxListHeight,\n        Math.max(\n            estimatedRowHeight,\n            filteredItems.length * estimatedRowHeight +\n                headerHeight +\n                footerHeight,\n        ),\n    );\n\n    const handleToggleValue = React.useCallback(\n        (primitive: SelectPrimitive) => {\n            if (!onValue || disabled || readOnly) return;\n\n            const current = (value ?? []) as SelectPrimitive[];\n            const isSelected = current.some((v) => v === primitive);\n\n            let next: SelectPrimitive[];\n            if (isSelected) {\n                next = current.filter((v) => v !== primitive);\n            } else {\n                next = [...current, primitive];\n            }\n\n            const final = next.length ? next : undefined;\n            const values = next?.map(\n                (item) => keyedItems[item]?.raw ?? item,\n            );\n\n            const detail: ChangeDetail = {\n                source: \"variant\",\n                raw: {\n                    type: \"toggle\",\n                    value: primitive,\n                    next: final,\n                    values,\n                },\n                selectedOptions: values ?? [],\n                nativeEvent: undefined,\n                meta: undefined,\n            };\n\n            onValue(final as any, detail);\n        },\n        [onValue, value, disabled, readOnly, keyedItems],\n    );\n\n    const handleSelectAll = React.useCallback(() => {\n        if (!onValue || disabled || readOnly) return;\n\n        const current = (value ?? []) as SelectPrimitive[];\n\n        const allSelectableArr = Array.from(allSelectableValues);\n\n        const currentlyAllSelected =\n            allSelectableArr.length > 0 &&\n            allSelectableArr.every((v) => selectedValues.has(v));\n\n        let next: SelectPrimitive[];\n\n        if (currentlyAllSelected) {\n            // unselect all selectable ones, keep others (if any)\n            next = current.filter((v) => !allSelectableValues.has(v));\n        } else {\n            // union of existing + all selectable\n            const merged = new Set<SelectPrimitive>(current);\n            for (const v of allSelectableArr) merged.add(v);\n            next = Array.from(merged);\n        }\n\n        const final = next.length ? next : undefined;\n        const values = next.map((item) => keyedItems[item]?.raw ?? item);\n\n        const detail: ChangeDetail = {\n            source: \"variant\",\n            raw: {\n                type: \"select-all\",\n                next: final,\n                values,\n            },\n            selectedOptions: values,\n            nativeEvent: undefined,\n            meta: {\n                allSelected: !currentlyAllSelected,\n            },\n        };\n\n        onValue(final as any, detail);\n    }, [\n        onValue,\n        value,\n        disabled,\n        readOnly,\n        allSelectableValues,\n        selectedValues,\n        keyedItems,\n    ]);\n\n    const handleClearAll = React.useCallback(() => {\n        if (!onValue || disabled || readOnly) return;\n\n        const detail: ChangeDetail = {\n            source: \"variant\",\n            raw: {\n                type: \"clear\",\n            },\n            selectedOptions: [],\n            nativeEvent: undefined,\n            meta: undefined,\n        };\n\n        onValue(undefined as any, detail);\n    }, [onValue, disabled, readOnly]);\n\n    const triggerSummary = renderValue ? (\n        renderValue({ selectedItems, placeholder })\n    ) : (\n        <SelectionSummary\n            selectedItems={selectedItems}\n            placeholder={placeholder}\n            onRemoveValue={(item) => {\n                // whatever you already do to unselect a single value\n                // e.g. toggleValue(value) if it adds/removes from the set\n                // toggleValue(value);\n\n                const updated = removeSelectValue(\n                    selectedValues as unknown as SelectPrimitive[],\n                    item.value,\n                );\n                const selectedOptions = ((updated ?? []) as SelectPrimitive[])\n                    .map((value) => keyedItems[value]?.raw ?? value);\n\n                const detail: ChangeDetail = {\n                    source: \"variant\",\n                    raw: item,\n                    selectedOptions,\n                    nativeEvent: undefined,\n                    meta: { action: \"remove\", removed: value },\n                };\n\n                onValue?.(updated, detail);\n            }}\n        />\n    );\n\n    // ─────────────────────────────────────────────\n    // Icons setup (same semantics as select variant)\n    // ─────────────────────────────────────────────\n\n    const resolvedLeadingIcons: React.ReactNode[] = (() => {\n        if (leadingIcons && leadingIcons.length) return leadingIcons;\n        if (icon) return [icon];\n        return [];\n    })();\n\n    const resolvedTrailingIcons: React.ReactNode[] = trailingIcons ?? [];\n\n    const baseIconGap = iconGap ?? 4;\n    const leadingGap = leadingIconSpacing ?? baseIconGap;\n    const trailingGap = trailingIconSpacing ?? baseIconGap;\n\n    const hasLeadingIcons = resolvedLeadingIcons.length > 0;\n    const hasTrailingIcons = resolvedTrailingIcons.length > 0;\n\n    const hasLeadingControl = !!leadingControl;\n    const hasTrailingControl = !!trailingControl;\n    const hasControls = hasLeadingControl || hasTrailingControl;\n\n    const makeCheckboxNode = React.useCallback(\n        (opts: {\n            item: NormalizedMultiItem | null;\n            selected: boolean;\n            indeterminate: boolean;\n            isSelectAll: boolean;\n        }) => {\n            if (renderCheckbox) {\n                return renderCheckbox(opts);\n            }\n\n            return (\n                <Checkbox\n                    className=\"mr-2 mt-0.5\"\n                    checked={opts.indeterminate ? \"none\" : opts.selected}\n                    aria-hidden=\"true\"\n                    // purely visual; click handled on row button\n                    onCheckedChange={() => {}}\n                />\n            );\n        },\n        [renderCheckbox],\n    );\n\n    const baseBoxClasses = cn(\n        \"border-input w-full min-w-0 rounded-md border bg-transparent shadow-xs\",\n        \"transition-[color,box-shadow] outline-none\",\n        \"focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]\",\n        \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n    );\n\n    // Trigger button body (icons + summary + clear + trailing icons + chevron)\n    const DefaultTriggerButton = (\n        <button\n            ref={_ref}\n            type=\"button\"\n            disabled={disabledTrigger}\n            className={cn(\n                \"flex w-full items-center justify-between rounded-md border border-input bg-surfaces-input px-3 text-left shadow-xs\",\n                \"focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:border-ring\",\n                \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n                heightCls,\n                padCls,\n                hasControls &&\n                    joinControls &&\n                    extendBoxToControls &&\n                    \"border-none shadow-none focus-visible:ring-0 focus-visible:outline-none\",\n                triggerClassName,\n            )}\n        >\n            <div className=\"flex w-full items-center justify-between gap-2\">\n                {/* Left side: leading icons + summary */}\n                <div className=\"flex min-w-0 items-center grow gap-2\">\n                    {hasLeadingIcons && (\n                        <span\n                            className=\"flex items-center gap-1 shrink-0\"\n                            style={{ columnGap: leadingGap }}\n                            data-slot=\"leading-icons\"\n                        >\n                            {resolvedLeadingIcons.map((node, idx) => (\n                                <span\n                                    key={idx}\n                                    className=\"flex items-center justify-center\"\n                                >\n                                    {node}\n                                </span>\n                            ))}\n                        </span>\n                    )}\n\n                    <div className=\"min-w-0 flex-1\">{triggerSummary}</div>\n                </div>\n\n                {/* Right side: clear + trailing icons + chevron */}\n                <div className=\"flex items-center gap-1 shrink-0\">\n                    {showClear && (\n                        <button\n                            type=\"button\"\n                            aria-label=\"Clear selection\"\n                            onClick={(e) => {\n                                e.stopPropagation();\n                                e.preventDefault();\n                                handleClearAll();\n                            }}\n                            className=\"flex h-4 w-4 items-center justify-center rounded hover:bg-muted\"\n                            data-slot=\"clear\"\n                        >\n                            <X className=\"h-3 w-3 pointer-events-none\" />\n                        </button>\n                    )}\n\n                    {hasTrailingIcons && (\n                        <span\n                            className=\"flex items-center gap-1\"\n                            style={{ columnGap: trailingGap }}\n                            data-slot=\"trailing-icons\"\n                        >\n                            {resolvedTrailingIcons.map((node, idx) => (\n                                <span\n                                    key={idx}\n                                    className=\"flex items-center justify-center\"\n                                >\n                                    {node}\n                                </span>\n                            ))}\n                        </span>\n                    )}\n\n                    <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n                </div>\n            </div>\n        </button>\n    );\n\n    // Button mode trigger\n    const ButtonModeTrigger = React.useMemo(() => {\n        if (mode !== \"button\") return null;\n\n        const selectedCount = selectedItems.length;\n        const content: React.ReactNode = (() => {\n            const renderable = button ?? children;\n            if (typeof renderable === \"function\") {\n                return renderable({\n                    open,\n                    selectedItems,\n                    selectedCount,\n                });\n            }\n            return (\n                renderable ?? (\n                    <button\n                        type=\"button\"\n                        className={cn(\n                            \"inline-flex items-center gap-2\",\n                            triggerClassName,\n                        )}\n                    >\n                        <span className=\"truncate\">{triggerSummary}</span>\n                        <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n                    </button>\n                )\n            );\n        })();\n\n        if (!selectedBadge) return content;\n\n        const hiddenZero = selectedBadgeHiddenWhenZero && selectedCount === 0;\n        if (hiddenZero) return content;\n\n        if (selectedBadgePlacement === \"corner\") {\n            return (\n                <span className=\"relative inline-block\">\n                    {content}\n                    <Badge\n                        className={cn(\n                            \"absolute -top-2 -right-2 h-5 min-w-5 px-1.5\",\n                            selectedBadgeClassName,\n                        )}\n                    >\n                        {selectedCount}\n                    </Badge>\n                </span>\n            );\n        }\n\n        // default: end placement\n        return (\n            <span className=\"inline-flex items-center gap-2\">\n                {content}\n                <Badge\n                    className={cn(\n                        \"ml-1 h-5 min-w-5 px-1.5\",\n                        selectedBadgeClassName,\n                    )}\n                >\n                    {selectedCount}\n                </Badge>\n            </span>\n        );\n    }, [\n        mode,\n        button,\n        children,\n        triggerClassName,\n        open,\n        selectedItems,\n        selectedBadge,\n        selectedBadgeHiddenWhenZero,\n        selectedBadgePlacement,\n        selectedBadgeClassName,\n        triggerSummary,\n    ]);\n\n    // Core multi-select element (Popover + list)\n    const TriggerNode =\n        mode === \"button\" ? ButtonModeTrigger : DefaultTriggerButton;\n    const MultiSelectCore = (\n        <Popover\n            open={open && !disabledTrigger}\n            onOpenChange={(next) => {\n                if (disabledTrigger) return;\n                setOpen(next);\n                if (!next) setQuery(\"\");\n            }}\n        >\n            <PopoverTrigger asChild>{TriggerNode}</PopoverTrigger>\n\n            <PopoverContent\n                className={cn(\n                    \"w-(--radix-popover-trigger-width) p-0\",\n                    contentClassName,\n                )}\n                align=\"start\"\n            >\n                {/* Search bar */}\n                {searchable && (\n                    <div className=\"p-2 border-b border-border\">\n                        <Input\n                            autoFocus\n                            icon={<Search className=\"size-4\" />}\n                            value={query}\n                            onChange={(e) => setQuery(e.target.value)}\n                            placeholder={searchPlaceholder ?? \"Search options…\"}\n                            size={size}\n                            density={density}\n                        />\n                    </div>\n                )}\n\n                <div className=\"py-1\">\n                    <Virtuoso\n                        style={{ height: listHeight }}\n                        data={filteredItems}\n                        computeItemKey={(_index, item) => item.key}\n                        components={{\n                            Header:\n                                showSelectAll &&\n                                selectAllPosition === \"top\"\n                                    ? () => (\n                                          <button\n                                              type=\"button\"\n                                              className={cn(\n                                                  \"flex w-full items-center px-2 py-1.5 text-sm\",\n                                                  \"hover:bg-muted/70\",\n                                                  \"disabled:cursor-not-allowed disabled:opacity-50\",\n                                              )}\n                                              onClick={handleSelectAll}\n                                          >\n                                              {makeCheckboxNode({\n                                                  item: null,\n                                                  selected: allSelected,\n                                                  indeterminate: someSelected,\n                                                  isSelectAll: true,\n                                              })}\n                                              <span className=\"truncate\">\n                                                  {selectAllLabel ??\n                                                      \"Select all\"}\n                                              </span>\n                                          </button>\n                                      )\n                                    : undefined,\n                            Footer:\n                                showSelectAll &&\n                                selectAllPosition === \"bottom\"\n                                    ? () => (\n                                          <button\n                                              type=\"button\"\n                                              className={cn(\n                                                  \"mt-1 flex w-full items-center px-2 py-1.5 text-sm border-t border-border\",\n                                                  \"hover:bg-muted/70\",\n                                                  \"disabled:cursor-not-allowed disabled:opacity-50\",\n                                              )}\n                                              onClick={handleSelectAll}\n                                          >\n                                              {makeCheckboxNode({\n                                                  item: null,\n                                                  selected: allSelected,\n                                                  indeterminate: someSelected,\n                                                  isSelectAll: true,\n                                              })}\n                                              <span className=\"truncate\">\n                                                  {selectAllLabel ??\n                                                      \"Select all\"}\n                                              </span>\n                                          </button>\n                                      )\n                                    : undefined,\n                            EmptyPlaceholder: () => (\n                                <div className=\"px-2 py-1.5 text-xs text-muted-foreground\">\n                                    {emptySearchText ?? \"No results found\"}\n                                </div>\n                            ),\n                        }}\n                        itemContent={(index, item) => {\n                            const selected = selectedValues.has(item.value);\n\n                            const row = (\n                                <button\n                                    key={item.key}\n                                    type=\"button\"\n                                    className={cn(\n                                        \"flex w-full items-start gap-2 px-2 py-1.5 text-sm\",\n                                        \"hover:bg-muted/70\",\n                                        item.disabled &&\n                                            \"opacity-50 cursor-not-allowed\",\n                                    )}\n                                    onClick={() => {\n                                        if (item.disabled) return;\n                                        handleToggleValue(item.value);\n                                    }}\n                                >\n                                    {makeCheckboxNode({\n                                        item,\n                                        selected,\n                                        indeterminate: false,\n                                        isSelectAll: false,\n                                    })}\n\n                                    <div className=\"flex flex-1 items-start gap-2\">\n                                        {item.icon && (\n                                            <span className=\"mt-0.5 shrink-0\">\n                                                {item.icon}\n                                            </span>\n                                        )}\n                                        <div className=\"flex min-w-0 flex-col\">\n                                            <span className=\"flex min-w-0 items-start gap-2\">\n                                                <span className=\"truncate\">\n                                                    {item.labelNode}\n                                                </span>\n                                                {!!item.tags?.length && (\n                                                    <span className=\"ml-auto flex shrink-0 flex-wrap gap-1\">\n                                                        {item.tags.map(\n                                                            (tag, tagIndex) => (\n                                                                <Badge\n                                                                    key={tagIndex}\n                                                                    className={cn(\n                                                                        \"text-xs\",\n                                                                        tag.className,\n                                                                    )}\n                                                                    onClick={\n                                                                        tag.onClick\n                                                                    }\n                                                                    style={{\n                                                                        color: tag.color,\n                                                                        backgroundColor:\n                                                                            tag.bgColor,\n                                                                    }}\n                                                                >\n                                                                    {tag.icon && (\n                                                                        <span className=\"shrink-0\">\n                                                                            {tag.icon}\n                                                                        </span>\n                                                                    )}\n                                                                    <span>\n                                                                        {tag.label}\n                                                                    </span>\n                                                                </Badge>\n                                                            ),\n                                                        )}\n                                                    </span>\n                                                )}\n                                            </span>\n                                            {item.description && (\n                                                <span className=\"text-xs text-muted-foreground\">\n                                                    {item.description}\n                                                </span>\n                                            )}\n                                        </div>\n                                    </div>\n                                </button>\n                            );\n\n                            // Prefer per-option renderer (normalized) if present; fall back to global renderOption\n                            const renderer =\n                                (item as any).render ?? renderOption;\n\n                            if (!renderer) return row;\n\n                            return renderer({\n                                item,\n                                selected,\n                                index,\n                                option: row,\n                                click() {\n                                    if (item.disabled) return;\n                                    handleToggleValue(item.value);\n                                },\n                            });\n                        }}\n                    />\n                </div>\n            </PopoverContent>\n        </Popover>\n    );\n\n    // ─────────────────────────────────────────────\n    // Layout modes (mirroring select variant)\n    // ─────────────────────────────────────────────\n\n    // CASE 1: button mode or no controls → just the multi-select\n    if (mode === \"button\" || !hasControls) {\n        return (\n            <div\n                data-slot=\"select-field\"\n                data-multi=\"true\"\n                className={cn(\n                    \"w-full\",\n                    disabled && \"opacity-50 cursor-not-allowed\",\n                    className,\n                )}\n                aria-disabled={disabled || undefined}\n                aria-invalid={error ? \"true\" : undefined}\n            >\n                {MultiSelectCore}\n            </div>\n        );\n    }\n\n    // CASE 2: controls + joinControls → shared single box\n    if (joinControls) {\n        const groupClassName = cn(\n            \"flex items-stretch w-full\",\n            extendBoxToControls &&\n                cn(\n                    \"relative\",\n                    baseBoxClasses, // ring via :focus-within\n                ),\n            !extendBoxToControls &&\n                \"relative border-none shadow-none bg-transparent\",\n            className,\n        );\n\n        return (\n            <div\n                data-slot=\"select-field\"\n                data-multi=\"true\"\n                className=\"w-full\"\n                aria-disabled={disabled || undefined}\n                aria-invalid={error ? \"true\" : undefined}\n            >\n                <div\n                    className={groupClassName}\n                    data-slot=\"select-group\"\n                    data-disabled={disabled ? \"true\" : \"false\"}\n                >\n                    {hasLeadingControl && (\n                        <div\n                            className={cn(\n                                \"flex items-center px-2\",\n                                leadingControlClassName,\n                            )}\n                            data-slot=\"leading-control\"\n                        >\n                            {leadingControl}\n                        </div>\n                    )}\n\n                    <div\n                        className={cn(\"flex-1 min-w-0 flex items-stretch\")}\n                        data-slot=\"select-region\"\n                    >\n                        {MultiSelectCore}\n                    </div>\n\n                    {hasTrailingControl && (\n                        <div\n                            className={cn(\n                                \"flex items-center px-2\",\n                                trailingControlClassName,\n                            )}\n                            data-slot=\"trailing-control\"\n                        >\n                            {trailingControl}\n                        </div>\n                    )}\n                </div>\n            </div>\n        );\n    }\n\n    // CASE 3: controls present, but separate (no joined box)\n    return (\n        <div\n            data-slot=\"select-field\"\n            data-multi=\"true\"\n            className={cn(\n                \"flex items-stretch w-full\",\n                disabled && \"opacity-50 cursor-not-allowed\",\n                className,\n            )}\n            aria-disabled={disabled || undefined}\n            aria-invalid={error ? \"true\" : undefined}\n        >\n            {hasLeadingControl && (\n                <div\n                    className={cn(\n                        \"flex items-center mr-1\",\n                        leadingControlClassName,\n                    )}\n                    data-slot=\"leading-control\"\n                >\n                    {leadingControl}\n                </div>\n            )}\n\n            <div className=\"flex-1 min-w-0\" data-slot=\"select-region\">\n                {MultiSelectCore}\n            </div>\n\n            {hasTrailingControl && (\n                <div\n                    className={cn(\n                        \"flex items-center ml-1\",\n                        trailingControlClassName,\n                    )}\n                    data-slot=\"trailing-control\"\n                >\n                    {trailingControl}\n                </div>\n            )}\n        </div>\n    );\n});\n\nShadcnMultiSelectVariant.displayName = \"ShadcnMultiSelectVariant\";\n\nexport default ShadcnMultiSelectVariant;\n","\r\n\r\n// src/variants/multi-select.ts\r\n\r\nimport type { VariantModule } from \"@/schema/variant\";\r\nimport {\r\n   ShadcnMultiSelectVariant,\r\n   type ShadcnMultiSelectVariantProps,\r\n} from \"@/presets/shadcn-variants/multiselect\";\r\n\r\nexport type MultiSelectValue = (string | number)[] | undefined;\r\n\r\n\r\n/**\r\n * Variant module for \"multi-select\".\r\n *\r\n * No defaults / layout overrides here — layout is driven by InputField +\r\n * host overrides, same as your other variants.\r\n */\r\nexport const multiSelectVariantModule: VariantModule<\"multi-select\"> = {\r\n   variant: \"multi-select\",\r\n   Variant: ShadcnMultiSelectVariant,\r\n   meta: {\r\n      \r\n   }\r\n};\r\n\r\nexport default multiSelectVariantModule;","import * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Slider({\n  className,\n  defaultValue,\n  value,\n  min = 0,\n  max = 100,\n  ...props\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\n  const _values = React.useMemo(\n    () =>\n      Array.isArray(value)\n        ? value\n        : Array.isArray(defaultValue)\n          ? defaultValue\n          : [min, max],\n    [value, defaultValue, min, max]\n  )\n\n  return (\n    <SliderPrimitive.Root\n      data-slot=\"slider\"\n      defaultValue={defaultValue}\n      value={value}\n      min={min}\n      max={max}\n      className={cn(\n        \"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n        className\n      )}\n      {...props}\n    >\n      <SliderPrimitive.Track\n        data-slot=\"slider-track\"\n        className={cn(\n          \"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\"\n        )}\n      >\n        <SliderPrimitive.Range\n          data-slot=\"slider-range\"\n          className={cn(\n            \"bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n          )}\n        />\n      </SliderPrimitive.Track>\n      {Array.from({ length: _values.length }, (_, index) => (\n        <SliderPrimitive.Thumb\n          data-slot=\"slider-thumb\"\n          key={index}\n          className=\"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\"\n        />\n      ))}\n    </SliderPrimitive.Root>\n  )\n}\n\nexport { Slider }\n","// src/presets/shadcn-variants/slider.tsx\r\n\r\nimport * as React from \"react\";\r\nimport type { VariantBaseProps, ChangeDetail } from \"@/variants/shared\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Slider } from \"@/presets/ui/slider\";\r\n\r\ntype SliderValue = number | undefined;\r\n\r\ntype Size = \"sm\" | \"md\" | \"lg\";\r\ntype Density = \"compact\" | \"comfortable\" | \"loose\";\r\n\r\nexport interface ShadcnSliderVariantProps\r\n   extends Pick<\r\n      VariantBaseProps<SliderValue>,\r\n      | \"value\"\r\n      | \"onValue\"\r\n      | \"error\"\r\n      | \"disabled\"\r\n      | \"readOnly\"\r\n      | \"size\"\r\n      | \"density\"\r\n   > {\r\n   /**\r\n    * Minimum value for the slider.\r\n    * Default: 0\r\n    */\r\n   min?: number;\r\n\r\n   /**\r\n    * Maximum value for the slider.\r\n    * Default: 100\r\n    */\r\n   max?: number;\r\n\r\n   /**\r\n    * Step between values.\r\n    * Default: 1\r\n    */\r\n   step?: number;\r\n\r\n   /**\r\n    * Show the current value as text next to the slider.\r\n    * Default: true\r\n    */\r\n   showValue?: boolean;\r\n\r\n   /**\r\n    * Where to place the value label, relative to the slider.\r\n    * - \"end\"   → right of the slider (horizontal)\r\n    * - \"start\" → left of the slider\r\n    *\r\n    * Default: \"end\"\r\n    */\r\n   valuePlacement?: \"start\" | \"end\";\r\n\r\n   /**\r\n    * Custom formatter for the numeric value.\r\n    * If omitted, uses the raw number.\r\n    */\r\n   formatValue?: (value: SliderValue) => React.ReactNode;\r\n\r\n   /**\r\n    * Wrapper class for the entire slider field.\r\n    */\r\n   className?: string;\r\n\r\n   /**\r\n    * Extra classes for the Slider root.\r\n    */\r\n   sliderClassName?: string;\r\n\r\n   /**\r\n    * Extra classes for the value label.\r\n    */\r\n   valueClassName?: string;\r\n\r\n   // ─────────────────────────────────────────────\r\n   // Icons & controls (mirror text / select variants)\r\n   // ─────────────────────────────────────────────\r\n\r\n   /**\r\n    * One or more icons displayed inside the slider region, on the left.\r\n    *\r\n    * If not provided and `icon` is set, that single icon\r\n    * is treated as `leadingIcons[0]`.\r\n    */\r\n   leadingIcons?: React.ReactNode[];\r\n\r\n   /**\r\n    * Icons displayed on the right side of the slider region\r\n    * (before/after the value label depending on placement).\r\n    */\r\n   trailingIcons?: React.ReactNode[];\r\n\r\n   /**\r\n    * Convenience single-icon prop for the left side.\r\n    */\r\n   icon?: React.ReactNode;\r\n\r\n   /**\r\n    * Base gap between icons and slider/value.\r\n    * Defaults to 4px-ish via `gap-1`.\r\n    */\r\n   iconGap?: number;\r\n\r\n   /**\r\n    * Extra spacing to apply between leading icons and the slider track.\r\n    */\r\n   leadingIconSpacing?: number;\r\n\r\n   /**\r\n    * Extra spacing to apply between trailing icons and the value label.\r\n    */\r\n   trailingIconSpacing?: number;\r\n\r\n   /**\r\n    * Arbitrary React node rendered before the slider (e.g. a button).\r\n    */\r\n   leadingControl?: React.ReactNode;\r\n\r\n   /**\r\n    * Arbitrary React node rendered after the slider (e.g. a button).\r\n    */\r\n   trailingControl?: React.ReactNode;\r\n\r\n   /**\r\n    * Extra classes for the leading control wrapper.\r\n    */\r\n   leadingControlClassName?: string;\r\n\r\n   /**\r\n    * Extra classes for the trailing control wrapper.\r\n    */\r\n   trailingControlClassName?: string;\r\n\r\n   /**\r\n    * If true and there are controls, the slider + controls share\r\n    * a single visual box (borders, radius, focus states).\r\n    * Default: true (to match text/select behaviour).\r\n    */\r\n   joinControls?: boolean;\r\n\r\n   /**\r\n    * When joinControls is true, whether the box styling extends over controls\r\n    * (true) or controls are visually separate (false).\r\n    * Default: true.\r\n    */\r\n   extendBoxToControls?: boolean;\r\n\r\n   // ─────────────────────────────────────────────\r\n   // Built-in +/- control variants\r\n   // ─────────────────────────────────────────────\r\n\r\n   /**\r\n    * Built-in +/- controls around the slider.\r\n    *\r\n    * - \"none\"  → no built-in step buttons (default)\r\n    * - \"boxed\" → +/- inside the same frame as the slider\r\n    * - \"edge\"  → loose layout: \"- [ slider ] +\"\r\n    */\r\n   controlVariant?: \"none\" | \"boxed\" | \"edge\";\r\n\r\n   /**\r\n    * Step used when clicking the +/- controls.\r\n    * Defaults to `step`.\r\n    */\r\n   controlStep?: number;\r\n\r\n   /**\r\n    * Custom node for the decrement control. Default: \"−\".\r\n    */\r\n   controlDecrementIcon?: React.ReactNode;\r\n\r\n   /**\r\n    * Custom node for the increment control. Default: \"+\".\r\n    */\r\n   controlIncrementIcon?: React.ReactNode;\r\n}\r\n\r\n// ─────────────────────────────────────────────\r\n// Helpers\r\n// ─────────────────────────────────────────────\r\n\r\nfunction sliderHeight(size?: Size): string {\r\n   switch (size) {\r\n      case \"sm\":\r\n         return \"h-7 text-xs\";\r\n      case \"lg\":\r\n         return \"h-10 text-base\";\r\n      case \"md\":\r\n      default:\r\n         return \"h-9 text-sm\";\r\n   }\r\n}\r\n\r\nfunction sliderPadding(density?: Density): string {\r\n   switch (density) {\r\n      case \"compact\":\r\n         return \"py-1\";\r\n      case \"loose\":\r\n         return \"py-3\";\r\n      case \"comfortable\":\r\n      default:\r\n         return \"py-2\";\r\n   }\r\n}\r\n\r\nfunction defaultFormatValue(value: SliderValue): React.ReactNode {\r\n   if (value == null) return \"—\";\r\n   return value;\r\n}\r\n\r\nfunction clampToRange(v: number, min: number, max: number): number {\r\n   if (v < min) return min;\r\n   if (v > max) return max;\r\n   return v;\r\n}\r\n\r\n// ─────────────────────────────────────────────\r\n// Component\r\n// ─────────────────────────────────────────────\r\n\r\nexport const ShadcnSliderVariant = React.forwardRef<\r\n   HTMLDivElement,\r\n   ShadcnSliderVariantProps\r\n>(function ShadcnSliderVariant(props, _ref) {\r\n   const {\r\n      value,\r\n      onValue,\r\n      error,\r\n      disabled,\r\n      readOnly,\r\n      size,\r\n      density,\r\n\r\n      min = 0,\r\n      max = 100,\r\n      step = 1,\r\n\r\n      showValue = true,\r\n      valuePlacement = \"end\",\r\n      formatValue,\r\n\r\n      className,\r\n      sliderClassName,\r\n      valueClassName,\r\n\r\n      // Icons & controls\r\n      leadingIcons,\r\n      trailingIcons,\r\n      icon,\r\n      iconGap,\r\n      leadingIconSpacing,\r\n      trailingIconSpacing,\r\n      leadingControl,\r\n      trailingControl,\r\n      leadingControlClassName,\r\n      trailingControlClassName,\r\n      joinControls = true,\r\n      extendBoxToControls = true,\r\n\r\n      // Built-in +/- controls\r\n      controlVariant = \"none\",\r\n      controlStep,\r\n      controlDecrementIcon,\r\n      controlIncrementIcon,\r\n   } = props;\r\n\r\n   const numericValue: number =\r\n      typeof value === \"number\" ? value : min;\r\n\r\n   const isDisabled = !!(disabled || readOnly);\r\n\r\n   const handleChange = React.useCallback(\r\n      (vals: number[]) => {\r\n         if (!onValue) return;\r\n         const next = clampToRange(vals[0], min, max);\r\n\r\n         const detail: ChangeDetail = {\r\n            source: \"variant\",\r\n            raw: next,\r\n            nativeEvent: undefined,\r\n            meta: undefined,\r\n         };\r\n\r\n         onValue(next, detail);\r\n      },\r\n      [onValue, min, max]\r\n   );\r\n\r\n   const stepAmount = controlStep ?? step;\r\n\r\n   const applyStep = React.useCallback(\r\n      (direction: -1 | 1) => {\r\n         if (!onValue || isDisabled) return;\r\n\r\n         const current =\r\n            typeof value === \"number\" ? value : min;\r\n         const candidate = current + direction * stepAmount;\r\n         const next = clampToRange(candidate, min, max);\r\n\r\n         const detail: ChangeDetail = {\r\n            source: \"variant\",\r\n            raw: next,\r\n            nativeEvent: undefined,\r\n            meta: {\r\n               action: direction > 0 ? \"increment\" : \"decrement\",\r\n            },\r\n         };\r\n\r\n         onValue(next, detail);\r\n      },\r\n      [onValue, value, isDisabled, min, max, stepAmount]\r\n   );\r\n\r\n   const heightCls = sliderHeight(size as Size | undefined);\r\n   const paddingCls = sliderPadding(density as Density | undefined);\r\n\r\n   const displayValue =\r\n      (formatValue ?? defaultFormatValue)(value ?? numericValue);\r\n\r\n   // Icons resolution (same idea as text/select)\r\n   const resolvedLeadingIcons: React.ReactNode[] = (() => {\r\n      if (leadingIcons && leadingIcons.length) return leadingIcons;\r\n      if (icon) return [icon];\r\n      return [];\r\n   })();\r\n\r\n   const resolvedTrailingIcons: React.ReactNode[] = trailingIcons ?? [];\r\n\r\n   const baseIconGap = iconGap ?? 4;\r\n   const leadingGap = leadingIconSpacing ?? baseIconGap;\r\n   const trailingGap = trailingIconSpacing ?? baseIconGap;\r\n\r\n   const hasLeadingIcons = resolvedLeadingIcons.length > 0;\r\n   const hasTrailingIcons = resolvedTrailingIcons.length > 0;\r\n\r\n   // Value label\r\n   const valueNode =\r\n      showValue ? (\r\n         <div\r\n            className={cn(\r\n               \"text-xs text-muted-foreground whitespace-nowrap\",\r\n               valueClassName\r\n            )}\r\n            data-slot=\"slider-value\"\r\n         >\r\n            {displayValue}\r\n         </div>\r\n      ) : null;\r\n\r\n   const baseBoxClasses = cn(\r\n      \"border-input w-full min-w-0 rounded-md border bg-transparent shadow-xs\",\r\n      \"transition-[color,box-shadow] outline-none\",\r\n      \"focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]\",\r\n      \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\"\r\n   );\r\n\r\n   // ─────────────────────────────────────────────\r\n   // Built-in +/- controls → map to leading/trailingControl\r\n   // ─────────────────────────────────────────────\r\n\r\n   let effectiveLeadingControl = leadingControl;\r\n   let effectiveTrailingControl = trailingControl;\r\n   let effectiveJoinControls = joinControls;\r\n\r\n   if (controlVariant === \"boxed\" || controlVariant === \"edge\") {\r\n      const decLabel =\r\n         controlDecrementIcon ?? <span className=\"text-base\">−</span>;\r\n      const incLabel =\r\n         controlIncrementIcon ?? <span className=\"text-base\">+</span>;\r\n\r\n      const decButton = (\r\n         <button\r\n            type=\"button\"\r\n            onClick={() => applyStep(-1)}\r\n            disabled={isDisabled}\r\n            className={cn(\r\n               \"inline-flex items-center justify-center px-2 text-sm\",\r\n               \"disabled:opacity-50 disabled:cursor-not-allowed\"\r\n            )}\r\n         >\r\n            {decLabel}\r\n         </button>\r\n      );\r\n\r\n      const incButton = (\r\n         <button\r\n            type=\"button\"\r\n            onClick={() => applyStep(1)}\r\n            disabled={isDisabled}\r\n            className={cn(\r\n               \"inline-flex items-center justify-center px-2 text-sm\",\r\n               \"disabled:opacity-50 disabled:cursor-not-allowed\"\r\n            )}\r\n         >\r\n            {incLabel}\r\n         </button>\r\n      );\r\n\r\n      // Only auto-wire if caller didn't override them.\r\n      if (!effectiveLeadingControl) {\r\n         effectiveLeadingControl = decButton;\r\n      }\r\n      if (!effectiveTrailingControl) {\r\n         effectiveTrailingControl = incButton;\r\n      }\r\n\r\n      // Edge variant → loose layout: \"- [ slider ] +\"\r\n      if (controlVariant === \"edge\") {\r\n         effectiveJoinControls = false;\r\n      }\r\n   }\r\n\r\n   const hasLeadingControl = !!effectiveLeadingControl;\r\n   const hasTrailingControl = !!effectiveTrailingControl;\r\n   const hasControls = hasLeadingControl || hasTrailingControl;\r\n\r\n   // Inner slider+icons+value layout (no outer controls)\r\n   const SliderRegion = (\r\n      <div\r\n         className={cn(\r\n            \"flex w-full items-center gap-2\",\r\n            heightCls,\r\n            paddingCls\r\n         )}\r\n         data-slot=\"slider-region\"\r\n      >\r\n         {/* value before slider */}\r\n         {valuePlacement === \"start\" && valueNode && (\r\n            <div className=\"shrink-0 mr-1\">{valueNode}</div>\r\n         )}\r\n\r\n         {/* leading icons */}\r\n         {hasLeadingIcons && (\r\n            <span\r\n               className=\"flex items-center gap-1 shrink-0\"\r\n               style={{ columnGap: leadingGap }}\r\n               data-slot=\"leading-icons\"\r\n            >\r\n               {resolvedLeadingIcons.map((node, idx) => (\r\n                  <span\r\n                     key={idx}\r\n                     className=\"flex items-center justify-center\"\r\n                  >\r\n                     {node}\r\n                  </span>\r\n               ))}\r\n            </span>\r\n         )}\r\n\r\n         {/* slider track */}\r\n         <div className=\"flex-1 min-w-0\" data-slot=\"slider-track\">\r\n            <Slider\r\n               value={[numericValue]}\r\n               onValueChange={handleChange}\r\n               min={min}\r\n               max={max}\r\n               step={step}\r\n               disabled={isDisabled}\r\n               className={cn(\"w-full\", sliderClassName)}\r\n            />\r\n         </div>\r\n\r\n         {/* trailing icons */}\r\n         {hasTrailingIcons && (\r\n            <span\r\n               className=\"flex items-center gap-1 shrink-0\"\r\n               style={{ columnGap: trailingGap }}\r\n               data-slot=\"trailing-icons\"\r\n            >\r\n               {resolvedTrailingIcons.map((node, idx) => (\r\n                  <span\r\n                     key={idx}\r\n                     className=\"flex items-center justify-center\"\r\n                  >\r\n                     {node}\r\n                  </span>\r\n               ))}\r\n            </span>\r\n         )}\r\n\r\n         {/* value after slider */}\r\n         {valuePlacement === \"end\" && valueNode && (\r\n            <div className=\"shrink-0 ml-1\">{valueNode}</div>\r\n         )}\r\n      </div>\r\n   );\r\n\r\n   // ─────────────────────────────────────────────\r\n   // Layout cases\r\n   // ─────────────────────────────────────────────\r\n\r\n   // CASE 1: no controls → just slider region\r\n   if (!hasControls) {\r\n      return (\r\n         <div\r\n            data-slot=\"slider-field\"\r\n            className={cn(\r\n               \"w-full flex items-center\",\r\n               isDisabled && \"opacity-50 cursor-not-allowed\",\r\n               className\r\n            )}\r\n            aria-disabled={isDisabled || undefined}\r\n            aria-invalid={error ? \"true\" : undefined}\r\n         >\r\n            {SliderRegion}\r\n         </div>\r\n      );\r\n   }\r\n\r\n   // CASE 2: controls + joinControls → single shared box (sketch #1: boxed)\r\n   if (effectiveJoinControls) {\r\n      const groupClassName = cn(\r\n         \"flex items-stretch w-full\",\r\n         extendBoxToControls &&\r\n         cn(\r\n            \"relative\",\r\n            baseBoxClasses // focus ring via :focus-within\r\n         ),\r\n         !extendBoxToControls &&\r\n         \"relative border-none shadow-none bg-transparent\",\r\n         className\r\n      );\r\n\r\n      return (\r\n         <div\r\n            data-slot=\"slider-field\"\r\n            className=\"w-full\"\r\n            aria-disabled={isDisabled || undefined}\r\n            aria-invalid={error ? \"true\" : undefined}\r\n         >\r\n            <div\r\n               className={groupClassName}\r\n               data-slot=\"slider-group\"\r\n               data-disabled={isDisabled ? \"true\" : \"false\"}\r\n            >\r\n               {hasLeadingControl && (\r\n                  <div\r\n                     className={cn(\r\n                        \"flex items-center px-2\",\r\n                        leadingControlClassName\r\n                     )}\r\n                     data-slot=\"leading-control\"\r\n                  >\r\n                     {effectiveLeadingControl}\r\n                  </div>\r\n               )}\r\n\r\n               <div\r\n                  className=\"flex-1 min-w-0 flex items-stretch\"\r\n                  data-slot=\"slider-region-wrapper\"\r\n               >\r\n                  {SliderRegion}\r\n               </div>\r\n\r\n               {hasTrailingControl && (\r\n                  <div\r\n                     className={cn(\r\n                        \"flex items-center px-2\",\r\n                        trailingControlClassName\r\n                     )}\r\n                     data-slot=\"trailing-control\"\r\n                  >\r\n                     {effectiveTrailingControl}\r\n                  </div>\r\n               )}\r\n            </div>\r\n         </div>\r\n      );\r\n   }\r\n\r\n   // CASE 3: controls present but separate boxes (sketch #2: edge)\r\n   return (\r\n      <div\r\n         data-slot=\"slider-field\"\r\n         className={cn(\r\n            \"flex items-stretch w-full\",\r\n            isDisabled && \"opacity-50 cursor-not-allowed\",\r\n            className\r\n         )}\r\n         aria-disabled={isDisabled || undefined}\r\n         aria-invalid={error ? \"true\" : undefined}\r\n      >\r\n         {hasLeadingControl && (\r\n            <div\r\n               className={cn(\r\n                  \"flex items-center mr-1\",\r\n                  leadingControlClassName\r\n               )}\r\n               data-slot=\"leading-control\"\r\n            >\r\n               {effectiveLeadingControl}\r\n            </div>\r\n         )}\r\n\r\n         <div\r\n            className=\"flex-1 min-w-0\"\r\n            data-slot=\"slider-region-outer\"\r\n         >\r\n            {SliderRegion}\r\n         </div>\r\n\r\n         {hasTrailingControl && (\r\n            <div\r\n               className={cn(\r\n                  \"flex items-center ml-1\",\r\n                  trailingControlClassName\r\n               )}\r\n               data-slot=\"trailing-control\"\r\n            >\r\n               {effectiveTrailingControl}\r\n            </div>\r\n         )}\r\n      </div>\r\n   );\r\n});\r\n\r\nShadcnSliderVariant.displayName = \"ShadcnSliderVariant\";\r\n\r\nexport default ShadcnSliderVariant;","// src/variants/core/slider.ts\r\n\r\nimport type { ValidateResult } from \"@/schema/input-field\";\r\nimport type { ShadcnSliderVariantProps } from \"@/presets/shadcn-variants/slider\";\r\nimport { ShadcnSliderVariant } from \"@/presets/shadcn-variants/slider\";\r\nimport { VariantModule } from \"@/schema/variant\";\r\n\r\n/**\r\n * Slider value type:\r\n * - `number | undefined` for now (single-value slider).\r\n *   If/when you add range support, this can be widened to [number, number].\r\n */\r\nexport type SliderValue = number | undefined;\r\n\r\n\r\n/**\r\n * Basic validation:\r\n * - if required → must have a numeric value\r\n * - otherwise always OK\r\n */\r\nfunction validateSlider(\r\n   value: SliderValue,\r\n   ctx: { required?: boolean }\r\n): ValidateResult {\r\n   if (ctx.required) {\r\n      if (value === undefined || value === null) {\r\n         return \"Required.\";\r\n      }\r\n      if (typeof value !== \"number\" || Number.isNaN(value)) {\r\n         return \"Invalid number.\";\r\n      }\r\n   }\r\n\r\n   // You could optionally enforce min/max here using ctx.props\r\n   return true;\r\n}\r\n\r\n/**\r\n * Register the slider variant with the global registry.\r\n *\r\n * No layout defaults are provided here:\r\n * - layout (inline vs stacked, label placement, etc.) is controlled by\r\n *   the host via FieldLayoutConfig / InputField overrides instead.\r\n */\r\nexport default {\r\n   variant: \"slider\",\r\n   Variant: ShadcnSliderVariant,\r\n   validate(value, ctx): ValidateResult {\r\n      return validateSlider(value as SliderValue, {\r\n         required: ctx.required,\r\n      });\r\n   },\r\n} as VariantModule<'slider'>;\r\n\r\nexport type SliderVariantProps = ShadcnSliderVariantProps;","import * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Dialog({\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n  return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n  return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n  return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n  return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n  className,\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n  return (\n    <DialogPrimitive.Overlay\n      data-slot=\"dialog-overlay\"\n      className={cn(\n        \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction DialogContent({\n  className,\n  children,\n  showCloseButton = true,\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n  showCloseButton?: boolean\n}) {\n  return (\n    <DialogPortal data-slot=\"dialog-portal\">\n      <DialogOverlay />\n      <DialogPrimitive.Content\n        data-slot=\"dialog-content\"\n        className={cn(\n          \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n        {showCloseButton && (\n          <DialogPrimitive.Close\n            data-slot=\"dialog-close\"\n            className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n          >\n            <XIcon />\n            <span className=\"sr-only\">Close</span>\n          </DialogPrimitive.Close>\n        )}\n      </DialogPrimitive.Content>\n    </DialogPortal>\n  )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"dialog-header\"\n      className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"dialog-footer\"\n      className={cn(\n        \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction DialogTitle({\n  className,\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n  return (\n    <DialogPrimitive.Title\n      data-slot=\"dialog-title\"\n      className={cn(\"text-lg leading-none font-semibold\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction DialogDescription({\n  className,\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n  return (\n    <DialogPrimitive.Description\n      data-slot=\"dialog-description\"\n      className={cn(\"text-muted-foreground text-sm\", className)}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogOverlay,\n  DialogPortal,\n  DialogTitle,\n  DialogTrigger,\n}\n","import * as React from \"react\";\nimport type { ChangeDetail, VariantBaseProps } from \"@/variants/shared\";\nimport { cn } from \"@/lib/utils\";\n\nimport { Button } from \"@/presets/ui/button\";\nimport { Input } from \"@/presets/ui/input\";\nimport {\n    Dialog,\n    DialogContent,\n    DialogDescription,\n    DialogFooter,\n    DialogHeader,\n    DialogTitle,\n} from \"@/presets/ui/dialog\";\nimport {\n    Popover,\n    PopoverContent,\n    PopoverTrigger,\n} from \"@/presets/ui/popover\";\nimport { ScrollArea } from \"@/presets/ui/scroll-area\";\n\nimport { ChevronDown, Info, PenLine, Plus, Tag, X } from \"lucide-react\";\n\ntype Size = \"sm\" | \"md\" | \"lg\";\ntype Density = \"compact\" | \"comfortable\" | \"loose\";\n\nexport type KeyValueMap = Record<string, string>;\n\nexport interface KV {\n    key: string;\n    value: string;\n}\n\nexport interface ShadcnKeyValueVariantProps\n    extends Pick<\n        VariantBaseProps<KeyValueMap | undefined>,\n        \"value\" | \"onValue\" | \"error\" | \"disabled\" | \"readOnly\" | \"size\" | \"density\"\n    > {\n    min?: number;\n    max?: number;\n\n    /**\n     * Legacy props (kept for compatibility; no longer drive visibility).\n     */\n    minVisible?: number;\n    maxVisible?: number;\n\n    /**\n     * If false/undefined, inline chips show keys only.\n     * If true, inline chips show \"key : value\".\n     *\n     * In the dropdown: key-only + an info button reveals the value.\n     */\n    showValue?: boolean;\n\n    placeholder?: React.ReactNode;\n    dialogTitle?: React.ReactNode;\n    keyLabel?: React.ReactNode;\n    valueLabel?: React.ReactNode;\n    submitLabel?: React.ReactNode;\n\n    /**\n     * Overflow indicator label (e.g. \"2+\").\n     * This is now purely informational; dropdown control is always available.\n     */\n    moreLabel?: (count: number) => React.ReactNode;\n\n    emptyLabel?: React.ReactNode;\n\n    className?: string;\n    chipsClassName?: string;\n    chipClassName?: string;\n\n    renderChip?: (ctx: {\n        pair: KV;\n        index: number;\n        onEdit: () => void;\n        onRemove: () => void;\n        defaultChip: React.ReactNode;\n    }) => React.ReactNode;\n}\n\n// ─────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────\n\nfunction mapToItems(map: KeyValueMap | undefined): KV[] {\n    if (!map) return [];\n    return Object.entries(map).map(([key, value]) => ({\n        key,\n        value: value ?? \"\",\n    }));\n}\n\nfunction itemsToMap(items: KV[]): KeyValueMap {\n    const out: KeyValueMap = {};\n    for (const { key, value } of items) {\n        if (!key) continue;\n        out[key] = value;\n    }\n    return out;\n}\n\nfunction sizeClasses(size?: Size) {\n    switch (size) {\n        case \"sm\":\n            return \"h-8 text-xs\";\n        case \"lg\":\n            return \"h-11 text-base\";\n        default:\n            return \"h-9 text-sm\";\n    }\n}\nfunction densityPadding(density?: Density) {\n    switch (density) {\n        case \"compact\":\n            return \"py-1 px-2\";\n        case \"loose\":\n            return \"py-3 px-3\";\n        case \"comfortable\":\n        default:\n            return \"py-1 px-2\";\n    }\n}\n\nfunction defaultMoreLabel(count: number): React.ReactNode {\n    return `${count}+`;\n}\n\nfunction parsePx(v: string | null | undefined): number {\n    const n = Number.parseFloat((v ?? \"\").toString());\n    return Number.isFinite(n) ? n : 0;\n}\n\nfunction getGapPx(el: HTMLElement | null): number {\n    if (!el) return 0;\n    const cs = window.getComputedStyle(el);\n    const g = cs.columnGap && cs.columnGap !== \"normal\" ? cs.columnGap : cs.gap;\n    return parsePx(g);\n}\n\n// ─────────────────────────────────────────────\n// Component\n// ─────────────────────────────────────────────\n\nexport const ShadcnKeyValueVariant = React.forwardRef<\n    HTMLDivElement,\n    ShadcnKeyValueVariantProps\n>(function ShadcnKeyValueVariant(props, _ref) {\n    const {\n        value,\n        onValue,\n        error,\n        disabled,\n        readOnly,\n        size,\n        density,\n\n        min = 0,\n        max = Infinity,\n\n        showValue,\n\n        placeholder,\n        dialogTitle = \"Edit Item\",\n        keyLabel = \"Key\",\n        valueLabel = \"Value\",\n        submitLabel = \"Save Changes\",\n        moreLabel = defaultMoreLabel,\n        emptyLabel = \"No items added\",\n\n        className,\n        chipsClassName,\n        chipClassName,\n        renderChip,\n    } = props;\n\n    const isDisabled = disabled || readOnly;\n\n    const items: KV[] = React.useMemo(() => mapToItems(value), [value]);\n\n    const [dialogOpen, setDialogOpen] = React.useState(false);\n    const [editingIndex, setEditingIndex] = React.useState<number | null>(null);\n    const [draft, setDraft] = React.useState<KV>({ key: \"\", value: \"\" });\n\n    const canAdd = items.length < max;\n    const canDelete = items.length > min;\n\n    const hasItems = items.length > 0;\n\n    // ────────────────────────────────\n    // Change Logic\n    // ────────────────────────────────\n\n    const commitItems = React.useCallback(\n        (next: KV[], meta: ChangeDetail[\"meta\"]) => {\n            if (!onValue) return;\n\n            const nextMap = itemsToMap(next);\n            const detail: ChangeDetail = {\n                source: \"variant\",\n                raw: next,\n                nativeEvent: undefined,\n                meta,\n            };\n            onValue(nextMap, detail);\n        },\n        [onValue],\n    );\n\n    const openForNew = React.useCallback(() => {\n        if (isDisabled || !canAdd) return;\n        setEditingIndex(null);\n        setDraft({ key: \"\", value: \"\" });\n        setDialogOpen(true);\n    }, [isDisabled, canAdd]);\n\n    const openForEdit = React.useCallback(\n        (index: number) => {\n            if (isDisabled) return;\n            const item = items[index];\n            if (!item) return;\n            setEditingIndex(index);\n            setDraft(item);\n            setDialogOpen(true);\n        },\n        [isDisabled, items],\n    );\n\n    const handleDelete = React.useCallback(() => {\n        if (editingIndex == null) return;\n        if (!canDelete) return;\n\n        const next = items.slice();\n        next.splice(editingIndex, 1);\n\n        setDialogOpen(false);\n        commitItems(next, {\n            action: \"delete\",\n            index: editingIndex,\n        });\n    }, [editingIndex, items, canDelete, commitItems]);\n\n    const handleSubmit = React.useCallback(() => {\n        const trimmedKey = draft.key.trim();\n        const trimmedValue = draft.value;\n\n        if (!trimmedKey) return;\n\n        let next = items.slice();\n\n        if (editingIndex != null) {\n            next[editingIndex] = { key: trimmedKey, value: trimmedValue };\n        } else {\n            const existingIndex = next.findIndex((kv) => kv.key === trimmedKey);\n            if (existingIndex !== -1) {\n                next[existingIndex] = { key: trimmedKey, value: trimmedValue };\n            } else {\n                if (!canAdd) return;\n                next.push({ key: trimmedKey, value: trimmedValue });\n            }\n        }\n\n        setDialogOpen(false);\n        commitItems(next, {\n            action: editingIndex != null ? \"edit\" : \"add\",\n            index: editingIndex ?? next.length - 1,\n        });\n    }, [draft, items, editingIndex, canAdd, commitItems]);\n\n    const handleQuickRemove = React.useCallback(\n        (index: number) => {\n            if (isDisabled || !canDelete) return;\n            const next = items.slice();\n            next.splice(index, 1);\n            commitItems(next, { action: \"delete\", index });\n        },\n        [isDisabled, canDelete, items, commitItems],\n    );\n\n    // ────────────────────────────────\n    // Dropdown state (shows EVERYTHING)\n    // ────────────────────────────────\n\n    const [listOpen, setListOpen] = React.useState(false);\n\n    const openList = React.useCallback(() => {\n        if (isDisabled) return;\n        setListOpen(true);\n    }, [isDisabled]);\n\n    // ────────────────────────────────\n    // Layout-driven overflow (space only)\n    // ────────────────────────────────\n\n    const wrapRef = React.useRef<HTMLDivElement | null>(null);\n    const leftRef = React.useRef<HTMLDivElement | null>(null);\n\n    const moreMeasureRef = React.useRef<HTMLButtonElement | null>(null);\n\n    const chipRefs = React.useRef<Array<HTMLButtonElement | null>>([]);\n    chipRefs.current = items.map((_, i) => chipRefs.current[i] ?? null);\n\n    const [visibleCount, setVisibleCount] = React.useState<number>(() => items.length);\n\n    const recomputeVisible = React.useCallback(() => {\n        const leftEl = leftRef.current;\n        if (!leftEl) {\n            setVisibleCount(items.length);\n            return;\n        }\n\n        const avail = leftEl.clientWidth;\n        if (avail <= 0) {\n            setVisibleCount(items.length);\n            return;\n        }\n\n        const gap = getGapPx(leftEl);\n\n        const chipWs = chipRefs.current.map((el) => el?.offsetWidth ?? 0);\n        const moreW = moreMeasureRef.current?.offsetWidth ?? 0;\n\n        const totalFor = (n: number) => {\n            const overflow = items.length - n;\n\n            let total = 0;\n            let parts = 0;\n\n            // chips (visible)\n            for (let i = 0; i < n; i++) {\n                const w = chipWs[i] ?? 0;\n                if (w <= 0) continue;\n                total += w;\n                parts++;\n            }\n\n            // overflow indicator if needed\n            if (overflow > 0 && moreW > 0) {\n                total += moreW;\n                parts++;\n            }\n\n            if (parts > 1 && gap > 0) {\n                total += gap * (parts - 1);\n            }\n\n            return total;\n        };\n\n        if (totalFor(items.length) <= avail) {\n            setVisibleCount(items.length);\n            return;\n        }\n\n        let best = 0;\n        for (let n = 0; n <= items.length; n++) {\n            if (totalFor(n) <= avail) best = n;\n            else break;\n        }\n        setVisibleCount(best);\n    }, [items.length]);\n\n    React.useLayoutEffect(() => {\n        recomputeVisible();\n    }, [recomputeVisible, items, size, density, showValue]);\n\n    React.useEffect(() => {\n        const el = leftRef.current;\n        if (!el) return;\n\n        const ro = new ResizeObserver(() => recomputeVisible());\n        ro.observe(el);\n        if (wrapRef.current) ro.observe(wrapRef.current);\n\n        return () => ro.disconnect();\n    }, [recomputeVisible]);\n\n    const overflowCount = Math.max(0, items.length - visibleCount);\n    const visibleItems = items.slice(0, visibleCount);\n\n    // ────────────────────────────────\n    // Visuals\n    // ────────────────────────────────\n\n    const sizeCls = sizeClasses(size as Size | undefined);\n    const densityCls = densityPadding(density as Density | undefined);\n\n    const inlineShowsValue = showValue === true;\n\n    const renderChipNode = (pair: KV, index: number) => {\n        const baseChip = (\n            <button\n                type=\"button\"\n                key={index}\n                ref={(el) => {\n                    chipRefs.current[index] = el;\n                }}\n                className={cn(\n                    \"group inline-flex items-center gap-1.5 rounded-md\",\n                    \"bg-secondary/50 border border-transparent\",\n                    \"px-2 py-1 text-xs transition-all duration-200\",\n                    \"hover:bg-secondary hover:border-border/50 hover:shadow-sm\",\n                    \"animate-in fade-in zoom-in-95 fill-mode-both\",\n                    \"max-w-full\",\n                    isDisabled && \"opacity-50 cursor-not-allowed\",\n                    chipClassName,\n                )}\n                onClick={() => openForEdit(index)}\n                disabled={isDisabled}\n            >\n                <span className=\"font-semibold text-foreground truncate max-w-48\">\n                    {pair.key}\n                </span>\n\n                {inlineShowsValue && (\n                    <>\n                        <span className=\"text-muted-foreground/40\">:</span>\n                        <span className=\"text-muted-foreground truncate max-w-64\">\n                            {pair.value}\n                        </span>\n                    </>\n                )}\n\n                {canDelete && !isDisabled && (\n                    <div\n                        role=\"button\"\n                        tabIndex={0}\n                        className={cn(\n                            \"ml-1 flex h-4 w-4 items-center justify-center rounded-full\",\n                            \"text-muted-foreground/60 opacity-0 transition-all\",\n                            \"hover:bg-destructive hover:text-destructive-foreground\",\n                            \"group-hover:opacity-100\",\n                            \"focus-visible:opacity-100 focus-visible:ring-2 focus-visible:ring-ring\",\n                        )}\n                        onClick={(e) => {\n                            e.stopPropagation();\n                            handleQuickRemove(index);\n                        }}\n                        onKeyDown={(e) => {\n                            if (e.key === \"Enter\" || e.key === \" \") {\n                                e.stopPropagation();\n                                handleQuickRemove(index);\n                            }\n                        }}\n                        aria-label={`Remove ${pair.key}`}\n                    >\n                        <X className=\"h-3 w-3\" />\n                    </div>\n                )}\n            </button>\n        );\n\n        if (!renderChip) return baseChip;\n\n        return renderChip({\n            pair,\n            index,\n            onEdit: () => openForEdit(index),\n            onRemove: () => handleQuickRemove(index),\n            defaultChip: baseChip,\n        });\n    };\n\n    // ────────────────────────────────\n    // Dialog\n    // ────────────────────────────────\n\n    const ManageDialog = (\n        <Dialog open={dialogOpen} onOpenChange={setDialogOpen}>\n            <DialogContent className=\"sm:max-w-106.25\">\n                <DialogHeader>\n                    <DialogTitle className=\"flex items-center gap-2\">\n                        <PenLine className=\"h-4 w-4 text-muted-foreground\" />\n                        {dialogTitle}\n                    </DialogTitle>\n                    <DialogDescription>\n                        {editingIndex !== null\n                            ? \"Modify the existing key-value pair.\"\n                            : \"Add a new key-value pair to the list.\"}\n                    </DialogDescription>\n                </DialogHeader>\n\n                <div className=\"grid gap-4 py-4\">\n                    <div className=\"grid grid-cols-4 items-center gap-4\">\n                        <label className=\"text-right text-sm font-medium text-muted-foreground\">\n                            {keyLabel}\n                        </label>\n                        <Input\n                            value={draft.key}\n                            onChange={(e) =>\n                                setDraft((prev) => ({\n                                    ...prev,\n                                    key: e.target.value,\n                                }))\n                            }\n                            className=\"col-span-3\"\n                            autoFocus\n                            disabled={isDisabled}\n                            placeholder=\"e.g. Color\"\n                        />\n                    </div>\n                    <div className=\"grid grid-cols-4 items-center gap-4\">\n                        <label className=\"text-right text-sm font-medium text-muted-foreground\">\n                            {valueLabel}\n                        </label>\n                        <Input\n                            value={draft.value}\n                            onChange={(e) =>\n                                setDraft((prev) => ({\n                                    ...prev,\n                                    value: e.target.value,\n                                }))\n                            }\n                            className=\"col-span-3\"\n                            disabled={isDisabled}\n                            placeholder=\"e.g. Blue\"\n                            onKeyDown={(e) => {\n                                if (e.key === \"Enter\") handleSubmit();\n                            }}\n                        />\n                    </div>\n                </div>\n\n                <DialogFooter className=\"flex sm:justify-between flex-row items-center\">\n                    <div>\n                        {editingIndex != null && canDelete && (\n                            <Button\n                                type=\"button\"\n                                variant=\"destructive\"\n                                size=\"sm\"\n                                onClick={handleDelete}\n                                disabled={isDisabled}\n                            >\n                                Delete\n                            </Button>\n                        )}\n                    </div>\n\n                    <div className=\"flex gap-2\">\n                        <Button\n                            type=\"button\"\n                            variant=\"outline\"\n                            size=\"sm\"\n                            onClick={() => setDialogOpen(false)}\n                        >\n                            Cancel\n                        </Button>\n                        <Button\n                            type=\"button\"\n                            size=\"sm\"\n                            onClick={handleSubmit}\n                            disabled={isDisabled}\n                        >\n                            {submitLabel}\n                        </Button>\n                    </div>\n                </DialogFooter>\n            </DialogContent>\n        </Dialog>\n    );\n\n    // ────────────────────────────────\n    // Dropdown content: shows ALL items\n    // ────────────────────────────────\n\n    const ListPopover = (\n        <Popover open={listOpen} onOpenChange={setListOpen}>\n            {/* trigger is the right-side control; overflow indicator just calls openList() */}\n            <PopoverTrigger asChild>\n                <button\n                    type=\"button\"\n                    className={cn(\n                        \"flex h-8 w-fit items-center justify-center rounded-sm\",\n                        \"text-muted-foreground cursor-pointer\",\n                        \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none\",\n                        isDisabled && \"opacity-50 pointer-events-none\",\n                    )}\n                    aria-label=\"Open list\"\n                    disabled={isDisabled}\n                >\n                    <ChevronDown className=\"h-4 w-4\" />\n                </button>\n            </PopoverTrigger>\n\n            <PopoverContent\n                align=\"end\"\n                side=\"bottom\"\n                className=\"w-[min(360px,calc(100vw-2rem))] p-2\"\n            >\n                <div className=\"flex items-center justify-between gap-2 pb-2\">\n                    <div className=\"text-xs font-medium text-muted-foreground\">\n                        Items ({items.length})\n                    </div>\n\n                    {!isDisabled && (\n                        <Button\n                            type=\"button\"\n                            size=\"sm\"\n                            variant=\"outline\"\n                            onClick={() => {\n                                setListOpen(false);\n                                openForNew();\n                            }}\n                            disabled={!canAdd}\n                        >\n                            <Plus className=\"h-3.5 w-3.5 mr-1\" />\n                            Add\n                        </Button>\n                    )}\n                </div>\n\n                {items.length === 0 ? (\n                    <div className=\"rounded-md border border-border/50 px-3 py-6 text-center text-sm text-muted-foreground\">\n                        {emptyLabel}\n                    </div>\n                ) : (\n                    <ScrollArea className=\"max-h-64 rounded-md border border-border/50\">\n                        <div className=\"divide-y divide-border/50\">\n                            {items.map((pair, index) => (\n                                <div\n                                    key={`${pair.key}-${index}`}\n                                    className=\"flex items-center justify-between gap-2 px-2 py-1.5\"\n                                >\n                                    <button\n                                        type=\"button\"\n                                        className={cn(\n                                            \"min-w-0 flex-1 text-left\",\n                                            \"text-sm font-medium text-foreground\",\n                                            \"hover:underline underline-offset-2\",\n                                        )}\n                                        onClick={() => {\n                                            setListOpen(false);\n                                            openForEdit(index);\n                                        }}\n                                        disabled={isDisabled}\n                                    >\n                                        <span className=\"truncate block\">{pair.key}</span>\n                                    </button>\n\n                                    <div className=\"flex items-center gap-1\">\n                                        <Popover>\n                                            <PopoverTrigger asChild>\n                                                <button\n                                                    type=\"button\"\n                                                    className={cn(\n                                                        \"flex h-7 w-7 items-center justify-center rounded-md\",\n                                                        \"text-muted-foreground hover:bg-accent hover:text-accent-foreground\",\n                                                        \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none\",\n                                                    )}\n                                                    title={pair.value || \"\"}\n                                                    aria-label={`Show value for ${pair.key}`}\n                                                >\n                                                    <Info className=\"h-4 w-4\" />\n                                                </button>\n                                            </PopoverTrigger>\n                                            <PopoverContent\n                                                align=\"end\"\n                                                className=\"w-[min(320px,calc(100vw-2rem))] p-2\"\n                                            >\n                                                <div className=\"text-xs font-medium text-muted-foreground mb-1\">\n                                                    {pair.key}\n                                                </div>\n                                                <div className=\"text-sm wrap-break-word\">\n                                                    {pair.value || (\n                                                        <span className=\"text-muted-foreground\">\n                                                            (empty)\n                                                        </span>\n                                                    )}\n                                                </div>\n                                            </PopoverContent>\n                                        </Popover>\n\n                                        {!isDisabled && canDelete && (\n                                            <button\n                                                type=\"button\"\n                                                className={cn(\n                                                    \"flex h-7 w-7 items-center justify-center rounded-md\",\n                                                    \"text-muted-foreground hover:bg-destructive hover:text-destructive-foreground\",\n                                                    \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none\",\n                                                )}\n                                                onClick={() => handleQuickRemove(index)}\n                                                aria-label={`Remove ${pair.key}`}\n                                            >\n                                                <X className=\"h-4 w-4\" />\n                                            </button>\n                                        )}\n                                    </div>\n                                </div>\n                            ))}\n                        </div>\n                    </ScrollArea>\n                )}\n            </PopoverContent>\n        </Popover>\n    );\n\n    // ────────────────────────────────\n    // Render\n    // ────────────────────────────────\n\n    return (\n        <div\n            ref={wrapRef}\n            className={cn(\n                \"group/container w-full\",\n                isDisabled && \"opacity-60 cursor-not-allowed\",\n                className,\n            )}\n            aria-disabled={isDisabled}\n            aria-invalid={error ? \"true\" : undefined}\n        >\n            {/* Container mimicking an Input */}\n            <div\n                className={cn(\n                    \"relative flex w-full items-center rounded-md border border-input bg-background transition-all\",\n                    !isDisabled &&\n                    \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 focus-within:ring-offset-background\",\n                    densityCls,\n                    sizeCls,\n                    chipsClassName,\n                )}\n            >\n                {/* Left area: chips/placeholder + overflow indicator (single line, no wrap) */}\n                <div\n                    ref={leftRef}\n                    className={cn(\n                        \"flex min-w-0 flex-1 items-center gap-2 overflow-hidden\",\n                        \"flex-nowrap\",\n                    )}\n                >\n                    {hasItems ? (\n                        <>\n                            {visibleItems.map((pair, index) =>\n                                renderChipNode(pair, index),\n                            )}\n\n                            {/* Overflow indicator (informational). Clicking opens the same dropdown. */}\n                            {overflowCount > 0 && (\n                                <button\n                                    type=\"button\"\n                                    className={cn(\n                                        \"inline-flex h-6 items-center gap-1 rounded-full shrink-0\",\n                                        \"bg-muted px-2 text-[11px] font-medium text-muted-foreground\",\n                                        \"hover:bg-muted/80 hover:text-foreground transition-colors\",\n                                        \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none\",\n                                    )}\n                                    onClick={openList}\n                                    disabled={isDisabled}\n                                    aria-label={`Show list (${overflowCount} hidden)`}\n                                >\n                                    {moreLabel(overflowCount)}\n                                </button>\n                            )}\n                        </>\n                    ) : (\n                        <div className=\"flex min-w-0 items-center gap-2 text-muted-foreground/60 select-none\">\n                            <Tag className=\"h-3.5 w-3.5 shrink-0\" />\n                            <span className=\"text-sm truncate\">\n                                {placeholder ?? emptyLabel}\n                            </span>\n                        </div>\n                    )}\n\n                    {/* Hidden measurement nodes */}\n                    <div className=\"absolute -left-2499.75 -top-2499.75 pointer-events-none opacity-0\">\n                        <button\n                            type=\"button\"\n                            ref={moreMeasureRef}\n                            className={cn(\n                                \"inline-flex h-6 items-center gap-1 rounded-full\",\n                                \"bg-muted px-2 text-[11px] font-medium text-muted-foreground\",\n                            )}\n                        >\n                            {`${items.length}+`}\n                        </button>\n                    </div>\n                </div>\n\n                {/* Right controls: (1) add control, (2) dropdown control — always (when not disabled) */}\n                {!isDisabled && (\n                    <div className=\"pl-1 pr-1 shrink-0 flex items-center gap-2\">\n                        <button\n                            type=\"button\"\n                            onClick={openForNew}\n                            className={cn(\n                                \"flex h-8 w-fit items-center justify-center rounded-sm\",\n                                \"text-muted-foreground cursor-pointer\",\n                                \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none\",\n                                !canAdd && \"opacity-50 pointer-events-none\",\n                            )}\n                            aria-label=\"Add item\"\n                            disabled={!canAdd}\n                        >\n                            <Plus className=\"h-4 w-4\" />\n                        </button>\n\n                        {ListPopover}\n                    </div>\n                )}\n            </div>\n\n            {/* Error */}\n            {error && (\n                <p className=\"mt-1.5 text-xs font-medium text-destructive\">\n                    {error}\n                </p>\n            )}\n\n            {ManageDialog}\n        </div>\n    );\n});\n\nShadcnKeyValueVariant.displayName = \"ShadcnKeyValueVariant\";\n\nexport default ShadcnKeyValueVariant;\n","import ShadcnKeyValueVariant from \"@/presets/shadcn-variants/keyvalue\";\r\nimport { VariantModule } from \"@/schema/variant\";\r\n\r\n\r\nexport const keyValueModule: VariantModule<'keyvalue'> = {\r\n   variant: 'keyvalue',\r\n   Variant: ShadcnKeyValueVariant,\r\n\r\n   meta: {\r\n      label: ''\r\n   }\r\n} ","// src/presets/shadcn-variants/custom.tsx\r\n\r\nimport * as React from \"react\";\r\nimport type { VariantBaseProps, ChangeDetail } from \"@/variants/shared\";\r\n\r\n/**\r\n * Props for the generic \"custom\" variant.\r\n *\r\n * - The only special props we define are:\r\n *   - component: the React component to render\r\n *   - valueProp / changeProp / disabledProp / readOnlyProp / errorProp\r\n *   - idProp / nameProp / placeholderProp\r\n *   - mapValue / mapDetail (optional hooks)\r\n *\r\n * - All other props are treated as \"component props\" and forwarded\r\n *   directly to the underlying component.\r\n *\r\n * The underlying component is expected to:\r\n *   - accept the mapped `valueProp`\r\n *   - call the mapped `changeProp` with the next value (first argument)\r\n *   - optionally use disabled/readOnly/error/id/name/placeholder via the mapped names\r\n */\r\nexport interface ShadcnCustomVariantProps<TValue = unknown>\r\n   extends VariantBaseProps<TValue> {\r\n   /**\r\n    * The actual React component to render.\r\n    *\r\n    * Example:\r\n    *   component={MyToggle}\r\n    */\r\n   component: React.ComponentType<any>;\r\n\r\n   /**\r\n    * Prop name that carries the current value for the component.\r\n    * Default: \"value\".\r\n    */\r\n   valueProp?: string;\r\n\r\n   /**\r\n    * Prop name for the change handler that the component will call.\r\n    * Default: \"onChange\".\r\n    *\r\n    * The component is expected to call:\r\n    *   props[changeProp](nextValue, ...otherArgs?)\r\n    *\r\n    * The first argument is taken as the new value.\r\n    */\r\n   changeProp?: string;\r\n\r\n   /**\r\n    * Prop name for disabled state.\r\n    * Default: \"disabled\".\r\n    */\r\n   disabledProp?: string;\r\n\r\n   /**\r\n    * Prop name for read-only state.\r\n    * Default: \"readOnly\".\r\n    */\r\n   readOnlyProp?: string;\r\n\r\n   /**\r\n    * Prop name for passing error to the component (if it cares).\r\n    * If provided, we pass the `error` field as-is.\r\n    * Example values: \"error\", \"isInvalid\", \"status\".\r\n    */\r\n   errorProp?: string;\r\n\r\n   /**\r\n    * Prop name for the id attribute.\r\n    * Default: \"id\".\r\n    */\r\n   idProp?: string;\r\n\r\n   /**\r\n    * Prop name for the name attribute.\r\n    * Default: \"name\".\r\n    */\r\n   nameProp?: string;\r\n\r\n   /**\r\n    * Prop name for the placeholder attribute.\r\n    * Default: \"placeholder\".\r\n    */\r\n   placeholderProp?: string;\r\n\r\n   /**\r\n    * Optional transform for the raw next value before it hits the field.\r\n    *\r\n    * Receives the first argument that the component passes to the change\r\n    * handler, plus the full argument list for flexibility.\r\n    */\r\n   mapValue?: (raw: any, ...args: any[]) => TValue;\r\n\r\n   /**\r\n    * Optional builder for ChangeDetail, given the raw next value.\r\n    *\r\n    * If omitted, a default { source: \"variant\", raw } detail is used.\r\n    */\r\n   mapDetail?: (raw: any, ...args: any[]) => ChangeDetail;\r\n\r\n   /**\r\n    * Any other props are assumed to belong to the custom component.\r\n    */\r\n   [key: string]: unknown;\r\n}\r\n\r\nexport const ShadcnCustomVariant = React.forwardRef<\r\n   any,\r\n   ShadcnCustomVariantProps<any>\r\n>(function ShadcnCustomVariant(props, ref) {\r\n   const {\r\n      // Variant base props we care about:\r\n      value,\r\n      onValue,\r\n      error,\r\n      disabled,\r\n      readOnly,\r\n      id,\r\n      name,\r\n      placeholder,\r\n\r\n      // Mapping props:\r\n      component: Component,\r\n      valueProp = \"value\",\r\n      changeProp = \"onChange\",\r\n      disabledProp = \"disabled\",\r\n      readOnlyProp = \"readOnly\",\r\n      errorProp,\r\n      idProp = \"id\",\r\n      nameProp = \"name\",\r\n      placeholderProp = \"placeholder\",\r\n\r\n      mapValue,\r\n      mapDetail,\r\n\r\n      // Everything else goes straight to the component:\r\n      ...rest\r\n   } = props as ShadcnCustomVariantProps<any>;\r\n\r\n   // If there is no component, bail out (dev-time safety).\r\n   if (!Component) {\r\n      if (process.env.NODE_ENV !== \"production\") {\r\n         // eslint-disable-next-line no-console\r\n         console.warn(\r\n            \"[form-palette] ShadcnCustomVariant: `component` prop is required.\",\r\n         );\r\n      }\r\n      return null;\r\n   }\r\n\r\n   const isDisabled = !!disabled;\r\n   const isReadOnly = !!readOnly;\r\n\r\n   /**\r\n    * Bridge from the component's change callback to the variant contract.\r\n    *\r\n    * We assume the custom component calls the mapped change prop\r\n    * with the **next value as its first argument**:\r\n    *\r\n    *   props[changeProp](nextValue, ...rest)\r\n    */\r\n   const handleChange = React.useCallback(\r\n      (...args: any[]) => {\r\n         if (!onValue) return;\r\n         if (isDisabled || isReadOnly) return;\r\n\r\n         const raw = args[0];\r\n\r\n         const next = mapValue\r\n            ? mapValue(raw, ...args)\r\n            : (raw as any);\r\n\r\n         const detail: ChangeDetail =\r\n            mapDetail?.(raw, ...args) ?? {\r\n               source: \"variant\",\r\n               raw,\r\n               nativeEvent: undefined,\r\n               meta: undefined,\r\n            };\r\n\r\n         (onValue as any)(next, detail);\r\n      },\r\n      [onValue, isDisabled, isReadOnly, mapValue, mapDetail],\r\n   );\r\n\r\n   // Build the props for the custom component.\r\n   const innerProps: Record<string, unknown> = {\r\n      ...rest, // ← all non-special props from InputField go directly to the component\r\n   };\r\n\r\n   // Map value → component[valueProp]\r\n   innerProps[valueProp] = value;\r\n\r\n   // Map handler → component[changeProp]\r\n   innerProps[changeProp] = handleChange;\r\n\r\n   // Map disabled / readOnly\r\n   if (disabledProp) {\r\n      innerProps[disabledProp] = isDisabled;\r\n   }\r\n   if (readOnlyProp) {\r\n      innerProps[readOnlyProp] = isReadOnly;\r\n   }\r\n\r\n   // Map error if a mapping key is provided\r\n   if (errorProp && error !== undefined) {\r\n      innerProps[errorProp] = error;\r\n   }\r\n\r\n   // Map id/name/placeholder if present\r\n   if (id !== undefined && idProp) {\r\n      innerProps[idProp] = id;\r\n   }\r\n   if (name !== undefined && nameProp) {\r\n      innerProps[nameProp] = name;\r\n   }\r\n   if (placeholder !== undefined && placeholderProp) {\r\n      innerProps[placeholderProp] = placeholder;\r\n   }\r\n\r\n   return <Component ref={ref} {...innerProps} />;\r\n});\r\n\r\nShadcnCustomVariant.displayName = \"ShadcnCustomVariant\";\r\n\r\nexport default ShadcnCustomVariant;","// src/variants/core/custom.tsx\r\n\r\nimport type { VariantModule } from \"@/schema/variant\";\r\nimport { ShadcnCustomVariant } from \"@/presets/shadcn-variants/custom\";\r\n\r\n/**\r\n * Core \"custom\" variant module.\r\n *\r\n * - Delegates all UI to ShadcnCustomVariant.\r\n * - No layout defaults, no built-in validation.\r\n * - Consumers can override layout via InputField props if needed.\r\n */\r\nexport const customVariant: VariantModule<\"custom\"> = {\r\n   variant: \"custom\",\r\n   Variant: ShadcnCustomVariant,\r\n};\r\n\r\nexport default customVariant;","import * as React from \"react\";\nimport type { VariantBaseProps, ChangeDetail } from \"@/variants/shared\";\nimport { cn } from \"@/lib/utils\";\nimport { Checkbox } from \"@/presets/ui/checkbox\";\nimport { Badge } from \"@/presets/ui/badge\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"@/presets/ui/popover\";\nimport {\n    ChevronDown,\n    ChevronRight,\n    Search,\n    X,\n    Folder,\n    FolderOpen,\n    File,\n    Check,\n} from \"lucide-react\";\nimport { normalizeTree, type NormalizedTreeItemWithRender } from \"@/lib/normalise-options\";\nimport {\n    NormalizedTreeItem,\n    TreeKey,\n    TreeSelectOption,\n    TreeValue,\n} from \"@/presets/shadcn-variants/tree-select-types\";\nimport { Virtuoso } from \"react-virtuoso\";\n\ntype Size = \"sm\" | \"md\" | \"lg\";\ntype Density = \"compact\" | \"comfortable\" | \"loose\";\n\n// ─────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────\n\nfunction flattenTree(\n    nodes: NormalizedTreeItemWithRender[]\n): NormalizedTreeItemWithRender[] {\n    const result: NormalizedTreeItemWithRender[] = [];\n    function recurse(list: NormalizedTreeItemWithRender[]) {\n        for (const node of list) {\n            result.push(node);\n            if (node.children.length) recurse(node.children);\n        }\n    }\n    recurse(nodes);\n    return result;\n}\n\nfunction toggleInArray(\n    arr: TreeKey[] | undefined,\n    key: TreeKey\n): TreeKey[] | undefined {\n    const list = arr ?? [];\n    const idx = list.findIndex((v) => v === key);\n    if (idx === -1) return [...list, key];\n    const next = [...list];\n    next.splice(idx, 1);\n    return next.length ? next : undefined;\n}\n\nfunction densityClasses(density?: Density) {\n    switch (density) {\n        case \"compact\":\n            return {\n                triggerPy: \"py-1\",\n                searchPy: \"py-2\",\n                rowPy: \"py-1\",\n                rowGap: \"gap-1.5\",\n            };\n        case \"loose\":\n            return {\n                triggerPy: \"py-2.5\",\n                searchPy: \"py-3\",\n                rowPy: \"py-2\",\n                rowGap: \"gap-2.5\",\n            };\n        default:\n            return {\n                triggerPy: \"py-2\",\n                searchPy: \"py-2.5\",\n                rowPy: \"py-1.5\",\n                rowGap: \"gap-2\",\n            };\n    }\n}\n\nfunction triggerHeight(size?: Size) {\n    switch (size) {\n        case \"sm\":\n            return \"min-h-8 text-xs\";\n        case \"lg\":\n            return \"min-h-11 text-base\";\n        default:\n            return \"min-h-9 text-sm\";\n    }\n}\n\ntype BadgeVariant = \"default\" | \"secondary\" | \"destructive\" | \"outline\";\n\n// ─────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────\n\ntype TreeSelectBaseProps = Pick<\n    VariantBaseProps<TreeValue>,\n    \"value\" | \"onValue\" | \"error\" | \"disabled\" | \"readOnly\" | \"size\" | \"density\"\n> & {\n    options?: TreeSelectOption[];\n\n    /**\n     * If true, allows multiple selection (checkboxes).\n     * If false, allows single selection (no checkboxes, closes on select).\n     * Default: true\n     */\n    multiple?: boolean;\n\n    autoCap?: boolean;\n    optionLabel?: string | ((item: TreeSelectOption) => React.ReactNode);\n    optionValue?: string | ((item: TreeSelectOption) => TreeKey);\n    optionDescription?: string | ((item: TreeSelectOption) => React.ReactNode);\n    optionDisabled?: string | ((item: TreeSelectOption) => boolean);\n    optionIcon?: string | ((item: TreeSelectOption) => React.ReactNode);\n    optionKey?: string | ((item: TreeSelectOption, index: number) => React.Key);\n    optionTags?: string | ((item: TreeSelectOption) => unknown[]);\n    optionTagLabel?: string | ((tag: unknown) => React.ReactNode);\n    optionTagIcon?: string | ((tag: unknown) => React.ReactNode);\n    optionTagClassName?: string | ((tag: unknown) => string);\n    optionTagColor?: string | ((tag: unknown) => string);\n    optionTagBgColor?: string | ((tag: unknown) => string);\n    optionTagOnClick?:\n        | string\n        | ((tag: unknown) => React.MouseEventHandler<HTMLSpanElement>);\n\n    searchable?: boolean;\n    searchPlaceholder?: string;\n    emptyLabel?: React.ReactNode;\n    emptySearchText?: React.ReactNode;\n    clearable?: boolean;\n    placeholder?: React.ReactNode;\n\n    className?: string;\n    triggerClassName?: string;\n    contentClassName?: string;\n\n    renderOption?: (ctx: {\n        item: NormalizedTreeItem;\n        selected: boolean;\n        index: number;\n        option: React.ReactNode;\n        click(): void;\n    }) => React.ReactNode;\n\n    renderValue?: (ctx: {\n        selectedItems: NormalizedTreeItem[];\n        placeholder?: React.ReactNode;\n    }) => React.ReactNode;\n\n    expandAll?: boolean;\n    defaultExpandedValues?: TreeKey[];\n    leafOnly?: boolean;\n};\n\ntype TreeSelectDefaultModeProps = {\n    mode?: \"default\";\n\n    // Icons & controls (default mode only)\n    leadingIcons?: React.ReactNode[];\n    trailingIcons?: React.ReactNode[];\n    icon?: React.ReactNode;\n    iconGap?: number;\n    leadingIconSpacing?: number;\n    trailingIconSpacing?: number;\n\n    leadingControl?: React.ReactNode;\n    trailingControl?: React.ReactNode;\n    leadingControlClassName?: string;\n    trailingControlClassName?: string;\n\n    joinControls?: boolean;\n    extendBoxToControls?: boolean;\n\n    // Not supported in default mode\n    button?: never;\n    children?: never;\n    selectedBadge?: never;\n    selectedBadgeHiddenWhenZero?: never;\n    selectedBadgeVariant?: never;\n    selectedBadgeClassName?: never;\n    selectedBadgePlacement?: never;\n};\n\ntype TreeSelectButtonModeButton =\n    | React.ReactNode\n    | ((ctx: {\n          open: boolean;\n          selectedItems: NormalizedTreeItem[];\n          selectedCount: number;\n      }) => React.ReactNode);\n\ntype TreeSelectButtonModeProps = {\n    mode: \"button\";\n\n    /**\n     * Used when mode=\"button\". If provided, this is the trigger.\n     * If not provided, `children` is used.\n     */\n    button?: TreeSelectButtonModeButton;\n\n    children?: TreeSelectButtonModeButton;\n\n    /**\n     * Selected-count badge (mode=\"button\" only)\n     */\n    selectedBadge?: boolean;\n    selectedBadgeHiddenWhenZero?: boolean;\n    selectedBadgeVariant?: BadgeVariant;\n    selectedBadgeClassName?: string;\n    selectedBadgePlacement?: \"end\" | \"corner\";\n\n    // Icons & controls NOT supported in button mode\n    leadingIcons?: never;\n    trailingIcons?: never;\n    icon?: never;\n    iconGap?: never;\n    leadingIconSpacing?: never;\n    trailingIconSpacing?: never;\n\n    leadingControl?: never;\n    trailingControl?: never;\n    leadingControlClassName?: never;\n    trailingControlClassName?: never;\n\n    joinControls?: never;\n    extendBoxToControls?: never;\n};\n\nexport type ShadcnTreeSelectVariantProps = TreeSelectBaseProps &\n    (TreeSelectDefaultModeProps | TreeSelectButtonModeProps);\n\n// ─────────────────────────────────────────────\n// Component\n// ─────────────────────────────────────────────\n\nexport const ShadcnTreeSelectVariant = React.forwardRef<\n    HTMLButtonElement,\n    ShadcnTreeSelectVariantProps\n>(function ShadcnTreeSelectVariant(props, ref) {\n    const {\n        value,\n        onValue,\n        disabled,\n        readOnly,\n        size,\n        density,\n\n        options,\n        multiple = true,\n\n        autoCap,\n        optionLabel,\n        optionValue,\n        optionDescription,\n        optionDisabled,\n        optionIcon,\n        optionKey,\n        optionTags,\n        optionTagLabel,\n        optionTagIcon,\n        optionTagClassName,\n        optionTagColor,\n        optionTagBgColor,\n        optionTagOnClick,\n\n        searchable = true,\n        searchPlaceholder,\n\n        emptyLabel,\n        emptySearchText,\n\n        clearable = true,\n        placeholder,\n\n        className,\n        triggerClassName,\n        contentClassName,\n\n        renderOption,\n        renderValue,\n\n        expandAll = false,\n        defaultExpandedValues,\n        leafOnly = false,\n\n        // Icons & controls\n        leadingIcons,\n        trailingIcons,\n        icon,\n        iconGap,\n        leadingIconSpacing,\n        trailingIconSpacing,\n        leadingControl,\n        trailingControl,\n        leadingControlClassName,\n        trailingControlClassName,\n        joinControls = true,\n        extendBoxToControls = true,\n\n        mode = \"default\",\n        button,\n        children,\n\n        selectedBadge = true,\n        selectedBadgeHiddenWhenZero = true,\n        selectedBadgeVariant = \"secondary\",\n        selectedBadgeClassName,\n        selectedBadgePlacement = \"corner\",\n    } = props;\n\n    const [open, setOpen] = React.useState(false);\n    const [query, setQuery] = React.useState(\"\");\n\n    const isDisabled = disabled || readOnly;\n    const d = React.useMemo(\n        () => densityClasses(density as Density),\n        [density]\n    );\n\n    // Normalize tree\n    const tree = React.useMemo(\n        () =>\n            normalizeTree(options ?? [], {\n                autoCap,\n                optionLabel,\n                optionValue,\n                optionDescription,\n                optionDisabled,\n                optionIcon,\n                optionKey,\n                optionTags,\n                optionTagLabel,\n                optionTagIcon,\n                optionTagClassName,\n                optionTagColor,\n                optionTagBgColor,\n                optionTagOnClick,\n            }),\n        [\n            options,\n            autoCap,\n            optionLabel,\n            optionValue,\n            optionDescription,\n            optionDisabled,\n            optionIcon,\n            optionKey,\n            optionTags,\n            optionTagLabel,\n            optionTagIcon,\n            optionTagClassName,\n            optionTagColor,\n            optionTagBgColor,\n            optionTagOnClick,\n        ]\n    );\n\n    const allNodesFlat = React.useMemo(() => flattenTree(tree), [tree]);\n\n    // Expanded tracking (derive)\n    const computedInitialExpanded = React.useMemo(() => {\n        if (expandAll) {\n            return new Set<TreeKey>(\n                allNodesFlat.filter((n) => n.hasChildren).map((n) => n.value)\n            );\n        }\n        if (defaultExpandedValues?.length) {\n            return new Set<TreeKey>(defaultExpandedValues);\n        }\n        return new Set<TreeKey>();\n    }, [expandAll, defaultExpandedValues, allNodesFlat]);\n\n    const [expanded, setExpanded] = React.useState<Set<TreeKey>>(\n        computedInitialExpanded\n    );\n\n    // Re-sync expanded when inputs/options change\n    React.useEffect(() => {\n        setExpanded(computedInitialExpanded);\n    }, [computedInitialExpanded]);\n\n    const toggleExpanded = React.useCallback((key: TreeKey) => {\n        setExpanded((prev) => {\n            const next = new Set(prev);\n            if (next.has(key)) next.delete(key);\n            else next.add(key);\n            return next;\n        });\n    }, []);\n\n    const displayedNodes = React.useMemo(() => {\n        if (query) {\n            const q = query.toLowerCase();\n            const matchSet = new Set<TreeKey>();\n\n            const checkMatch = (node: NormalizedTreeItem): boolean => {\n                const selfMatch = node.labelText.toLowerCase().includes(q);\n                const childMatch = node.children.some(checkMatch);\n                if (selfMatch || childMatch) {\n                    matchSet.add(node.value);\n                    node.path.forEach((p) => matchSet.add(p));\n                    return true;\n                }\n                return false;\n            };\n\n            tree.forEach(checkMatch);\n            return allNodesFlat.filter((n) => matchSet.has(n.value));\n        }\n\n        return allNodesFlat.filter((node) => {\n            if (node.level === 0) return true;\n            for (const ancestorKey of node.path) {\n                if (!expanded.has(ancestorKey)) return false;\n            }\n            return true;\n        });\n    }, [allNodesFlat, query, tree, expanded]);\n\n    const estimatedRowHeight =\n        density === \"compact\" ? 32 : density === \"loose\" ? 48 : 40;\n    const listMaxHeight = 320;\n    const listHeight = Math.min(\n        listMaxHeight,\n        Math.max(\n            estimatedRowHeight,\n            displayedNodes.length * estimatedRowHeight,\n        ),\n    );\n\n    // Selection normalization\n    const selectedValues = React.useMemo<TreeKey[]>(() => {\n        if (value === undefined || value === null) return [];\n        if (Array.isArray(value)) {\n            return multiple ? value : value.length ? [value[0] as TreeKey] : [];\n        }\n        return [value];\n    }, [value, multiple]);\n\n    const selectedItems = React.useMemo(\n        () =>\n            allNodesFlat.filter((node) => selectedValues.includes(node.value)),\n        [allNodesFlat, selectedValues]\n    );\n\n    const selectedCount = selectedItems.length;\n\n    const handleToggleValue = React.useCallback(\n        (item: NormalizedTreeItem) => {\n            if (isDisabled) return;\n\n            // In leafOnly mode, parents toggle expansion instead of selection\n            if (leafOnly && item.hasChildren) {\n                if (!item.disabled) toggleExpanded(item.value);\n                return;\n            }\n\n            let nextValue: TreeValue;\n\n            if (multiple) {\n                nextValue = toggleInArray(selectedValues, item.value);\n            } else {\n                nextValue = item.value;\n                setOpen(false);\n            }\n\n            const nextSelectedValues = Array.isArray(nextValue)\n                ? nextValue\n                : nextValue !== undefined && nextValue !== null\n                  ? [nextValue]\n                  : [];\n            const nextSelectedOptions = nextSelectedValues.map(\n                (val) =>\n                    allNodesFlat.find((node) => node.value === val)?.raw ?? val,\n            );\n\n            const detail: ChangeDetail = {\n                source: \"variant\",\n                raw: item.raw,\n                selectedOptions: nextSelectedOptions,\n                nativeEvent: undefined,\n                meta: {\n                    toggled: item.value,\n                    selectedValues: nextSelectedValues,\n                },\n            };\n\n            onValue?.(nextValue, detail);\n        },\n        [\n            isDisabled,\n            leafOnly,\n            multiple,\n            selectedValues,\n            onValue,\n            toggleExpanded,\n            allNodesFlat,\n        ]\n    );\n\n    const handleClear = React.useCallback(() => {\n        if (!onValue) return;\n        const detail: ChangeDetail = {\n            source: \"variant\",\n            raw: undefined,\n            selectedOptions: [],\n            nativeEvent: undefined,\n            meta: { action: \"clear\" },\n        };\n        onValue(undefined, detail);\n    }, [onValue]);\n\n    const resolvedLeadingIcons =\n        leadingIcons && leadingIcons.length ? leadingIcons : icon ? [icon] : [];\n    const resolvedTrailingIcons = trailingIcons ?? [];\n    const baseIconGap = iconGap ?? 4;\n    const leadingGap = leadingIconSpacing ?? baseIconGap;\n    const trailingGap = trailingIconSpacing ?? baseIconGap;\n\n    const hasLeadingControl = !!leadingControl;\n    const hasTrailingControl = !!trailingControl;\n    const hasControls = hasLeadingControl || hasTrailingControl;\n\n    const showClear =\n        mode === \"default\" &&\n        clearable &&\n        !isDisabled &&\n        selectedValues.length > 0;\n\n    // ─────────────────────────────────────────────\n    // Trigger rendering\n    // ─────────────────────────────────────────────\n\n    const renderDefaultTriggerContent = () => {\n        if (!selectedItems.length) {\n            return (\n                <span className=\"text-muted-foreground\">\n                    {placeholder ?? \"Select...\"}\n                </span>\n            );\n        }\n\n        if (!multiple && selectedItems.length === 1) {\n            return (\n                <span className=\"text-foreground\">\n                    {selectedItems[0].labelNode}\n                </span>\n            );\n        }\n\n        if (selectedItems.length <= 3) {\n            return (\n                <div className=\"flex flex-wrap gap-1\">\n                    {selectedItems.map((item) => (\n                        <Badge\n                            key={item.key}\n                            variant=\"secondary\"\n                            className=\"px-1.5 h-5 text-[10px] font-medium border-border/50 bg-secondary/50\"\n                        >\n                            {item.labelNode}\n                        </Badge>\n                    ))}\n                </div>\n            );\n        }\n\n        return (\n            <div className=\"flex items-center gap-1\">\n                <Badge\n                    variant=\"secondary\"\n                    className=\"px-1.5 h-5 text-[10px] bg-secondary/50\"\n                >\n                    {selectedItems.length} selected\n                </Badge>\n            </div>\n        );\n    };\n\n    const triggerContent = renderValue\n        ? renderValue({ selectedItems, placeholder })\n        : renderDefaultTriggerContent();\n\n    const baseBoxClasses = cn(\n        \"flex items-center justify-between border-input w-full min-w-0 rounded-md border bg-background text-sm shadow-xs ring-offset-background\",\n        \"placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n        \"disabled:cursor-not-allowed disabled:opacity-50\",\n        \"aria-invalid:border-destructive\",\n        d.triggerPy\n    );\n\n    const DefaultTriggerButton = (\n        <button\n            ref={ref}\n            type=\"button\"\n            disabled={isDisabled}\n            className={cn(\n                triggerHeight(size as Size),\n                hasControls && extendBoxToControls\n                    ? \"border-none shadow-none focus:outline-none bg-transparent w-full text-left\"\n                    : baseBoxClasses,\n                triggerClassName\n            )}\n        >\n            <div className=\"flex w-full items-center justify-between gap-2 overflow-hidden\">\n                <div className=\"flex flex-1 items-center gap-2 overflow-hidden\">\n                    {resolvedLeadingIcons.length > 0 && (\n                        <span\n                            className=\"flex items-center shrink-0\"\n                            style={{ columnGap: leadingGap }}\n                        >\n                            {resolvedLeadingIcons.map((node, idx) => (\n                                <span key={idx}>{node}</span>\n                            ))}\n                        </span>\n                    )}\n                    <div className=\"truncate w-full text-left\">\n                        {triggerContent}\n                    </div>\n                </div>\n\n                <div className=\"flex items-center gap-1.5 shrink-0\">\n                    {showClear && (\n                        <button\n                            type=\"button\"\n                            onClick={(e) => {\n                                e.stopPropagation();\n                                handleClear();\n                            }}\n                            className=\"text-muted-foreground hover:text-foreground p-0.5 rounded-sm hover:bg-muted transition-colors\"\n                            aria-label=\"Clear selection\"\n                        >\n                            <X className=\"h-3.5 w-3.5\" />\n                        </button>\n                    )}\n\n                    {resolvedTrailingIcons.length > 0 && (\n                        <span\n                            className=\"flex items-center\"\n                            style={{ columnGap: trailingGap }}\n                        >\n                            {resolvedTrailingIcons.map((node, idx) => (\n                                <span key={idx}>{node}</span>\n                            ))}\n                        </span>\n                    )}\n\n                    <ChevronDown className=\"h-4 w-4 opacity-50\" />\n                </div>\n            </div>\n        </button>\n    );\n\n    const ButtonModeTrigger = React.useMemo(() => {\n        if (mode !== \"button\") return null;\n\n        const ctx = { open, selectedItems, selectedCount };\n        const triggerNode =\n            typeof button === \"function\"\n                ? button(ctx)\n                : (button ??\n                  (typeof children === \"function\" ? children(ctx) : children));\n\n        const shouldShowBadge =\n            Boolean(selectedBadge) &&\n            (!selectedBadgeHiddenWhenZero || selectedCount > 0);\n\n        const badgeEl = shouldShowBadge ? (\n            <Badge\n                variant={selectedBadgeVariant as any}\n                className={cn(\n                    \"text-[10px] h-5 px-1.5 leading-none\",\n                    selectedBadgePlacement === \"corner\" &&\n                        \"absolute -top-2 -right-2\",\n                    selectedBadgeClassName\n                )}\n            >\n                {selectedCount}\n            </Badge>\n        ) : null;\n\n        const wrapWithBadge = (inner: React.ReactNode) => {\n            if (!badgeEl) return inner;\n            if (selectedBadgePlacement === \"end\") {\n                return (\n                    <span className=\"inline-flex items-center gap-2\">\n                        <span className=\"min-w-0\">{inner}</span>\n                        {badgeEl}\n                    </span>\n                );\n            }\n            return (\n                <span className=\"relative inline-flex\">\n                    {inner}\n                    {badgeEl}\n                </span>\n            );\n        };\n\n        // If user gave us a real element, use it directly (PopoverTrigger will clone props)\n        if (React.isValidElement(triggerNode)) {\n            return wrapWithBadge(triggerNode);\n        }\n\n        // Fallback: wrap text/anything in a plain button\n        return wrapWithBadge(\n            <button\n                type=\"button\"\n                disabled={isDisabled}\n                className={cn(triggerClassName)}\n            >\n                {triggerNode ?? <span>Select…</span>}\n            </button>\n        );\n    }, [\n        mode,\n        open,\n        button,\n        children,\n        selectedItems,\n        selectedCount,\n        selectedBadge,\n        selectedBadgeHiddenWhenZero,\n        selectedBadgeVariant,\n        selectedBadgeClassName,\n        selectedBadgePlacement,\n        isDisabled,\n        triggerClassName,\n    ]);\n\n    const TriggerNode =\n        mode === \"button\" ? ButtonModeTrigger : DefaultTriggerButton;\n\n    // ─────────────────────────────────────────────\n    // Tree Body\n    // ─────────────────────────────────────────────\n\n    const TreeBody = (\n        <div className=\"w-full\">\n            {emptyLabel && tree.length === 0 && !query && (\n                <div className=\"px-4 py-3 text-sm text-center text-muted-foreground\">\n                    {emptyLabel}\n                </div>\n            )}\n\n            {tree.length > 0 && displayedNodes.length === 0 && (\n                <div className=\"px-4 py-3 text-sm text-center text-muted-foreground\">\n                    {emptySearchText ?? \"No results found\"}\n                </div>\n            )}\n\n            {displayedNodes.length > 0 && (\n                <Virtuoso\n                    style={{ height: listHeight }}\n                    data={displayedNodes}\n                    computeItemKey={(_index, item) => item.key}\n                    itemContent={(index, item) => {\n                        const selected = selectedValues.includes(item.value);\n                        const isExpanded = expanded.has(item.value);\n                        const parentInLeafOnly = leafOnly && item.hasChildren;\n\n                        const optionNode = (\n                            <div\n                                className={cn(\n                                    \"relative flex items-center px-2 text-sm outline-none select-none\",\n                                    d.rowGap,\n                                    d.rowPy,\n                                    item.disabled\n                                        ? \"opacity-50\"\n                                        : \"hover:bg-accent hover:text-accent-foreground cursor-pointer\",\n                                    selected && !multiple && \"bg-accent\",\n                                    selected && multiple && \"bg-accent/50\"\n                                )}\n                                style={{ paddingLeft: 12 + item.level * 20 }}\n                                onClick={(e) => {\n                                    e.preventDefault();\n                                    if (!item.disabled) handleToggleValue(item);\n                                }}\n                            >\n                                {/* Guidelines */}\n                                {item.level > 0 &&\n                                    Array.from({ length: item.level }).map(\n                                        (_, i) => (\n                                            <div\n                                                key={i}\n                                                className=\"absolute border-l border-border/40 h-full top-0\"\n                                                style={{ left: 19 + i * 20 }}\n                                            />\n                                        )\n                                    )}\n\n                                {/* Expander */}\n                                <button\n                                    type=\"button\"\n                                    disabled={!!item.disabled || !item.hasChildren}\n                                    onClick={(e) => {\n                                        e.stopPropagation();\n                                        if (item.disabled) return;\n                                        toggleExpanded(item.value);\n                                    }}\n                                    className={cn(\n                                        \"z-10 flex h-5 w-5 shrink-0 items-center justify-center rounded-sm text-muted-foreground hover:bg-muted hover:text-foreground transition-colors\",\n                                        !item.hasChildren &&\n                                            \"opacity-0 pointer-events-none\"\n                                    )}\n                                    aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n                                >\n                                    {isExpanded ? (\n                                        <ChevronDown className=\"h-3.5 w-3.5\" />\n                                    ) : (\n                                        <ChevronRight className=\"h-3.5 w-3.5\" />\n                                    )}\n                                </button>\n\n                                {/* Checkbox (Multi Only, hide for parent nodes in leafOnly mode) */}\n                                {multiple && !parentInLeafOnly && (\n                                    <Checkbox\n                                        checked={selected}\n                                        className=\"shrink-0 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\"\n                                        style={{ pointerEvents: \"none\" }}\n                                    />\n                                )}\n\n                                {/* Icon */}\n                                {item.icon ? (\n                                    <span className=\"text-muted-foreground\">\n                                        {item.icon}\n                                    </span>\n                                ) : item.hasChildren ? (\n                                    isExpanded ? (\n                                        <FolderOpen className=\"h-4 w-4 text-blue-400/80 fill-blue-400/20\" />\n                                    ) : (\n                                        <Folder className=\"h-4 w-4 text-blue-400/80 fill-blue-400/20\" />\n                                    )\n                                ) : (\n                                    <File className=\"h-4 w-4 text-muted-foreground/60\" />\n                                )}\n\n                                {/* Label */}\n                                <div className=\"flex flex-col min-w-0 flex-1\">\n                                    <span className=\"flex min-w-0 items-start gap-2\">\n                                        <span className=\"truncate font-medium leading-none\">\n                                            {item.labelNode}\n                                        </span>\n                                        {!!item.tags?.length && (\n                                            <span className=\"ml-auto flex shrink-0 flex-wrap gap-1\">\n                                                {item.tags.map((tag, tagIndex) => (\n                                                    <Badge\n                                                        key={tagIndex}\n                                                        className={cn(\n                                                            \"text-xs\",\n                                                            tag.className,\n                                                        )}\n                                                        onClick={tag.onClick}\n                                                        style={{\n                                                            color: tag.color,\n                                                            backgroundColor:\n                                                                tag.bgColor,\n                                                        }}\n                                                    >\n                                                        {tag.icon && (\n                                                            <span className=\"shrink-0\">\n                                                                {tag.icon}\n                                                            </span>\n                                                        )}\n                                                        <span>{tag.label}</span>\n                                                    </Badge>\n                                                ))}\n                                            </span>\n                                        )}\n                                    </span>\n                                    {item.description && (\n                                        <span className=\"text-xs text-muted-foreground truncate mt-0.5\">\n                                            {item.description}\n                                        </span>\n                                    )}\n                                </div>\n\n                                {/* Checkmark (Single Only) */}\n                                {!multiple && selected && (\n                                    <Check className=\"h-4 w-4 text-primary ml-auto\" />\n                                )}\n                            </div>\n                        );\n\n                        // Prefer per-option renderer (normalized) if present; fall back to global renderOption\n                        const renderer = (item as any).render ?? renderOption;\n\n                        if (!renderer) {\n                            return (\n                                <React.Fragment key={item.key}>\n                                    {optionNode}\n                                </React.Fragment>\n                            );\n                        }\n\n                        const rendered = renderer({\n                            item,\n                            selected,\n                            index,\n                            option: optionNode,\n                            click() {\n                                if (!item.disabled) handleToggleValue(item);\n                            },\n                        });\n\n                        return (\n                            <React.Fragment key={item.key}>\n                                {rendered}\n                            </React.Fragment>\n                        );\n                    }}\n                />\n            )}\n        </div>\n    );\n\n    const SelectBody = (\n        <Popover\n            open={open}\n            onOpenChange={(next) => {\n                setOpen(next);\n                if (!next) setQuery(\"\");\n            }}\n            modal={true}\n        >\n            <PopoverTrigger asChild>{TriggerNode as any}</PopoverTrigger>\n\n            <PopoverContent\n                className={cn(\n                    \"p-0 w-(--radix-popover-trigger-width) min-w-75\",\n                    contentClassName\n                )}\n                align=\"start\"\n            >\n                {searchable && (\n                    <div\n                        className={cn(\n                            \"flex items-center border-b px-3\",\n                            d.searchPy\n                        )}\n                    >\n                        <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n                        <input\n                            autoFocus\n                            className=\"flex h-4 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n                            value={query}\n                            onChange={(e) => setQuery(e.target.value)}\n                            placeholder={searchPlaceholder ?? \"Search...\"}\n                        />\n                    </div>\n                )}\n                {TreeBody}\n            </PopoverContent>\n        </Popover>\n    );\n\n    if (!hasControls) {\n        return (\n            <div\n                data-slot=\"tree-select-field\"\n                className={cn(\"w-full\", className)}\n            >\n                {SelectBody}\n            </div>\n        );\n    }\n\n    if (joinControls) {\n        return (\n            <div\n                data-slot=\"tree-select-field\"\n                className={cn(\"w-full\", className)}\n            >\n                <div\n                    className={cn(\n                        \"flex items-center w-full rounded-md border border-input bg-background shadow-xs focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 ring-offset-background\",\n                        isDisabled && \"opacity-50 cursor-not-allowed bg-muted\"\n                    )}\n                >\n                    {hasLeadingControl && (\n                        <div\n                            className={cn(\n                                \"pl-3 pr-1 text-muted-foreground\",\n                                leadingControlClassName\n                            )}\n                        >\n                            {leadingControl}\n                        </div>\n                    )}\n                    <div className=\"flex-1 min-w-0\">{SelectBody}</div>\n                    {hasTrailingControl && (\n                        <div\n                            className={cn(\n                                \"pr-3 pl-1 text-muted-foreground\",\n                                trailingControlClassName\n                            )}\n                        >\n                            {trailingControl}\n                        </div>\n                    )}\n                </div>\n            </div>\n        );\n    }\n\n    return (\n        <div className={cn(\"flex items-center gap-2 w-full\", className)}>\n            {hasLeadingControl && leadingControl}\n            <div className=\"flex-1 min-w-0\">{SelectBody}</div>\n            {hasTrailingControl && trailingControl}\n        </div>\n    );\n});\n\nShadcnTreeSelectVariant.displayName = \"ShadcnTreeSelectVariant\";\n\nexport default ShadcnTreeSelectVariant;\n","import ShadcnTreeSelectVariant from \"@/presets/shadcn-variants/treeselect\";\r\nimport { VariantModule } from \"@/schema/variant\";\r\n\r\n\r\n\r\nconst treeselectModule: VariantModule<'treeselect'> = {\r\n   variant: 'treeselect',\r\n   Variant: ShadcnTreeSelectVariant as any\r\n}\r\n\r\nexport default treeselectModule","// src/presets/shadcn-variants/file.tsx\r\n\r\nimport * as React from \"react\";\r\nimport type { VariantBaseProps, ChangeDetail } from \"@/variants/shared\";\r\nimport { cn, toArray } from \"@/lib/utils\";\r\nimport { Checkbox } from \"@/presets/ui/checkbox\";\r\nimport { ScrollArea } from \"@/presets/ui/scroll-area\";\r\nimport { Button } from \"@/presets/ui/button\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/presets/ui/popover\";\r\nimport { Badge } from \"@/presets/ui/badge\";\r\nimport {\r\n    FileIcon,\r\n    UploadCloud,\r\n    Trash2,\r\n    CheckCircle2,\r\n    X,\r\n    AlertCircle,\r\n    Loader2,\r\n    ChevronDown,\r\n    Plus,\r\n    FolderUp,\r\n} from \"lucide-react\";\r\nimport { getPaletteUtil } from \"@/lib/register-global\";\r\n\r\n// ─────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────\r\n\r\ntype Size = \"sm\" | \"md\" | \"lg\";\r\ntype Density = \"compact\" | \"comfortable\" | \"loose\";\r\n\r\nexport type FileSourceKind = \"native\" | \"path\" | \"url\" | \"custom\";\r\n\r\n/**\r\n * ✅ What the form receives on submit:\r\n * - native picker -> File\r\n * - custom pickers -> string (url/path)\r\n */\r\nexport type FileValue = File | string;\r\n\r\nexport interface FileItem {\r\n    id: string;\r\n    kind: FileSourceKind;\r\n    file?: File;\r\n    path?: string;\r\n    url?: string;\r\n    name: string;\r\n    size?: number;\r\n    type?: string;\r\n    status?: \"idle\" | \"loading\" | \"done\" | \"failed\";\r\n    error?: string | null;\r\n    meta?: any;\r\n}\r\n\r\nexport type FileLike =\r\n    | File\r\n    | string\r\n    | {\r\n          id?: string;\r\n          file?: File;\r\n          path?: string;\r\n          url?: string;\r\n          name?: string;\r\n          size?: number;\r\n          type?: string;\r\n          status?: FileItem[\"status\"];\r\n          error?: string | null;\r\n          meta?: any;\r\n          [key: string]: unknown;\r\n      };\r\n\r\nexport type CustomFileLoaderResult = FileLike | FileLike[] | null | undefined;\r\n\r\nexport type CustomFileLoader = (ctx: {\r\n    multiple: boolean;\r\n    current: FileItem[];\r\n    allowedTypes?: string[];\r\n}) => Promise<CustomFileLoaderResult> | CustomFileLoaderResult;\r\n\r\n// ─────────────────────────────────────────────\r\n// Helpers\r\n// ─────────────────────────────────────────────\r\n\r\nfunction fileId() {\r\n    return `file_${Math.random().toString(36).slice(2)}`;\r\n}\r\n\r\nfunction formatSizeDefault(size?: number): string {\r\n    if (!size || size <= 0) return \"—\";\r\n    const kb = size / 1024;\r\n    if (kb < 1024) return `${kb.toFixed(1)} KB`;\r\n    const mb = kb / 1024;\r\n    return `${mb.toFixed(1)} MB`;\r\n}\r\n\r\n/** ✅ Exact trigger height contract (your spec) */\r\nfunction triggerHeight(size?: Size) {\r\n    switch (size) {\r\n        case \"sm\":\r\n            return \"h-8 text-xs\";\r\n        case \"lg\":\r\n            return \"h-11 text-base\";\r\n        default:\r\n            return \"h-9 text-sm\";\r\n    }\r\n}\r\n\r\n/** Keep chips safely within the trigger height */\r\nfunction chipHeight(size?: Size) {\r\n    switch (size) {\r\n        case \"sm\":\r\n            return \"h-5\";\r\n        case \"lg\":\r\n            return \"h-7\";\r\n        default:\r\n            return \"h-6\";\r\n    }\r\n}\r\n\r\n/** Folder button sizing that fits inside each trigger height */\r\nfunction pickerBtnSize(size?: Size) {\r\n    switch (size) {\r\n        case \"sm\":\r\n            return \"h-6 w-6\";\r\n        case \"lg\":\r\n            return \"h-8 w-8\";\r\n        default:\r\n            return \"h-7 w-7\";\r\n    }\r\n}\r\n\r\nfunction normaliseFileLike(input: FileLike): FileItem {\r\n    const asAny: any = input as any;\r\n    const existingId = asAny.id as string | undefined;\r\n\r\n    if (existingId && (asAny.file || asAny.path || asAny.url)) {\r\n        return {\r\n            id: existingId,\r\n            kind: (asAny.kind as FileSourceKind) ?? \"custom\",\r\n            file: asAny.file,\r\n            path: asAny.path,\r\n            url: asAny.url,\r\n            name: asAny.name ?? asAny.file?.name ?? existingId,\r\n            size: asAny.size ?? asAny.file?.size,\r\n            type: asAny.type ?? asAny.file?.type,\r\n            status: asAny.status ?? \"idle\",\r\n            error: asAny.error ?? null,\r\n            meta: asAny.meta,\r\n        };\r\n    }\r\n\r\n    if (input instanceof File) {\r\n        return {\r\n            id: existingId ?? fileId(),\r\n            kind: \"native\",\r\n            file: input,\r\n            name: input.name,\r\n            size: input.size,\r\n            type: input.type,\r\n            status: \"idle\",\r\n            error: null,\r\n        };\r\n    }\r\n\r\n    if (typeof input === \"string\") {\r\n        const isUrl = input.includes(\"://\");\r\n        const name = input.split(/[\\\\/]/).pop() ?? input;\r\n        return {\r\n            id: existingId ?? fileId(),\r\n            kind: isUrl ? \"url\" : \"path\",\r\n            [isUrl ? \"url\" : \"path\"]: input,\r\n            name,\r\n            status: \"idle\",\r\n            error: null,\r\n        } as FileItem;\r\n    }\r\n\r\n    return {\r\n        id: existingId ?? fileId(),\r\n        kind: \"custom\",\r\n        name: (input as any).name ?? \"Unknown File\",\r\n        status: \"idle\",\r\n        ...input,\r\n    } as FileItem;\r\n}\r\n\r\nfunction normaliseFromFiles(list: FileList | File[]): FileItem[] {\r\n    const arr: File[] = Array.isArray(list) ? list : Array.from(list);\r\n    return arr.map(normaliseFileLike);\r\n}\r\n\r\nfunction fileItemToValue(item: FileItem): FileValue {\r\n    if (item.file) return item.file;\r\n    return (item.url ?? item.path ?? item.name) as string;\r\n}\r\n\r\nfunction densityTokens(density?: Density) {\r\n    switch (density) {\r\n        case \"compact\":\r\n            return {\r\n                triggerPadX: \"px-2\",\r\n                triggerGap: \"gap-1.5\",\r\n                headerPad: \"px-3 py-1.5\",\r\n                listPad: \"p-1\",\r\n                rowPad: \"px-2 py-1.5\",\r\n                footerPad: \"p-1\",\r\n                dropPad: \"px-5 py-6\",\r\n                dropGap: \"gap-2\",\r\n                chipPad: \"px-1\",\r\n                chipGap: \"gap-1\",\r\n            };\r\n        case \"loose\":\r\n            return {\r\n                triggerPadX: \"px-4\",\r\n                triggerGap: \"gap-3\",\r\n                headerPad: \"px-4 py-2.5\",\r\n                listPad: \"p-2\",\r\n                rowPad: \"px-3 py-2.5\",\r\n                footerPad: \"p-2\",\r\n                dropPad: \"px-8 py-10\",\r\n                dropGap: \"gap-4\",\r\n                chipPad: \"px-2\",\r\n                chipGap: \"gap-2\",\r\n            };\r\n        default:\r\n            return {\r\n                triggerPadX: \"px-2\",\r\n                triggerGap: \"gap-2\",\r\n                headerPad: \"px-3 py-2\",\r\n                listPad: \"p-1\",\r\n                rowPad: \"px-2 py-2\",\r\n                footerPad: \"p-1\",\r\n                dropPad: \"px-6 py-8\",\r\n                dropGap: \"gap-3\",\r\n                chipPad: \"px-1.5\",\r\n                chipGap: \"gap-1.5\",\r\n            };\r\n    }\r\n}\r\n\r\nfunction mergeHandlers<E>(\r\n    a: ((e: E) => void) | undefined,\r\n    b: ((e: E) => void) | undefined,\r\n) {\r\n    if (!a) return b;\r\n    if (!b) return a;\r\n    return (e: E) => {\r\n        a(e);\r\n        b(e);\r\n    };\r\n}\r\n\r\n// ─────────────────────────────────────────────\r\n// Props (value is scalar when multiple=false)\r\n// ─────────────────────────────────────────────\r\n\r\ntype BadgeVariant = React.ComponentProps<typeof Badge>[\"variant\"];\r\n\r\ntype FileVariantExtras = {\r\n    accept?: string | string[];\r\n    maxFiles?: number;\r\n    maxTotalSize?: number;\r\n\r\n    showDropArea?: boolean;\r\n    dropIcon?: React.ReactNode;\r\n    dropTitle?: React.ReactNode;\r\n    dropDescription?: React.ReactNode;\r\n    custom?: boolean;\r\n\r\n    /**\r\n     * Kept for compatibility; we now always submit File|string.\r\n     * (Raw FileItem[] is available in ChangeDetail.meta.items)\r\n     */\r\n    asRaw?: boolean;\r\n\r\n    renderDropArea?: (ctx: {\r\n        openPicker: () => void;\r\n        isDragging: boolean;\r\n    }) => React.ReactNode;\r\n\r\n    renderFileItem?: (ctx: {\r\n        item: FileItem;\r\n        index: number;\r\n        selected: boolean;\r\n        toggleSelected: () => void;\r\n        remove: () => void;\r\n    }) => React.ReactNode;\r\n\r\n    showCheckboxes?: boolean;\r\n    onFilesAdded?: (\r\n        added: FileItem[],\r\n        detail: ChangeDetail<{ from: \"input\" | \"drop\" | \"custom-loader\" }>,\r\n    ) => void;\r\n\r\n    customLoader?: CustomFileLoader;\r\n    mergeMode?: \"append\" | \"replace\";\r\n\r\n    formatFileName?: (item: FileItem) => React.ReactNode;\r\n    formatFileSize?: (size?: number) => React.ReactNode;\r\n    placeholder?: string;\r\n\r\n    className?: string;\r\n    dropAreaClassName?: string;\r\n    listClassName?: string;\r\n    triggerClassName?: string;\r\n};\r\n\r\ntype FileSingleValueProps = Omit<\r\n    VariantBaseProps<FileValue | null>,\r\n    \"value\"\r\n> & {\r\n    multiple?: false;\r\n    /**\r\n     * Accepts File | string | FileLike-object (url/path/file/name/etc)\r\n     */\r\n    value?: FileLike | null;\r\n};\r\n\r\ntype FileMultiValueProps = Omit<VariantBaseProps<FileValue[]>, \"value\"> & {\r\n    multiple: true;\r\n    /**\r\n     * Accepts (File | string | FileLike-object)[]\r\n     */\r\n    value?: FileLike[] | null;\r\n};\r\n\r\ntype FileDefaultModeProps = {\r\n    mode?: \"default\";\r\n\r\n    leadingIcons?: React.ReactNode[];\r\n    trailingIcons?: React.ReactNode[];\r\n    icon?: React.ReactNode;\r\n\r\n    leadingControl?: React.ReactNode;\r\n    trailingControl?: React.ReactNode;\r\n    leadingControlClassName?: string;\r\n    trailingControlClassName?: string;\r\n    joinControls?: boolean;\r\n    extendBoxToControls?: boolean;\r\n\r\n    // not supported in default mode\r\n    button?: never;\r\n    children?: never;\r\n\r\n    selectedBadge?: never;\r\n    selectedBadgeHiddenWhenZero?: never;\r\n    selectedBadgeVariant?: never;\r\n    selectedBadgeClassName?: never;\r\n    selectedBadgePlacement?: never;\r\n};\r\n\r\ntype FileButtonTrigger =\r\n    | React.ReactNode\r\n    | ((ctx: {\r\n          open: boolean;\r\n          items: FileItem[];\r\n          selectedCount: number;\r\n          disabled: boolean;\r\n      }) => React.ReactNode);\r\n\r\ntype FileButtonModeProps = {\r\n    mode: \"button\";\r\n\r\n    /** Used when mode=\"button\". If provided, this is the trigger. If not, `children` is used. */\r\n    button?: FileButtonTrigger;\r\n    children?: FileButtonTrigger;\r\n\r\n    /** Selected-count badge (mode=\"button\" only) */\r\n    selectedBadge?: boolean;\r\n    selectedBadgeHiddenWhenZero?: boolean;\r\n    selectedBadgeVariant?: BadgeVariant;\r\n    selectedBadgeClassName?: string;\r\n    selectedBadgePlacement?: \"end\" | \"corner\";\r\n\r\n    // icons & controls NOT supported in button mode\r\n    leadingIcons?: never;\r\n    trailingIcons?: never;\r\n    icon?: never;\r\n\r\n    leadingControl?: never;\r\n    trailingControl?: never;\r\n    leadingControlClassName?: never;\r\n    trailingControlClassName?: never;\r\n    joinControls?: never;\r\n    extendBoxToControls?: never;\r\n};\r\n\r\nexport type ShadcnFileVariantProps = FileVariantExtras &\r\n    (FileSingleValueProps | FileMultiValueProps) &\r\n    (FileDefaultModeProps | FileButtonModeProps);\r\n\r\n// ─────────────────────────────────────────────\r\n// Sub-Components\r\n// ─────────────────────────────────────────────\r\n\r\nconst FileThumbnail = ({ item }: { item: FileItem }) => {\r\n    const [preview, setPreview] = React.useState<string | null>(null);\r\n\r\n    React.useEffect(() => {\r\n        const isImage =\r\n            item.type?.startsWith(\"image/\") ||\r\n            item.name.match(/\\.(jpg|jpeg|png|gif|webp)$/i);\r\n        if (!isImage) return;\r\n\r\n        if (item.file) {\r\n            const url = URL.createObjectURL(item.file);\r\n            setPreview(url);\r\n            return () => URL.revokeObjectURL(url);\r\n        }\r\n        if (item.url || item.path) {\r\n            setPreview(item.url || item.path || null);\r\n        }\r\n    }, [item]);\r\n\r\n    return (\r\n        <div className=\"relative flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-sm border bg-muted/50\">\r\n            {preview ? (\r\n                <img\r\n                    src={preview}\r\n                    alt=\"\"\r\n                    className=\"h-full w-full object-cover\"\r\n                />\r\n            ) : (\r\n                <FileIcon className=\"h-4 w-4 text-muted-foreground/50\" />\r\n            )}\r\n        </div>\r\n    );\r\n};\r\n\r\n// ─────────────────────────────────────────────\r\n// Main Component\r\n// ─────────────────────────────────────────────\r\n\r\nexport const ShadcnFileVariant = React.forwardRef<\r\n    HTMLDivElement,\r\n    ShadcnFileVariantProps\r\n>(function ShadcnFileVariant(props, ref) {\r\n    const {\r\n        value,\r\n        onValue,\r\n        disabled,\r\n        readOnly,\r\n        error,\r\n        size = \"md\",\r\n        density = \"comfortable\",\r\n\r\n        multiple = false,\r\n        accept,\r\n        maxFiles,\r\n        maxTotalSize,\r\n\r\n        showDropArea = false,\r\n        dropIcon,\r\n        dropTitle,\r\n        dropDescription,\r\n        renderDropArea,\r\n\r\n        renderFileItem,\r\n        showCheckboxes,\r\n        onFilesAdded,\r\n        customLoader,\r\n        mergeMode = \"append\",\r\n\r\n        formatFileName,\r\n        formatFileSize = formatSizeDefault,\r\n        placeholder = \"Select file...\",\r\n        asRaw: _asRaw,\r\n        className,\r\n        custom,\r\n        dropAreaClassName,\r\n        listClassName,\r\n        triggerClassName,\r\n\r\n        // default-mode only\r\n        leadingIcons,\r\n        trailingIcons,\r\n        icon,\r\n        leadingControl,\r\n        trailingControl,\r\n        leadingControlClassName,\r\n        trailingControlClassName,\r\n        joinControls: joinControlsProp,\r\n        extendBoxToControls: extendBoxToControlsProp,\r\n\r\n        // button-mode only\r\n        mode = \"default\",\r\n        button,\r\n        children,\r\n        selectedBadge = true,\r\n        selectedBadgeHiddenWhenZero = true,\r\n        selectedBadgeVariant = \"secondary\",\r\n        selectedBadgeClassName,\r\n        selectedBadgePlacement = \"corner\",\r\n    } = props as ShadcnFileVariantProps & Record<string, any>;\r\n\r\n    const joinControls =\r\n        mode === \"default\" ? (joinControlsProp ?? true) : false;\r\n    const extendBoxToControls =\r\n        mode === \"default\" ? (extendBoxToControlsProp ?? true) : false;\r\n\r\n    // ─────────────────────────────────────────────\r\n    // State\r\n    // ─────────────────────────────────────────────\r\n\r\n    // UI always runs on FileItem[] internally\r\n    const items = React.useMemo(() => {\r\n        const raw = toArray(value) ?? [];\r\n        return raw.map(normaliseFileLike);\r\n    }, [value]);\r\n\r\n    const isDisabled = Boolean(disabled || readOnly);\r\n\r\n    const [dragOver, setDragOver] = React.useState(false);\r\n    const [selectedIds, setSelectedIds] = React.useState<Set<string>>(\r\n        () => new Set(),\r\n    );\r\n    const [popoverOpen, setPopoverOpen] = React.useState(false);\r\n    const fileInputRef = React.useRef<HTMLInputElement | null>(null);\r\n\r\n    const den = densityTokens(density as Density);\r\n\r\n    // Pre-calculations\r\n    const heightCls = triggerHeight(size as Size);\r\n    const chipHeightCls = chipHeight(size as Size);\r\n    const pickerBtnCls = pickerBtnSize(size as Size);\r\n\r\n    const resolvedLeadingIcons = (\r\n        leadingIcons?.length ? leadingIcons : icon ? [icon] : []\r\n    ) as React.ReactNode[];\r\n    const resolvedTrailingIcons = (\r\n        trailingIcons?.length ? trailingIcons : []\r\n    ) as React.ReactNode[];\r\n    const hasExternalControls = !!leadingControl || !!trailingControl;\r\n\r\n    const COLLAPSE_LIMIT = 2;\r\n\r\n    // ─────────────────────────────────────────────\r\n    // Logic\r\n    // ─────────────────────────────────────────────\r\n\r\n    const emitChange = React.useCallback(\r\n        (nextItems: FileItem[], meta: any) => {\r\n            const nextValues = nextItems.map(fileItemToValue);\r\n            const outValue = multiple ? nextValues : (nextValues[0] ?? null);\r\n\r\n            // raw aligns to the submitted value type; rich UI items are in meta.items\r\n            onValue?.(outValue as any, {\r\n                source: \"variant\",\r\n                raw: outValue as any,\r\n                nativeEvent: undefined,\r\n                meta: { ...meta, items: nextItems },\r\n            });\r\n        },\r\n        [multiple, onValue],\r\n    );\r\n\r\n    const handleAddItems = React.useCallback(\r\n        (incoming: FileItem[], from: \"input\" | \"drop\" | \"custom-loader\") => {\r\n            if (isDisabled) return;\r\n\r\n            let next = multiple ? [...items] : [];\r\n            const added: FileItem[] = [];\r\n\r\n            for (const item of incoming) {\r\n                // ✅ single mode always takes only 1\r\n                if (!multiple && next.length >= 1) break;\r\n\r\n                if (multiple && maxFiles && next.length >= maxFiles) break;\r\n\r\n                const currentTotalSize = next.reduce(\r\n                    (acc, i) => acc + (i.size || 0),\r\n                    0,\r\n                );\r\n                if (\r\n                    maxTotalSize &&\r\n                    currentTotalSize + (item.size || 0) > maxTotalSize\r\n                )\r\n                    break;\r\n\r\n                next.push(item);\r\n                added.push(item);\r\n            }\r\n\r\n            if (added.length > 0) {\r\n                onFilesAdded?.(added, {\r\n                    source: \"variant\",\r\n                    raw: added,\r\n                    nativeEvent: undefined,\r\n                    meta: { from },\r\n                });\r\n                emitChange(next, { action: \"add\", from, added });\r\n            }\r\n        },\r\n        [\r\n            emitChange,\r\n            isDisabled,\r\n            items,\r\n            maxFiles,\r\n            maxTotalSize,\r\n            multiple,\r\n            onFilesAdded,\r\n        ],\r\n    );\r\n\r\n    const handleRemove = React.useCallback(\r\n        (id: string) => {\r\n            const next = items.filter((i) => i.id !== id);\r\n            emitChange(next, { action: \"remove\", id });\r\n            if (selectedIds.has(id)) {\r\n                const nextSel = new Set(selectedIds);\r\n                nextSel.delete(id);\r\n                setSelectedIds(nextSel);\r\n            }\r\n        },\r\n        [emitChange, items, selectedIds],\r\n    );\r\n\r\n    const handleBulkRemove = React.useCallback(() => {\r\n        const next = items.filter((i) => !selectedIds.has(i.id));\r\n        emitChange(next, {\r\n            action: \"bulk-remove\",\r\n            ids: Array.from(selectedIds),\r\n        });\r\n        setSelectedIds(new Set());\r\n    }, [emitChange, items, selectedIds]);\r\n\r\n    const openPicker = React.useCallback(async () => {\r\n        if (isDisabled) return;\r\n\r\n        let resolvedLoader =\r\n            customLoader ?? (custom && getPaletteUtil(\"customLoader\"));\r\n\r\n        if (resolvedLoader) {\r\n            try {\r\n                const result = await resolvedLoader({\r\n                    multiple,\r\n                    current: items,\r\n                    allowedTypes: toArray(accept),\r\n                });\r\n                if (!result) return;\r\n\r\n                let normalized = toArray(result).map(normaliseFileLike);\r\n\r\n                // ✅ single mode always takes only 1\r\n                if (!multiple) normalized = normalized.slice(0, 1);\r\n\r\n                if (mergeMode === \"replace\" || !multiple) {\r\n                    emitChange(normalized, {\r\n                        action: \"set\",\r\n                        from: \"custom-loader\",\r\n                    });\r\n                } else {\r\n                    handleAddItems(normalized, \"custom-loader\");\r\n                }\r\n            } catch (err) {\r\n                console.error(\"Custom loader failed\", err);\r\n            }\r\n            return;\r\n        }\r\n\r\n        fileInputRef.current?.click();\r\n    }, [\r\n        accept,\r\n        custom,\r\n        customLoader,\r\n        emitChange,\r\n        handleAddItems,\r\n        isDisabled,\r\n        items,\r\n        mergeMode,\r\n        multiple,\r\n    ]);\r\n\r\n    const onDragOver = React.useCallback(\r\n        (e: React.DragEvent) => {\r\n            e.preventDefault();\r\n            if (!isDisabled) setDragOver(true);\r\n        },\r\n        [isDisabled],\r\n    );\r\n\r\n    const onDrop = React.useCallback(\r\n        (e: React.DragEvent) => {\r\n            e.preventDefault();\r\n            setDragOver(false);\r\n            if (isDisabled || !e.dataTransfer.files?.length) return;\r\n            const files = normaliseFromFiles(e.dataTransfer.files);\r\n            handleAddItems(files, \"drop\");\r\n        },\r\n        [handleAddItems, isDisabled],\r\n    );\r\n\r\n    const onNativeChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n        if (e.target.files?.length) {\r\n            handleAddItems(normaliseFromFiles(e.target.files), \"input\");\r\n        }\r\n        e.target.value = \"\";\r\n    };\r\n\r\n    // ─────────────────────────────────────────────\r\n    // UI Pieces: Interactive File Chip\r\n    // ─────────────────────────────────────────────\r\n\r\n    const FileChip = React.useCallback(\r\n        ({\r\n            item,\r\n            condensed = false,\r\n        }: {\r\n            item: FileItem;\r\n            condensed?: boolean;\r\n        }) => {\r\n            const name = formatFileName ? formatFileName(item) : item.name;\r\n            const [preview, setPreview] = React.useState<string | null>(null);\r\n            const [isOpen, setIsOpen] = React.useState(false);\r\n\r\n            React.useEffect(() => {\r\n                const isImage =\r\n                    item.type?.startsWith(\"image/\") ||\r\n                    item.name.match(/\\.(jpg|jpeg|png|gif|webp)$/i);\r\n                if (!isImage) {\r\n                    setPreview(null);\r\n                    return;\r\n                }\r\n\r\n                if (item.file) {\r\n                    const url = URL.createObjectURL(item.file);\r\n                    setPreview(url);\r\n                    return () => URL.revokeObjectURL(url);\r\n                }\r\n                if (item.url || item.path) {\r\n                    setPreview(item.url || item.path || null);\r\n                }\r\n            }, [item]);\r\n\r\n            return (\r\n                <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n                    <PopoverTrigger asChild>\r\n                        <div\r\n                            role=\"button\"\r\n                            tabIndex={0}\r\n                            className={cn(\r\n                                \"flex items-center overflow-hidden rounded-sm border bg-muted/60 text-xs transition-colors hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none cursor-pointer\",\r\n                                chipHeightCls,\r\n                                den.chipPad,\r\n                                den.chipGap,\r\n                                condensed ? \"max-w-30\" : \"max-w-50\",\r\n                            )}\r\n                            onPointerDown={(e) => e.stopPropagation()}\r\n                            onClick={(e) => {\r\n                                e.stopPropagation();\r\n                                setIsOpen(true);\r\n                            }}\r\n                            onKeyDown={(e) => {\r\n                                if (e.key === \"Enter\" || e.key === \" \") {\r\n                                    e.stopPropagation();\r\n                                    setIsOpen(true);\r\n                                }\r\n                            }}\r\n                        >\r\n                            <FileIcon className=\"h-3 w-3 text-muted-foreground shrink-0\" />\r\n                            <span className=\"truncate font-medium\">{name}</span>\r\n\r\n                            <button\r\n                                type=\"button\"\r\n                                onPointerDown={(e) => e.stopPropagation()}\r\n                                onClick={(e) => {\r\n                                    e.stopPropagation();\r\n                                    handleRemove(item.id);\r\n                                }}\r\n                                className=\"ml-auto flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-muted-foreground/70 hover:bg-destructive/20 hover:text-destructive focus:outline-none\"\r\n                                aria-label=\"Remove file\"\r\n                            >\r\n                                <X className=\"h-3 w-3\" />\r\n                            </button>\r\n                        </div>\r\n                    </PopoverTrigger>\r\n\r\n                    <PopoverContent\r\n                        className=\"w-64 p-0\"\r\n                        align=\"start\"\r\n                        side=\"bottom\"\r\n                    >\r\n                        <div className=\"relative aspect-video w-full flex items-center justify-center bg-muted/30 border-b\">\r\n                            {preview ? (\r\n                                <img\r\n                                    src={preview}\r\n                                    alt={item.name}\r\n                                    className=\"h-full w-full object-contain\"\r\n                                />\r\n                            ) : (\r\n                                <div className=\"flex flex-col items-center gap-2 text-muted-foreground/50\">\r\n                                    <FileIcon className=\"h-10 w-10\" />\r\n                                    <span className=\"text-[10px] uppercase\">\r\n                                        No Preview\r\n                                    </span>\r\n                                </div>\r\n                            )}\r\n                        </div>\r\n\r\n                        <div className=\"p-3\">\r\n                            <div\r\n                                className=\"font-medium text-sm truncate\"\r\n                                title={item.name}\r\n                            >\r\n                                {name}\r\n                            </div>\r\n                            <div className=\"mt-1 flex items-center justify-between text-xs text-muted-foreground\">\r\n                                <span>{formatFileSize(item.size)}</span>\r\n                                {item.type && (\r\n                                    <span className=\"uppercase opacity-70\">\r\n                                        {item.type.split(\"/\").pop()}\r\n                                    </span>\r\n                                )}\r\n                            </div>\r\n                        </div>\r\n                    </PopoverContent>\r\n                </Popover>\r\n            );\r\n        },\r\n        [\r\n            chipHeightCls,\r\n            den.chipGap,\r\n            den.chipPad,\r\n            formatFileName,\r\n            formatFileSize,\r\n            handleRemove,\r\n        ],\r\n    );\r\n\r\n    // ─────────────────────────────────────────────\r\n    // Button-mode trigger (with badge)\r\n    // ─────────────────────────────────────────────\r\n\r\n    const selectedCount = items.length;\r\n\r\n    const resolveButtonTriggerElement =\r\n        React.useCallback((): React.ReactElement => {\r\n            const ctx = {\r\n                open: popoverOpen,\r\n                items,\r\n                selectedCount,\r\n                disabled: isDisabled,\r\n            };\r\n\r\n            const rawNode =\r\n                typeof button === \"function\"\r\n                    ? button(ctx)\r\n                    : (button ??\r\n                      (typeof children === \"function\"\r\n                          ? children(ctx)\r\n                          : children));\r\n\r\n            const shouldShowBadge =\r\n                Boolean(selectedBadge) &&\r\n                (!selectedBadgeHiddenWhenZero || selectedCount > 0);\r\n\r\n            const badgeEl = shouldShowBadge ? (\r\n                <Badge\r\n                    variant={selectedBadgeVariant}\r\n                    className={cn(\r\n                        \"text-[10px] h-5 px-1.5 leading-none\",\r\n                        selectedBadgePlacement === \"corner\" &&\r\n                            \"absolute -top-2 -right-2\",\r\n                        selectedBadgeClassName,\r\n                    )}\r\n                >\r\n                    {selectedCount}\r\n                </Badge>\r\n            ) : null;\r\n\r\n            const injectBadgeIntoElement = (el: React.ReactElement<any>) => {\r\n                if (!badgeEl) return el;\r\n\r\n                const existingClass = (el.props as any).className as\r\n                    | string\r\n                    | undefined;\r\n                const nextClass = cn(\r\n                    existingClass,\r\n                    selectedBadgePlacement === \"corner\" && \"relative\",\r\n                );\r\n\r\n                const child = (el.props as any).children;\r\n\r\n                if (selectedBadgePlacement === \"end\") {\r\n                    return React.cloneElement(el, {\r\n                        className: nextClass,\r\n                        children: (\r\n                            <span className=\"inline-flex items-center gap-2\">\r\n                                <span className=\"min-w-0\">{child}</span>\r\n                                {badgeEl}\r\n                            </span>\r\n                        ),\r\n                    } as any);\r\n                }\r\n\r\n                return React.cloneElement(el, {\r\n                    className: nextClass,\r\n                    children: (\r\n                        <>\r\n                            {child}\r\n                            {badgeEl}\r\n                        </>\r\n                    ),\r\n                } as any);\r\n            };\r\n\r\n            const withDnD = (el: React.ReactElement<any>) =>\r\n                React.cloneElement(el, {\r\n                    onDragOver: mergeHandlers(\r\n                        (el.props as any).onDragOver,\r\n                        onDragOver,\r\n                    ),\r\n                    onDragLeave: mergeHandlers(\r\n                        (el.props as any).onDragLeave,\r\n                        () => setDragOver(false),\r\n                    ),\r\n                    onDrop: mergeHandlers((el.props as any).onDrop, onDrop),\r\n                } as any);\r\n\r\n            if (React.isValidElement(rawNode)) {\r\n                return withDnD(injectBadgeIntoElement(rawNode));\r\n            }\r\n\r\n            const fallback = (\r\n                <button\r\n                    type=\"button\"\r\n                    disabled={isDisabled}\r\n                    className={cn(\r\n                        triggerClassName,\r\n                        selectedBadgePlacement === \"corner\" && \"relative\",\r\n                    )}\r\n                    onDragOver={onDragOver}\r\n                    onDragLeave={() => setDragOver(false)}\r\n                    onDrop={onDrop}\r\n                >\r\n                    {rawNode ?? <span>{placeholder}</span>}\r\n                    {badgeEl}\r\n                </button>\r\n            );\r\n\r\n            if (badgeEl && selectedBadgePlacement === \"end\") {\r\n                return (\r\n                    <button\r\n                        type=\"button\"\r\n                        disabled={isDisabled}\r\n                        className={cn(triggerClassName)}\r\n                        onDragOver={onDragOver}\r\n                        onDragLeave={() => setDragOver(false)}\r\n                        onDrop={onDrop}\r\n                    >\r\n                        <span className=\"inline-flex items-center gap-2\">\r\n                            <span className=\"min-w-0\">\r\n                                {rawNode ?? <span>{placeholder}</span>}\r\n                            </span>\r\n                            {badgeEl}\r\n                        </span>\r\n                    </button>\r\n                );\r\n            }\r\n\r\n            return fallback;\r\n        }, [\r\n            button,\r\n            children,\r\n            isDisabled,\r\n            items,\r\n            onDragOver,\r\n            onDrop,\r\n            placeholder,\r\n            popoverOpen,\r\n            selectedBadge,\r\n            selectedBadgeClassName,\r\n            selectedBadgeHiddenWhenZero,\r\n            selectedBadgePlacement,\r\n            selectedBadgeVariant,\r\n            selectedCount,\r\n            triggerClassName,\r\n        ]);\r\n\r\n    // ─────────────────────────────────────────────\r\n    // Trigger Region\r\n    // ─────────────────────────────────────────────\r\n\r\n    const TriggerRegion = React.useMemo(() => {\r\n        if (showDropArea) {\r\n            if (renderDropArea)\r\n                return renderDropArea({ openPicker, isDragging: dragOver });\r\n\r\n            return (\r\n                <div\r\n                    onClick={openPicker}\r\n                    onDragOver={onDragOver}\r\n                    onDragLeave={() => setDragOver(false)}\r\n                    onDrop={onDrop}\r\n                    className={cn(\r\n                        \"group relative flex cursor-pointer flex-col items-center justify-center rounded-lg border-2 border-dashed text-center transition-all duration-200\",\r\n                        den.dropPad,\r\n                        den.dropGap,\r\n                        dragOver\r\n                            ? \"border-primary bg-primary/5 ring-4 ring-primary/10\"\r\n                            : \"border-muted-foreground/25 hover:bg-muted/30 hover:border-muted-foreground/50\",\r\n                        isDisabled && \"cursor-not-allowed opacity-50\",\r\n                        error && \"border-destructive/50 bg-destructive/5\",\r\n                        dropAreaClassName,\r\n                    )}\r\n                >\r\n                    <div className=\"rounded-full bg-surfaces-input p-3 shadow-sm\">\r\n                        {dropIcon ?? (\r\n                            <UploadCloud className=\"h-5 w-5 text-muted-foreground\" />\r\n                        )}\r\n                    </div>\r\n                    <div className=\"space-y-1\">\r\n                        <p className=\"text-sm font-medium text-foreground\">\r\n                            {dropTitle ?? \"Click or drag to select\"}\r\n                        </p>\r\n                        <p className=\"text-xs text-muted-foreground\">\r\n                            {dropDescription ??\r\n                                (multiple ? \"Select files\" : \"Select a file\")}\r\n                        </p>\r\n                    </div>\r\n                </div>\r\n            );\r\n        }\r\n\r\n        const hasItems = items.length > 0;\r\n        const visibleItems = items.slice(0, COLLAPSE_LIMIT);\r\n        const hiddenCount = items.length - COLLAPSE_LIMIT;\r\n        const isOverflowing = hiddenCount > 0;\r\n        const anySelected = selectedIds.size > 0 && showCheckboxes && multiple;\r\n\r\n        const TriggerEl =\r\n            mode === \"button\" ? (\r\n                resolveButtonTriggerElement()\r\n            ) : (\r\n                <div\r\n                    className={cn(\r\n                        \"relative flex w-full cursor-pointer items-center py-0 transition-all\",\r\n                        heightCls,\r\n                        den.triggerPadX,\r\n                        den.triggerGap,\r\n                        (!joinControls || !hasExternalControls) &&\r\n                            \"rounded-md border border-input bg-surfaces-input ring-offset-background hover:bg-accent/5 focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\r\n                        dragOver &&\r\n                            (!joinControls || !hasExternalControls) &&\r\n                            \"border-primary ring-2 ring-primary/20\",\r\n                        isDisabled && \"cursor-not-allowed opacity-50\",\r\n                        error &&\r\n                            (!joinControls || !hasExternalControls) &&\r\n                            \"border-destructive text-destructive\",\r\n                        triggerClassName,\r\n                    )}\r\n                    onDragOver={onDragOver}\r\n                    onDragLeave={() => setDragOver(false)}\r\n                    onDrop={onDrop}\r\n                >\r\n                    {resolvedLeadingIcons.map((ico, i) => (\r\n                        <span\r\n                            key={i}\r\n                            className=\"flex shrink-0 items-center justify-center text-muted-foreground\"\r\n                        >\r\n                            {ico}\r\n                        </span>\r\n                    ))}\r\n\r\n                    <div\r\n                        className={cn(\r\n                            \"flex flex-1 items-center overflow-hidden\",\r\n                            den.triggerGap,\r\n                        )}\r\n                    >\r\n                        {hasItems ? (\r\n                            <>\r\n                                {visibleItems.map((item) => (\r\n                                    <FileChip\r\n                                        key={item.id}\r\n                                        item={item}\r\n                                        condensed={multiple}\r\n                                    />\r\n                                ))}\r\n                                {isOverflowing && (\r\n                                    <span className=\"flex h-5 items-center justify-center rounded-sm bg-muted px-1.5 text-xs font-medium text-muted-foreground\">\r\n                                        +{hiddenCount}\r\n                                    </span>\r\n                                )}\r\n                            </>\r\n                        ) : (\r\n                            <span className=\"truncate text-muted-foreground\">\r\n                                {placeholder}\r\n                            </span>\r\n                        )}\r\n                    </div>\r\n\r\n                    {resolvedTrailingIcons.map((ico, i) => (\r\n                        <span\r\n                            key={i}\r\n                            className=\"flex shrink-0 items-center justify-center text-muted-foreground\"\r\n                        >\r\n                            {ico}\r\n                        </span>\r\n                    ))}\r\n\r\n                    <Button\r\n                        type=\"button\"\r\n                        variant=\"ghost\"\r\n                        size=\"icon\"\r\n                        className={cn(\r\n                            \"shrink-0 text-muted-foreground hover:text-foreground\",\r\n                            pickerBtnCls,\r\n                        )}\r\n                        onPointerDown={(e) => e.stopPropagation()}\r\n                        onClick={(e) => {\r\n                            e.stopPropagation();\r\n                            openPicker();\r\n                        }}\r\n                    >\r\n                        <FolderUp className=\"h-4 w-4\" />\r\n                    </Button>\r\n\r\n                    <ChevronDown\r\n                        className={cn(\r\n                            \"h-4 w-4 shrink-0 text-muted-foreground opacity-50 transition-transform duration-200\",\r\n                            popoverOpen && \"rotate-180\",\r\n                        )}\r\n                    />\r\n                </div>\r\n            );\r\n\r\n        return (\r\n            <Popover open={popoverOpen} onOpenChange={setPopoverOpen}>\r\n                <PopoverTrigger asChild>{TriggerEl}</PopoverTrigger>\r\n\r\n                <PopoverContent\r\n                    className=\"w-(--radix-popover-trigger-width) p-0\"\r\n                    align=\"start\"\r\n                >\r\n                    <div className=\"flex flex-col\">\r\n                        <div\r\n                            className={cn(\r\n                                \"flex items-center justify-between border-b text-xs font-medium text-muted-foreground\",\r\n                                den.headerPad,\r\n                            )}\r\n                        >\r\n                            <span>\r\n                                {anySelected\r\n                                    ? `${selectedIds.size} selected`\r\n                                    : `${items.length} files total`}\r\n                            </span>\r\n\r\n                            {anySelected ? (\r\n                                <button\r\n                                    type=\"button\"\r\n                                    className=\"text-destructive hover:underline\"\r\n                                    onClick={handleBulkRemove}\r\n                                >\r\n                                    Remove selected\r\n                                </button>\r\n                            ) : items.length > 0 ? (\r\n                                <button\r\n                                    type=\"button\"\r\n                                    className=\"text-muted-foreground hover:text-foreground\"\r\n                                    onClick={() =>\r\n                                        emitChange([], { action: \"clear\" })\r\n                                    }\r\n                                >\r\n                                    Clear all\r\n                                </button>\r\n                            ) : null}\r\n                        </div>\r\n\r\n                        <ScrollArea\r\n                            className={cn(\r\n                                \"h-auto max-h-75 w-full\",\r\n                                den.listPad,\r\n                            )}\r\n                        >\r\n                            <div className=\"flex flex-col gap-1\">\r\n                                {items.map((item) => {\r\n                                    const selected = selectedIds.has(item.id);\r\n                                    const toggle = () => {\r\n                                        const next = new Set(selectedIds);\r\n                                        if (next.has(item.id))\r\n                                            next.delete(item.id);\r\n                                        else next.add(item.id);\r\n                                        setSelectedIds(next);\r\n                                    };\r\n\r\n                                    return (\r\n                                        <div\r\n                                            key={item.id}\r\n                                            className={cn(\r\n                                                \"group flex items-center gap-3 rounded-md text-sm transition-colors hover:bg-muted/50\",\r\n                                                den.rowPad,\r\n                                            )}\r\n                                        >\r\n                                            {showCheckboxes && multiple && (\r\n                                                <Checkbox\r\n                                                    checked={selected}\r\n                                                    onCheckedChange={toggle}\r\n                                                    className=\"h-4 w-4 shrink-0\"\r\n                                                />\r\n                                            )}\r\n\r\n                                            <FileThumbnail item={item} />\r\n\r\n                                            <div className=\"min-w-0 flex-1\">\r\n                                                <div className=\"truncate font-medium\">\r\n                                                    {formatFileName?.(item) ??\r\n                                                        item.name}\r\n                                                </div>\r\n                                                <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\r\n                                                    <span>\r\n                                                        {formatFileSize(\r\n                                                            item.size,\r\n                                                        )}\r\n                                                    </span>\r\n                                                    {item.status ===\r\n                                                        \"failed\" && (\r\n                                                        <span className=\"text-destructive\">\r\n                                                            Failed\r\n                                                        </span>\r\n                                                    )}\r\n                                                </div>\r\n                                            </div>\r\n\r\n                                            <Button\r\n                                                variant=\"ghost\"\r\n                                                size=\"icon\"\r\n                                                className=\"h-7 w-7 opacity-0 group-hover:opacity-100\"\r\n                                                onClick={(e) => {\r\n                                                    e.stopPropagation();\r\n                                                    handleRemove(item.id);\r\n                                                }}\r\n                                            >\r\n                                                <Trash2 className=\"h-3.5 w-3.5 text-muted-foreground\" />\r\n                                            </Button>\r\n                                        </div>\r\n                                    );\r\n                                })}\r\n\r\n                                {items.length === 0 && (\r\n                                    <div className=\"py-4 text-center text-xs text-muted-foreground\">\r\n                                        No files selected\r\n                                    </div>\r\n                                )}\r\n                            </div>\r\n                        </ScrollArea>\r\n\r\n                        <div className={cn(\"border-t\", den.footerPad)}>\r\n                            <Button\r\n                                variant=\"secondary\"\r\n                                size=\"sm\"\r\n                                className=\"w-full justify-start text-xs\"\r\n                                onClick={() => {\r\n                                    setPopoverOpen(false);\r\n                                    openPicker();\r\n                                }}\r\n                            >\r\n                                <Plus className=\"mr-2 h-3 w-3\" />\r\n                                {multiple\r\n                                    ? \"Add files...\"\r\n                                    : items.length\r\n                                      ? \"Replace file\"\r\n                                      : \"Add file\"}\r\n                            </Button>\r\n                        </div>\r\n                    </div>\r\n                </PopoverContent>\r\n            </Popover>\r\n        );\r\n    }, [\r\n        COLLAPSE_LIMIT,\r\n        FileChip,\r\n        den,\r\n        dragOver,\r\n        dropAreaClassName,\r\n        dropDescription,\r\n        dropIcon,\r\n        dropTitle,\r\n        emitChange,\r\n        error,\r\n        handleBulkRemove,\r\n        handleRemove,\r\n        heightCls,\r\n        isDisabled,\r\n        items,\r\n        joinControls,\r\n        mode,\r\n        multiple,\r\n        onDragOver,\r\n        onDrop,\r\n        openPicker,\r\n        pickerBtnCls,\r\n        placeholder,\r\n        popoverOpen,\r\n        renderDropArea,\r\n        resolveButtonTriggerElement,\r\n        resolvedLeadingIcons,\r\n        resolvedTrailingIcons,\r\n        selectedIds,\r\n        showCheckboxes,\r\n        showDropArea,\r\n        hasExternalControls,\r\n        triggerClassName,\r\n        formatFileName,\r\n        formatFileSize,\r\n        setPopoverOpen,\r\n    ]);\r\n\r\n    // ─────────────────────────────────────────────\r\n    // External List (Drop Zone Mode Only)\r\n    // ─────────────────────────────────────────────\r\n\r\n    const showExternalList = multiple && showDropArea && items.length > 0;\r\n    const anySelectedExternal =\r\n        selectedIds.size > 0 && showCheckboxes && multiple;\r\n\r\n    const ExternalFileList = showExternalList ? (\r\n        <>\r\n            {(anySelectedExternal || items.length > 0) && (\r\n                <div className=\"mt-2 flex items-center justify-between px-1 text-xs text-muted-foreground\">\r\n                    <span>{items.length} files</span>\r\n                    <div className=\"flex gap-2\">\r\n                        {anySelectedExternal && (\r\n                            <button\r\n                                type=\"button\"\r\n                                onClick={handleBulkRemove}\r\n                                className=\"text-destructive hover:underline\"\r\n                            >\r\n                                Remove selected\r\n                            </button>\r\n                        )}\r\n                        <button\r\n                            type=\"button\"\r\n                            onClick={() => emitChange([], { action: \"clear\" })}\r\n                            className=\"hover:text-foreground\"\r\n                        >\r\n                            Clear all\r\n                        </button>\r\n                    </div>\r\n                </div>\r\n            )}\r\n\r\n            <ScrollArea className={cn(\"mt-1 w-full\", listClassName)}>\r\n                <div className=\"flex flex-col gap-2\">\r\n                    {items.map((item, index) => {\r\n                        const selected = selectedIds.has(item.id);\r\n                        const toggle = () => {\r\n                            const next = new Set(selectedIds);\r\n                            if (next.has(item.id)) next.delete(item.id);\r\n                            else next.add(item.id);\r\n                            setSelectedIds(next);\r\n                        };\r\n\r\n                        if (renderFileItem) {\r\n                            return renderFileItem({\r\n                                item,\r\n                                index,\r\n                                selected,\r\n                                toggleSelected: toggle,\r\n                                remove: () => handleRemove(item.id),\r\n                            });\r\n                        }\r\n\r\n                        return (\r\n                            <div\r\n                                key={item.id}\r\n                                className={cn(\r\n                                    \"group relative flex items-center gap-3 rounded-lg border bg-card pr-3 transition-all hover:bg-muted/30\",\r\n                                    density === \"compact\"\r\n                                        ? \"p-2\"\r\n                                        : density === \"loose\"\r\n                                          ? \"p-3\"\r\n                                          : \"p-2\",\r\n                                )}\r\n                            >\r\n                                {showCheckboxes && (\r\n                                    <Checkbox\r\n                                        checked={selected}\r\n                                        onCheckedChange={toggle}\r\n                                        className=\"ml-1\"\r\n                                    />\r\n                                )}\r\n                                <FileThumbnail item={item} />\r\n                                <div className=\"min-w-0 flex-1 space-y-1\">\r\n                                    <div className=\"flex items-center justify-between gap-2\">\r\n                                        <span className=\"truncate text-sm font-medium text-foreground\">\r\n                                            {formatFileName?.(item) ??\r\n                                                item.name}\r\n                                        </span>\r\n                                    </div>\r\n                                    <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\r\n                                        <span>{formatFileSize(item.size)}</span>\r\n                                        {item.status === \"loading\" && (\r\n                                            <span className=\"flex items-center gap-1 text-primary\">\r\n                                                <Loader2 className=\"h-3 w-3 animate-spin\" />\r\n                                            </span>\r\n                                        )}\r\n                                        {item.status === \"failed\" && (\r\n                                            <span className=\"flex items-center gap-1 text-destructive\">\r\n                                                <AlertCircle className=\"h-3 w-3\" />\r\n                                            </span>\r\n                                        )}\r\n                                        {item.status === \"done\" && (\r\n                                            <CheckCircle2 className=\"h-3 w-3 text-emerald-500\" />\r\n                                        )}\r\n                                    </div>\r\n                                </div>\r\n                                <button\r\n                                    type=\"button\"\r\n                                    onClick={() => handleRemove(item.id)}\r\n                                    className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-muted-foreground/70 opacity-0 transition-all hover:bg-destructive/10 hover:text-destructive group-hover:opacity-100\"\r\n                                >\r\n                                    <Trash2 className=\"h-4 w-4\" />\r\n                                </button>\r\n                            </div>\r\n                        );\r\n                    })}\r\n                </div>\r\n            </ScrollArea>\r\n        </>\r\n    ) : null;\r\n\r\n    // ─────────────────────────────────────────────\r\n    // Render\r\n    // ─────────────────────────────────────────────\r\n\r\n    const joinedBox =\r\n        mode === \"default\" &&\r\n        joinControls &&\r\n        extendBoxToControls &&\r\n        !showDropArea;\r\n\r\n    return (\r\n        <div\r\n            ref={ref}\r\n            className={cn(\"w-full\", className)}\r\n            aria-disabled={isDisabled}\r\n            aria-invalid={!!error}\r\n        >\r\n            <div\r\n                className={cn(\r\n                    \"flex w-full\",\r\n                    joinedBox\r\n                        ? \"items-stretch rounded-md border border-input bg-surfaces-input shadow-xs ring-offset-background focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\"\r\n                        : \"items-start\",\r\n                    joinedBox &&\r\n                        dragOver &&\r\n                        \"border-primary ring-2 ring-primary/20\",\r\n                    joinedBox && error && \"border-destructive\",\r\n                )}\r\n            >\r\n                {mode === \"default\" && leadingControl && (\r\n                    <div\r\n                        className={cn(\r\n                            \"flex items-center\",\r\n                            joinControls &&\r\n                                !showDropArea &&\r\n                                \"border-r bg-muted/50 px-3\",\r\n                            leadingControlClassName,\r\n                        )}\r\n                    >\r\n                        {leadingControl}\r\n                    </div>\r\n                )}\r\n\r\n                <div className=\"flex-1 min-w-0\">{TriggerRegion}</div>\r\n\r\n                {mode === \"default\" && trailingControl && (\r\n                    <div\r\n                        className={cn(\r\n                            \"flex items-center\",\r\n                            joinControls &&\r\n                                !showDropArea &&\r\n                                \"border-l bg-muted/50 px-3\",\r\n                            trailingControlClassName,\r\n                        )}\r\n                    >\r\n                        {trailingControl}\r\n                    </div>\r\n                )}\r\n            </div>\r\n\r\n            {ExternalFileList}\r\n\r\n            <input\r\n                ref={fileInputRef}\r\n                type=\"file\"\r\n                className=\"hidden\"\r\n                multiple={multiple}\r\n                accept={Array.isArray(accept) ? accept.join(\",\") : accept}\r\n                onChange={onNativeChange}\r\n            />\r\n        </div>\r\n    );\r\n});\r\n\r\nShadcnFileVariant.displayName = \"ShadcnFileVariant\";\r\nexport default ShadcnFileVariant;\r\n","import ShadcnFileVariant from \"@/presets/shadcn-variants/file\";\r\nimport { VariantModule } from \"@/schema/variant\";\r\n\r\n\r\n\r\nexport const fileManagerModule: VariantModule<'file'> = {\r\n   Variant: ShadcnFileVariant as any,\r\n   variant: 'file'\r\n}","\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst toggleVariants = cva(\n  \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-transparent\",\n        outline:\n          \"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n      },\n      size: {\n        default: \"h-9 px-2 min-w-9\",\n        sm: \"h-8 px-1.5 min-w-8\",\n        lg: \"h-10 px-2.5 min-w-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nfunction Toggle({\n  className,\n  variant,\n  size,\n  ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n  VariantProps<typeof toggleVariants>) {\n  return (\n    <TogglePrimitive.Root\n      data-slot=\"toggle\"\n      className={cn(toggleVariants({ variant, size, className }))}\n      {...props}\n    />\n  )\n}\n\nexport { Toggle, toggleVariants }\n","import * as React from \"react\"\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { toggleVariants } from \"@/presets/ui/toggle\"\n\nconst ToggleGroupContext = React.createContext<\n  VariantProps<typeof toggleVariants> & {\n    spacing?: number\n  }\n>({\n  size: \"default\",\n  variant: \"default\",\n  spacing: 0,\n})\n\nfunction ToggleGroup({\n  className,\n  variant,\n  size,\n  spacing = 0,\n  children,\n  ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n  VariantProps<typeof toggleVariants> & {\n    spacing?: number\n  }) {\n  return (\n    <ToggleGroupPrimitive.Root\n      data-slot=\"toggle-group\"\n      data-variant={variant}\n      data-size={size}\n      data-spacing={spacing}\n      style={{ \"--gap\": spacing } as React.CSSProperties}\n      className={cn(\n        \"group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs\",\n        className\n      )}\n      {...props}\n    >\n      <ToggleGroupContext.Provider value={{ variant, size, spacing }}>\n        {children}\n      </ToggleGroupContext.Provider>\n    </ToggleGroupPrimitive.Root>\n  )\n}\n\nfunction ToggleGroupItem({\n  className,\n  children,\n  variant,\n  size,\n  ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n  VariantProps<typeof toggleVariants>) {\n  const context = React.useContext(ToggleGroupContext)\n\n  return (\n    <ToggleGroupPrimitive.Item\n      data-slot=\"toggle-group-item\"\n      data-variant={context.variant || variant}\n      data-size={context.size || size}\n      data-spacing={context.spacing}\n      className={cn(\n        toggleVariants({\n          variant: context.variant || variant,\n          size: context.size || size,\n        }),\n        \"w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10\",\n        \"data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l\",\n        className\n      )}\n      {...props}\n    >\n      {children}\n    </ToggleGroupPrimitive.Item>\n  )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n","import * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction TooltipProvider({\n  delayDuration = 0,\n  ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n  return (\n    <TooltipPrimitive.Provider\n      data-slot=\"tooltip-provider\"\n      delayDuration={delayDuration}\n      {...props}\n    />\n  )\n}\n\nfunction Tooltip({\n  ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n  return (\n    <TooltipProvider>\n      <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n    </TooltipProvider>\n  )\n}\n\nfunction TooltipTrigger({\n  ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n  return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n  className,\n  sideOffset = 0,\n  children,\n  ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n  return (\n    <TooltipPrimitive.Portal>\n      <TooltipPrimitive.Content\n        data-slot=\"tooltip-content\"\n        sideOffset={sideOffset}\n        className={cn(\n          \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n        <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n      </TooltipPrimitive.Content>\n    </TooltipPrimitive.Portal>\n  )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","// src/presets/shadcn-variants/toggle.tsx\n\nimport * as React from \"react\";\nimport type { VariantBaseProps, ChangeDetail } from \"@/variants/shared\";\nimport { cn } from \"@/lib/utils\";\nimport { ToggleGroup, ToggleGroupItem } from \"@/presets/ui/toggle-group\";\nimport {\n    Tooltip,\n    TooltipContent,\n    TooltipProvider,\n    TooltipTrigger,\n} from \"@/presets/ui/tooltip\";\nimport { Badge } from \"@/presets/ui/badge\";\n\n// ─────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────\n\nexport interface ToggleOption {\n    label: React.ReactNode;\n    value: string;\n    icon?: React.ReactNode;\n    disabled?: boolean;\n    tooltip?: React.ReactNode;\n    meta?: any;\n    tags?: Array<{\n        label: React.ReactNode;\n        icon?: React.ReactNode;\n        className?: string;\n        color?: string;\n        bgColor?: string;\n        onClick?: React.MouseEventHandler<HTMLSpanElement>;\n        raw?: unknown;\n    }>;\n}\n\n/**\n * Allow primitive options as shorthand:\n * - \"free\" → { value: \"free\", label: \"free\" }\n */\nexport type ToggleOptionInput = ToggleOption | string | number | boolean;\n\nexport interface ShadcnToggleVariantProps\n    extends Pick<\n        VariantBaseProps<string | string[]>,\n        | \"value\"\n        | \"onValue\"\n        | \"error\"\n        | \"disabled\"\n        | \"readOnly\"\n        | \"size\"\n        | \"density\"\n    > {\n    /**\n     * Options for the toggle group.\n     *\n     * Can be:\n     * - ToggleOption objects\n     * - Primitive strings/numbers/booleans (shorthand)\n     * - Objects using option* keys (optionValue, optionLabel, etc.)\n     */\n    options: ToggleOptionInput[];\n\n    multiple?: boolean;\n    design?: \"default\" | \"outline\";\n    layout?: \"horizontal\" | \"vertical\" | \"grid\";\n    gridCols?: number;\n    fillWidth?: boolean;\n\n    /**\n     * Property name to read the option value from, when using\n     * custom option objects.\n     *\n     * If omitted, falls back to:\n     *   - obj.value\n     *   - or the primitive itself (for primitive options)\n     */\n    optionValue?: string;\n\n    /**\n     * Property name to read the option label from, when using\n     * custom option objects.\n     *\n     * If omitted, falls back to:\n     *   - obj.label\n     *   - or String(value)\n     */\n    optionLabel?: string;\n\n    /**\n     * Property name to read an icon node from, when using\n     * custom option objects.\n     *\n     * If omitted, falls back to obj.icon.\n     */\n    optionIcon?: string;\n\n    /**\n     * Property name to read disabled flag from, when using\n     * custom option objects.\n     *\n     * If omitted, falls back to obj.disabled.\n     */\n    optionDisabled?: string;\n\n    /**\n     * Property name to read tooltip content from, when using\n     * custom option objects.\n     *\n     * If omitted, falls back to obj.tooltip.\n     */\n    optionTooltip?: string;\n\n    /**\n     * Property name to read meta from, when using custom option objects.\n     *\n     * If omitted, falls back to obj.meta.\n     */\n    optionMeta?: string;\n    optionTags?: string;\n    optionTagLabel?: string;\n    optionTagIcon?: string;\n    optionTagClassName?: string;\n    optionTagColor?: string;\n    optionTagBgColor?: string;\n    optionTagOnClick?: string;\n\n    /**\n     * Optional custom renderer for each option.\n     * Receives the normalized ToggleOption and selected state.\n     */\n    renderOption?: (\n        option: ToggleOption,\n        isSelected: boolean\n    ) => React.ReactNode;\n\n    className?: string;\n\n    /** Base class for all items */\n    itemClassName?: string;\n\n    /** Class applied ONLY to selected items (overrides/merges with default active styles) */\n    activeClassName?: string;\n\n    /**\n     * When true, capitalizes the first letter of the label\n     * (only applied when the label is a string).\n     */\n    autoCap?: boolean;\n\n    /**\n     * Gap between buttons in pixels.\n     *\n     * - Applies to both flex (horizontal/vertical) and grid layouts.\n     * - If omitted, falls back to Tailwind gap classes.\n     */\n    gap?: number;\n}\n\n// Internal normalized shape, tracking original item\ninterface NormalizedToggle<T = ToggleOptionInput> {\n    ui: ToggleOption;\n    raw: T;\n}\n\n// ─────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────\n\nfunction mapSizeToToggleSize(size?: \"sm\" | \"md\" | \"lg\") {\n    switch (size) {\n        case \"sm\":\n            return \"sm\";\n        case \"lg\":\n            return \"lg\";\n        case \"md\":\n        default:\n            return \"default\";\n    }\n}\n\nfunction normalizeValue(\n    val: string | string[] | undefined | null,\n    multiple: boolean\n): string | string[] {\n    if (multiple) {\n        if (Array.isArray(val)) return val;\n        if (typeof val === \"string\") return [val];\n        return [];\n    }\n    // Single mode\n    if (Array.isArray(val)) return val[0] || \"\";\n    return val || \"\";\n}\n\nfunction capitalizeFirst(label: string): string {\n    if (!label) return label;\n    return label.charAt(0).toUpperCase() + label.slice(1);\n}\n\n/**\n * Normalize a ToggleOptionInput into a full ToggleOption,\n * using option* keys when present.\n *\n * autoCap is only applied to string labels for display.\n */\nfunction normalizeOption(\n    input: ToggleOptionInput,\n    {\n        optionValue,\n        optionLabel,\n        optionIcon,\n        optionDisabled,\n        optionTooltip,\n        optionMeta,\n        optionTags,\n        optionTagLabel,\n        optionTagIcon,\n        optionTagClassName,\n        optionTagColor,\n        optionTagBgColor,\n        optionTagOnClick,\n    }: {\n        optionValue?: string;\n        optionLabel?: string;\n        optionIcon?: string;\n        optionDisabled?: string;\n        optionTooltip?: string;\n        optionMeta?: string;\n        optionTags?: string;\n        optionTagLabel?: string;\n        optionTagIcon?: string;\n        optionTagClassName?: string;\n        optionTagColor?: string;\n        optionTagBgColor?: string;\n        optionTagOnClick?: string;\n    },\n    autoCap: boolean\n): NormalizedToggle {\n    const anyInput = input as any;\n\n    // 1) Custom object with option* keys\n    if (\n        optionValue ||\n        optionLabel ||\n        optionIcon ||\n        optionDisabled ||\n        optionTooltip ||\n        optionMeta ||\n        optionTags ||\n        optionTagLabel ||\n        optionTagIcon ||\n        optionTagClassName ||\n        optionTagColor ||\n        optionTagBgColor ||\n        optionTagOnClick\n    ) {\n        const rawValue =\n            optionValue != null\n                ? anyInput[optionValue]\n                : (anyInput.value ?? input);\n        const value = String(rawValue);\n\n        let label: React.ReactNode;\n        if (optionLabel != null) {\n            label = anyInput[optionLabel];\n        } else if (anyInput.label != null) {\n            label = anyInput.label;\n        } else {\n            label = String(rawValue ?? value);\n        }\n\n        if (autoCap && typeof label === \"string\") {\n            label = capitalizeFirst(label);\n        }\n\n        const icon =\n            optionIcon != null\n                ? anyInput[optionIcon]\n                : (anyInput.icon ?? undefined);\n        const disabled =\n            optionDisabled != null\n                ? !!anyInput[optionDisabled]\n                : !!anyInput.disabled;\n        const tooltip =\n            optionTooltip != null\n                ? anyInput[optionTooltip]\n                : (anyInput.tooltip ?? undefined);\n        const meta =\n            optionMeta != null\n                ? anyInput[optionMeta]\n                : (anyInput.meta ?? undefined);\n        const rawTags =\n            optionTags != null ? anyInput[optionTags] : anyInput.tags;\n        const tags = Array.isArray(rawTags)\n            ? rawTags.flatMap((tag: any) => {\n                  const label =\n                      optionTagLabel != null ? tag?.[optionTagLabel] : tag?.label;\n                  if (label === undefined || label === null || label === \"\") {\n                      return [];\n                  }\n                  return [\n                      {\n                          label,\n                          icon:\n                              optionTagIcon != null\n                                  ? tag?.[optionTagIcon]\n                                  : tag?.icon,\n                          className:\n                              optionTagClassName != null\n                                  ? tag?.[optionTagClassName]\n                                  : tag?.className,\n                          color:\n                              optionTagColor != null\n                                  ? tag?.[optionTagColor]\n                                  : tag?.color,\n                          bgColor:\n                              optionTagBgColor != null\n                                  ? tag?.[optionTagBgColor]\n                                  : tag?.bgColor,\n                          onClick:\n                              optionTagOnClick != null\n                                  ? tag?.[optionTagOnClick]\n                                  : tag?.onClick,\n                          raw: tag,\n                      },\n                  ];\n              })\n            : undefined;\n\n        return {\n            ui: {\n                value,\n                label,\n                icon,\n                disabled,\n                tooltip,\n                meta,\n                tags,\n            },\n            raw: input,\n        };\n    }\n\n    // 2) Primitive shorthand\n    if (\n        typeof input === \"string\" ||\n        typeof input === \"number\" ||\n        typeof input === \"boolean\"\n    ) {\n        const value = String(input);\n        let label: React.ReactNode = value;\n        if (autoCap && typeof label === \"string\") {\n            label = capitalizeFirst(label);\n        }\n\n        return {\n            ui: {\n                value,\n                label,\n            },\n            raw: input,\n        };\n    }\n\n    // 3) Already a ToggleOption-like object\n    const baseValue = anyInput.value ?? String(anyInput.label ?? \"\");\n    const value = String(baseValue);\n\n    let label: React.ReactNode =\n        anyInput.label != null ? anyInput.label : String(value);\n    if (autoCap && typeof label === \"string\") {\n        label = capitalizeFirst(label);\n    }\n\n    return {\n        ui: {\n            value,\n            label,\n            icon: anyInput.icon,\n            disabled: !!anyInput.disabled,\n            tooltip: anyInput.tooltip,\n            meta: anyInput.meta,\n            tags: Array.isArray(anyInput.tags) ? anyInput.tags : undefined,\n        },\n        raw: input,\n    };\n}\n\n// ─────────────────────────────────────────────\n// Component\n// ─────────────────────────────────────────────\n\nexport const ShadcnToggleVariant = React.forwardRef<\n    HTMLDivElement,\n    ShadcnToggleVariantProps\n>(function ShadcnToggleVariant(props, ref) {\n    const {\n        value,\n        onValue,\n        disabled,\n        readOnly,\n        error,\n        size = \"md\",\n\n        options = [],\n        multiple = false,\n        design = \"default\",\n        layout = \"horizontal\",\n        gridCols = 2,\n        fillWidth: fullWidth = false,\n\n        optionValue,\n        optionLabel,\n        optionIcon,\n        optionDisabled,\n        optionTooltip,\n        optionMeta,\n        optionTags,\n        optionTagLabel,\n        optionTagIcon,\n        optionTagClassName,\n        optionTagColor,\n        optionTagBgColor,\n        optionTagOnClick,\n\n        renderOption,\n        className,\n        itemClassName,\n        activeClassName,\n        autoCap = false,\n        gap: itemGapPx,\n    } = props;\n\n    const isDisabled = Boolean(disabled || readOnly);\n    const toggleSize = mapSizeToToggleSize(size as any);\n    const currentValue = normalizeValue(value, multiple);\n\n    const normalizedOptions = React.useMemo(\n        () =>\n            options.map((opt) =>\n                normalizeOption(\n                    opt,\n                    {\n                        optionValue,\n                        optionLabel,\n                        optionIcon,\n                        optionDisabled,\n                        optionTooltip,\n                        optionMeta,\n                        optionTags,\n                        optionTagLabel,\n                        optionTagIcon,\n                        optionTagClassName,\n                        optionTagColor,\n                        optionTagBgColor,\n                        optionTagOnClick,\n                    },\n                    autoCap\n                )\n            ),\n        [\n            options,\n            optionValue,\n            optionLabel,\n            optionIcon,\n            optionDisabled,\n            optionTooltip,\n            optionMeta,\n            optionTags,\n            optionTagLabel,\n            optionTagIcon,\n            optionTagClassName,\n            optionTagColor,\n            optionTagBgColor,\n            optionTagOnClick,\n            autoCap,\n        ]\n    );\n\n    // ─────────────────────────────────────────────\n    // Handlers\n    // ─────────────────────────────────────────────\n\n    const handleChange = React.useCallback(\n        (val: string | string[]) => {\n            if (readOnly) return;\n            if (!onValue) return;\n\n            let rawSelection:\n                | ToggleOptionInput\n                | ToggleOptionInput[]\n                | undefined;\n\n            if (Array.isArray(val)) {\n                const selected = normalizedOptions.filter((entry) =>\n                    val.includes(entry.ui.value)\n                );\n                rawSelection = selected.map((entry) => entry.raw);\n            } else {\n                const found = normalizedOptions.find(\n                    (entry) => entry.ui.value === val\n                );\n                rawSelection = found?.raw;\n            }\n\n            const detail: ChangeDetail = {\n                source: \"variant\",\n                raw: rawSelection, // original item(s)\n                selectedOptions: Array.isArray(rawSelection)\n                    ? rawSelection\n                    : rawSelection === undefined\n                      ? []\n                      : [rawSelection],\n                nativeEvent: undefined,\n                meta: { action: \"toggle\" },\n            };\n\n            onValue(val, detail);\n        },\n        [onValue, readOnly, normalizedOptions]\n    );\n\n    // ─────────────────────────────────────────────\n    // Layout Logic\n    // ─────────────────────────────────────────────\n\n    const layoutClasses = cn(\n        layout === \"horizontal\" && \"flex flex-wrap\",\n        layout === \"vertical\" && \"flex flex-col items-stretch\",\n        layout === \"grid\" && \"grid\",\n        fullWidth && \"w-full\",\n        fullWidth && layout === \"horizontal\" && \"[&>*]:flex-1\",\n        fullWidth && layout === \"vertical\" && \"[&>*]:w-full\",\n        className\n    );\n\n    const groupStyle: React.CSSProperties | undefined = React.useMemo(() => {\n        const style: React.CSSProperties = {};\n\n        if (layout === \"grid\") {\n            style.gridTemplateColumns = `repeat(${gridCols}, minmax(0, 1fr))`;\n        }\n\n        if (typeof itemGapPx === \"number\") {\n            style.gap = itemGapPx;\n        }\n\n        return Object.keys(style).length ? style : undefined;\n    }, [layout, gridCols, itemGapPx]);\n\n    // ─────────────────────────────────────────────\n    // Render\n    // ─────────────────────────────────────────────\n\n    return (\n        <ToggleGroup\n            ref={ref}\n            type={multiple ? \"multiple\" : \"single\"}\n            value={currentValue as any}\n            onValueChange={handleChange}\n            disabled={isDisabled}\n            variant={design}\n            size={toggleSize}\n            className={layoutClasses}\n            style={groupStyle}\n            aria-invalid={!!error}\n        >\n            {normalizedOptions.map(({ ui: opt }) => {\n                const isSelected = multiple\n                    ? (currentValue as string[]).includes(opt.value)\n                    : currentValue === opt.value;\n\n                const contentNode = renderOption ? (\n                    renderOption(opt, isSelected)\n                ) : (\n                    <div className=\"flex flex-col items-start gap-1 truncate\">\n                        <div className=\"flex w-full min-w-0 items-start gap-2\">\n                            {opt.icon && (\n                                <span className=\"shrink-0\">{opt.icon}</span>\n                            )}\n                            <span className=\"truncate\">{opt.label}</span>\n                            {!!opt.tags?.length && (\n                                <span className=\"ml-auto flex shrink-0 flex-wrap gap-1\">\n                                    {opt.tags.map((tag, tagIndex) => (\n                                        <Badge\n                                            key={tagIndex}\n                                            className={cn(\"text-xs\", tag.className)}\n                                            onClick={tag.onClick}\n                                            style={{\n                                                color: tag.color,\n                                                backgroundColor: tag.bgColor,\n                                            }}\n                                        >\n                                            {tag.icon && (\n                                                <span className=\"shrink-0\">\n                                                    {tag.icon}\n                                                </span>\n                                            )}\n                                            <span>{tag.label}</span>\n                                        </Badge>\n                                    ))}\n                                </span>\n                            )}\n                        </div>\n                    </div>\n                );\n\n                const itemNode = (\n                    <ToggleGroupItem\n                        key={opt.value}\n                        value={opt.value}\n                        disabled={opt.disabled}\n                        aria-label={\n                            typeof opt.label === \"string\"\n                                ? opt.label\n                                : opt.value\n                        }\n                        className={cn(\n                            // Base Transitions\n                            \"transition-all\",\n\n                            // Default Active State (Shadcn defaults)\n                            \"data-[state=on]:bg-primary data-[state=on]:text-primary-foreground\",\n\n                            // Error State\n                            error &&\n                                \"border-destructive/50 hover:bg-destructive/10 data-[state=on]:bg-destructive data-[state=on]:text-destructive-foreground\",\n\n                            // Variant: Outline specific tweaks\n                            design === \"outline\" &&\n                                layout === \"horizontal\" &&\n                                !fullWidth &&\n                                \"first:rounded-l-md last:rounded-r-md rounded-none border-l-0 first:border-l\",\n\n                            // Layout tweaks\n                            fullWidth && \"justify-center\",\n\n                            // Custom Item Class\n                            itemClassName,\n\n                            // Active Class Name (Applied only when selected)\n                            isSelected && activeClassName\n                        )}\n                    >\n                        {contentNode}\n                    </ToggleGroupItem>\n                );\n\n                if (opt.tooltip && !isDisabled) {\n                    return (\n                        <TooltipProvider key={opt.value} delayDuration={300}>\n                            <Tooltip>\n                                <TooltipTrigger asChild>\n                                    {itemNode}\n                                </TooltipTrigger>\n                                <TooltipContent>\n                                    <p>{opt.tooltip}</p>\n                                </TooltipContent>\n                            </Tooltip>\n                        </TooltipProvider>\n                    );\n                }\n\n                return itemNode;\n            })}\n        </ToggleGroup>\n    );\n});\n\nShadcnToggleVariant.displayName = \"ShadcnToggleVariant\";\nexport default ShadcnToggleVariant;\n","// ———————————————————————————————\r\n// VariantModule wiring\r\n\r\nimport { ShadcnToggleVariant } from \"@/presets/shadcn-variants/toggle-group\";\r\nimport { VariantModule } from \"@/schema/variant\";\r\n\r\n// ———————————————————————————————\r\nexport const toggleGroupModule: VariantModule<\"toggle-group\"> = {\r\n   variant: \"toggle-group\",\r\n   Variant: ShadcnToggleVariant,\r\n   meta: {\r\n      label: \"Toggle group\",\r\n      description: \"Toggle group component buttons.\",\r\n      tags: [\"buttons\", \"toggle\"],\r\n   },\r\n};","// src/presets/shadcn-variants/editor.tsx\n\nimport * as React from \"react\";\nimport Editor from \"@toast-ui/editor\";\nimport \"@toast-ui/editor/dist/toastui-editor.css\";\nimport \"@toast-ui/editor/dist/theme/toastui-editor-dark.css\";\nimport { cn } from \"@/lib/utils\";\nimport type { ChangeDetail, VariantBaseProps, } from \"@/variants/shared\";\n\n/**\n * Host app MUST import Toast UI Editor CSS:\n *   import \"@toast-ui/editor/dist/toastui-editor.css\";\n */\n\nexport type ToastToolbarItem =\n    | \"heading\"\n    | \"bold\"\n    | \"italic\"\n    | \"strike\"\n    | \"hr\"\n    | \"quote\"\n    | \"ul\"\n    | \"ol\"\n    | \"task\"\n    | \"indent\"\n    | \"outdent\"\n    | \"table\"\n    | \"image\"\n    | \"link\"\n    | \"code\"\n    | \"codeblock\";\n\nexport type EditorFormat = \"html\" | \"markdown\";\nexport type EditorToolbar = \"default\" | \"none\" | ToastToolbarItem[][];\nexport type EditorTheme = \"auto\" | \"light\" | \"dark\";\nexport type EditorThemeTarget = \"nearest\" | \"document\";\n\ntype TuiEditorInstance = {\n    getHTML(): string;\n    getMarkdown(): string;\n    setHTML(html: string, cursorToEnd?: boolean): void;\n    setMarkdown(markdown: string, cursorToEnd?: boolean): void;\n    insertText(text: string): void;\n\n    setHeight?(height: string): void;\n    setPlaceholder?(placeholder: string): void;\n    changeMode?(mode: \"markdown\" | \"wysiwyg\", withoutFocus?: boolean): void;\n    changePreviewStyle?(style: \"tab\" | \"vertical\"): void;\n\n    on(type: string, handler: (...args: any[]) => void): void;\n    off(type: string): void;\n    destroy(): void;\n};\n\nexport interface ShadcnEditorVariantProps extends Pick<\n    VariantBaseProps<string | undefined>,\n    | \"value\"\n    | \"onValue\"\n    | \"error\"\n    | \"disabled\"\n    | \"readOnly\"\n    | \"required\"\n    | \"size\"\n    | \"density\"\n> {\n    placeholder?: string;\n    height?: string; // ex) \"400px\"\n    previewStyle?: \"vertical\" | \"tab\";\n    editType?: \"wysiwyg\" | \"markdown\";\n    useCommandShortcut?: boolean;\n\n    /** Which format to store in the form value */\n    format?: EditorFormat;\n\n    /**\n     * Toolbar config:\n     * - \"default\" uses Toast UI defaults\n     * - \"none\" hides tools + mode switch\n     * - array provides toolbarItems\n     */\n    toolbar?: EditorToolbar;\n\n    /** If true, paste is intercepted and inserted as plain text only */\n    pastePlainText?: boolean;\n    /** Theme mode for Toast UI */\n    theme?: EditorTheme;\n    /**\n     * In auto mode:\n     * - \"nearest\": resolve from nearest themed ancestor (default)\n     * - \"document\": resolve from document root only\n     */\n    themeTarget?: EditorThemeTarget;\n\n    className?: string;\n}\n\nfunction isDarkThemedElement(el: Element | null | undefined): boolean {\n    if (!el) return false;\n    if (el.classList.contains(\"dark\")) return true;\n    const dataTheme = el.getAttribute(\"data-theme\");\n    return dataTheme === \"dark\";\n}\n\nfunction resolveAutoDarkFromHost(\n    host: HTMLElement | null,\n    target: EditorThemeTarget,\n): boolean {\n    if (typeof document === \"undefined\") return false;\n\n    if (target === \"document\") {\n        return (\n            isDarkThemedElement(document.documentElement) ||\n            isDarkThemedElement(document.body)\n        );\n    }\n\n    // Walk ancestors manually so we can ignore this variant's own data-theme marker.\n    let node: HTMLElement | null = host ?? null;\n    while (node) {\n        const isEditorMarker = node.hasAttribute(\"data-editor-theme\");\n        if (!isEditorMarker) {\n            if (node.classList.contains(\"dark\")) return true;\n            if (node.hasAttribute(\"data-theme\")) {\n                return node.getAttribute(\"data-theme\") === \"dark\";\n            }\n        }\n        node = node.parentElement;\n    }\n\n    return (\n        isDarkThemedElement(document.documentElement) ||\n        isDarkThemedElement(document.body)\n    );\n}\n\nexport function ShadcnEditorVariant(props: ShadcnEditorVariantProps) {\n    const {\n        value,\n        onValue,\n        error,\n        disabled,\n        readOnly,\n        required,\n        size,\n        density,\n        className,\n\n        placeholder = \"\",\n        height = \"400px\",\n        previewStyle = \"vertical\",\n        editType = \"wysiwyg\",\n        useCommandShortcut = true,\n        format = \"html\",\n        toolbar = \"default\",\n        pastePlainText = false,\n        theme = \"auto\",\n        themeTarget = \"nearest\",\n    } = props;\n\n    const mountRef = React.useRef<HTMLDivElement>(null);\n    const editorRef = React.useRef<TuiEditorInstance | null>(null);\n\n    const formatRef = React.useRef<EditorFormat>(format);\n    const onValueRef = React.useRef<typeof onValue>(onValue);\n\n    const syncingRef = React.useRef(false);\n    const loadedRef = React.useRef(false);\n    const lastContentRef = React.useRef(value ?? \"\");\n\n    const [autoDark, setAutoDark] = React.useState<boolean>(false);\n\n    formatRef.current = format;\n    onValueRef.current = onValue;\n    if (value !== undefined) lastContentRef.current = value;\n\n    const effectiveReadOnly = Boolean(disabled || readOnly);\n    const effectiveTheme: \"light\" | \"dark\" = theme === \"auto\"\n        ? (autoDark ? \"dark\" : \"light\")\n        : theme;\n\n    const readContent = React.useCallback((ed: TuiEditorInstance): string => {\n        return formatRef.current === \"markdown\"\n            ? (ed.getMarkdown() ?? \"\")\n            : (ed.getHTML() ?? \"\");\n    }, []);\n\n    const emit = React.useCallback((next: string) => {\n        const detail: ChangeDetail<string> = { source: \"user\", raw: next };\n        onValueRef.current?.(next, detail);\n    }, []);\n\n    const structuralKey = React.useMemo(() => {\n        const hideModeSwitch = toolbar === \"none\" || pastePlainText;\n        // toolbar array is serializable (strings)\n        return JSON.stringify({\n            toolbar,\n            useCommandShortcut,\n            hideModeSwitch,\n            effectiveTheme,\n        });\n    }, [toolbar, useCommandShortcut, pastePlainText, effectiveTheme]);\n\n    React.useEffect(() => {\n        if (theme !== \"auto\") return;\n        if (typeof document === \"undefined\") return;\n\n        const host = mountRef.current;\n        const recompute = () => {\n            setAutoDark(resolveAutoDarkFromHost(host, themeTarget));\n        };\n\n        recompute();\n\n        const observer = new MutationObserver(() => {\n            recompute();\n        });\n\n        observer.observe(document.documentElement, {\n            attributes: true,\n            subtree: true,\n            attributeFilter: [\"class\", \"data-theme\"],\n        });\n\n        if (document.body) {\n            observer.observe(document.body, {\n                attributes: true,\n                subtree: true,\n                attributeFilter: [\"class\", \"data-theme\"],\n            });\n        }\n\n        return () => observer.disconnect();\n    }, [theme, themeTarget]);\n\n    // Create / recreate editor when structural options change\n    React.useEffect(() => {\n        const el = mountRef.current;\n        if (!el) return;\n\n        // Clean existing instance first\n        if (editorRef.current) {\n            try {\n                editorRef.current.off(\"change\");\n            } catch {}\n            try {\n                editorRef.current.off(\"load\");\n            } catch {}\n            try {\n                editorRef.current.destroy();\n            } catch {}\n            editorRef.current = null;\n        }\n\n        loadedRef.current = false;\n        syncingRef.current = true;\n\n        const hideModeSwitch = toolbar === \"none\" || pastePlainText;\n\n        const options: any = {\n            el,\n            height,\n            initialValue: value ?? lastContentRef.current ?? \"\",\n            previewStyle,\n            initialEditType: editType,\n            useCommandShortcut,\n            usageStatistics: false,\n            placeholder,\n            hideModeSwitch,\n            ...(effectiveTheme === \"dark\" ? { theme: \"dark\" } : {}),\n            ...(toolbar === \"none\"\n                ? { toolbarItems: [] }\n                : Array.isArray(toolbar)\n                  ? { toolbarItems: toolbar }\n                  : {}),\n            events: {\n                load: () => {\n                    loadedRef.current = true;\n                    syncingRef.current = false;\n                },\n                change: () => {\n                    const ed = editorRef.current;\n                    if (!ed) return;\n                    if (syncingRef.current) return;\n                    const next = readContent(ed);\n                    lastContentRef.current = next;\n                    emit(next);\n                },\n            },\n        };\n\n        editorRef.current = new (Editor as any)(options) as TuiEditorInstance;\n\n        // If load never fires for some reason, don’t permanently block changes\n        Promise.resolve().then(() => {\n            syncingRef.current = false;\n        });\n\n        return () => {\n            const ed = editorRef.current;\n            if (!ed) return;\n\n            try {\n                ed.off(\"change\");\n            } catch {}\n            try {\n                ed.off(\"load\");\n            } catch {}\n            try {\n                ed.destroy();\n            } catch {}\n\n            editorRef.current = null;\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [structuralKey]); // intentionally only structural props\n\n    // Keep height/placeholder updated without recreating (when supported)\n    React.useEffect(() => {\n        const ed = editorRef.current;\n        if (!ed) return;\n        if (typeof ed.setHeight === \"function\") ed.setHeight(height);\n    }, [height]);\n\n    React.useEffect(() => {\n        const ed = editorRef.current;\n        if (!ed) return;\n        if (typeof ed.setPlaceholder === \"function\")\n            ed.setPlaceholder(placeholder);\n    }, [placeholder]);\n\n    // Update mode + preview style without recreating (when supported)\n    React.useEffect(() => {\n        const ed = editorRef.current;\n        if (!ed) return;\n        if (typeof ed.changeMode === \"function\") ed.changeMode(editType);\n    }, [editType]);\n\n    React.useEffect(() => {\n        const ed = editorRef.current;\n        if (!ed) return;\n        if (typeof ed.changePreviewStyle === \"function\")\n            ed.changePreviewStyle(previewStyle);\n    }, [previewStyle]);\n\n    // Sync external value → editor (avoid cursor-jank with equality checks)\n    React.useEffect(() => {\n        const ed = editorRef.current;\n        if (!ed) return;\n\n        const next = value ?? \"\";\n\n        syncingRef.current = true;\n\n        if (format === \"markdown\") {\n            const cur = ed.getMarkdown?.() ?? \"\";\n            if (cur !== next) ed.setMarkdown(next, false);\n        } else {\n            const cur = ed.getHTML?.() ?? \"\";\n            if (cur !== next) ed.setHTML(next, false);\n        }\n        lastContentRef.current = next;\n\n        Promise.resolve().then(() => {\n            syncingRef.current = false;\n        });\n    }, [value, format]);\n\n    // Plain-text paste interception (optional)\n    React.useEffect(() => {\n        if (!pastePlainText) return;\n\n        const host = mountRef.current;\n        if (!host) return;\n\n        const onPaste = (e: ClipboardEvent) => {\n            e.preventDefault();\n            const text = e.clipboardData?.getData(\"text/plain\") ?? \"\";\n            const ed = editorRef.current;\n            if (text && ed) ed.insertText(text);\n        };\n\n        host.addEventListener(\"paste\", onPaste);\n        return () => host.removeEventListener(\"paste\", onPaste);\n    }, [pastePlainText]);\n\n    return (\n        <div\n            data-size={size}\n            data-density={density}\n            data-theme={effectiveTheme}\n            data-editor-theme={effectiveTheme}\n            className={cn(\n                \"rounded-md border border-input bg-background overflow-hidden\",\n                effectiveReadOnly && \"opacity-60 pointer-events-none\",\n                className\n            )}\n            aria-invalid={error ? true : undefined}\n            aria-required={required ? true : undefined}\n        >\n            <div ref={mountRef} />\n        </div>\n    );\n}\n","import { VariantModule } from \"@/schema/variant\";\r\nimport { ShadcnEditorVariant } from \"@/presets/shadcn-variants/editor\";\r\n\r\nexport const shadcnEditorVariant: VariantModule<\"editor\"> = {\r\n    variant: \"editor\",\r\n    Variant: ShadcnEditorVariant,\r\n    meta: {\r\n        label: \"Editor\",\r\n        description: \"Toast UI Editor (vanilla @toast-ui/editor).\",\r\n        tags: [\"editor\", \"rich-text\", \"markdown\", \"toast-ui\"],\r\n    },\r\n};\r\n","// src/lib/json-editor/glob.ts\nimport type { JsonPath, JsonWildcard } from \"./types\";\n\n/* ─────────────────────────────────────────────────────────────\n * Tiny helpers\n * ───────────────────────────────────────────────────────────── */\n\nexport function splitPath(path: JsonPath): string[] {\n    if (!path) return [];\n    return path.split(\".\").filter(Boolean);\n}\n\nexport function lastSegment(path: JsonPath): string {\n    const segs = splitPath(path);\n    return segs[segs.length - 1] ?? \"\";\n}\n\n/**\n * Escapes regex special chars except '*'\n */\nfunction escapeRegexExceptStar(input: string): string {\n    return input.replace(/[.+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction segmentGlobToRegex(pattern: string): RegExp {\n    // segment-level glob: \"*\" means \"any chars\" (including empty)\n    const src = \"^\" + escapeRegexExceptStar(pattern).replace(/\\*/g, \".*\") + \"$\";\n    return new RegExp(src, \"i\");\n}\n\nexport function matchSegment(pattern: string, segment: string): boolean {\n    return segmentGlobToRegex(pattern).test(segment);\n}\n\n/* ─────────────────────────────────────────────────────────────\n * matchPath(pattern, path)\n *\n * Supports:\n * - \"*api*\"     (segment glob; default matches leaf key if no dots)\n * - \"config.*\"  (one segment)\n * - \"config.**\" (subtree)\n * - \"**.*token*\" (any depth)\n *\n * Semantics:\n * - If pattern contains '.' or '**' → match against the full path segments.\n * - Else → match against the leaf segment only.\n * ───────────────────────────────────────────────────────────── */\n\nexport function matchPath(pattern: JsonWildcard, path: JsonPath): boolean {\n    const pat = (pattern ?? \"\").trim();\n    if (!pat) return path === \"\";\n\n    const pHasDot = pat.includes(\".\");\n    const pHasDeep = pat.includes(\"**\");\n\n    const targetSegs = splitPath(path);\n\n    // leaf-only matcher (no dots / deep)\n    if (!pHasDot && !pHasDeep) {\n        const leaf = targetSegs[targetSegs.length - 1] ?? \"\";\n        return matchSegment(pat, leaf);\n    }\n\n    const patSegs = splitPath(pat);\n\n    // backtracking matcher for ** (tiny; routes are small)\n    function walk(pi: number, ti: number): boolean {\n        while (pi < patSegs.length) {\n            const seg = patSegs[pi];\n\n            if (seg === \"**\") {\n                // '**' matches zero or more segments\n                if (pi === patSegs.length - 1) return true; // trailing '**' matches rest\n                for (let k = ti; k <= targetSegs.length; k++) {\n                    if (walk(pi + 1, k)) return true;\n                }\n                return false;\n            }\n\n            if (ti >= targetSegs.length) return false;\n\n            // normal segment: can include '*' wildcards inside the segment\n            if (!matchSegment(seg, targetSegs[ti])) return false;\n\n            pi++;\n            ti++;\n        }\n\n        return ti === targetSegs.length;\n    }\n\n    return walk(0, 0);\n}\n\n/* ─────────────────────────────────────────────────────────────\n * Specificity scoring for \"best match wins\"\n * (higher score = more specific)\n * ───────────────────────────────────────────────────────────── */\n\nexport function scoreMatch(pattern: JsonWildcard, path: JsonPath): number {\n    if (!matchPath(pattern, path)) return -1;\n\n    const pat = (pattern ?? \"\").trim();\n    if (pat === path) return 10_000;\n\n    const patSegs = splitPath(pat);\n    const pathSegs = splitPath(path);\n\n    // More segments + fewer wildcards => higher\n    const segCountScore = patSegs.length * 100;\n\n    // Character specificity: count non-wildcard chars\n    const nonWildChars = pat.replace(/\\*/g, \"\").replace(/\\./g, \"\").length;\n\n    // Penalize wildcards\n    const starCount = (pat.match(/\\*/g) ?? []).length;\n    const deepCount = (pat.match(/\\*\\*/g) ?? []).length;\n\n    // Reward closeness: deeper references tend to be more specific\n    const depthCloseness = Math.min(patSegs.length, pathSegs.length) * 10;\n\n    return (\n        segCountScore +\n        nonWildChars * 5 +\n        depthCloseness -\n        starCount * 15 -\n        deepCount * 200\n    );\n}\n\n/* ─────────────────────────────────────────────────────────────\n * pickBest(map, path)\n * Returns the best matching key and its value\n * ───────────────────────────────────────────────────────────── */\n\nexport function pickBest<T>(\n    map: Record<JsonWildcard, T> | undefined,\n    path: JsonPath\n): { pattern: JsonWildcard; value: T } | null {\n    if (!map) return null;\n\n    let best: { pattern: JsonWildcard; value: T; score: number } | null = null;\n\n    for (const [pattern, value] of Object.entries(map)) {\n        const s = scoreMatch(pattern, path);\n        if (s < 0) continue;\n        if (!best || s > best.score) best = { pattern, value, score: s };\n    }\n\n    return best ? { pattern: best.pattern, value: best.value } : null;\n}\n\n/**\n * Compatibility with the old `pickBestMatch(path, rules)` signature.\n * Returns the best matching value (or undefined).\n */\nexport function pickBestMatch<T>(\n    path: JsonPath,\n    rules: Array<[JsonWildcard, T]>\n): T | undefined {\n    let best: { score: number; value: T } | undefined;\n\n    for (const [pattern, value] of rules) {\n        const s = scoreMatch(pattern, path);\n        if (s < 0) continue;\n        if (!best || s > best.score) best = { score: s, value };\n    }\n\n    return best?.value;\n}\n","// src/lib/json-editor/filters.ts\nimport type { JsonEditorFilters, JsonPath } from \"./types\";\nimport { lastSegment, matchPath } from \"./glob\";\n\n/* ─────────────────────────────────────────────────────────────\n * Routes\n * ───────────────────────────────────────────────────────────── */\n\n/**\n * Route visibility:\n * - includeRoutes (if set) acts as allow-list\n * - excludeRoutes always remove\n * - if excludeRouteSubtree=true: excluding \"config\" also excludes \"config.**\"\n */\nexport function isRouteAllowed(\n    path: JsonPath,\n    filters?: JsonEditorFilters\n): boolean {\n    if (!filters) return true;\n\n    const excludeSubtree = filters.excludeRouteSubtree ?? true;\n\n    if (filters.includeRoutes && filters.includeRoutes.length) {\n        const ok = filters.includeRoutes.some((p) => matchPath(p, path));\n        if (!ok) return false;\n    }\n\n    if (filters.excludeRoutes && filters.excludeRoutes.length) {\n        for (const p of filters.excludeRoutes) {\n            if (!p) continue;\n\n            // direct match (wildcards + leaf-aware matching)\n            if (matchPath(p, path)) return false;\n\n            if (!excludeSubtree) continue;\n\n            // subtree match for exact path prefixes (best effort)\n            // (we only do this for exact-ish patterns without glob chars)\n            const isExact =\n                !p.includes(\"*\") && p !== \".\" && p !== \"/\" && p.trim() !== \"\";\n            if (!isExact) continue;\n\n            // If p is a leaf-only pattern (no dots), don't treat it as a subtree prefix unless it\n            // actually matches a real ancestor prefix of the route.\n            const leaf = lastSegment(path);\n            if (!p.includes(\".\") && p === leaf) continue;\n\n            if (path === p) return false;\n            if (path.startsWith(p + \".\")) return false;\n        }\n    }\n\n    return true;\n}\n\n/* ─────────────────────────────────────────────────────────────\n * Fields\n * ───────────────────────────────────────────────────────────── */\n\n/**\n * Field visibility:\n * - includeFields (if set) acts as allow-list\n * - excludeFields always remove\n *\n * NOTE: field patterns use the same leaf-aware matcher:\n * - \"token\" (no dots) matches leaf key only\n * - \"config.*token*\" matches full path\n */\nexport function isFieldAllowed(\n    fieldPath: JsonPath,\n    filters?: JsonEditorFilters\n): boolean {\n    if (!filters) return true;\n\n    if (filters.includeFields && filters.includeFields.length) {\n        const ok = filters.includeFields.some((p) => matchPath(p, fieldPath));\n        if (!ok) return false;\n    }\n\n    if (filters.excludeFields && filters.excludeFields.length) {\n        const hit = filters.excludeFields.some((p) => matchPath(p, fieldPath));\n        if (hit) return false;\n    }\n\n    return true;\n}\n\n/* ─────────────────────────────────────────────────────────────\n * Bulk helpers\n * ───────────────────────────────────────────────────────────── */\n\nexport function filterVisibleRoutes<T extends { path: JsonPath }>(\n    nodes: T[],\n    filters?: JsonEditorFilters\n): T[] {\n    return nodes.filter((n) => isRouteAllowed(n.path, filters));\n}\n\nexport function filterVisibleFieldPaths(\n    fieldPaths: JsonPath[],\n    filters?: JsonEditorFilters\n): JsonPath[] {\n    return fieldPaths.filter((p) => isFieldAllowed(p, filters));\n}\n\n/**\n * Convenience for code that still uses a generic \"paths\" list.\n * By default, this uses field filtering semantics (because most callers are rendering fields).\n */\nexport function filterVisiblePaths(\n    paths: JsonPath[],\n    filters?: JsonEditorFilters,\n    kind: \"field\" | \"route\" = \"field\"\n): JsonPath[] {\n    return kind === \"route\"\n        ? paths.filter((p) => isRouteAllowed(p, filters))\n        : paths.filter((p) => isFieldAllowed(p, filters));\n}\n","// src/lib/json-editor/layout.ts\nimport type { JsonEditorFilters, JsonWildcard } from \"./types\";\nimport { matchSegment, pickBestMatch } from \"./glob\";\nimport { filterVisibleFieldPaths } from \"./filters\";\n\nexport type JsonEditorLayout = Record<JsonWildcard, Array<string | string[]>>;\n\nexport type LayoutRow = {\n    /** parent path that owns these children */\n    parent: string;\n    /** row children (absolute paths) */\n    fields: string[];\n    /** optional hint for UI (grid/flex), you can extend later */\n    kind: \"row\";\n};\n\nfunction joinPath(parent: string, child: string) {\n    if (!parent) return child;\n    if (!child) return parent;\n    return parent + \".\" + child;\n}\n\nfunction uniq<T>(arr: T[]) {\n    return Array.from(new Set(arr));\n}\n\nfunction sortStable(paths: string[]) {\n    return [...paths].sort((a, b) => a.localeCompare(b));\n}\n\n/**\n * Expand a token into matching children:\n * - token can be exact key (\"maxRetries\") or pattern (\"*api*\")\n * - token can be a relative dotted path (\"headers.Authorization\") which becomes \"parent.headers.Authorization\"\n */\nfunction matchChildrenForToken(\n    parent: string,\n    token: string,\n    remaining: string[]\n): string[] {\n    const absoluteToken = joinPath(parent, token);\n\n    // If token is a dotted child-path, treat it as an exact relative reference.\n    if (token.includes(\".\")) {\n        return remaining.includes(absoluteToken) ? [absoluteToken] : [];\n    }\n\n    // Otherwise token is a relative pattern against direct child keys\n    const matches: string[] = [];\n    const prefix = parent ? parent + \".\" : \"\";\n\n    for (const p of remaining) {\n        if (!p.startsWith(prefix)) continue;\n\n        const rest = parent ? p.slice(prefix.length) : p;\n        if (!rest || rest.includes(\".\")) continue; // not a direct child\n\n        if (matchSegment(token, rest)) matches.push(p);\n    }\n\n    return sortStable(matches);\n}\n\n/**\n * Resolve a parent layout into ordered rows.\n *\n * Rules:\n * - layout[parentPattern] -> best match wins\n * - string token expands to ALL matching children (as separate rows)\n * - string[] row expands each token; if token matches multiple, it expands into multiple columns\n * - after processing layout rules, remaining children are auto-flowed (one per row)\n */\nexport function resolveLayoutForParent(opts: {\n    parent: string; // e.g. \"config\"\n    childPaths: string[]; // absolute paths of DIRECT children (recommended)\n    layout?: JsonEditorLayout;\n    filters?: JsonEditorFilters;\n}): LayoutRow[] {\n    const { parent, layout, filters } = opts;\n\n    // visible children (field semantics)\n    let remaining = filterVisibleFieldPaths(opts.childPaths, filters);\n    remaining = sortStable(remaining);\n\n    const rules = layout\n        ? (Object.entries(layout) as Array<[string, Array<string | string[]>]>)\n        : [];\n\n    const spec = rules.length ? pickBestMatch(parent, rules) : undefined;\n\n    const rows: LayoutRow[] = [];\n\n    const take = (paths: string[]) => {\n        const taken = new Set(paths);\n        remaining = remaining.filter((p) => !taken.has(p));\n    };\n\n    if (spec?.length) {\n        for (const entry of spec) {\n            // 1) \"key\" => expands to matches; each match becomes its own row\n            if (typeof entry === \"string\") {\n                const matches = matchChildrenForToken(parent, entry, remaining);\n                if (!matches.length) continue;\n\n                for (const m of matches) {\n                    rows.push({ parent, kind: \"row\", fields: [m] });\n                }\n                take(matches);\n                continue;\n            }\n\n            // 2) [\"a\", \"b\"] => one row; each token can expand\n            if (Array.isArray(entry)) {\n                const cols: string[] = [];\n\n                for (const token of entry) {\n                    const matches = matchChildrenForToken(\n                        parent,\n                        token,\n                        remaining\n                    );\n                    if (!matches.length) continue;\n                    cols.push(...matches);\n                }\n\n                const uniqCols = uniq(cols);\n                if (!uniqCols.length) continue;\n\n                rows.push({ parent, kind: \"row\", fields: uniqCols });\n                take(uniqCols);\n            }\n        }\n    }\n\n    // Auto-flow the rest (preserve sorted order)\n    for (const p of remaining) {\n        rows.push({ parent, kind: \"row\", fields: [p] });\n    }\n\n    return rows;\n}\n","// src/lib/json-editor/routes.ts\nimport type * as React from \"react\";\nimport type {\n    JsonEditorFilters,\n    JsonEditorNavOptions,\n    JsonObject,\n    JsonPath,\n    JsonRouteNode,\n} from \"./types\";\nimport { lastSegment, pickBest } from \"./glob\";\nimport { isRouteAllowed } from \"./filters\";\n\nfunction isObjectLike(v: unknown): v is Record<string, any> {\n    return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction isPlainObject(v: unknown): v is JsonObject {\n    return isObjectLike(v);\n}\n\nfunction resolveRouteLabel(\n    path: JsonPath,\n    nav?: JsonEditorNavOptions\n): React.ReactNode {\n    // wildcard labels win (best match)\n    const hit = pickBest(nav?.routeLabels, path);\n    if (hit) return hit.value;\n\n    if (!path) return \"Root\";\n    return lastSegment(path);\n}\n\n/**\n * buildJsonRoutes(value, navProps) → nav tree\n * - routes are derived from nested objects\n * - can optionally include object-items inside arrays as routes\n */\nexport function buildJsonRoutes(\n    value: JsonObject | undefined,\n    nav?: JsonEditorNavOptions,\n    filters?: JsonEditorFilters\n): JsonRouteNode[] {\n    const rootObj: JsonObject = (value ?? {}) as JsonObject;\n\n    const showRoot = nav?.showRoot ?? true;\n    const maxDepth = nav?.maxDepth ?? Number.POSITIVE_INFINITY;\n    const arrayRoutes = nav?.arrayRoutes ?? \"none\";\n\n    const nodes: JsonRouteNode[] = [];\n\n    const buildChildren = (\n        obj: JsonObject,\n        parentPath: JsonPath,\n        depth: number\n    ): JsonRouteNode[] => {\n        if (depth >= maxDepth) return [];\n\n        const out: JsonRouteNode[] = [];\n\n        for (const [k, v] of Object.entries(obj)) {\n            const nextPath = parentPath ? `${parentPath}.${k}` : k;\n\n            // nested object => route\n            if (isPlainObject(v)) {\n                if (!isRouteAllowed(nextPath, filters)) continue;\n\n                out.push({\n                    path: nextPath,\n                    key: k,\n                    label: resolveRouteLabel(nextPath, nav),\n                    children: buildChildren(v, nextPath, depth + 1),\n                });\n                continue;\n            }\n\n            // array of objects => optionally allow routes like \"config.items.0\"\n            if (arrayRoutes === \"objects\" && Array.isArray(v)) {\n                const anyObjIdx = (v as any[]).findIndex((x) =>\n                    isPlainObject(x)\n                );\n                if (anyObjIdx === -1) continue;\n\n                // route for the array itself? (treat as object page)\n                if (!isRouteAllowed(nextPath, filters)) continue;\n\n                const arrayNode: JsonRouteNode = {\n                    path: nextPath,\n                    key: k,\n                    label: resolveRouteLabel(nextPath, nav),\n                    children: [],\n                };\n\n                const children: JsonRouteNode[] = [];\n                (v as any[]).forEach((item, idx) => {\n                    if (!isPlainObject(item)) return;\n                    const itemPath = `${nextPath}.${idx}`;\n                    if (!isRouteAllowed(itemPath, filters)) return;\n\n                    children.push({\n                        path: itemPath,\n                        key: String(idx),\n                        label: resolveRouteLabel(itemPath, nav) ?? `#${idx}`,\n                        children: buildChildren(item, itemPath, depth + 1),\n                    });\n                });\n\n                arrayNode.children = children;\n                out.push(arrayNode);\n            }\n        }\n\n        // stable ordering (optional): alphabetical\n        out.sort((a, b) => String(a.key).localeCompare(String(b.key)));\n        return out;\n    };\n\n    if (showRoot) {\n        if (isRouteAllowed(\"\", filters)) {\n            nodes.push({\n                path: \"\",\n                key: \"\",\n                label: resolveRouteLabel(\"\", nav),\n                children: buildChildren(rootObj, \"\", 0),\n            });\n        } else {\n            // If root is excluded, still expose its children as top-level pages\n            nodes.push(...buildChildren(rootObj, \"\", 0));\n        }\n    } else {\n        nodes.push(...buildChildren(rootObj, \"\", 0));\n    }\n\n    return nodes;\n}\n","// src/lib/json-editor/tree.ts\nexport function getDirectChildPaths(\n    parent: string,\n    allPaths: string[]\n): string[] {\n    const prefix = parent ? parent + \".\" : \"\";\n    return allPaths.filter((p) => {\n        if (!p.startsWith(prefix)) return false;\n        const rest = parent ? p.slice(prefix.length) : p;\n        return rest.length > 0 && !rest.includes(\".\"); // direct child only\n    });\n}\n","// src/presets/shadcn-variants/json-editor-main.tsx\n// noinspection GrazieInspection\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { Badge } from \"@/presets/ui/badge\";\nimport { Button } from \"@/presets/ui/button\";\nimport { Separator } from \"@/presets/ui/separator\";\n\nimport { InputField } from \"@/input/input-field\";\n\nimport type { ChangeDetail } from \"@/variants/shared\";\nimport type {\n    JsonObject,\n    JsonPath,\n    JsonValue,\n    LayoutRow,\n} from \"@/lib/json-editor/utils\";\n\nimport {\n    splitPath,\n    lastSegment,\n    resolveLayoutForParent,\n} from \"@/lib/json-editor/utils\";\nimport { getDirectChildPaths } from \"@/lib/json-editor/tree\";\n\nimport type {\n    JsonEditorCallbacks,\n    JsonEditorFieldMap,\n    JsonEditorDefaults,\n    JsonEditorFilters,\n    JsonEditorLayoutMap,\n    JsonEditorResolvedField,\n    JsonEditorVariantSpec,\n    JsonEditorEditMeta,\n    JsonRouteNode,\n} from \"./types\";\n\nimport { pickBest } from \"@/lib/json-editor/utils\";\n\n/* ─────────────────────────────────────────────────────────────\n * Props\n * ───────────────────────────────────────────────────────────── */\n\nexport interface JsonEditorMainProps {\n    /** root JSON (always an object for this editor) */\n    root: JsonObject;\n\n    /** notify parent (json-editor variant wrapper) */\n    onRoot: (nextRoot: JsonObject, detail?: ChangeDetail<any>) => void;\n\n    /** active \"page\" route: \"\" | \"config\" | \"config.headers\" */\n    route: JsonPath;\n\n    /**\n     * IMPORTANT (matches your layout util):\n     * A generic paths list used by layout/tree utils.\n     * Should include *at least* all field paths you want to render.\n     */\n    allPaths: JsonPath[];\n\n    /** config */\n    fieldMap?: JsonEditorFieldMap;\n    layout?: JsonEditorLayoutMap;\n    defaults?: JsonEditorDefaults;\n    filters?: JsonEditorFilters;\n\n    /** callbacks */\n    callbacks?: JsonEditorCallbacks;\n\n    /** flags */\n    disabled?: boolean;\n    readOnly?: boolean;\n\n    /** main header (inside main panel) */\n    breadcrumb?: React.ReactNode;\n    title?: React.ReactNode;\n    headerRight?: React.ReactNode;\n\n    /** navigation for section “open” buttons */\n    onNavigate?: (route: JsonPath) => void;\n\n    /** optional advanced override */\n    renderField?: (ctx: {\n        field: JsonEditorResolvedField;\n        route: JsonPath;\n    }) => React.ReactNode;\n    renderRouteLabel?: (ctx: {\n        node: JsonRouteNode;\n        active: boolean;\n    }) => React.ReactNode;\n\n    /** styling */\n    className?: string;\n    contentClassName?: string;\n}\n\n/* ─────────────────────────────────────────────────────────────\n * Local JSON path helpers (NOT provided by your utils)\n * ───────────────────────────────────────────────────────────── */\n\nfunction isPlainObject(v: unknown): v is Record<string, any> {\n    return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction valueTypeOf(v: JsonValue): JsonEditorResolvedField[\"valueType\"] {\n    if (v === null) return \"null\";\n    if (Array.isArray(v)) return \"array\";\n    if (isPlainObject(v)) return \"object\";\n    if (typeof v === \"string\") return \"string\";\n    if (typeof v === \"number\") return \"number\";\n    return \"boolean\";\n}\n\nfunction getAtPath(root: any, path: JsonPath): any {\n    if (!path) return root;\n    const segs = splitPath(path);\n    let cur = root;\n    for (const seg of segs) {\n        if (cur == null) return undefined;\n        cur = cur[seg];\n    }\n    return cur;\n}\n\nfunction setAtPath(root: any, path: JsonPath, nextValue: any): any {\n    const segs = splitPath(path);\n    if (!segs.length) return nextValue;\n\n    const out = Array.isArray(root) ? [...root] : { ...(root ?? {}) };\n    let cur: any = out;\n\n    for (let i = 0; i < segs.length; i++) {\n        const seg = segs[i]!;\n        const last = i === segs.length - 1;\n\n        if (last) {\n            cur[seg] = nextValue;\n            break;\n        }\n\n        const prev = cur[seg];\n        const next = Array.isArray(prev)\n            ? [...prev]\n            : isPlainObject(prev)\n              ? { ...prev }\n              : {};\n        cur[seg] = next;\n        cur = next;\n    }\n\n    return out;\n}\n\nfunction prettifyLabel(key: string) {\n    const spaced = key\n        .replace(/_/g, \" \")\n        .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n        .trim();\n    return spaced ? spaced[0]!.toUpperCase() + spaced.slice(1) : key;\n}\n\nfunction typeTag(type: string) {\n    return (\n        <Badge variant=\"secondary\" className=\"uppercase tracking-wide\">\n            {type}\n        </Badge>\n    );\n}\n\nfunction normalizeVariantSpec(spec: JsonEditorVariantSpec | undefined): {\n    variant?: string;\n    props?: any;\n} {\n    if (!spec) return {};\n    if (typeof spec === \"string\") return { variant: spec };\n    return { variant: spec.variant, props: spec.props };\n}\n\nfunction fallbackVariantForValueType(t: JsonEditorResolvedField[\"valueType\"]) {\n    if (t === \"number\") return \"number\";\n    if (t === \"boolean\") return \"toggle\"; // default\n    // null/string\n    return \"text\";\n}\n\nfunction metaForPath(\n    action: JsonEditorEditMeta[\"action\"],\n    route: JsonPath,\n    path: JsonPath,\n): JsonEditorEditMeta {\n    const segs = splitPath(path);\n    const key = segs.length ? String(segs[segs.length - 1]!) : \"\";\n    const parent = segs.length > 1 ? segs.slice(0, -1).join(\".\") : \"\";\n    return { action, route, path, parent, key };\n}\n\n/* ─────────────────────────────────────────────────────────────\n * Render a primitive field (always InputField)\n * ───────────────────────────────────────────────────────────── */\n\nfunction PrimitiveField(props: {\n    root: JsonObject;\n    path: JsonPath;\n    route: JsonPath;\n    fieldMap?: JsonEditorFieldMap;\n    callbacks?: JsonEditorCallbacks;\n    disabled?: boolean;\n    readOnly?: boolean;\n    onRoot: (next: JsonObject, detail?: ChangeDetail<any>) => void;\n    renderField?: JsonEditorMainProps[\"renderField\"];\n}) {\n    const {\n        root,\n        path,\n        route,\n        fieldMap,\n        callbacks,\n        disabled,\n        readOnly,\n        onRoot,\n        renderField,\n    } = props;\n\n    const key = lastSegment(path);\n    const raw = getAtPath(root, path) as JsonValue | undefined;\n    const val = (raw === undefined ? null : raw) as JsonValue;\n    const valueType = valueTypeOf(val);\n\n    const hit = pickBest(fieldMap, path);\n    const spec = hit?.value;\n    const resolved = normalizeVariantSpec(spec);\n\n    const variant = resolved.variant || fallbackVariantForValueType(valueType);\n\n    const field: JsonEditorResolvedField = {\n        path,\n        key,\n        value: val,\n        valueType,\n        variant: spec,\n    };\n\n    const override = renderField?.({ field, route });\n    if (override != null) return <>{override}</>;\n\n    return (\n        <InputField\n            name={path}\n            label={prettifyLabel(key)}\n            variant={variant as any}\n            tags={[{ label: typeTag(valueType) }] as any}\n            disabled={disabled}\n            readOnly={readOnly}\n            {...(resolved.props ?? {})}\n            value={val as any}\n            onValue={(next: any, detail?: ChangeDetail<any>) => {\n                if (disabled || readOnly) return;\n\n                const nextRoot = setAtPath(root, path, next) as JsonObject;\n                onRoot(nextRoot, detail);\n\n                callbacks?.onEdit?.(nextRoot, metaForPath(\"edit\", route, path));\n            }}\n        />\n    );\n}\n\n/* ─────────────────────────────────────────────────────────────\n * Section card (OBJECT / ARRAY) like your screenshot\n * ───────────────────────────────────────────────────────────── */\n\nfunction SectionCard(props: {\n    title: React.ReactNode;\n    tag: React.ReactNode;\n    right?: React.ReactNode;\n    children: React.ReactNode;\n}) {\n    const { title, tag, right, children } = props;\n\n    return (\n        <div className=\"rounded-lg border bg-background/50\">\n            <div className=\"flex items-center justify-between gap-3 px-4 py-3\">\n                <div className=\"min-w-0\">\n                    <div className=\"flex items-center gap-2 min-w-0\">\n                        <div className=\"font-medium truncate\">{title}</div>\n                        <div className=\"shrink-0\">{tag}</div>\n                    </div>\n                </div>\n\n                {right ? <div className=\"shrink-0\">{right}</div> : null}\n            </div>\n\n            <Separator />\n            <div className=\"p-4\">{children}</div>\n        </div>\n    );\n}\n\n/* ─────────────────────────────────────────────────────────────\n * Main\n * ───────────────────────────────────────────────────────────── */\n\nexport function JsonEditorMain(props: JsonEditorMainProps) {\n    const {\n        root,\n        onRoot,\n        route,\n        allPaths,\n        fieldMap,\n        layout,\n        defaults,\n        filters,\n        callbacks,\n        disabled,\n        readOnly,\n        breadcrumb,\n        title,\n        onNavigate,\n        renderField,\n        renderRouteLabel,\n        className,\n        contentClassName,\n    } = props;\n\n    const directChildPaths = React.useMemo(() => {\n        return getDirectChildPaths(route, allPaths);\n    }, [route, allPaths]);\n\n    const rows: LayoutRow[] = React.useMemo(() => {\n        return resolveLayoutForParent({\n            parent: route,\n            childPaths: directChildPaths,\n            layout: layout as any,\n            filters,\n        });\n    }, [route, directChildPaths, layout, filters]);\n\n    const effectiveRows: LayoutRow[] = React.useMemo(() => {\n        const hasAny = rows.some((r) => r.fields?.length);\n        if (hasAny) return rows;\n\n        return directChildPaths.map(\n            (p) => ({ parent: route, kind: \"row\", fields: [p] }) as LayoutRow,\n        );\n    }, [rows, directChildPaths, route]);\n\n    const pageValue = getAtPath(root, route) as JsonValue;\n    const validJson = isPlainObject(root);\n\n    return (\n        <div className={cn(\"flex min-h-0 flex-col gap-4\", className)}>\n            <div className=\"flex items-start justify-between gap-4\">\n                <div className=\"min-w-0\">\n                    {breadcrumb ? (\n                        <div className=\"text-sm text-muted-foreground truncate\">\n                            {breadcrumb}\n                        </div>\n                    ) : (\n                        <div className=\"text-sm text-muted-foreground truncate\">\n                            Root Object\n                            {route ? ` > ${splitPath(route).join(\" > \")}` : \"\"}\n                        </div>\n                    )}\n\n                    <div className=\"mt-1 text-3xl font-semibold leading-tight\">\n                        {title ??\n                            (route\n                                ? prettifyLabel(lastSegment(route))\n                                : \"Config.json\")}\n                    </div>\n                </div>\n\n                <div className=\"shrink-0 flex items-center gap-2\">\n                    <Badge variant=\"secondary\">\n                        {validJson ? \"Valid JSON\" : \"Invalid\"}\n                    </Badge>\n                </div>\n            </div>\n\n            <div\n                className={cn(\"flex min-h-0 flex-col gap-4\", contentClassName)}\n            >\n                {!isPlainObject(pageValue) ? (\n                    <div className=\"rounded-lg border bg-muted/20 p-4 text-sm text-muted-foreground\">\n                        This page is not an object.\n                    </div>\n                ) : null}\n\n                {effectiveRows.map((row, idx) => {\n                    if (!row.fields?.length) return null;\n\n                    const isGrid = row.fields.length > 1;\n\n                    return (\n                        <div\n                            key={`${row.parent}::${row.kind}::${idx}`}\n                            className={cn(\n                                isGrid\n                                    ? \"grid gap-4 md:grid-cols-2\"\n                                    : \"flex flex-col\",\n                            )}\n                        >\n                            {row.fields.map((path) => {\n                                const v = getAtPath(root, path) as JsonValue;\n                                const vt = valueTypeOf(v);\n\n                                if (vt === \"object\" && isPlainObject(v)) {\n                                    const sectionRoute = path;\n\n                                    const sectionChildPaths =\n                                        getDirectChildPaths(\n                                            sectionRoute,\n                                            allPaths,\n                                        );\n                                    const sectionRows = resolveLayoutForParent({\n                                        parent: sectionRoute,\n                                        childPaths: sectionChildPaths,\n                                        layout: layout as any,\n                                        filters,\n                                    });\n\n                                    const openBtn = onNavigate ? (\n                                        <Button\n                                            type=\"button\"\n                                            variant=\"ghost\"\n                                            size=\"sm\"\n                                            onClick={() =>\n                                                onNavigate(sectionRoute)\n                                            }\n                                        >\n                                            Open\n                                        </Button>\n                                    ) : null;\n\n                                    const sectionTitle = renderRouteLabel\n                                        ? renderRouteLabel({\n                                              node: {\n                                                  path: path,\n                                                  key: lastSegment(path),\n                                                  label: prettifyLabel(\n                                                      lastSegment(path),\n                                                  ),\n                                                  children: [],\n                                              },\n                                              active: false,\n                                          })\n                                        : prettifyLabel(lastSegment(path));\n\n                                    return (\n                                        <SectionCard\n                                            key={path}\n                                            title={sectionTitle}\n                                            tag={typeTag(\"object\")}\n                                            right={openBtn}\n                                        >\n                                            <div className=\"flex flex-col gap-4\">\n                                                {sectionRows.map((sr, sidx) => {\n                                                    if (!sr.fields?.length)\n                                                        return null;\n\n                                                    const sGrid =\n                                                        sr.fields.length > 1;\n\n                                                    return (\n                                                        <div\n                                                            key={`${sectionRoute}::${sidx}`}\n                                                            className={cn(\n                                                                sGrid\n                                                                    ? \"grid gap-4 md:grid-cols-2\"\n                                                                    : \"flex flex-col\",\n                                                            )}\n                                                        >\n                                                            {sr.fields.map(\n                                                                (sp) => {\n                                                                    const sv =\n                                                                        getAtPath(\n                                                                            root,\n                                                                            sp,\n                                                                        ) as JsonValue;\n                                                                    const svt =\n                                                                        valueTypeOf(\n                                                                            sv,\n                                                                        );\n\n                                                                    if (\n                                                                        svt ===\n                                                                            \"object\" ||\n                                                                        svt ===\n                                                                            \"array\"\n                                                                    ) {\n                                                                        return (\n                                                                            <div\n                                                                                key={\n                                                                                    sp\n                                                                                }\n                                                                                className=\"rounded-md border px-3 py-2 text-sm text-muted-foreground flex items-center justify-between\"\n                                                                            >\n                                                                                <div className=\"truncate\">\n                                                                                    {prettifyLabel(\n                                                                                        lastSegment(\n                                                                                            sp,\n                                                                                        ),\n                                                                                    )}\n                                                                                </div>\n\n                                                                                {onNavigate ? (\n                                                                                    <Button\n                                                                                        type=\"button\"\n                                                                                        size=\"sm\"\n                                                                                        variant=\"ghost\"\n                                                                                        onClick={() =>\n                                                                                            onNavigate(\n                                                                                                sp,\n                                                                                            )\n                                                                                        }\n                                                                                    >\n                                                                                        Open\n                                                                                    </Button>\n                                                                                ) : null}\n                                                                            </div>\n                                                                        );\n                                                                    }\n\n                                                                    return (\n                                                                        <PrimitiveField\n                                                                            key={\n                                                                                sp\n                                                                            }\n                                                                            root={\n                                                                                root\n                                                                            }\n                                                                            path={\n                                                                                sp\n                                                                            }\n                                                                            route={\n                                                                                route\n                                                                            }\n                                                                            fieldMap={\n                                                                                fieldMap\n                                                                            }\n                                                                            callbacks={\n                                                                                callbacks\n                                                                            }\n                                                                            disabled={\n                                                                                disabled\n                                                                            }\n                                                                            readOnly={\n                                                                                readOnly\n                                                                            }\n                                                                            onRoot={\n                                                                                onRoot\n                                                                            }\n                                                                            renderField={\n                                                                                renderField\n                                                                            }\n                                                                        />\n                                                                    );\n                                                                },\n                                                            )}\n                                                        </div>\n                                                    );\n                                                })}\n                                            </div>\n                                        </SectionCard>\n                                    );\n                                }\n\n                                if (vt === \"array\" && Array.isArray(v)) {\n                                    const arrPath = path;\n                                    const items = v;\n\n                                    return (\n                                        <SectionCard\n                                            key={path}\n                                            title={prettifyLabel(\n                                                lastSegment(path),\n                                            )}\n                                            tag={typeTag(\"array\")}\n                                            right={\n                                                onNavigate ? (\n                                                    <Button\n                                                        type=\"button\"\n                                                        variant=\"ghost\"\n                                                        size=\"sm\"\n                                                        onClick={() =>\n                                                            onNavigate(arrPath)\n                                                        }\n                                                    >\n                                                        Open\n                                                    </Button>\n                                                ) : null\n                                            }\n                                        >\n                                            <div className=\"flex flex-col gap-3\">\n                                                <div className=\"text-sm text-muted-foreground\">\n                                                    {items.length} item\n                                                    {items.length === 1\n                                                        ? \"\"\n                                                        : \"s\"}\n                                                </div>\n\n                                                <div className=\"flex flex-col gap-3\">\n                                                    {items.map((_item, i) => {\n                                                        const itemPath = `${arrPath}.${i}`;\n\n                                                        return (\n                                                            <div\n                                                                key={itemPath}\n                                                                className=\"flex items-start gap-2\"\n                                                            >\n                                                                <div className=\"flex-1\">\n                                                                    <PrimitiveField\n                                                                        root={\n                                                                            root\n                                                                        }\n                                                                        path={\n                                                                            itemPath\n                                                                        }\n                                                                        route={\n                                                                            route\n                                                                        }\n                                                                        fieldMap={\n                                                                            fieldMap\n                                                                        }\n                                                                        callbacks={\n                                                                            callbacks\n                                                                        }\n                                                                        disabled={\n                                                                            disabled\n                                                                        }\n                                                                        readOnly={\n                                                                            readOnly\n                                                                        }\n                                                                        onRoot={\n                                                                            onRoot\n                                                                        }\n                                                                        renderField={\n                                                                            renderField\n                                                                        }\n                                                                    />\n                                                                </div>\n\n                                                                <Button\n                                                                    type=\"button\"\n                                                                    variant=\"ghost\"\n                                                                    size=\"icon\"\n                                                                    className=\"mt-1\"\n                                                                    disabled={\n                                                                        disabled ||\n                                                                        readOnly\n                                                                    }\n                                                                    onClick={() => {\n                                                                        if (\n                                                                            disabled ||\n                                                                            readOnly\n                                                                        )\n                                                                            return;\n\n                                                                        const nextArr =\n                                                                            items.filter(\n                                                                                (\n                                                                                    _,\n                                                                                    idx2,\n                                                                                ) =>\n                                                                                    idx2 !==\n                                                                                    i,\n                                                                            );\n                                                                        const nextRoot =\n                                                                            setAtPath(\n                                                                                root,\n                                                                                arrPath,\n                                                                                nextArr,\n                                                                            ) as JsonObject;\n\n                                                                        onRoot(\n                                                                            nextRoot,\n                                                                        );\n                                                                        callbacks?.onDelete?.(\n                                                                            nextRoot,\n                                                                            metaForPath(\n                                                                                \"delete\",\n                                                                                route,\n                                                                                itemPath,\n                                                                            ),\n                                                                        );\n                                                                    }}\n                                                                >\n                                                                    ×\n                                                                </Button>\n                                                            </div>\n                                                        );\n                                                    })}\n\n                                                    <Button\n                                                        type=\"button\"\n                                                        variant=\"outline\"\n                                                        className=\"border-dashed\"\n                                                        disabled={\n                                                            disabled || readOnly\n                                                        }\n                                                        onClick={() => {\n                                                            if (\n                                                                disabled ||\n                                                                readOnly\n                                                            )\n                                                                return;\n\n                                                            const nextIndex =\n                                                                items.length;\n                                                            const nextArr = [\n                                                                ...items,\n                                                                \"\",\n                                                            ];\n                                                            const nextRoot =\n                                                                setAtPath(\n                                                                    root,\n                                                                    arrPath,\n                                                                    nextArr,\n                                                                ) as JsonObject;\n\n                                                            onRoot(nextRoot);\n                                                            callbacks?.onAdd?.(\n                                                                nextRoot,\n                                                                metaForPath(\n                                                                    \"add\",\n                                                                    route,\n                                                                    `${arrPath}.${nextIndex}`,\n                                                                ),\n                                                            );\n                                                        }}\n                                                    >\n                                                        + Add Item\n                                                    </Button>\n                                                </div>\n                                            </div>\n                                        </SectionCard>\n                                    );\n                                }\n\n                                return (\n                                    <PrimitiveField\n                                        key={path}\n                                        root={root}\n                                        path={path}\n                                        route={route}\n                                        fieldMap={fieldMap}\n                                        callbacks={callbacks}\n                                        disabled={disabled}\n                                        readOnly={readOnly}\n                                        onRoot={onRoot}\n                                        renderField={renderField}\n                                    />\n                                );\n                            })}\n                        </div>\n                    );\n                })}\n            </div>\n\n            {defaults?.values ? null : null}\n        </div>\n    );\n}\n\nexport default JsonEditorMain;\n","const r=(r,e,t,n,o)=>{if(!n)throw new Error(null!=o?o:`Invalid property path: ${e}\\nCouldn't access \"${t}\" in ${JSON.stringify(r)}`)},e=r=>\"object\"==typeof r&&null!==r&&!Array.isArray(r),t=r=>Array.isArray(r),n=(r,e)=>r.filter(((r,t)=>t!==e)),o=(r,e,o,a={})=>{const{remove:s=!1,createNew:l=!0,noError:f=!1}=a,u=r,c=\"string\"==typeof(y=e)?y:\"number\"==typeof y?String(y):y.reduce(((r,e)=>\"number\"==typeof e?`${r}[${e}]`:\"\"===r?e:`${r}.${e}`),\"\");var y;const p=Object.assign(Object.assign({},a),{remove:s,createNew:l,noError:f,fullData:u,fullPath:c}),m=Array.isArray(e)?e:(r=>Array.isArray(r)?r:r.split(/(\\.|\\[\\d+\\])/).filter((r=>\".\"!==r&&\"\"!==r)).map((r=>{const e=/\\[(\\d+)\\]/.exec(r);return e?Number(e[1]):r})).flat())(e).filter((r=>\"\"!==r));return t(r)&&s&&1===m.length?n(r,m[0]):i(r,m,o,p)},i=(o,l,f,u)=>{const c=e(o)?Object.assign({},o):null,y=t(o)?[...o]:null;if(0===l.length)return o;if(!c&&!y)throw new Error(\"Can't assign property -- invalid input object\");const{createNew:p,remove:m,noError:b,fullData:g,fullPath:h}=u,d=l[0];if(y&&\"string\"==typeof d)return y.map((r=>i(r,l,f,u)));if(1===l.length){if(c&&\"string\"==typeof d){const r=a(c,d,f,u);return null!=r?r:c}return y&&\"number\"==typeof d?(s(y,d,f,u),y):(r(g,h,d,b),o)}const v=c||y||[];if(m&&2===l.length&&\"number\"==typeof l[1]){const e=v[d],o=l[1];return t(e)?v[d]=n(e,o):r(g,h,d,b,\"Trying to remove an indexed item from an object that is not an array\"),v}const A=l.slice(1);if(d in o){if(w=v[d],!t(w)&&!e(w)){if(!p)return r(g,h,d,b),v;v[d]={}}return v[d]=i(v[d],A,f,u),v}var w;if(p){const r=\"number\"==typeof A[0]?[]:{};if(c)return v[d]=r,v[d]=i(v[d],A,f,u),v;if(y&&Array.isArray(v)){v.push(r);const e=v.length-1;return v[e]=i(v[e],A,f,u),v}}return r(g,h,d,b),v},a=(e,t,n,o)=>{const{remove:i,createNew:a,noError:s,insertAfter:l,insertBefore:f,fullData:u,fullPath:c}=o;if(void 0!==f||void 0!==l){const r=Object.entries(e);let o=1/0;return o=\"number\"==typeof f?f:\"number\"==typeof l?l:r.findIndex((([r,e])=>r===(null!=f?f:l))),l&&o++,r.splice(o,0,[t,n]),Object.fromEntries(r)}const y=t in e;i?y?delete e[t]:r(u,c,t,s):a||y?e[t]=n:r(u,c,t,s)},s=(e,t,n,o)=>{const{noError:i,fullData:a,fullPath:s,createNew:l,insert:f}=o;f&&e.splice(t,0,n),t in e?e[t]=n:l?e.push(n):r(a,s,t,i)};export{o as default};\n","const r=(n,o,i)=>{const a=Array.isArray(o)?o:t(o);if(0===a.length)return n;const c=a[0];if(Array.isArray(n)&&\"number\"!=typeof c)return n.map((t=>r(t,a,i)));if(\"object\"!=typeof n||null===n||!(c in n))return e(n,c,i);const f=n[c];return 1===a.length?f:r(f,a.slice(1),i)},t=r=>r.split(/(\\.|\\[\\d+\\])/).filter((r=>\".\"!==r&&\"\"!==r)).map((r=>{const t=/\\[(\\d+)\\]/.exec(r);return t?Number(t[1]):r})).flat(),e=(r,t,e)=>{if(void 0===e)throw new Error(`Unable to extract object property\\nLooking for property: ${t}\\nIn object: ${JSON.stringify(r)}`);return e};export{r as default};\n","import{jsxs as e,jsx as t,Fragment as n}from\"react/jsx-runtime\";import{createContext as r,useContext as o,useState as i,useRef as a,useEffect as l,useCallback as s,useMemo as c}from\"react\";import d from\"object-property-assigner\";export{default as assign}from\"object-property-assigner\";import u from\"object-property-extractor\";export{default as extract}from\"object-property-extractor\";function p(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function g(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{s(r.next(e))}catch(e){i(e)}}function l(e){try{s(r.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,l)}s((r=r.apply(e,t||[])).next())}))}\"function\"==typeof SuppressedError&&SuppressedError;const m=({className:n,name:r,value:o,setValue:i,handleKeyPress:a,styles:l,textAreaRef:s})=>{if(\"string\"!=typeof o)return null;const c=\"\\n\"===o.slice(-1)?o+\".\":o;return e(\"div\",{style:{display:\"grid\"},children:[t(\"textarea\",{id:`${r}_textarea`,ref:s,style:Object.assign({height:\"auto\",gridArea:\"1 / 1 / 2 / 2\",overflowY:\"auto\",whiteSpace:\"pre-wrap\"},l),rows:1,className:n,name:`${r}_textarea`,value:o,onChange:e=>i(e.target.value),autoFocus:!0,onFocus:e=>{o.length<40&&e.target.select()},onKeyDown:a}),t(\"span\",{className:n,style:Object.assign({visibility:\"hidden\",height:\"auto\",gridArea:\"1 / 1 / 2 / 2\",color:\"red\",opacity:.9,whiteSpace:\"pre-wrap\",overflowY:\"auto\",border:\"1px solid transparent\"},l),children:c})]})},h=e=>null!==e&&\"object\"==typeof e,y=(e,t,n,r=\"\")=>{if(!n&&!r)return!0;switch(e){case\"collection\":if(n){if(n(t,r))return!0;if(!f(r,t,n))return!1}if(!n&&r&&!f(r,t))return!1;break;case\"value\":if(n&&!n(t,r))return!1;if(!n&&r&&!b(t,r))return!1}return!0},f=(e=\"\",t,n=b)=>{const r=t.value;return Object.entries(r).some((([o,i])=>{const a=[...t.path,o],l=Object.assign(Object.assign({},t),{key:o,path:a,level:t.level+1,value:i,size:a.length,parentData:r});return h(i)?f(e,l,n):n(l,e)}))},b=(e,t=\"\")=>{const{value:n}=e;if(null===n&&\"null\".includes(t.toLowerCase()))return!0;switch(typeof n){case\"string\":return n.toLowerCase().includes(t.toLowerCase());case\"number\":return!!String(n).includes(t);case\"boolean\":return n?\"true\".includes(t.toLowerCase())||\"1\"===t:\"false\".includes(t.toLowerCase())||\"0\"===t;default:return!1}},v=({key:e,path:t},n=\"\")=>!!b({value:e},n)||!!t.some((e=>b({value:e},n))),j=(e,t)=>(null!=t?t:\"\")+e.map((e=>\"\"===e?String.fromCharCode(0):e)).join(\".\"),E=e=>e.shiftKey?\"Shift\":e.metaKey?\"Meta\":e.ctrlKey?\"Control\":e.altKey?\"Alt\":void 0,w=(e,t,n)=>{const r=e.key,o=E(e);if(Array.isArray(t))return!!o&&t.includes(o);const{key:i,modifier:a}=t;return(\"stringLineBreak\"!==n||\"Enter\"!==r||\"Shift\"!==o||\"Enter\"!==i||!(null==a?void 0:a.includes(\"Shift\")))&&(r===i&&(a===o||Array.isArray(a)&&a.includes(o)))},D={key:\"Enter\"},C={confirm:D,cancel:{key:\"Escape\"},objectConfirm:Object.assign(Object.assign({},D),{modifier:[\"Meta\",\"Shift\",\"Control\"]}),objectLineBreak:D,stringConfirm:D,stringLineBreak:Object.assign(Object.assign({},D),{modifier:[\"Shift\"]}),numberConfirm:D,numberUp:{key:\"ArrowUp\"},numberDown:{key:\"ArrowDown\"},tabForward:{key:\"Tab\"},tabBack:{key:\"Tab\",modifier:\"Shift\"},booleanConfirm:D,booleanToggle:{key:\" \"},clipboardModifier:[\"Meta\",\"Control\"],collapseModifier:[\"Alt\"]},O=(e,t,n=\"next\",r)=>{const o=t.slice(0,t.length-1),i=t.slice(-1)[0];if(void 0===i)return null;const a=u(e,o),l=S(a);Array.isArray(a)||r(l,(({key:e,value:t})=>[e,t]));const s=l.findIndex((e=>e.key===i)),c=l[s+(\"next\"===n?1:-1)];return c?h(c.value)?0===Object.keys(c.value).length?O(e,[...o,c.key],n,r):k(e,[...o,c.key],n,r):[...o,c.key]:0===o.length?null:O(e,o,n,r)},k=(e,t,n=\"next\",r)=>{const o=u(e,t);if(!h(o))return t;const i=Array.isArray(o)?o.map(((e,t)=>t)):Object.keys(o);r(i,(e=>[e,o]));const a=\"next\"===n?i[0]:i[i.length-1];return k(e,[...t,a],n,r)},S=e=>Array.isArray(e)?e.map(((e,t)=>({index:t,value:e,key:t}))):Object.entries(e).map((([e,t],n)=>({key:e,value:t,index:n}))),N=(e,t)=>{var n,r,o,i;const a=e.current,l=null!==(n=null==a?void 0:a.selectionStart)&&void 0!==n?n:1/0,s=null!==(r=null==a?void 0:a.selectionEnd)&&void 0!==r?r:1/0,c=(null===(o=null==a?void 0:a.textContent)||void 0===o?void 0:o.slice(0,l))+t+(null===(i=null==a?void 0:a.textContent)||void 0===i?void 0:i.slice(s));return a.value=c,null==a||a.setSelectionRange(l+1,l+1),c},T=e=>{if(e!==x){if(Array.isArray(e))return e.map((e=>T(e)));if(e&&\"object\"==typeof e)for(const t in e)e[t]=T(e[t]);return e}},x=\"__​undefined__\",A={displayName:\"Default\",fragments:{edit:\"rgb(42, 161, 152)\"},styles:{container:{backgroundColor:\"#f6f6f6\",fontFamily:\"monospace\"},collection:{},collectionInner:{},collectionElement:{},dropZone:{},property:\"#292929\",bracket:{color:\"rgb(0, 43, 54)\",fontWeight:\"bold\"},itemCount:{color:\"rgba(0, 0, 0, 0.3)\",fontStyle:\"italic\"},string:\"rgb(203, 75, 22)\",number:\"rgb(38, 139, 210)\",boolean:\"green\",null:{color:\"rgb(220, 50, 47)\",fontVariant:\"small-caps\",fontWeight:\"bold\"},input:[\"#292929\"],inputHighlight:\"#b3d8ff\",error:{fontSize:\"0.8em\",color:\"red\",fontWeight:\"bold\"},iconCollection:\"rgb(0, 43, 54)\",iconEdit:\"edit\",iconDelete:\"rgb(203, 75, 22)\",iconAdd:\"edit\",iconCopy:\"rgb(38, 139, 210)\",iconOk:\"green\",iconCancel:\"rgb(203, 75, 22)\"}},P=r({getStyles:()=>({}),icons:{}}),R=({theme:e=A,icons:n={},docRoot:r,children:o})=>{const i=I(e,r);return t(P.Provider,{value:{getStyles:(e,t)=>\"function\"==typeof i[e]?i[e](t):i[e],icons:n},children:o})},K=()=>o(P),I=(e,t)=>{var n,r,o,i;const a={},l=(Array.isArray(e)?e:[e]).map((e=>_(e)?V({fragments:{},styles:e},a):V(e,a))),s=V(A,{});Object.keys(s).forEach((e=>{const t=e;l.forEach((e=>{e[t]&&(s[t]=Object.assign(Object.assign({},s[t]),e[t]))}))}));const c=Object.assign({},s);return Object.entries(a).forEach((([e,t])=>{const n=e;c[n]=e=>{const r=t(e)||{};return Object.assign(Object.assign({},s[n]),r)}})),\"function\"!=typeof(null==c?void 0:c.inputHighlight)&&(null===(n=null==c?void 0:c.inputHighlight)||void 0===n?void 0:n.backgroundColor)&&t.style.setProperty(\"--jer-highlight-color\",null===(r=null==c?void 0:c.inputHighlight)||void 0===r?void 0:r.backgroundColor),\"function\"!=typeof(null==c?void 0:c.iconCopy)&&(null===(o=null==c?void 0:c.iconCopy)||void 0===o?void 0:o.color)&&t.style.setProperty(\"--jer-icon-copy-color\",null===(i=null==c?void 0:c.iconCopy)||void 0===i?void 0:i.color),c},V=(e,t)=>{const{fragments:n,styles:r}=e,o={};return Object.entries(r).forEach((([e,r])=>{const i=(Array.isArray(r)?r:[r]).reduce(((r,o)=>{var i,a;if(\"function\"==typeof o)return t[e]=o,Object.assign({},r);if(\"string\"==typeof o){const t=null!==(i=null==n?void 0:n[o])&&void 0!==i?i:o;return\"string\"==typeof t?Object.assign(Object.assign({},r),{[null!==(a=F[e])&&void 0!==a?a:\"color\"]:t}):Object.assign(Object.assign({},r),t)}return Object.assign(Object.assign({},r),o)}),{});o[e]=i})),o},_=e=>!(\"styles\"in e),F={container:\"backgroundColor\",collection:\"backgroundColor\",collectionInner:\"backgroundColor\",collectionElement:\"backgroundColor\",dropZone:\"borderColor\",inputHighlight:\"backgroundColor\"},L=r(null),z=({children:e,onEditEvent:n,onCollapse:r})=>{const[o,l]=i(null),[s,c]=i(null),[d,u]=i(null),[p,g]=i({path:null,pathString:null}),m=a(null),h=a(\"next\"),y=a(null);return t(L.Provider,{value:{collapseState:o,setCollapseState:e=>{l(e),r&&null!==e&&(Array.isArray(e)?e.forEach((e=>r(e))):r(e)),null!==e&&setTimeout((()=>l(null)),2e3)},getMatchingCollapseState:e=>{if(Array.isArray(o)){for(const t of o)if(B(e,t))return t;return null}return B(e,o)?o:null},currentlyEditingElement:s,setCurrentlyEditingElement:(e,t)=>{const r=\"string\"==typeof e||null===e?e:j(e,\"key\"===t?\"key_\":void 0);null!==s&&null!==r&&null!==m.current&&m.current(),c(r),n&&(Array.isArray(e)||null===e)&&n(e,\"key\"===t),m.current=\"function\"==typeof t?t:null},areChildrenBeingEdited:e=>null!==s&&s.includes(e),previouslyEditedElement:y.current,setPreviouslyEditedElement:e=>{y.current=e},tabDirection:h.current,setTabDirection:e=>{h.current=e},previousValue:d,setPreviousValue:u,dragSource:p,setDragSource:g},children:e})},M=()=>{const e=o(L);if(!e)throw new Error(\"Missing Context Provider\");return e},B=(e,t)=>{if(null===t)return!1;if(!t.includeChildren)return t.path.every(((t,n)=>e[n]===t))&&t.path.length===e.length;for(const[n,r]of t.path.entries())if(r!==e[n])return!1;return!0},W=\"**INVALID_FUNCTION**\",G=({nodeData:r,showStringQuotes:o=!0,stringTruncate:a=200,pathString:l,canEdit:s,setIsEditing:c,styles:d,translate:u,value:p,TextWrapper:g=({children:e})=>e})=>{const m=null!=p?p:r.value,[h,y]=i(!1),f=o?'\"':\"\",b=m.length>a,v=()=>{s?c(!0):y(!h)};return e(\"div\",{id:`${l}_display`,onDoubleClick:v,onClick:e=>{(e.getModifierState(\"Control\")||e.getModifierState(\"Meta\"))&&v()},className:\"jer-value-string\",style:d,children:[f,b?e(n,h?{children:[t(g,{children:e(\"span\",{children:[m,f]})}),e(\"span\",{className:\"jer-string-expansion jer-show-less\",onClick:()=>y(!1),children:[\" \",u(\"SHOW_LESS\",r)]})]}:{children:[e(g,{children:[t(\"span\",{children:m.slice(0,a-2).trimEnd()}),\" \"]}),t(\"span\",{className:\"jer-string-expansion jer-ellipsis\",onClick:()=>y(!0),children:\"...\"}),f]}):t(g,{children:`${m}${f}`})]})},Y=({styles:e,pathString:n,value:r,setValue:o,handleEdit:i,handleKeyboard:l,keyboardCommon:s})=>{const c=a(null);return t(m,{className:\"jer-input-text\",textAreaRef:c,name:n,value:r,setValue:o,handleKeyPress:e=>{l(e,Object.assign({stringConfirm:i,stringLineBreak:()=>{const e=N(c,\"\\n\");o(e)}},s))},styles:e})},H=n=>{var{isEditing:r,path:o,enumType:i}=n,a=p(n,[\"isEditing\",\"path\",\"enumType\"]);const{getStyles:l}=K(),s=j(o),{value:c,setValue:d,nodeData:u,handleEdit:g,handleKeyboard:m,keyboardCommon:h}=a;return r&&i?e(\"div\",{className:\"jer-select jer-select-enums\",children:[t(\"select\",{name:`${s}-value-select`,className:\"jer-select-inner\",onChange:e=>d(e.target.value),value:c,autoFocus:!0,onKeyDown:e=>{m(e,Object.assign({stringConfirm:g},h))},children:i.values.map((e=>t(\"option\",{value:e,children:e},e)))}),t(\"span\",{className:\"focus\"})]}):r?t(Y,Object.assign({styles:l(\"input\",u),pathString:s},a,{setValue:a.setValue})):t(G,Object.assign({pathString:s,styles:l(\"string\",u)},a))},U=({value:e,setValue:n,isEditing:r,path:o,setIsEditing:i,handleEdit:a,nodeData:l,handleKeyboard:s,keyboardCommon:c})=>{const{getStyles:d}=K();return r?t(\"input\",{className:\"jer-input-number\",type:\"text\",name:j(o),value:e,onChange:e=>n(e.target.value.replace(/[^0-9.-]/g,\"\")),autoFocus:!0,onFocus:e=>setTimeout((()=>e.target.select()),10),onKeyDown:t=>s(t,Object.assign({numberConfirm:a,numberUp:()=>n(Number(e)+1),numberDown:()=>n(Number(e)-1)},c)),style:Object.assign({width:String(e).length/1.5+2+\"em\"},d(\"input\",l))}):t(\"span\",{onDoubleClick:()=>i(!0),className:\"jer-value-number\",style:d(\"number\",l),children:e})},$=({value:e,setValue:n,isEditing:r,path:o,setIsEditing:i,handleEdit:a,nodeData:l,handleKeyboard:s,keyboardCommon:c})=>{const{getStyles:d}=K();return\"boolean\"!=typeof e?null:r?t(\"input\",{className:\"jer-input-boolean\",type:\"checkbox\",name:j(o),checked:e,onChange:()=>n(!e),onKeyDown:t=>{\" \"===t.key&&t.preventDefault(),s(t,Object.assign({booleanConfirm:a,booleanToggle:()=>n(!e)},c))},autoFocus:!0}):t(\"span\",{onDoubleClick:()=>i(!0),className:\"jer-value-boolean\",style:d(\"boolean\",l),children:String(e)})},Z=(e,t)=>{const n=a(void 0),r=a(t);l((()=>{r.current=t}),[t]);const o=e=>{r.current(e)};l((()=>{if(window.clearTimeout(n.current),e)return n.current=window.setTimeout((()=>{window.addEventListener(\"keydown\",o)}),100),()=>{window.clearTimeout(n.current),window.removeEventListener(\"keydown\",o)}}),[e])},X=({value:e,isEditing:n,setIsEditing:r,handleEdit:o,nodeData:i,handleKeyboard:a,keyboardCommon:l})=>{const{getStyles:s}=K();return Z(n,(e=>a(e,Object.assign({confirm:o},l)))),t(\"div\",{onDoubleClick:()=>r(!0),className:\"jer-value-null\",style:s(\"null\",i),children:String(e)})},J=({value:e})=>{let n=\"Error!\";switch(typeof e){case\"string\":e===W&&(n=\"Function\");break;case\"undefined\":n=\"Undefined\";break;case\"symbol\":n=\"Symbol\"}return t(\"span\",{className:\"jer-value-invalid\",children:n})},Q=({size:n,style:r,className:o})=>e(\"svg\",{viewBox:\"0 0 24 24\",fill:\"currentColor\",width:n,height:n,className:o,style:r,children:[t(\"path\",{d:\"M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4z\"}),t(\"path\",{d:\"M12 2C6.486 2 2 6.486 2 12s4.486 10 10 10 10-4.486 10-10S17.514 2 12 2zm0 18c-4.411 0-8-3.589-8-8s3.589-8 8-8 8 3.589 8 8-3.589 8-8 8z\"})]}),q=({size:n,style:r,className:o})=>e(\"svg\",{viewBox:\"0 0 24 24\",fill:\"currentColor\",width:n,height:n,className:o,style:r,transform:\"translate(0, 0.5)\",children:[t(\"path\",{d:\"M7 17.013l4.413-.015 9.632-9.54c.378-.378.586-.88.586-1.414s-.208-1.036-.586-1.414l-1.586-1.586c-.756-.756-2.075-.752-2.825-.003L7 12.583v4.43zM18.045 4.458l1.589 1.583-1.597 1.582-1.586-1.585 1.594-1.58zM9 13.417l6.03-5.973 1.586 1.586-6.029 5.971L9 15.006v-1.589z\"}),t(\"path\",{d:\"M5 21h14c1.103 0 2-.897 2-2v-8.668l-2 2V19H8.158c-.026 0-.053.01-.079.01-.033 0-.066-.009-.1-.01H5V5h6.847l2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2z\"})]}),ee=({size:e,style:n,className:r})=>t(\"svg\",{viewBox:\"0 0 24 24\",fill:\"currentColor\",width:e,height:e,className:r,style:n,children:t(\"path\",{d:\"M6 19a2 2 0 002 2h8a2 2 0 002-2V7H6v12m2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12M15.5 4l-1-1h-5l-1 1H5v2h14V4h-3.5z\"})}),te=({size:n,style:r,className:o})=>e(\"svg\",{fill:\"none\",stroke:\"currentColor\",strokeLinecap:\"round\",strokeLinejoin:\"round\",strokeWidth:2,viewBox:\"0 0 24 24\",width:n,height:n,className:o,style:r,children:[t(\"path\",{d:\"M9 2 H15 A1 1 0 0 1 16 3 V5 A1 1 0 0 1 15 6 H9 A1 1 0 0 1 8 5 V3 A1 1 0 0 1 9 2 z\"}),t(\"path\",{d:\"M8 4H6a2 2 0 00-2 2v14a2 2 0 002 2h12a2 2 0 002-2v-2M16 4h2a2 2 0 012 2v4M21 14H11\"}),t(\"path\",{d:\"M15 10l-4 4 4 4\"})]}),ne=({size:n,style:r,className:o})=>e(\"svg\",{fill:\"none\",stroke:\"currentColor\",strokeLinecap:\"round\",strokeLinejoin:\"round\",strokeWidth:2,viewBox:\"0 0 24 24\",width:n,height:n,className:o,style:r,children:[t(\"path\",{d:\"M22 11.08V12a10 10 0 11-5.93-9.14\"}),t(\"path\",{d:\"M22 4L12 14.01l-3-3\"})]}),re=({size:e,style:n,className:r})=>t(\"svg\",{baseProfile:\"tiny\",viewBox:\"0 0 24 24\",fill:\"currentColor\",width:e,height:e,className:r,style:n,children:t(\"path\",{d:\"M12 4c-4.411 0-8 3.589-8 8s3.589 8 8 8 8-3.589 8-8-3.589-8-8-8zm-5 8c0-.832.224-1.604.584-2.295l6.711 6.711A4.943 4.943 0 0112 17c-2.757 0-5-2.243-5-5zm9.416 2.295L9.705 7.584A4.943 4.943 0 0112 7c2.757 0 5 2.243 5 5 0 .832-.224 1.604-.584 2.295z\"})}),oe=({size:e,style:n,className:r})=>t(\"svg\",{viewBox:\"0 0 512 512\",fill:\"currentColor\",width:e,height:e,className:r,style:n,children:t(\"path\",{d:\"M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z\"})}),ie=({name:e,nodeData:r})=>{var o,i,a,l,s,c,d;const{getStyles:u,icons:p}=K(),g={size:\"1.4em\",className:\"jer-icon\"};switch(e){case\"add\":return null!==(o=null==p?void 0:p.add)&&void 0!==o?o:t(Q,Object.assign({},g,{style:u(\"iconAdd\",r)}));case\"edit\":return null!==(i=null==p?void 0:p.edit)&&void 0!==i?i:t(q,Object.assign({},g,{style:u(\"iconEdit\",r)}));case\"delete\":return null!==(a=null==p?void 0:p.delete)&&void 0!==a?a:t(ee,Object.assign({},g,{style:u(\"iconDelete\",r),size:\"1.45em\"}));case\"copy\":return null!==(l=null==p?void 0:p.copy)&&void 0!==l?l:t(te,Object.assign({},g,{style:u(\"iconCopy\",r),size:\"1.2em\"}));case\"ok\":return null!==(s=null==p?void 0:p.ok)&&void 0!==s?s:t(ne,Object.assign({},g,{style:Object.assign({fontSize:\"90%\"},u(\"iconOk\",r))}));case\"cancel\":return null!==(c=null==p?void 0:p.cancel)&&void 0!==c?c:t(re,Object.assign({},g,{style:Object.assign({fontSize:\"130%\"},u(\"iconCancel\",r))}));case\"chevron\":return null!==(d=null==p?void 0:p.chevron)&&void 0!==d?d:t(oe,{size:\"1em\",style:u(\"iconCollection\",r)});default:return t(n,{})}},ae=({startEdit:r,handleDelete:o,handleAdd:a,enableClipboard:l,type:s,customButtons:c,nodeData:d,translate:p,keyboardControls:g,handleKeyboard:m,editConfirmRef:h,getNewKeyOptions:y,jsonStringify:f,onEditEvent:b,showIconTooltips:v})=>{const{getStyles:j}=K(),w=p(\"KEY_NEW\",d),[D,C]=i(w),[O,k]=i(!1),{key:S,path:N,value:T}=d,x=Array.isArray(O),A=e=>{var t;if(b&&b(e?[...N,null]:null,e),!e)return void k(!1);const n=Object.keys(u(d.fullData,N)),r=y?null===(t=y(d))||void 0===t?void 0:t.filter((e=>!n.includes(e))):null;r&&C(\"\"),k(null==r||r)};return e(\"div\",{className:\"jer-edit-buttons\",style:{opacity:O?1:void 0},onClick:e=>e.stopPropagation(),children:[l&&t(\"div\",{onClick:e=>{var t;e.stopPropagation();let n,r,o=\"value\",i=\"\",a=null;if(l){const s=E(e);if(s&&g.clipboardModifier.includes(s)?(n=se(N),i=n,o=\"path\"):(n=T,i=\"object\"==typeof n?f(T):String(n)),!navigator.clipboard)return void(\"function\"==typeof l&&l({success:!1,value:n,stringValue:i,path:N,key:S,type:o,errorMessage:\"Can't access clipboard API\"}));null===(t=navigator.clipboard)||void 0===t||t.writeText(i).then((()=>r=!0)).catch((e=>{r=!1,a=e.message})).finally((()=>{\"function\"==typeof l&&l({success:r,errorMessage:a,value:n,stringValue:i,path:N,key:S,type:o})}))}},className:\"jer-copy-pulse\",title:v?p(\"TOOLTIP_COPY\",d):\"\",children:t(ie,{name:\"copy\",nodeData:d})}),r&&t(\"div\",{onClick:r,title:v?p(\"TOOLTIP_EDIT\",d):\"\",children:t(ie,{name:\"edit\",nodeData:d})}),o&&t(\"div\",{onClick:o,title:v?p(\"TOOLTIP_DELETE\",d):\"\",children:t(ie,{name:\"delete\",nodeData:d})}),a&&t(\"div\",{onClick:()=>{\"object\"===s?A(!0):a(\"\")},title:v?p(\"TOOLTIP_ADD\",d):\"\",children:t(ie,{name:\"add\",nodeData:d})}),null==c?void 0:c.map((({Element:e,onClick:n},r)=>t(\"div\",{onClick:e=>n&&n(d,e),children:t(e,{nodeData:d})},r))),O&&a&&\"object\"===s&&e(n,{children:[x?e(\"div\",{className:\"jer-select jer-select-keys\",children:[e(\"select\",{name:\"new-key-select\",className:\"jer-select-inner\",onChange:e=>{a(e.target.value),A(!1)},defaultValue:\"\",autoFocus:!0,onKeyDown:e=>{m(e,{cancel:()=>A(!1)})},children:[t(\"option\",{value:\"\",disabled:!0,children:O.length>0?p(\"KEY_SELECT\",d):p(\"NO_KEY_OPTIONS\",d)}),O.map((e=>t(\"option\",{value:e,children:e},e)))]}),t(\"span\",{className:\"focus\"})]}):t(\"input\",{className:\"jer-input-new-key\",type:\"text\",name:\"new-object-key\",value:D,onChange:e=>C(e.target.value),autoFocus:!0,onFocus:e=>e.target.select(),onKeyDown:e=>{m(e,{stringConfirm:()=>{a&&(A(!1),a(D),C(w))},cancel:()=>{A(!1),C(w)}})},style:j(\"input\",d)}),t(le,{onOk:()=>{x&&!D||(A(!1),a(D))},onCancel:()=>{A(!1)},nodeData:d,editConfirmRef:h,hideOk:x})]})]})},le=({onOk:n,onCancel:r,nodeData:o,editConfirmRef:i,hideOk:a=!1})=>e(\"div\",{className:\"jer-confirm-buttons\",children:[!a&&t(\"div\",{onClick:n,ref:i,children:t(ie,{name:\"ok\",nodeData:o})}),t(\"div\",{onClick:r,children:t(ie,{name:\"cancel\",nodeData:o})})]}),se=e=>e.reduce(((e,t)=>\"number\"==typeof t?`${e}[${t}]`:\"\"===e?t:`${e}.${t}`),\"\"),ce=[\"string\",\"number\",\"boolean\",\"null\",\"object\",\"array\"],de=({props:e,collapsed:t})=>{const{data:n,nodeData:r,parentData:o,onEdit:a,onError:l,showErrorMessages:c,restrictEditFilter:d,restrictDeleteFilter:u,restrictAddFilter:p,restrictDragFilter:g,translate:m,errorMessageTimeout:h}=e,{currentlyEditingElement:y,setCurrentlyEditingElement:f}=M(),[b,v]=i(null),E=Object.assign(Object.assign({},r),{collapsed:t}),{path:w,key:D,size:C}=E,O=j(w),k=!d(E),S=!u(E),N=!p(E),T=!g(E)&&S&&null===y,x=e=>{c&&(v(e),setTimeout((()=>v(null)),h)),console.warn(\"Error\",e)},A=s(((e,t)=>{x(e.message),l&&l({currentData:E.fullData,errorValue:t,currentValue:n,name:D,path:w,error:e})}),[l,c]),P=y===O,R=y===`key_${O}`,K=\"number\"==typeof w.slice(-1)[0],I={isEditing:P,isEditingKey:R,isArray:K,canEditKey:null!==o&&k&&N&&S&&!K},V=\"\"===D&&w.length>0?m(\"EMPTY_STRING\",E):null;return{pathString:O,nodeData:E,path:w,name:D,size:C,canEdit:k,canDelete:S,canAdd:N,canDrag:T,error:b,showError:x,onError:A,setError:v,handleEditKey:e=>{if(f(null),D===e)return;if(!o)return;const t=w.slice(0,-1);if(Object.keys(o).includes(e))return void A({code:\"KEY_EXISTS\",message:m(\"ERROR_KEY_EXISTS\",E)},e);const n=Object.fromEntries(Object.entries(o).map((([t,n])=>t===D?[e,n]:[t,n])));a(n,t).then((t=>{t&&A({code:\"UPDATE_ERROR\",message:t},e)}))},derivedValues:I,emptyStringKey:V}},ue=({canDrag:e,canDragOnto:n,path:r,nodeData:o,onMove:a,onError:l,translate:s})=>{const{getStyles:d}=K(),{dragSource:u,setDragSource:p}=M(),[g,m]=i(!1),h=j(r),y=c((()=>e?{onDragStart:e=>{e.stopPropagation(),p({path:r,pathString:h})},onDragEnd:e=>{e.stopPropagation(),p({path:null,pathString:null})}}:{}),[e,h]),f=c((()=>e=>n?{onDragOver:e=>{e.stopPropagation(),e.preventDefault()},onDrop:t=>{t.stopPropagation(),v(e),p({path:null,pathString:null}),m(!1)},onDragEnter:t=>{var n;t.stopPropagation(),h.startsWith(null!==(n=u.pathString)&&void 0!==n?n:\"\")||m(e)},onDragExit:e=>{e.stopPropagation(),m(!1)}}:{}),[u,n,h]),b=c((()=>n&&null!==u.pathString?t(\"div\",Object.assign({className:\"jer-drop-target-bottom\",style:{height:\"50%\",position:\"absolute\",width:\"100%\",top:\"50%\",zIndex:r.length}},f(\"below\"))):null),[u,n,r.length]),v=e=>{var t,n;const i=null===(t=u.path)||void 0===t?void 0:t.slice(-1)[0],c=null===(n=u.path)||void 0===n?void 0:n.slice(0,-1).join(\".\"),d=r.slice(0,-1).join(\"\"),{parentData:p}=o;\"string\"==typeof i&&p&&!Array.isArray(p)&&Object.keys(p).includes(i)&&i in p&&c!==d?l({code:\"KEY_EXISTS\",message:s(\"ERROR_KEY_EXISTS\",o)},i):a(u.path,r,e).then((e=>{e&&l({code:\"UPDATE_ERROR\",message:e},o.value)}))};return{dragSourceProps:y,getDropTargetProps:f,BottomDropTarget:b,DropTargetPadding:({position:e,nodeData:n})=>g===e?t(\"div\",{className:\"jer-drag-n-drop-padding\",style:d(\"dropZone\",n)}):null,handleDrop:v}},pe=(e,t,n,r)=>{var o,i,a;if(!t.current)return 0;const l=parseInt(null!==(o=getComputedStyle(n.current).getPropertyValue(\"line-height\"))&&void 0!==o?o:\"16px\"),s=(null!==(a=null===(i=t.current)||void 0===i?void 0:i.offsetWidth)&&void 0!==a?a:0)/(.5*l),c=r(e).replace(/\\\\n/g,\"\\n\").split(\"\\n\").map((e=>Math.ceil(e.length/s))).reduce(((e,t)=>e+t),0)*l;return Math.min(c+30,window.innerHeight-50)},ge=({isEditingKey:n,canEditKey:r,pathString:o,path:i,name:a,arrayIndexFromOne:l,handleKeyboard:s,handleEditKey:c,handleCancel:d,handleClick:u,keyValueArray:p,styles:g,getNextOrPrevious:m,emptyStringKey:h})=>{const{setCurrentlyEditingElement:y}=M(),f=\"number\"==typeof a?String(a+(l?1:0)):a;return n?t(\"input\",{className:\"jer-input-text jer-key-edit\",type:\"text\",name:o,defaultValue:f,autoFocus:!0,onFocus:e=>e.target.select(),onKeyDown:e=>s(e,{stringConfirm:()=>c(e.target.value),cancel:d,tabForward:()=>{if(c(e.target.value),p){const e=null==p?void 0:p[0][0];y(e?[...i,e]:m(\"next\"))}else y(i)},tabBack:()=>{c(e.target.value),y(m(\"prev\"))}}),style:{width:f.length/1.5+.5+\"em\"}}):e(\"span\",{className:\"jer-key-text\",style:Object.assign(Object.assign({},g),{minWidth:`${Math.min(f.length+1,5)}ch`,flexShrink:f.length>10?1:0}),onDoubleClick:()=>r&&y(i,\"key\"),onClick:u,children:[h?t(\"span\",{className:\"jer-empty-string\",children:h}):f,\"\"!==f||h?t(\"span\",{className:\"jer-key-colon\",children:\":\"}):null]})},me=n=>{const{data:r,parentData:o,onEdit:a,onDelete:d,onChange:u,onMove:p,enableClipboard:g,canDragOnto:m,restrictTypeSelection:h,searchFilter:f,searchText:b,showLabel:v,stringTruncate:j,showStringQuotes:E,arrayIndexFromOne:w,indent:D,translate:C,customNodeDefinitions:k,customNodeData:S,handleKeyboard:N,keyboardControls:T,sort:x,editConfirmRef:A,jsonStringify:P,showIconTooltips:R}=n,{getStyles:I}=K(),{setCurrentlyEditingElement:V,setCollapseState:_,previouslyEditedElement:F,setPreviouslyEditedElement:L,tabDirection:z,setTabDirection:B,previousValue:G,setPreviousValue:Y}=M(),[H,U]=i(\"function\"==typeof r?W:r),{pathString:$,nodeData:Z,path:X,name:J,canEdit:Q,canDelete:q,canDrag:ee,error:te,onError:ne,handleEditKey:re,emptyStringKey:oe,derivedValues:ie}=de({props:n}),{dragSourceProps:se,getDropTargetProps:pe,BottomDropTarget:me,DropTargetPadding:be}=ue({canDrag:ee,canDragOnto:m,path:X,nodeData:Z,onMove:p,onError:ne,translate:C}),[ve,je]=i(he(r,S)),Ee=s((e=>{if(!u)return void U(e);const t=u({currentData:Z.fullData,newValue:e,currentValue:H,name:J,path:X});U(t)}),[u]);l((()=>{U(\"function\"==typeof r?W:r),je(he(r,S))}),[r,te]);const{CustomNode:we,customNodeProps:De,hideKey:Ce,showEditTools:Oe=!0,showOnEdit:ke,showOnView:Se,passOriginalNode:Ne}=S,Te=[...ce,...k.filter((({showInTypesSelector:e=!1,name:t})=>e&&!!t)).map((({name:e})=>e))],xe=c((()=>{if(\"boolean\"==typeof h)return h?[]:Te;if(Array.isArray(h))return h;const e=h(Z);return\"boolean\"==typeof e?e?[]:Te:e}),[Z,h]),[Ae,Pe]=i(((e,t)=>{var n;if(\"string\"!=typeof e)return null;const r=t.filter((t=>t instanceof Object&&t.enum&&t.values.includes(e)&&t.matchPriority));return r.sort(((e,t)=>{var n,r;return(null!==(n=t.matchPriority)&&void 0!==n?n:0)-(null!==(r=e.matchPriority)&&void 0!==r?r:0)})),null!==(n=r[0])&&void 0!==n?n:null})(H,xe)),{isEditing:Re}=ie,Ke=y(\"value\",Z,f,b);if(Re&&(!Ke||!Q)){const e=O(Z.fullData,X,z,x);V(e||F)}if(!Ke)return null;const Ie=e=>{let t;if(V(null),Y(null),void 0===e||(e=>e&&\"object\"==typeof e&&\"type\"in e&&\"target\"in e&&\"preventDefault\"in e&&\"function\"==typeof e.preventDefault)(e))switch(ve){case\"object\":t={[C(\"DEFAULT_NEW_KEY\",Z)]:H};break;case\"array\":t=null!=H?H:[];break;case\"number\":{const e=Number(H);t=isNaN(e)?0:e;break}default:t=H}else t=e;a(t,X).then((e=>{e&&ne({code:\"UPDATE_ERROR\",message:e},t)}))},Ve=()=>{V(null),null===G?(U(r),Y(null)):a(G,X)},{isEditingKey:_e,canEditKey:Fe}=ie,Le=!Re&&te,ze=Re&&xe.length>1,Me=(\"invalid\"!==ve||we)&&!te&&Oe,Be=v&&!Ce,We=we&&(Re&&ke||!Re&&Se),Ge={value:H,parentData:o,setValue:Ee,isEditing:Re,canEdit:Q,setIsEditing:Q?()=>V(X):()=>{},handleEdit:Ie,handleCancel:Ve,path:X,stringTruncate:j,showStringQuotes:E,nodeData:Z,enumType:Ae,translate:C,handleKeyboard:N,keyboardCommon:{cancel:Ve,tabForward:()=>{B(\"next\"),L($);const e=O(Z.fullData,X,\"next\",x);e&&(Ie(),V(e))},tabBack:()=>{B(\"prev\"),L($);const e=O(Z.fullData,X,\"prev\",x);e&&(Ie(),V(e))}}},Ye={canEditKey:Fe,isEditingKey:_e,pathString:$,path:X,name:J,arrayIndexFromOne:w,handleKeyboard:N,handleEditKey:re,handleCancel:Ve,styles:I(\"property\",Z),getNextOrPrevious:e=>O(Z.fullData,X,e,x),emptyStringKey:oe},He=We?t(we,Object.assign({},n,{value:H,customNodeProps:De,setValue:Ee,handleEdit:Ie,handleCancel:Ve,handleKeyPress:e=>N(e,{stringConfirm:Ie,cancel:Ve}),isEditing:Re,setIsEditing:()=>V(X),getStyles:I,originalNode:Ne?ye(r,Ge):void 0,originalNodeKey:Ne?t(ge,Object.assign({},Ye)):void 0,canEdit:Q,keyboardCommon:Ge.keyboardCommon,onError:ne})):ye(r,Ge);return e(\"div\",Object.assign({className:\"jer-component jer-value-component\",style:{marginLeft:null!==o?D/2+\"em\":0,position:\"relative\"},draggable:ee},se,pe(\"above\"),{children:[me,t(be,{position:\"above\",nodeData:Z}),e(\"div\",{className:\"jer-value-main-row\",style:{flexWrap:J.length>10?\"wrap\":\"nowrap\"},children:[Be&&t(ge,Object.assign({},Ye)),e(\"div\",{className:\"jer-value-and-buttons\",children:[t(\"div\",{className:\"jer-input-component\",children:He}),Re?t(le,{onOk:Ie,onCancel:Ve,nodeData:Z,editConfirmRef:A}):Me&&t(ae,{startEdit:Q?()=>{Y(G),V(X,Ve)}:void 0,handleDelete:q?()=>{d(H,X).then((e=>{e&&ne({code:\"DELETE_ERROR\",message:e},H)}))}:void 0,enableClipboard:g,translate:C,customButtons:n.customButtons,nodeData:Z,handleKeyboard:N,keyboardControls:T,editConfirmRef:A,jsonStringify:P,showIconTooltips:R}),ze&&e(\"div\",{className:\"jer-select jer-select-types\",children:[t(\"select\",{name:`${J}-type-select`,className:\"jer-select-inner\",onChange:e=>(e=>{const t=k.find((t=>t.name===e));if(t)return a(t.defaultValue,X),je(e),Pe(null),V(null),void _({path:X,collapsed:!1,includeChildren:!1});const n=xe.find((t=>t instanceof Object&&t.enum===e));if(n)return\"string\"==typeof H&&n.values.includes(H)||a(n.values[0],X).then((e=>{e&&(ne({code:\"UPDATE_ERROR\",message:e},r),V(null))})),void Pe(n);const r=fe(H,e,C(\"DEFAULT_NEW_KEY\",Z),(null==S?void 0:S.CustomNode)?C(\"DEFAULT_STRING\",Z):void 0);[\"string\",\"number\",\"boolean\"].includes(e)||V(null),a(r,X).then((e=>{e?(ne({code:\"UPDATE_ERROR\",message:e},r),V(null)):Pe(null)}))})(e.target.value),value:Ae?Ae.enum:ve,children:xe.map((e=>e instanceof Object&&\"enum\"in e?t(\"option\",{value:e.enum,children:e.enum},e.enum):t(\"option\",{value:e,children:e},e)))}),t(\"span\",{className:\"focus\"})]}),Le&&t(\"span\",{className:\"jer-error-slug\",style:I(\"error\",Z),children:te})]})]}),t(be,{position:\"below\",nodeData:Z})]}))},he=(e,t)=>(null==t?void 0:t.CustomNode)&&(null==t?void 0:t.name)&&t.showInTypesSelector?t.name:\"string\"==typeof e?\"string\":\"number\"==typeof e?\"number\":\"boolean\"==typeof e?\"boolean\":null===e?\"null\":\"invalid\",ye=(e,n)=>{const r=he(e),{value:o}=n;switch(r){case\"string\":return t(H,Object.assign({},n,{value:o}));case\"number\":return t(U,Object.assign({},n,{value:o}));case\"boolean\":return t($,Object.assign({},n,{value:o}));case\"null\":return t(X,Object.assign({},n));default:return t(J,Object.assign({},n))}},fe=(e,t,n,r)=>{switch(t){case\"string\":return null!=r?r:String(e);case\"number\":{const t=Number(e);return isNaN(t)?0:t}case\"boolean\":return!!e;case\"null\":return null;case\"object\":return{[n]:e};case\"array\":return[e];default:return String(e)}},be=(e=[],t)=>{const n=e.filter((({condition:e})=>e(t)));if(0===n.length)return{};const r=n[0],{element:o,wrapperElement:i,customNodeProps:a,wrapperProps:l,hideKey:s=!1,showEditTools:c=!0,showOnEdit:d=!1,showOnView:u=!0,showCollectionWrapper:g=!0}=r,m=p(r,[\"element\",\"wrapperElement\",\"customNodeProps\",\"wrapperProps\",\"hideKey\",\"showEditTools\",\"showOnEdit\",\"showOnView\",\"showCollectionWrapper\"]);return Object.assign({CustomNode:o,CustomWrapper:i,customNodeProps:a,wrapperProps:l,hideKey:s,showEditTools:c,showOnEdit:d,showOnView:u,showCollectionWrapper:g},m)},ve=r=>{const{getStyles:o}=K(),{collapseState:c,setCollapseState:d,getMatchingCollapseState:u,currentlyEditingElement:p,setCurrentlyEditingElement:f,areChildrenBeingEdited:b,previousValue:v,setPreviousValue:j}=M(),{mainContainerRef:w,data:D,nodeData:C,parentData:k,showCollectionCount:S,onEdit:T,onAdd:x,onDelete:A,canDragOnto:P,collapseFilter:R,collapseAnimationTime:I,onMove:V,enableClipboard:_,onEditEvent:F,showIconTooltips:L,searchFilter:z,searchText:B,indent:W,sort:G,showArrayIndices:Y,arrayIndexFromOne:H,defaultValue:U,newKeyOptions:$,translate:Z,customNodeDefinitions:X,customNodeData:J,jsonParse:Q,jsonStringify:q,TextEditor:ee,keyboardControls:te,handleKeyboard:ne,insertAtTop:re,onCollapse:oe,editConfirmRef:se,collapseClickZones:ce}=r,[he,ye]=i(q(D)),fe=R(C),{contentRef:je,isAnimating:Ee,maxHeight:we,collapsed:De,animateCollapse:Ce,cssTransitionValue:Oe}=((e,t,n,r,o)=>{const[l,c]=i(n?0:void 0),[d,u]=i(n),p=a(!1),g=a(null),m=a(0),h=a(0),y=t/1e3+\"s\",f=s((n=>{var i,a;if(d!==n){switch(window.clearTimeout(h.current),p.current=!0,n){case!0:{const e=null!==(a=null===(i=g.current)||void 0===i?void 0:i.offsetHeight)&&void 0!==a?a:0;m.current=e,c(e),setTimeout((()=>{c(0)}),5);break}case!1:c(m.current||pe(e,g,r,o))}u(!d),h.current=window.setTimeout((()=>{p.current=!1,n||c(void 0)}),t)}}),[t,d,e,r,o]);return{contentRef:g,isAnimating:p.current,animateCollapse:f,maxHeight:l,collapsed:d,cssTransitionValue:y}})(D,I,fe,w,q),{pathString:ke,nodeData:Se,path:Ne,name:Te,size:xe,canEdit:Ae,canDelete:Pe,canAdd:Re,canDrag:Ke,error:Ie,setError:Ve,onError:_e,handleEditKey:Fe,emptyStringKey:Le,derivedValues:ze}=de({props:r,collapsed:De}),{dragSourceProps:Me,getDropTargetProps:Be,BottomDropTarget:We,DropTargetPadding:Ge}=ue({canDrag:Ke,canDragOnto:P,path:Ne,nodeData:Se,onMove:V,onError:_e,translate:Z}),Ye=a(!fe),{isEditing:He,isEditingKey:Ue,isArray:$e,canEditKey:Ze}=ze;l((()=>{ye(q(D))}),[D,q]),l((()=>{const e=R(Se)&&!He;Ye.current=!e,Ce(e)}),[R]),l((()=>{if(null!==c){const e=u(Ne);e&&(Ye.current=!0,Ce(e.collapsed))}}),[c]);const Xe=a(null),Je=s(((e,t)=>{if(\"function\"!=typeof U)return U;const n=U(e,t);return void 0!==n?n:null}),[U]),Qe=s((e=>$?\"function\"!=typeof $?$:$(e):null),[$]),{CustomNode:qe,customNodeProps:et,CustomWrapper:tt,wrapperProps:nt={},hideKey:rt,showEditTools:ot=!0,showOnEdit:it,showOnView:at,showCollectionWrapper:lt=!0}=J,st=b(ke);st&&De&&Ce(!1);if(!(y(\"collection\",Se,z,B)||0===Se.level)&&!st)return null;const ct=Array.isArray(D)?\"array\":\"object\",dt=\"array\"===ct?{open:\"[\",close:\"]\"}:{open:\"{\",close:\"}\"},ut=e=>{if(\"Tab\"!==e.key||e.getModifierState(\"Shift\"))ne(e,{objectConfirm:gt,cancel:ht});else{e.preventDefault();const t=N(Xe,\"\\t\");ye(t)}},pt=e=>{e.stopPropagation();const t=E(e);if(t&&te.collapseModifier.includes(t))return Ye.current=!0,void d({collapsed:!De,path:Ne,includeChildren:!0});p&&p.includes(ke)||(Ye.current=!0,d(null),oe&&oe({path:Ne,collapsed:!De,includeChildren:!1}),Ce(!De))},gt=()=>{try{const e=Q(he);if(f(null),j(null),Ve(null),q(e)===q(D))return;T(e,Ne).then((t=>{t&&_e({code:\"UPDATE_ERROR\",message:t},e)}))}catch(e){_e({code:\"INVALID_JSON\",message:Z(\"ERROR_INVALID_JSON\",Se)},he)}},mt=Ne.length>0?()=>{A(D,Ne).then((e=>{e&&_e({code:\"DELETE_ERROR\",message:e},D)}))}:void 0,ht=()=>{f(null),null===v?(Ve(null),ye(q(D)),j(null)):T(v,Ne)},yt=\"when-closed\"===S?De:S,ft=!He&&ot,bt=(Y||!$e)&&!rt&&void 0!==Te,vt=qe&&(He&&it||!He&&at),jt=Object.entries(D).map((([e,t])=>[\"array\"===ct?Number(e):e,t]));\"object\"===ct&&G(jt,(e=>e));const Et=Ye.current?He?e(\"div\",{className:\"jer-collection-text-edit\",children:[ee?t(ee,{value:he,onChange:ye,onKeyDown:e=>ne(e,{objectConfirm:gt,cancel:ht})}):t(m,{textAreaRef:Xe,className:\"jer-collection-text-area\",name:ke,value:he,setValue:ye,handleKeyPress:ut,styles:o(\"input\",Se)}),t(\"div\",{className:\"jer-collection-input-button-row\",children:t(le,{onOk:gt,onCancel:ht,nodeData:Se,editConfirmRef:se})})]}):jt.map((([e,n],i)=>{const a={key:e,value:n,path:[...Ne,e],level:Ne.length+1,index:i,size:h(n)?Object.keys(n).length:null,parentData:D,fullData:Se.fullData},l=be(X,a);return t(\"div\",{className:\"jer-collection-element\",style:o(\"collectionElement\",a),children:h(n)&&!(null==l?void 0:l.renderCollectionAsValue)?t(ve,Object.assign({},r,{data:n,parentData:D,nodeData:a,showCollectionCount:S,canDragOnto:Ae,customNodeData:l}),e):t(me,Object.assign({},r,{data:n,parentData:D,nodeData:a,canDragOnto:Ae,showLabel:\"object\"===ct||Y,customNodeData:l}),e)},e)})):null,wt=!!lt&&(De&&!st);wt||(Ye.current=!0);const Dt=Object.assign(Object.assign({},r),{data:D,value:D,parentData:k,nodeData:Se,setValue:e=>g(void 0,void 0,void 0,(function*(){return yield T(e,Ne)})),handleEdit:gt,handleCancel:ht,handleKeyPress:ut,isEditing:He,setIsEditing:()=>f(Ne),getStyles:o,canDragOnto:Ae,canEdit:Ae,keyboardCommon:{},onError:_e}),Ct=vt?t(qe,Object.assign({customNodeProps:et},Dt,{children:Et})):Et,Ot=ft&&t(ae,{startEdit:Ae?()=>{Ye.current=!0,j(null),f(Ne)}:void 0,handleAdd:Re?e=>{Ce(!1);const t=Je(Se,e);if(\"array\"===ct){const e=re.array?0:D.length,n=re.array?{insert:!0}:{};x(t,[...Ne,e],n).then((e=>{e&&_e({code:\"ADD_ERROR\",message:e},t)}))}else if(e in D)_e({code:\"KEY_EXISTS\",message:Z(\"ERROR_KEY_EXISTS\",Se)},e);else{const n=re.object?{insertBefore:0}:{};x(t,[...Ne,e],n).then((e=>{e&&_e({code:\"ADD_ERROR\",message:e},t)}))}}:void 0,handleDelete:Pe?mt:void 0,enableClipboard:_,type:ct,nodeData:Se,translate:Z,customButtons:r.customButtons,keyboardControls:te,handleKeyboard:ne,getNewKeyOptions:Qe,editConfirmRef:se,jsonStringify:q,onEditEvent:F,showIconTooltips:L}),kt={canEditKey:Ze,isEditingKey:Ue,pathString:ke,path:Ne,name:Te,arrayIndexFromOne:H,handleKeyboard:ne,handleEditKey:Fe,handleCancel:ht,keyValueArray:jt,styles:o(\"property\",Se),getNextOrPrevious:e=>O(Se.fullData,Ne,e,G),handleClick:ce.includes(\"property\")?pt:e=>e.stopPropagation(),emptyStringKey:Le},St=e(\"div\",Object.assign({className:\"jer-component jer-collection-component\",style:Object.assign(Object.assign({marginLeft:(0===Ne.length?0:W/2)+\"em\"},o(\"collection\",Se)),{position:\"relative\"}),draggable:Ke},Me,Be(\"above\"),{children:[t(\"div\",{className:\"jer-clickzone\",style:{width:W/2+1+\"em\",zIndex:10+2*Se.level},onClick:ce.includes(\"left\")?pt:void 0}),!He&&We,t(Ge,{position:\"above\",nodeData:Se}),lt?e(\"div\",{className:\"jer-collection-header-row\",style:{position:\"relative\"},onClick:ce.includes(\"header\")?pt:void 0,children:[e(\"div\",{className:\"jer-collection-name\",children:[t(\"div\",{className:\"jer-collapse-icon jer-accordion-icon\"+(De?\" jer-rotate-90\":\"\"),style:{zIndex:11+2*Se.level,transition:Oe},onClick:pt,children:t(ie,{name:\"chevron\",rotate:De,nodeData:Se})}),bt&&t(ge,Object.assign({},kt)),!He&&t(\"span\",{className:\"jer-brackets jer-bracket-open\",style:o(\"bracket\",Se),children:dt.open})]}),!He&&yt&&t(\"div\",{className:\"jer-collection-item-count\"+(yt?\" jer-visible\":\" jer-hidden\"),style:Object.assign(Object.assign({},o(\"itemCount\",Se)),{transition:Oe}),children:1===xe?Z(\"ITEM_SINGLE\",Object.assign(Object.assign({},Se),{size:1}),1):Z(\"ITEMS_MULTIPLE\",Se,xe)}),t(\"div\",{className:\"jer-brackets\"+(wt?\" jer-visible\":\" jer-hidden\"),style:Object.assign(Object.assign({},o(\"bracket\",Se)),{transition:Oe}),children:dt.close}),Ot]}):rt?t(n,{}):e(\"div\",{className:\"jer-collection-header-row\",style:{position:\"relative\"},children:[t(ge,Object.assign({},kt)),Ot]}),e(\"div\",{className:\"jer-collection-inner\",style:Object.assign(Object.assign({overflowY:wt||Ee?\"clip\":\"visible\",maxHeight:st?void 0:we},o(\"collectionInner\",Se)),{transition:Oe}),ref:je,children:[Ct,t(\"div\",{className:He?\"jer-collection-error-row\":\"jer-collection-error-row-edit\",children:Ie&&t(\"span\",{className:\"jer-error-slug\",style:o(\"error\",Se),children:Ie})}),!He&&lt&&t(\"div\",{className:\"jer-brackets jer-bracket-outside\",style:Object.assign(Object.assign({},o(\"bracket\",Se)),{marginLeft:(W<3?-1:W<6?-.5:0)+\"em\"}),children:dt.close})]}),t(Ge,{position:\"below\",nodeData:Se})]}));return tt?t(tt,Object.assign({customNodeProps:nt},Dt,{children:St})):St},je={ITEM_SINGLE:\"{{count}} item\",ITEMS_MULTIPLE:\"{{count}} items\",KEY_NEW:\"Enter new key\",KEY_SELECT:\"Select key\",NO_KEY_OPTIONS:\"No key options\",ERROR_KEY_EXISTS:\"Key already exists\",ERROR_INVALID_JSON:\"Invalid JSON\",ERROR_UPDATE:\"Update unsuccessful\",ERROR_DELETE:\"Delete unsuccessful\",ERROR_ADD:\"Adding node unsuccessful\",DEFAULT_STRING:\"New data!\",DEFAULT_NEW_KEY:\"key\",SHOW_LESS:\"(Show less)\",EMPTY_STRING:\"<empty string>\",TOOLTIP_COPY:\"Copy to clipboard\",TOOLTIP_EDIT:\"Edit\",TOOLTIP_DELETE:\"Delete\",TOOLTIP_ADD:\"Add\"},Ee=(e,t)=>(n,r,o)=>((e,t,n,r,o)=>{if(t[r]){const e=t[r](n);if(null!==e)return e}const i=r in e?e[r]:je[r];return void 0===o?i:null==i?void 0:i.replace(\"{{count}}\",String(o))})(e,t,r,n,o);var we=[],De=[];!function(e,t){if(e&&\"undefined\"!=typeof document){var n,r=!0===t.prepend?\"prepend\":\"append\",o=!0===t.singleTag,i=\"string\"==typeof t.container?document.querySelector(t.container):document.getElementsByTagName(\"head\")[0];if(o){var a=we.indexOf(i);-1===a&&(a=we.push(i)-1,De[a]={}),n=De[a]&&De[a][r]?De[a][r]:De[a][r]=l()}else n=l();65279===e.charCodeAt(0)&&(e=e.substring(1)),n.styleSheet?n.styleSheet.cssText+=e:n.appendChild(document.createTextNode(e))}function l(){var e=document.createElement(\"style\");if(e.setAttribute(\"type\",\"text/css\"),t.attributes)for(var n=Object.keys(t.attributes),o=0;o<n.length;o++)e.setAttribute(n[o],t.attributes[n[o]]);var a=\"prepend\"===r?\"afterbegin\":\"beforeend\";return i.insertAdjacentElement(a,e),e}}(':root{--jer-select-border:#b6b6b6;--jer-select-focus:#777;--jer-select-arrow:#777;--jer-form-border:1px solid #ededf0;--jer-form-border-focus:1px solid #e2e2e2;--jer-highlight-color:#b3d8ff}.jer-visible{opacity:1}.jer-hidden{opacity:0}.jer-select select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;color:#000;cursor:inherit;font-family:inherit;font-size:.8em;line-height:inherit;margin:0;outline:none;padding:0 1em 0 0;z-index:1}select::-ms-expand{display:none}.jer-select{align-items:center;background-color:#fff;background-image:linear-gradient(0deg,#f9f9f9,#fff 33%);border:1px solid var(--jer-select-border);border-radius:.25em;cursor:pointer;display:grid;grid-template-areas:\"select\";line-height:1.1;max-width:15ch;min-width:12ch;padding:.25em .5em;position:relative}.jer-select select,.jer-select:after{grid-area:select}.jer-select:not(.jer-select--multiple):after{background-color:var(--jer-select-arrow);clip-path:polygon(100% 0,0 0,50% 100%);content:\"\";height:.5em;justify-self:end;width:.8em}select:focus+.focus{border:1px solid var(--jer-select-focus);border-radius:inherit;bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px}.jer-select-inner{text-overflow:ellipsis;width:100%}.jer-editor-container{border-radius:.5em;font-size:16px;line-height:1;padding:1em 1em 1em 2em;position:relative;text-align:left}.jer-editor-container textarea{border:var(--jer-form-border);border-radius:.3em;color:var(--jer-input-color);outline:none}.jer-editor-container textarea:focus{border:var(--jer-form-border-focus)}.jer-editor-container input{border:var(--jer-form-border);border-radius:.3em;font-family:inherit;outline:none}.jer-editor-container input:focus{border:var(--jer-form-border-focus)}.jer-editor-container ::selection{background-color:var(--jer-highlight-color)}.jer-collection-header-row,.jer-value-main-row{align-items:center;display:flex;gap:.3em;min-height:1.7em}.jer-collection-header-row{display:flex;flex-wrap:wrap}.jer-collapse-icon{left:-1.2em;position:absolute;top:.35em}.jer-collection-inner{position:relative}.jer-collection-text-edit{align-items:flex-start;display:flex;flex-direction:column;gap:.3em;line-height:1.1em}.jer-collection-text-area{font-family:inherit;font-size:.85em;max-height:40em;overflow:hidden;padding:.2em .5em 0;resize:both}.jer-collection-input-button-row{display:flex;font-size:150%;justify-content:flex-end;margin-top:.4em;width:100%}.jer-collection-error-row{bottom:.5em;position:absolute}.jer-error-slug{margin-left:1em}.jer-value-component{position:relative}.jer-value-main-row{display:flex;gap:0}.jer-value-and-buttons{align-items:center;display:flex;justify-content:flex-start;padding-left:.5em}.jer-value-error-row{position:absolute}.jer-value-string{line-height:1.3em;overflow-wrap:anywhere;white-space:pre-wrap;word-break:break-word}.jer-string-expansion{cursor:pointer;filter:saturate(50%);opacity:.6}.jer-show-less{font-size:80%}.jer-hyperlink{text-decoration:underline}.jer-input-text{font-family:inherit;font-size:.9em;height:1.4em;line-height:1.2em;margin:0;min-width:6em;overflow:hidden;padding:.25em .5em .2em;resize:none}.jer-input-boolean{margin-left:.3em;margin-right:.3em;transform:scale(1.5)}.jer-key-text{line-height:1.1em;white-space:pre-wrap;word-break:break-word}.jer-key-edit{font-size:inherit;font-size:.9em;padding:0 .3em}.jer-value-invalid{font-style:italic;opacity:.5}.jer-input-number{font-size:90%;min-width:3em}.jer-confirm-buttons,.jer-edit-buttons{align-items:center;cursor:pointer;display:flex;height:1em}.jer-input-buttons{gap:.4em}.jer-edit-buttons{gap:.4em;margin-left:.5em;opacity:0}.jer-confirm-buttons{gap:.2em;margin-left:.4em}.jer-edit-buttons:hover{opacity:1;position:relative}.jer-collection-header-row:hover>.jer-edit-buttons,.jer-value-and-buttons:hover>.jer-edit-buttons,.jer-value-main-row:hover>.jer-edit-buttons{opacity:1}.jer-copy-pulse{position:relative;transition:.3s}.jer-copy-pulse:hover{opacity:.85;transform:scale(1.2);transition:.3s}.jer-copy-pulse:after{border-radius:50%;box-shadow:0 0 15px 5px var(--jer-icon-copy-color);content:\"\";display:block;height:100%;left:0;opacity:0;position:absolute;top:0;transition:all .5s;width:100%}.jer-copy-pulse:active:after{border-radius:4em;box-shadow:0 0 0 0 var(--jer-icon-copy-color);left:0;opacity:1;position:absolute;top:0;transition:0s}.jer-copy-pulse:active{top:.07em}.jer-rotate-90{transform:rotate(-90deg)}.jer-icon:hover{opacity:.85;transform:scale(1.2);transition:.3s}.jer-empty-string{font-size:90%;font-style:italic}.jer-drag-n-drop-padding{border:1px dashed #e0e0e0;border-radius:.3em;height:.5em}.jer-clickzone{height:calc(100% - .8em);left:-1em;position:absolute;top:1.2em}',{});const Ce=({data:e,setData:n,rootName:r=\"root\",onUpdate:o=()=>{},onEdit:d=o,onDelete:u=o,onAdd:p=o,onChange:m,onError:y,onEditEvent:f,showErrorMessages:b=!0,enableClipboard:v=!0,indent:E=2,collapse:D=!1,collapseAnimationTime:O=300,showCollectionCount:k=!0,restrictEdit:S=!1,restrictDelete:N=!1,restrictAdd:x=!1,restrictTypeSelection:A=!1,restrictDrag:P=!0,viewOnly:R,searchFilter:I,searchText:V,searchDebounceTime:_=350,keySort:F=!1,showArrayIndices:L=!0,arrayIndexFromOne:z=!1,showStringQuotes:B=!0,showIconTooltips:W=!1,defaultValue:G=null,newKeyOptions:Y,minWidth:H=250,maxWidth:U=\"min(600px, 90vw)\",rootFontSize:$,stringTruncate:Z=250,translations:X={},className:J,id:Q,customText:q={},customNodeDefinitions:ee=[],customButtons:te=[],jsonParse:ne=JSON.parse,jsonStringify:re=(e,t)=>JSON.stringify(e,t,2),TextEditor:oe,errorMessageTimeout:ie=2500,keyboardControls:ae={},externalTriggers:le,insertAtTop:se=!1,onCollapse:ce,collapseClickZones:de=[\"header\",\"left\"]})=>{const{getStyles:ue}=K(),{setCurrentlyEditingElement:pe}=M(),ge=c((()=>Se(D)),[D]),he=c((()=>Ee(X,q)),[X,q]),[ye,fe]=i(V),[je,we]=(({setData:e,data:t})=>{const[n,r]=i(e?void 0:t),o=s((t=>{e?e(t):r(t)}),[e]);return l((()=>{e||r(t)}),[t]),[e?t:n,o]})({setData:n,data:e}),De=a(null);l((()=>{pe(null);const e=setTimeout((()=>fe(V)),_);return()=>clearTimeout(e)}),[V,_]);const Ce={key:r,path:[],level:0,index:0,value:je,size:\"object\"==typeof je&&null!==je?Object.keys(je).length:1,parentData:null,fullData:je},Oe=(e,t)=>g(void 0,void 0,void 0,(function*(){const n=yield e(t);if(!0===n||void 0===n)return void we(t.newData);const r=Te(n)?n:[\"error\",n],[o,i]=r;if(\"error\"===o)return we(t.currentData),!1===i?he(\"ERROR_UPDATE\",Ce):String(i);we(i)})),Ae=c((()=>Se(S,R)),[S,R]),Pe=c((()=>Se(N,R)),[N,R]),Re=c((()=>Se(x,R)),[x,R]),Ke=c((()=>Se(P,R)),[P,R]),Ie=c((()=>Ne(I)),[I]),Ve=c((()=>(e=>{const t=Object.assign({},C);for(const n of Object.keys(C)){const r=n;if(e[r]){const o=e[r],i=[\"clipboardModifier\",\"collapseModifier\"].includes(n)?Array.isArray(o)?o:[o]:\"string\"==typeof o?{key:o}:o;t[r]=i,[\"stringConfirm\",\"numberConfirm\",\"booleanConfirm\"].forEach((n=>{!e[n]&&e.confirm&&(t[n]=t.confirm)}))}}return t})(ae)),[ae]),_e=s(((e,t)=>((e,t,n)=>{const r=Object.entries(t);for(const[t,o]of r)if(w(n,e[t],t)){n.preventDefault(),o();break}})(Ve,t,e)),[Ve]),Fe=c((()=>{const e=xe(ee,\"stringifyReplacer\");return t=>re(t,e)}),[ee,re]),Le=c((()=>{const e=xe(ee,\"parseReviver\");return t=>{const n=ne(t,e);return T(n)}}),[ee,ne]),ze=a(null);((e,t)=>{const{setCurrentlyEditingElement:n,currentlyEditingElement:r,setCollapseState:o}=M();l((()=>{if(!e)return;const{collapse:i,edit:a}=e;i&&o(i);const l=!(null==a?void 0:a.path)||j(a.path)===r;switch(null==a?void 0:a.action){case\"accept\":l&&(t.current&&t.current.click(),n(null));break;case\"cancel\":l&&n(null);break;default:(null==a?void 0:a.path)&&n(a.path)}}),[e])})(le,ze);const Me=s(((e,t)=>{!1!==F&&(\"function\"!=typeof F?e.sort(((e,n)=>{const r=t(e)[0],o=t(n)[0];return r<o?-1:r>o?1:0})):e.sort(((e,n)=>F(t(e),t(n)))))}),[F]),Be=be(ee,Ce),We={mainContainerRef:De,name:r,nodeData:Ce,onEdit:(e,t)=>g(void 0,void 0,void 0,(function*(){const{currentData:n,newData:r,currentValue:o,newValue:i}=ke(je,t,e,\"update\");if(o!==i)return yield Oe(d,{currentData:n,newData:r,currentValue:o,newValue:i,name:t.slice(-1)[0],path:t})})),onDelete:(e,t)=>g(void 0,void 0,void 0,(function*(){const{currentData:n,newData:r,currentValue:o,newValue:i}=ke(je,t,e,\"delete\");return yield Oe(u,{currentData:n,newData:r,currentValue:o,newValue:i,name:t.slice(-1)[0],path:t})})),onAdd:(e,t,n)=>g(void 0,void 0,void 0,(function*(){const{currentData:r,newData:o,currentValue:i,newValue:a}=ke(je,t,e,\"add\",n);return yield Oe(p,{currentData:r,newData:o,currentValue:i,newValue:a,name:t.slice(-1)[0],path:t})})),onChange:m,onError:y,onEditEvent:f,showErrorMessages:b,onMove:(e,t,n)=>g(void 0,void 0,void 0,(function*(){if(null===e)return;const{currentData:r,newData:o,currentValue:i}=ke(je,e,\"\",\"delete\"),a=e.slice(-1)[0],l=t.slice(0,-1),s=t.slice(-1)[0];let c=\"number\"==typeof s?\"above\"===n?s:s+1:\"number\"==typeof a?`arr_${a}`:a;e.slice(0,-1).join(\".\")===t.slice(0,-1).join(\".\")&&\"number\"==typeof a&&\"number\"==typeof c&&a<c&&(c-=1);const u=\"number\"==typeof c?{insert:!0}:\"above\"===n?{insertBefore:s}:{insertAfter:s},{newData:p,newValue:g}=ke(o,[...l,c],i,\"add\",u);return yield Oe(d,{currentData:r,newData:p,currentValue:i,newValue:g,name:t.slice(-1)[0],path:t})})),showCollectionCount:k,collapseFilter:ge,collapseAnimationTime:O,restrictEditFilter:Ae,restrictDeleteFilter:Pe,restrictAddFilter:Re,restrictTypeSelection:A,restrictDragFilter:Ke,canDragOnto:!1,searchFilter:Ie,searchText:ye,enableClipboard:v,keySort:F,sort:Me,showArrayIndices:L,arrayIndexFromOne:z,showStringQuotes:B,showIconTooltips:W,indent:E,defaultValue:G,newKeyOptions:Y,stringTruncate:Z,translate:he,customNodeDefinitions:ee,customNodeData:Be,customButtons:te,parentData:null,jsonParse:Le,jsonStringify:Fe,TextEditor:oe,errorMessageTimeout:ie,handleKeyboard:_e,keyboardControls:Ve,insertAtTop:{object:!0===se||\"object\"===se,array:!0===se||\"array\"===se},onCollapse:ce,editConfirmRef:ze,collapseClickZones:de},Ge=Object.assign(Object.assign({},ue(\"container\",Ce)),{minWidth:H,maxWidth:U});return Ge.fontSize=null!=$?$:Ge.fontSize,t(\"div\",{id:Q,ref:De,className:`jer-editor-container ${null!=J?J:\"\"}`,style:Ge,children:h(je)&&!Be.renderCollectionAsValue?t(ve,Object.assign({data:je},We)):t(me,Object.assign({data:je,showLabel:!0},We))})},Oe=e=>{var n;const[r,o]=i();return l((()=>{const e=document.documentElement;o(e)}),[]),r?t(R,{theme:null!==(n=e.theme)&&void 0!==n?n:A,icons:e.icons,docRoot:r,children:t(z,{onEditEvent:e.onEditEvent,onCollapse:e.onCollapse,children:t(Ce,Object.assign({},e))})}):null},ke=(e,t,n,r,o={})=>{if(0===t.length)return{currentData:e,newData:n,currentValue:e,newValue:n};const i=Object.assign({remove:\"delete\"===r},o),a=\"add\"!==r?u(e,t):void 0;return{currentData:e,newData:d(e,t,n,i),currentValue:a,newValue:\"delete\"!==r?n:void 0}},Se=(e,t)=>t?()=>!0:\"boolean\"==typeof e?()=>e:\"number\"==typeof e?({level:t})=>t>=e:e,Ne=e=>{if(void 0!==e)return\"value\"===e?b:\"key\"===e?v:\"all\"===e?(e,t)=>b(e,t)||v(e,t):e},Te=e=>Array.isArray(e)&&2===e.length&&[\"error\",\"value\"].includes(e[0]),xe=(e,t)=>{const n=\"stringifyReplacer\"===t?[e=>void 0===e?x:e]:[];if(n.push(...e.map((e=>e[t])).filter((e=>!!e))),0!==n.length)return(e,t)=>{let r=t;for(const e of n)r=e(r);return r}},Ae=e=>{var n;const{value:r,setIsEditing:o,getStyles:i,nodeData:a}=e,l=i(\"string\",a);return t(\"div\",{onDoubleClick:()=>o(!0),onClick:e=>{(e.getModifierState(\"Control\")||e.getModifierState(\"Meta\"))&&o(!0)},className:\"jer-value-string jer-hyperlink\",style:l,children:t(\"a\",{href:r,target:\"_blank\",rel:\"noreferrer\",style:{color:null!==(n=l.color)&&void 0!==n?n:void 0},children:t(G,Object.assign({},e,{pathString:j(a.path),styles:l,value:a.value}))})})},Pe={condition:({value:e})=>\"string\"==typeof e&&/^https?:\\/\\/.+\\..+$/.test(e),element:Ae,showOnView:!0,showOnEdit:!1},Re={displayName:\"Github Dark\",styles:{container:{backgroundColor:\"#0d1117\",color:\"white\"},dropZone:\"rgba(165, 214, 255, 0.17)\",property:\"#E6EDF3\",bracket:\"#56d364\",itemCount:\"#8B949E\",string:\"#A5D6FF\",number:\"#D2A8FF\",boolean:{color:\"#FF7B72\",fontSize:\"90%\",fontWeight:\"bold\"},null:\"green\",iconCollection:\"#D2A8FF\",iconEdit:\"#D2A8FF\",iconDelete:\"rgb(203, 75, 22)\",iconAdd:\"rgb(203, 75, 22)\",iconCopy:\"#A5D6FF\",iconOk:\"#56d364\",iconCancel:\"rgb(203, 75, 22)\"}},Ke={displayName:\"Github Light\",styles:{container:\"white\",property:\"#1F2328\",bracket:\"#00802e\",itemCount:\"#8B949E\",string:\"#0A3069\",number:\"#953800\",boolean:{color:\"#CF222E\",fontSize:\"90%\",fontWeight:\"bold\"},null:\"#FF7B72\",iconCollection:\"#8250DF\",iconEdit:\"#8250DF\",iconDelete:\"rgb(203, 75, 22)\",iconAdd:\"#8250DF\",iconCopy:\"#57606A\"}},Ie={displayName:\"Black & White\",fragments:{lightText:{color:\"white\"},midGrey:\"#5c5c5c\"},styles:{container:[\"lightText\",{backgroundColor:\"black\"}],dropZone:\"#e0e0e029\",property:\"lightText\",bracket:\"midGrey\",itemCount:\"#4a4a4a\",string:\"#a8a8a8\",number:\"#666666\",boolean:{color:\"#848484\",fontStyle:\"italic\"},null:\"#333333\",iconCollection:\"midGrey\",iconEdit:\"midGrey\",iconDelete:\"midGrey\",iconAdd:\"midGrey\",iconCopy:\"midGrey\",iconOk:\"midGrey\",iconCancel:\"midGrey\"}},Ve={fragments:{midGrey:\"#a3a3a3\"},displayName:\"White & Black\",styles:{container:\"white\",property:\"black\",bracket:\"midGrey\",itemCount:\"#b5b5b5\",string:\"#575757\",number:\"#999999\",boolean:{color:\"#7b7b7b\",fontStyle:\"italic\"},null:\"#cccccc\",iconCollection:\"midGrey\",iconEdit:\"midGrey\",iconDelete:\"midGrey\",iconAdd:\"midGrey\",iconCopy:\"midGrey\",iconOk:\"midGrey\",iconCancel:\"midGrey\"}},_e={displayName:\"Candy Wrapper\",fragments:{minty:{backgroundColor:\"#F1FAEE\"},pale:{color:\"#A8DADC\"},mid:{color:\"#457B9D\"},dark:{color:\"#1D3557\"},pop:{color:\"#E63946\"},darkBlue:{color:\"#2B2D42\"}},styles:{container:\"minty\",property:\"pop\",dropZone:\"#eb121217\",bracket:\"dark\",itemCount:\"pale\",string:\"mid\",number:[\"darkBlue\",{fontSize:\"85%\"}],boolean:[\"mid\",{fontStyle:\"italic\",fontWeight:\"bold\",fontSize:\"80%\"}],null:[\"#cccccc\",{fontWeight:\"bold\"}],input:{border:\"1px solid rgb(115, 194, 198)\"},iconCollection:\"#1D3557\",iconEdit:\"#457B9D\",iconDelete:\"#E63946\",iconAdd:\"#2B2D42\",iconCopy:\"#1D3557\",iconCancel:\"#E63946\"}},Fe={displayName:\"Psychedelic\",fragments:{pale:{color:\"#A8DADC\"},fluroYellow:\"rgb(242, 228, 21)\",fluroGreen:\"rgb(68, 255, 62)\",hotPink:\"#f7379a\"},styles:{container:{backgroundColor:\"unset\",background:\"linear-gradient(90deg, hsla(333, 100%, 53%, 1) 0%, hsla(33, 94%, 57%, 1) 100%)\",color:\"black\"},dropZone:\"fluroYellow\",property:\"black\",bracket:\"fluroYellow\",itemCount:[\"pale\",{opacity:.7}],string:\"white\",number:[\"#33d9ff\",{fontSize:\"90%\",fontWeight:\"bold\"}],boolean:[\"fluroGreen\",{fontWeight:\"bold\",fontSize:\"80%\"}],null:[\"black\",{fontWeight:\"bold\",opacity:.3,backgroundColor:\"rgb(255, 255, 255, 0.5)\",padding:\"0 0.4em\",borderRadius:\"0.4em\"}],iconCollection:\"fluroYellow\",iconEdit:[\"black\"],iconDelete:[\"white\",{opacity:.5}],iconAdd:[\"white\",{opacity:.5}],iconCopy:\"rgb(32, 84, 242)\",iconOk:\"fluroGreen\",iconCancel:\"hotPink\"}};export{Q as IconAdd,re as IconCancel,oe as IconChevron,te as IconCopy,ee as IconDelete,q as IconEdit,ne as IconOk,Oe as JsonEditor,Ae as LinkCustomComponent,Pe as LinkCustomNodeDefinition,G as StringDisplay,Y as StringEdit,_e as candyWrapperTheme,A as defaultTheme,Re as githubDarkTheme,Ke as githubLightTheme,h as isCollection,b as matchNode,v as matchNodeKey,Ie as monoDarkTheme,Ve as monoLightTheme,Fe as psychedelicTheme,ce as standardDataTypes,j as toPathString,Z as useKeyboardListener};\n","// src/presets/shadcn-variants/json-editor/raw-panel.tsx\n// noinspection GrazieInspection\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { Button } from \"@/presets/ui/button\";\nimport { Badge } from \"@/presets/ui/badge\";\nimport { Separator } from \"@/presets/ui/separator\";\nimport { ScrollArea } from \"@/presets/ui/scroll-area\";\n\nimport { JsonEditor } from \"json-edit-react\";\n\nimport type { ChangeDetail } from \"@/variants/shared\";\nimport type { JsonObject } from \"@/lib/json-editor/utils\";\nimport type { JsonEditorPermissions } from \"./types\";\n\nexport interface JsonEditorRawPanelProps {\n    root: JsonObject;\n    onRoot: (nextRoot: JsonObject, detail?: ChangeDetail<any>) => void;\n\n    permissions?: JsonEditorPermissions;\n\n    disabled?: boolean;\n    readOnly?: boolean;\n\n    className?: string;\n    headerClassName?: string;\n    bodyClassName?: string;\n}\n\nfunction isPlainObject(v: unknown): v is Record<string, any> {\n    return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nexport function JsonEditorRawPanel(props: JsonEditorRawPanelProps) {\n    const {\n        root,\n        onRoot,\n        permissions,\n        disabled,\n        readOnly,\n        className,\n        headerClassName,\n        bodyClassName,\n    } = props;\n\n    const canViewRaw = permissions?.canViewRaw ?? true;\n    const canEditRaw = permissions?.canEditRaw ?? false;\n\n    if (!canViewRaw) return null;\n\n    const viewOnly = !!disabled || !!readOnly || !canEditRaw;\n\n    const onCopy = React.useCallback(async () => {\n        try {\n            await navigator.clipboard.writeText(\n                JSON.stringify(root ?? {}, null, 2)\n            );\n        } catch {\n            // ignore clipboard failures silently\n        }\n    }, [root]);\n\n    return (\n        <div\n            className={cn(\n                // Sidebar panel look (not a rounded \"card\")\n                \"flex min-h-0 flex-col border-r bg-background\",\n                className\n            )}\n        >\n            {/* Panel header (matches screenshot style) */}\n            <div\n                className={cn(\n                    \"flex items-center justify-between gap-2 px-4 py-3\",\n                    headerClassName\n                )}\n            >\n                <div className=\"min-w-0\">\n                    <div className=\"text-sm font-medium truncate\">\n                        Source code\n                    </div>\n                </div>\n\n                <div className=\"flex items-center gap-2 shrink-0\">\n                    {viewOnly ? (\n                        <Badge variant=\"secondary\" className=\"h-6\">\n                            Read only\n                        </Badge>\n                    ) : null}\n\n                    <Button\n                        type=\"button\"\n                        variant=\"ghost\"\n                        size=\"sm\"\n                        onClick={onCopy}\n                        disabled={!root}\n                    >\n                        Copy\n                    </Button>\n                </div>\n            </div>\n\n            <Separator />\n\n            {/* Scrollable editor body */}\n            <ScrollArea className={cn(\"min-h-0 flex-1\", bodyClassName)}>\n                <div className=\"p-3\">\n                    <JsonEditor\n                        data={root ?? {}}\n                        setData={(next) => {\n                            // Root must remain an object for this variant.\n                            if (!isPlainObject(next)) return;\n                            onRoot(next as JsonObject);\n                        }}\n                        viewOnly={viewOnly}\n                    />\n                </div>\n            </ScrollArea>\n        </div>\n    );\n}\n\nexport default JsonEditorRawPanel;\n","// src/presets/shadcn-variants/json-editor/editor.tsx\n// noinspection GrazieInspection\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { Button } from \"@/presets/ui/button\";\nimport { Separator } from \"@/presets/ui/separator\";\nimport { ScrollArea } from \"@/presets/ui/scroll-area\";\n\nimport { Code2, Eye, SplitSquareVertical, Upload, X } from \"lucide-react\";\n\nimport type { ChangeDetail } from \"@/variants/shared\";\n\nimport type { JsonObject, JsonPath, JsonValue } from \"@/lib/json-editor/utils\";\nimport {\n    buildJsonRoutes,\n    lastSegment,\n    splitPath,\n} from \"@/lib/json-editor/utils\";\n\nimport type {\n    JsonEditorCallbacks,\n    JsonEditorDefaults,\n    JsonEditorFieldMap,\n    JsonEditorFilters,\n    JsonEditorLayoutMap,\n    JsonEditorPermissions,\n    JsonEditorResolvedField,\n    JsonEditorViewMode,\n    JsonRouteNode,\n} from \"./types\";\n\nimport JsonEditorMain from \"./main\";\nimport JsonEditorRawPanel from \"./raw-panel\";\n\n/* ─────────────────────────────────────────────────────────────\n * Types\n * ───────────────────────────────────────────────────────────── */\n\nexport interface JsonEditorHeaderRenderCtx {\n    title: React.ReactNode;\n    viewControls: React.ReactNode;\n\n    loadFile: () => void;\n    setViewMode: (mode: JsonEditorViewMode) => void;\n    close: () => void;\n}\n\nexport interface JsonEditorHandle {\n    loadFile: () => void;\n\n    getRoute: () => JsonPath;\n    setRoute: (route: JsonPath) => void;\n\n    getViewMode: () => JsonEditorViewMode;\n    setViewMode: (mode: JsonEditorViewMode) => void;\n}\n\nexport interface JsonEditorEditorProps {\n    root: JsonObject;\n    onRoot: (nextRoot: JsonObject, detail?: ChangeDetail<any>) => void;\n\n    // config\n    fieldMap?: JsonEditorFieldMap;\n    layout?: JsonEditorLayoutMap;\n    defaults?: JsonEditorDefaults;\n    filters?: JsonEditorFilters;\n    permissions?: JsonEditorPermissions;\n    callbacks?: JsonEditorCallbacks;\n\n    // hooks\n    renderField?: (ctx: {\n        field: JsonEditorResolvedField;\n        route: JsonPath;\n    }) => React.ReactNode;\n    renderRouteLabel?: (ctx: {\n        node: JsonRouteNode;\n        active: boolean;\n    }) => React.ReactNode;\n\n    // header\n    title?: React.ReactNode;\n    schema?: string; // validation identifier/selector (NOT a UI title)\n    onClose?: () => void;\n    showClose?: boolean;\n    renderHeader?: (ctx: JsonEditorHeaderRenderCtx) => React.ReactNode;\n\n    // routing (optional controlled)\n    route?: JsonPath;\n    defaultRoute?: JsonPath;\n    onRouteChange?: (route: JsonPath) => void;\n\n    // view mode (optional controlled)\n    viewMode?: JsonEditorViewMode;\n    defaultViewMode?: JsonEditorViewMode;\n    onViewModeChange?: (mode: JsonEditorViewMode) => void;\n\n    // styling\n    className?: string;\n    contentClassName?: string;\n    rawClassName?: string;\n}\n\n/* ─────────────────────────────────────────────────────────────\n * Local utils (keep minimal)\n * ───────────────────────────────────────────────────────────── */\n\nfunction isPlainObject(v: unknown): v is Record<string, any> {\n    return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction prettifyLabel(key: string) {\n    const spaced = key\n        .replace(/_/g, \" \")\n        .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n        .trim();\n    return spaced ? spaced[0]!.toUpperCase() + spaced.slice(1) : key;\n}\n\nfunction parentOf(path: JsonPath): JsonPath {\n    const segs = splitPath(path);\n    if (segs.length <= 1) return \"\";\n    return segs.slice(0, -1).join(\".\");\n}\n\nfunction collectAllPaths(\n    value: JsonValue,\n    prefix: JsonPath = \"\",\n    out: JsonPath[] = [],\n) {\n    if (value === null) return out;\n\n    if (Array.isArray(value)) {\n        for (let i = 0; i < value.length; i++) {\n            const p = prefix ? `${prefix}.${i}` : `${i}`;\n            out.push(p);\n            collectAllPaths(value[i] as JsonValue, p, out);\n        }\n        return out;\n    }\n\n    if (isPlainObject(value)) {\n        for (const k of Object.keys(value)) {\n            const p = prefix ? `${prefix}.${k}` : k;\n            out.push(p);\n            collectAllPaths((value as any)[k] as JsonValue, p, out);\n        }\n        return out;\n    }\n\n    return out;\n}\n\nfunction useControllable<T>(opts: {\n    value?: T;\n    defaultValue: T;\n    onChange?: (v: T) => void;\n}) {\n    const { value, defaultValue, onChange } = opts;\n    const [inner, setInner] = React.useState<T>(defaultValue);\n\n    const isControlled = value !== undefined;\n    const state = (isControlled ? value : inner) as T;\n\n    const setState = React.useCallback(\n        (next: T) => {\n            if (!isControlled) setInner(next);\n            onChange?.(next);\n        },\n        [isControlled, onChange],\n    );\n\n    React.useEffect(() => {\n        if (!isControlled) return;\n        setInner(value as T);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [isControlled]);\n\n    return [state, setState] as const;\n}\n\nfunction callCallbacks(\n    callbacks: JsonEditorCallbacks | undefined,\n    action: \"edit\" | \"edit-raw\",\n    nextRoot: JsonObject,\n    ctx: { route: JsonPath; path?: JsonPath },\n) {\n    if (!callbacks) return;\n\n    const path = ctx.path ?? \"\";\n    const key = path ? lastSegment(path) : \"\";\n    const parent = path ? parentOf(path) : \"\";\n\n    const meta = { action, route: ctx.route, path, parent, key } as const;\n\n    // For now: everything funnels through onEdit\n    callbacks.onEdit?.(nextRoot, meta as any);\n}\n\n/* ─────────────────────────────────────────────────────────────\n * Component\n * ───────────────────────────────────────────────────────────── */\n\nexport const JsonEditor = React.forwardRef<\n    JsonEditorHandle,\n    JsonEditorEditorProps\n>(function JsonEditorEditor(props, ref) {\n    const {\n        root,\n        onRoot,\n\n        fieldMap,\n        layout,\n        defaults,\n        filters,\n        permissions,\n        callbacks,\n\n        renderField,\n        renderRouteLabel,\n\n        title: headerTitle,\n        schema,\n        onClose,\n        showClose,\n        renderHeader,\n\n        route: routeProp,\n        defaultRoute,\n        onRouteChange,\n\n        viewMode: viewModeProp,\n        defaultViewMode = \"split\",\n        onViewModeChange,\n\n        className,\n        contentClassName,\n        rawClassName,\n    } = props;\n\n    const canViewRaw = permissions?.canViewRaw ?? true;\n    const canEditRaw = permissions?.canEditRaw ?? false;\n\n    const routes = React.useMemo(\n        () => buildJsonRoutes(root, undefined, filters),\n        [root, filters],\n    );\n\n    const allPaths = React.useMemo(() => {\n        const list = collectAllPaths(root as unknown as JsonValue, \"\", []);\n        const seen = new Set<string>();\n        return list.filter((p) => (seen.has(p) ? false : (seen.add(p), true)));\n    }, [root]);\n\n    const computedInitialRoute = React.useMemo(() => {\n        const explicit = routeProp ?? defaultRoute;\n        if (explicit !== undefined) return explicit;\n        return routes[0]?.path ?? \"\";\n    }, [routeProp, defaultRoute, routes]);\n\n    const [route, setRoute] = useControllable<JsonPath>({\n        value: routeProp,\n        defaultValue: computedInitialRoute,\n        onChange: onRouteChange,\n    });\n\n    const [viewMode, setViewMode] = useControllable<JsonEditorViewMode>({\n        value: viewModeProp,\n        defaultValue: defaultViewMode,\n        onChange: onViewModeChange,\n    });\n\n    React.useEffect(() => {\n        if (!canViewRaw && (viewMode === \"raw\" || viewMode === \"split\")) {\n            setViewMode(\"visual\");\n        }\n    }, [canViewRaw, setViewMode, viewMode]);\n\n    const fileInputRef = React.useRef<HTMLInputElement | null>(null);\n\n    /* ─────────────────────────────────────────────\n     * Split view: resizable raw sidebar\n     * ───────────────────────────────────────────── */\n\n    const contentRef = React.useRef<HTMLDivElement | null>(null);\n\n    const [rawWidth, setRawWidth] = React.useState<number>(420);\n    const [isResizing, setIsResizing] = React.useState(false);\n\n    const startXRef = React.useRef(0);\n    const startWRef = React.useRef(0);\n\n    const clampRawWidth = React.useCallback((w: number) => {\n        const containerW =\n            contentRef.current?.getBoundingClientRect().width ?? 0;\n\n        const min = 260;\n        const max = containerW\n            ? Math.max(min, Math.min(900, containerW - 240))\n            : 900;\n\n        return Math.max(min, Math.min(max, w));\n    }, []);\n\n    const onResizePointerDown = React.useCallback(\n        (e: React.PointerEvent<HTMLDivElement>) => {\n            if (e.button !== 0 && e.pointerType === \"mouse\") return;\n\n            setIsResizing(true);\n            startXRef.current = e.clientX;\n            startWRef.current = rawWidth;\n\n            e.currentTarget.setPointerCapture(e.pointerId);\n            e.preventDefault();\n            e.stopPropagation();\n        },\n        [rawWidth],\n    );\n\n    const onResizePointerMove = React.useCallback(\n        (e: React.PointerEvent<HTMLDivElement>) => {\n            if (!isResizing) return;\n\n            const dx = e.clientX - startXRef.current;\n            setRawWidth(clampRawWidth(startWRef.current + dx));\n\n            e.preventDefault();\n        },\n        [clampRawWidth, isResizing],\n    );\n\n    const stopResizing = React.useCallback(\n        (e: React.PointerEvent<HTMLDivElement>) => {\n            if (!isResizing) return;\n            setIsResizing(false);\n\n            try {\n                e.currentTarget.releasePointerCapture(e.pointerId);\n            } catch {\n                // ignore\n            }\n        },\n        [isResizing],\n    );\n\n    const loadFile = React.useCallback(() => {\n        fileInputRef.current?.click();\n    }, []);\n\n    const close = React.useCallback(() => {\n        onClose?.();\n    }, [onClose]);\n\n    const onFilePicked = React.useCallback(\n        async (e: React.ChangeEvent<HTMLInputElement>) => {\n            const file = e.target.files?.[0];\n            e.target.value = \"\";\n            if (!file) return;\n\n            try {\n                const raw = await file.text();\n                const parsed = JSON.parse(raw);\n\n                const nextRoot: JsonObject = isPlainObject(parsed)\n                    ? (parsed as JsonObject)\n                    : ({ value: parsed } as any);\n\n                onRoot(nextRoot);\n                callCallbacks(callbacks, \"edit-raw\", nextRoot, {\n                    route,\n                    path: \"\",\n                });\n            } catch {\n                // Keep silent; raw-panel handles validation UX.\n            }\n        },\n        [callbacks, onRoot, route],\n    );\n\n    const breadcrumb = React.useMemo(() => {\n        const segs = splitPath(route);\n        const parts: Array<{ path: JsonPath; label: React.ReactNode }> = [];\n\n        const rootNode = {\n            path: \"\" as JsonPath,\n            key: \"\",\n            label: \"Root\",\n            children: routes,\n        };\n\n        const rootLabel = renderRouteLabel\n            ? renderRouteLabel({ node: rootNode, active: !route })\n            : rootNode.label;\n\n        parts.push({ path: \"\", label: rootLabel });\n\n        let acc = \"\";\n        for (let i = 0; i < segs.length; i++) {\n            const s = segs[i]!;\n            acc = acc ? `${acc}.${s}` : s;\n            const isActive = i === segs.length - 1;\n\n            const label = renderRouteLabel\n                ? renderRouteLabel({\n                      node: {\n                          path: acc,\n                          key: s,\n                          label: prettifyLabel(s),\n                          children: [],\n                      },\n                      active: isActive,\n                  })\n                : prettifyLabel(s);\n\n            parts.push({ path: acc, label });\n        }\n\n        return (\n            <div className=\"flex items-center gap-1 text-sm text-muted-foreground\">\n                {parts.map((p, idx) => (\n                    <React.Fragment key={p.path || \"root\"}>\n                        <Button\n                            type=\"button\"\n                            variant=\"ghost\"\n                            size=\"sm\"\n                            className=\"h-7 px-2\"\n                            onClick={() => setRoute(p.path)}\n                        >\n                            {p.label}\n                        </Button>\n                        {idx < parts.length - 1 ? (\n                            <span className=\"opacity-60\">/</span>\n                        ) : null}\n                    </React.Fragment>\n                ))}\n            </div>\n        );\n    }, [route, routes, renderRouteLabel, setRoute]);\n\n    const routeTitle = React.useMemo(() => {\n        if (!route) return \"Config.json\";\n        const key = lastSegment(route);\n        if (renderRouteLabel) {\n            return renderRouteLabel({\n                node: {\n                    path: route,\n                    key,\n                    label: prettifyLabel(key),\n                    children: [],\n                },\n                active: true,\n            });\n        }\n        return prettifyLabel(key);\n    }, [route, renderRouteLabel]);\n\n    const viewControls = React.useMemo(() => {\n        return (\n            <div className=\"flex items-center gap-1 rounded-md border p-1\">\n                <Button\n                    type=\"button\"\n                    size=\"sm\"\n                    variant={viewMode === \"visual\" ? \"secondary\" : \"ghost\"}\n                    onClick={() => setViewMode(\"visual\")}\n                >\n                    <Eye className=\"mr-2 h-4 w-4\" />\n                    Visual\n                </Button>\n\n                {canViewRaw ? (\n                    <Button\n                        type=\"button\"\n                        size=\"sm\"\n                        variant={viewMode === \"split\" ? \"secondary\" : \"ghost\"}\n                        onClick={() => setViewMode(\"split\")}\n                    >\n                        <SplitSquareVertical className=\"mr-2 h-4 w-4\" />\n                        Split\n                    </Button>\n                ) : null}\n\n                {canViewRaw ? (\n                    <Button\n                        type=\"button\"\n                        size=\"sm\"\n                        variant={viewMode === \"raw\" ? \"secondary\" : \"ghost\"}\n                        onClick={() => setViewMode(\"raw\")}\n                    >\n                        <Code2 className=\"mr-2 h-4 w-4\" />\n                        Raw\n                    </Button>\n                ) : null}\n            </div>\n        );\n    }, [canViewRaw, setViewMode, viewMode]);\n\n    const header = React.useMemo(() => {\n        const ctx: JsonEditorHeaderRenderCtx = {\n            title: (\n                <div className=\"min-w-0 flex items-center gap-2\">\n                    <div className=\"truncate font-medium\">\n                        {headerTitle ?? \"JSON Editor\"}\n                    </div>\n                </div>\n            ),\n            viewControls,\n            loadFile,\n            setViewMode,\n            close,\n        };\n\n        if (renderHeader) return renderHeader(ctx);\n\n        return (\n            <div className=\"flex items-center justify-between gap-3 px-4 py-3\">\n                <div className=\"min-w-0 flex items-center gap-3\">\n                    {ctx.title}\n\n                    <Button\n                        type=\"button\"\n                        size=\"sm\"\n                        variant=\"outline\"\n                        onClick={loadFile}\n                    >\n                        <Upload className=\"mr-2 h-4 w-4\" />\n                        Load file\n                    </Button>\n                </div>\n\n                <div className=\"flex items-center gap-2\">\n                    {viewControls}\n                    {showClose && onClose ? (\n                        <Button\n                            type=\"button\"\n                            variant=\"ghost\"\n                            size=\"icon\"\n                            onClick={close}\n                            aria-label=\"Close\"\n                        >\n                            <X className=\"h-4 w-4\" />\n                        </Button>\n                    ) : null}\n                </div>\n            </div>\n        );\n    }, [\n        close,\n        headerTitle,\n        loadFile,\n        onClose,\n        renderHeader,\n        schema,\n        setViewMode,\n        showClose,\n        viewControls,\n    ]);\n\n    const onVisualRoot = React.useCallback(\n        (nextRoot: JsonObject, detail?: ChangeDetail<any>) => {\n            onRoot(nextRoot, detail);\n\n            const d: any = detail;\n            const pathGuess =\n                (typeof d?.name === \"string\" && d.name) ||\n                (typeof d?.path === \"string\" && d.path) ||\n                route;\n\n            callCallbacks(callbacks, \"edit\", nextRoot, {\n                route,\n                path: pathGuess,\n            });\n        },\n        [callbacks, onRoot, route],\n    );\n\n    const onRawRoot = React.useCallback(\n        (nextRoot: JsonObject, detail?: ChangeDetail<any>) => {\n            onRoot(nextRoot, detail);\n            callCallbacks(callbacks, \"edit-raw\", nextRoot, { route, path: \"\" });\n        },\n        [callbacks, onRoot, route],\n    );\n\n    React.useImperativeHandle(\n        ref,\n        () => ({\n            loadFile,\n            getRoute: () => route,\n            setRoute: (r) => setRoute(r),\n            getViewMode: () => viewMode,\n            setViewMode: (m) => setViewMode(m),\n        }),\n        [loadFile, route, setRoute, setViewMode, viewMode],\n    );\n\n    const showRaw = canViewRaw && (viewMode === \"split\" || viewMode === \"raw\");\n    const showVisual = viewMode !== \"raw\";\n    const rawOnly = viewMode === \"raw\";\n\n    return (\n        <div\n            className={cn(\n                \"flex h-full min-h-0 w-full flex-col overflow-hidden\",\n                className,\n            )}\n        >\n            <input\n                ref={fileInputRef}\n                type=\"file\"\n                accept=\"application/json,.json\"\n                className=\"hidden\"\n                onChange={onFilePicked}\n            />\n\n            {/* Header stays fixed */}\n            {header}\n            <Separator />\n\n            {/* Body is the only scrollable region */}\n            <ScrollArea className={cn(\"min-h-0 flex-1\", contentClassName)}>\n                <div\n                    ref={contentRef}\n                    className={cn(\n                        \"flex min-h-0 h-full\",\n                        isResizing && \"select-none cursor-col-resize\",\n                    )}\n                >\n                    {/* Raw panel (LEFT) */}\n                    {showRaw ? (\n                        <div\n                            className={cn(\n                                \"shrink-0 relative\",\n                                rawOnly ? \"flex-1 border-r-0\" : \"border-r\",\n                                rawClassName,\n                            )}\n                            style={{ width: rawOnly ? \"100%\" : rawWidth }}\n                        >\n                            <JsonEditorRawPanel\n                                root={root}\n                                onRoot={onRawRoot}\n                                readOnly={!canEditRaw}\n                            />\n\n                            {/* Resizer only in split mode */}\n                            {!rawOnly && viewMode === \"split\" ? (\n                                <div\n                                    role=\"separator\"\n                                    aria-orientation=\"vertical\"\n                                    tabIndex={0}\n                                    className={cn(\n                                        \"absolute top-0 right-0 h-full w-3 -mr-1.5\",\n                                        \"cursor-col-resize touch-none\",\n                                        \"hover:bg-muted/40\",\n                                    )}\n                                    onPointerDown={onResizePointerDown}\n                                    onPointerMove={onResizePointerMove}\n                                    onPointerUp={stopResizing}\n                                    onPointerCancel={stopResizing}\n                                    onDoubleClick={() => setRawWidth(420)}\n                                />\n                            ) : null}\n                        </div>\n                    ) : null}\n\n                    {/* Main (RIGHT) */}\n                    {showVisual ? (\n                        <div className=\"min-h-0 flex-1 p-4\">\n                            <JsonEditorMain\n                                root={root}\n                                onRoot={onVisualRoot}\n                                route={route}\n                                allPaths={allPaths}\n                                fieldMap={fieldMap}\n                                layout={layout}\n                                defaults={defaults}\n                                filters={filters}\n                                disabled={false}\n                                readOnly={false}\n                                breadcrumb={breadcrumb}\n                                title={routeTitle}\n                                onNavigate={(r) => setRoute(r)}\n                                renderField={renderField}\n                            />\n                        </div>\n                    ) : null}\n                </div>\n            </ScrollArea>\n        </div>\n    );\n});\n\nexport default JsonEditor;\n","// src/presets/shadcn-variants/json-editor/index.tsx\n// noinspection GrazieInspection\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { Button } from \"@/presets/ui/button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/presets/ui/popover\";\nimport { ScrollArea } from \"@/presets/ui/scroll-area\";\n\nimport { ChevronDown, ChevronUp, Code2 } from \"lucide-react\";\n\nimport type { ChangeDetail } from \"@/variants/shared\";\nimport type { JsonObject } from \"@/lib/json-editor/utils\";\n\nimport type {\n    JsonEditorIndexHandle,\n    JsonEditorTriggerSize,\n    JsonEditorTriggerVariant,\n    ShadcnJsonEditorProps,\n} from \"./types\";\n\nimport JsonEditor from \"./editor\";\n\nfunction isPlainObject(v: unknown): v is JsonObject {\n    return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction triggerHeightCls(size?: JsonEditorTriggerSize) {\n    // match your input-ish sizing conventions\n    switch (size) {\n        case \"sm\":\n            return \"h-8 text-xs\";\n        case \"lg\":\n            return \"h-11 text-base\";\n        default:\n            return \"h-9 text-sm\";\n    }\n}\n\nexport const ShadcnJsonEditorVariant = React.forwardRef<\n    JsonEditorIndexHandle,\n    ShadcnJsonEditorProps\n>(function ShadcnJsonEditorVariant(props, ref) {\n    const {\n        mode = \"popover\",\n\n        // wrapper ui\n        title,\n        schema,\n        triggerLabel = \"Edit JSON\",\n        triggerVariant = \"outline\" as JsonEditorTriggerVariant,\n        triggerSize = \"default\" as JsonEditorTriggerSize,\n\n        popoverClassName,\n        panelClassName,\n        className,\n\n        open: openProp,\n        onOpenChange,\n\n        id,\n        describedBy,\n\n        onClose,\n\n        // editor passthrough\n        fieldMap,\n        layout,\n        defaults,\n        filters,\n        permissions,\n        callbacks,\n\n        renderRouteLabel,\n        renderField,\n\n        viewMode,\n        defaultViewMode,\n        onViewModeChange,\n\n        route,\n        onRouteChange,\n\n        // Popover trigger visuals (optional)\n        leadingIcons,\n        trailingIcons,\n        icon,\n        iconGap,\n        leadingIconSpacing,\n        trailingIconSpacing,\n\n        leadingControl,\n        trailingControl,\n        leadingControlClassName,\n        trailingControlClassName,\n        joinControls = true,\n        extendBoxToControls = true,\n\n        triggerClassName,\n    } = props as any;\n\n    const editorRef = React.useRef<any>(null);\n\n    // ---------------------------------------------------------------------\n    // Wiring: standalone OR variant\n    // ---------------------------------------------------------------------\n\n    const root: JsonObject = React.useMemo(() => {\n        if (\"root\" in props) return (props as any).root;\n\n        const v = (props as any).value;\n        if (isPlainObject(v)) return v;\n        if (v == null) return {} as JsonObject;\n\n        // avoid crashing on non-object values\n        return {} as JsonObject;\n    }, [props]);\n\n    const emitRoot = React.useCallback(\n        (nextRoot: JsonObject, detail?: ChangeDetail<any>) => {\n            if (\"onRoot\" in props) {\n                (props as any).onRoot?.(nextRoot, detail);\n                return;\n            }\n            (props as any).onValue?.(nextRoot, detail);\n        },\n        [props],\n    );\n\n    // ---------------------------------------------------------------------\n    // Popover open state (controlled or internal)\n    // ---------------------------------------------------------------------\n\n    const [openInner, setOpenInner] = React.useState(false);\n    const open = openProp ?? openInner;\n\n    const setOpen = React.useCallback(\n        (next: boolean) => {\n            if (openProp === undefined) setOpenInner(next);\n            onOpenChange?.(next);\n            if (!next) onClose?.();\n        },\n        [openProp, onOpenChange, onClose],\n    );\n\n    const close = React.useCallback(() => setOpen(false), [setOpen]);\n    const doOpen = React.useCallback(() => setOpen(true), [setOpen]);\n    const toggle = React.useCallback(() => setOpen(!open), [setOpen, open]);\n\n    // ---------------------------------------------------------------------\n    // Inline “accordion-like” expansion (MUST NOT be a hook in a branch)\n    // ---------------------------------------------------------------------\n\n    const [expanded, setExpanded] = React.useState<boolean | undefined>();\n    React.useImperativeHandle(\n        ref,\n        () => ({\n            open: doOpen,\n            close,\n            toggle,\n            editor: editorRef,\n        }),\n        [doOpen, close, toggle],\n    );\n\n    // If accordion and user didn't control viewMode, force default to visual\n    const resolvedDefaultViewMode =\n        defaultViewMode ??\n        (mode === \"accordion\" && viewMode === undefined ? \"visual\" : undefined);\n\n    const editorNode = (\n        <JsonEditor\n            ref={editorRef}\n            root={root}\n            onRoot={emitRoot}\n            fieldMap={fieldMap}\n            layout={layout}\n            defaults={defaults}\n            filters={filters}\n            permissions={permissions}\n            callbacks={callbacks}\n            renderRouteLabel={renderRouteLabel as any}\n            renderField={renderField as any}\n            title={title}\n            schema={schema}\n            route={route}\n            onRouteChange={onRouteChange}\n            viewMode={viewMode as any}\n            defaultViewMode={resolvedDefaultViewMode as any}\n            onViewModeChange={onViewModeChange}\n            showClose={mode === \"popover\"}\n            onClose={mode === \"popover\" ? close : undefined}\n        />\n    );\n\n    // ---------------------------------------------------------------------\n    // Inline “accordion-like” mode\n    // - header must look like an input trigger (border/bg/height/focus)\n    // ---------------------------------------------------------------------\n\n    if (mode === \"accordion\") {\n        const headerHeight = triggerHeightCls(triggerSize);\n        const wrapperBox = cn(\n            \"border-input w-full min-w-0 rounded-md border bg-surfaces-input shadow-xs\",\n            \"transition-[color,box-shadow] outline-none\",\n            \"focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]\",\n            \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n        );\n\n        return (\n            <div className={cn(\"w-full\", className)}>\n                <div\n                    className={cn(\n                        wrapperBox,\n                        \"overflow-hidden\",\n                        panelClassName,\n                    )}\n                >\n                    {/* “Trigger area” */}\n                    <div\n                        className={cn(\n                            \"flex items-center justify-between gap-3 px-3\",\n                            headerHeight,\n                        )}\n                        aria-controls={\n                            id ? `${id}__json_editor_panel` : undefined\n                        }\n                    >\n                        {typeof schema === \"string\" ? (\n                            <div className=\"min-w-0 flex-1 truncate\">\n                                {schema}\n                            </div>\n                        ) : (\n                            <div className=\"min-w-0 flex-1 truncate\">\n                                {title ?? \"JSON Editor\"}\n                            </div>\n                        )}\n\n                        <Button\n                            type=\"button\"\n                            size=\"sm\"\n                            variant=\"link\"\n                            onClick={() => setExpanded((v) => !v)}\n                            aria-expanded={expanded}\n                            aria-controls={\n                                id ? `${id}__json_editor_panel` : undefined\n                            }\n                            aria-label={\n                                expanded\n                                    ? \"Collapse JSON editor\"\n                                    : \"Expand JSON editor\"\n                            }\n                            className=\"h-8 w-8 p-0\"\n                        >\n                            {expanded ? (\n                                <ChevronUp className=\"h-4 w-4\" />\n                            ) : (\n                                <ChevronDown className=\"h-4 w-4\" />\n                            )}\n                        </Button>\n                    </div>\n\n                    {expanded ? (\n                        <div\n                            id={id ? `${id}__json_editor_panel` : undefined}\n                            className=\"h-130 min-h-0 overflow-hidden border-t border-border/60\"\n                        >\n                            <ScrollArea className=\"h-full w-full\">\n                                <div className=\"min-h-0\">{editorNode}</div>\n                            </ScrollArea>\n                        </div>\n                    ) : null}\n                </div>\n            </div>\n        );\n    }\n\n    // ---------------------------------------------------------------------\n    // Popover mode (trigger visuals + optional controls)\n    // ---------------------------------------------------------------------\n\n    const triggerDisabled =\n        \"disabled\" in props ? !!(props as any).disabled : false;\n\n    const resolvedLeadingIcons: React.ReactNode[] = (() => {\n        if (Array.isArray(leadingIcons) && leadingIcons.length)\n            return leadingIcons;\n        if (icon) return [icon];\n        return [<Code2 key=\"default\" className=\"h-4 w-4 opacity-70\" />];\n    })();\n\n    const resolvedTrailingIcons: React.ReactNode[] =\n        (Array.isArray(trailingIcons) ? trailingIcons : []) ?? [];\n\n    const baseIconGap = iconGap ?? 4;\n    const leadingGap = leadingIconSpacing ?? baseIconGap;\n    const trailingGap = trailingIconSpacing ?? baseIconGap;\n\n    const hasLeadingIcons = resolvedLeadingIcons.length > 0;\n    const hasTrailingIcons = resolvedTrailingIcons.length > 0;\n\n    const hasLeadingControl = !!leadingControl;\n    const hasTrailingControl = !!trailingControl;\n    const hasControls = hasLeadingControl || hasTrailingControl;\n\n    const baseBoxClasses = cn(\n        \"border-input w-full min-w-0 rounded-md border bg-surfaces-input hover:bg-surfaces-input shadow-xs\",\n        \"transition-[color,box-shadow] outline-none\",\n        \"focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]\",\n        \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n    );\n\n    const TriggerButton = (\n        <Button\n            type=\"button\"\n            id={id}\n            aria-describedby={describedBy}\n            variant={triggerVariant as any}\n            size={triggerSize as any}\n            disabled={triggerDisabled}\n            className={cn(\n                \"w-full justify-between\",\n                baseBoxClasses,\n                hasControls &&\n                    joinControls &&\n                    extendBoxToControls &&\n                    \"border-none shadow-none focus-visible:ring-0 focus-visible:outline-none\",\n                triggerClassName,\n            )}\n        >\n            <div className=\"flex w-full items-center justify-between gap-2 min-w-0\">\n                <div className=\"flex min-w-0 items-center gap-2 grow\">\n                    {hasLeadingIcons && (\n                        <span\n                            className=\"flex items-center shrink-0\"\n                            style={{ columnGap: leadingGap }}\n                            data-slot=\"leading-icons\"\n                        >\n                            {resolvedLeadingIcons.map((node, idx) => (\n                                <span\n                                    key={idx}\n                                    className=\"flex items-center justify-center\"\n                                >\n                                    {node}\n                                </span>\n                            ))}\n                        </span>\n                    )}\n\n                    <span className=\"min-w-0 flex-1 truncate text-left\">\n                        {triggerLabel}\n                    </span>\n                </div>\n\n                <div className=\"flex items-center gap-1 shrink-0\">\n                    {typeof schema === \"string\" ? (\n                        <span className=\"ml-2 max-w-[45%] truncate text-xs text-muted-foreground\">\n                            {schema}\n                        </span>\n                    ) : null}\n\n                    {hasTrailingIcons && (\n                        <span\n                            className=\"flex items-center\"\n                            style={{ columnGap: trailingGap }}\n                            data-slot=\"trailing-icons\"\n                        >\n                            {resolvedTrailingIcons.map((node, idx) => (\n                                <span\n                                    key={idx}\n                                    className=\"flex items-center justify-center\"\n                                >\n                                    {node}\n                                </span>\n                            ))}\n                        </span>\n                    )}\n                </div>\n            </div>\n        </Button>\n    );\n\n    const PopoverCore = (\n        <Popover open={open} onOpenChange={setOpen}>\n            <PopoverTrigger asChild>{TriggerButton}</PopoverTrigger>\n\n            <PopoverContent\n                align=\"end\"\n                sideOffset={8}\n                avoidCollisions\n                collisionPadding={12}\n                className={cn(\n                    \"p-0 overflow-hidden\",\n                    \"w-[min(980px,var(--radix-popper-available-width))] max-w-[95dvw]\",\n                    \"h-[min(85dvh,var(--radix-popper-available-height))] max-h-[min(85dvh,var(--radix-popper-available-height))]\",\n                    popoverClassName,\n                )}\n                style={{\n                    maxHeight:\n                        \"min(85dvh, var(--radix-popper-available-height))\",\n                    maxWidth: \"min(95dvw, var(--radix-popper-available-width))\",\n                }}\n            >\n                <ScrollArea className=\"h-full w-full\">\n                    <div className=\"min-h-0\">{editorNode}</div>\n                </ScrollArea>\n            </PopoverContent>\n        </Popover>\n    );\n\n    if (!hasControls) {\n        return <div className={cn(\"w-full\", className)}>{PopoverCore}</div>;\n    }\n\n    if (joinControls) {\n        return (\n            <div className={cn(\"w-full\", className)}>\n                <div\n                    className={cn(\n                        \"flex items-stretch w-full\",\n                        extendBoxToControls\n                            ? baseBoxClasses\n                            : \"border-none shadow-none bg-transparent\",\n                    )}\n                    data-slot=\"json-editor-group\"\n                >\n                    {hasLeadingControl && (\n                        <div\n                            className={cn(\n                                \"flex items-center px-2\",\n                                leadingControlClassName,\n                            )}\n                            data-slot=\"leading-control\"\n                        >\n                            {leadingControl}\n                        </div>\n                    )}\n\n                    <div\n                        className=\"flex-1 min-w-0\"\n                        data-slot=\"json-editor-region\"\n                    >\n                        {PopoverCore}\n                    </div>\n\n                    {hasTrailingControl && (\n                        <div\n                            className={cn(\n                                \"flex items-center px-2\",\n                                trailingControlClassName,\n                            )}\n                            data-slot=\"trailing-control\"\n                        >\n                            {trailingControl}\n                        </div>\n                    )}\n                </div>\n            </div>\n        );\n    }\n\n    return (\n        <div className={cn(\"flex items-stretch w-full\", className)}>\n            {hasLeadingControl && (\n                <div\n                    className={cn(\n                        \"flex items-center mr-1\",\n                        leadingControlClassName,\n                    )}\n                    data-slot=\"leading-control\"\n                >\n                    {leadingControl}\n                </div>\n            )}\n\n            <div className=\"flex-1 min-w-0\" data-slot=\"json-editor-region\">\n                {PopoverCore}\n            </div>\n\n            {hasTrailingControl && (\n                <div\n                    className={cn(\n                        \"flex items-center ml-1\",\n                        trailingControlClassName,\n                    )}\n                    data-slot=\"trailing-control\"\n                >\n                    {trailingControl}\n                </div>\n            )}\n        </div>\n    );\n});\n\nexport default ShadcnJsonEditorVariant;\n","// src/variants/core/json-editor.tsx\r\n\r\nimport type { VariantModule } from \"@/schema/variant\";\r\nimport ShadcnJsonEditorVariant from \"@/presets/shadcn-variants/json-editor\";\r\nimport type { ShadcnJsonEditorProps } from \"@/presets/shadcn-variants/json-editor/types\";\r\nimport Ajv from \"ajv\";\r\n\r\nconst ajv = new Ajv({\r\n    allErrors: true,\r\n    strict: false,\r\n});\r\n\r\n/**\r\n * Core JSON Editor variant module.\r\n */\r\nexport const jsonEditorVariant: VariantModule<\"json-editor\"> = {\r\n    variant: \"json-editor\",\r\n\r\n    // Visual component: Shadcn-based JSON editor\r\n    Variant: ShadcnJsonEditorVariant as any,\r\n\r\n    // Validation logic\r\n    validate(value, { props }) {\r\n        const { schema } = props;\r\n        let resolvedSchema = schema;\r\n\r\n        // If schema is a string, try to parse it as JSON\r\n        if (typeof schema === \"string\") {\r\n            try {\r\n                resolvedSchema = JSON.parse(schema);\r\n            } catch (e) {\r\n                // If it's not valid JSON, we can't use it for validation\r\n                // It might be a schema ID/name, so we skip AJV validation here\r\n                resolvedSchema = null;\r\n            }\r\n        }\r\n\r\n        // Only try a validation if the schema property is provided (as an object)\r\n        if (resolvedSchema && typeof resolvedSchema === \"object\") {\r\n            try {\r\n                const validate = ajv.compile(resolvedSchema);\r\n                const valid = validate(value);\r\n\r\n                if (!valid) {\r\n                    // Return the first error message or a generic one\r\n                    const error = validate.errors?.[0];\r\n                    return error ? `${error.instancePath} ${error.message}`.trim() : \"Invalid JSON structure\";\r\n                }\r\n            } catch (e) {\r\n                // Compilation error (e.g. invalid schema format)\r\n                return `Schema Error: ${e instanceof Error ? e.message : String(e)}`;\r\n            }\r\n        }\r\n\r\n        return true;\r\n    },\r\n\r\n    // Layout defaults for this variant\r\n    defaults: {\r\n        layout: {\r\n            labelPlacement: \"top\",\r\n            sublabelPlacement: \"right\",\r\n            descriptionPlacement: \"below\",\r\n            helpTextPlacement: \"below\",\r\n            errorTextPlacement: \"below\",\r\n            inline: false,\r\n            fullWidth: true,\r\n            defaultSize: \"md\",\r\n            defaultDensity: \"comfortable\",\r\n        },\r\n    },\r\n\r\n    meta: {\r\n        label: \"JSON Editor\",\r\n        description: \"Advanced JSON editor with visual and raw modes\",\r\n        tags: [\"json\", \"editor\", \"object\", \"array\"],\r\n    },\r\n};\r\n\r\nexport default jsonEditorVariant;\r\n","// resources/js/presets/shadcn-variants/lister/utils.tsx\r\nimport * as React from \"react\";\r\nimport type { ListerMode, ListerProviderHost } from \"@/presets/lister/types\";\r\nimport type { KeyOrFn } from \"./types\";\r\n\r\n/* ─────────────────────────────────────────────────────────────\r\n * pick + equality\r\n * ───────────────────────────────────────────────────────────── */\r\n\r\nfunction pick<TRaw extends Record<string, any>, TOut, TCtx = any>(\r\n    raw: TRaw,\r\n    keyOrFn: KeyOrFn<TRaw, TOut, TCtx> | undefined,\r\n    ctx: TCtx,\r\n): TOut | undefined {\r\n    if (!keyOrFn) return undefined;\r\n    if (typeof keyOrFn === \"function\") return keyOrFn(raw, ctx);\r\n    return raw?.[keyOrFn] as TOut;\r\n}\r\n\r\nfunction isSameValue(a: any, b: any) {\r\n    if (a === b) return true;\r\n    const aa = Array.isArray(a);\r\n    const bb = Array.isArray(b);\r\n    if (aa !== bb) return false;\r\n    if (aa && bb) {\r\n        if (a.length !== b.length) return false;\r\n        for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\n/* ─────────────────────────────────────────────────────────────\r\n * optionValue inference helpers (inline endpoint mode)\r\n * ───────────────────────────────────────────────────────────── */\r\n\r\nfunction isScalarIdLike(v: any) {\r\n    const t = typeof v;\r\n    if (t !== \"string\" && t !== \"number\") return false;\r\n    return !(t === \"string\" && v.trim() === \"\");\r\n}\r\n\r\nfunction uniqRatio(values: any[]) {\r\n    const filtered = values.filter((v) => v != null && v !== \"\");\r\n    if (!filtered.length) return 0;\r\n    const set = new Set(\r\n        filtered.map((v) => (typeof v === \"string\" ? v.trim() : v)),\r\n    );\r\n    return set.size / filtered.length;\r\n}\r\n\r\nfunction scoreKey(key: string, presence: number, uniq: number) {\r\n    const k = key.toLowerCase();\r\n\r\n    let bonus = 0;\r\n    if (k === \"id\") bonus += 10;\r\n    if (k === \"_id\") bonus += 7;\r\n    if (k.includes(\"uuid\")) bonus += 7;\r\n    if (k.includes(\"slug\")) bonus += 5;\r\n    if (k.includes(\"code\")) bonus += 4;\r\n    if (k.includes(\"key\")) bonus += 3;\r\n    if (k.endsWith(\"id\") && k !== \"id\") bonus += 4;\r\n\r\n    if (k.includes(\"name\") || k.includes(\"title\") || k.includes(\"label\")) {\r\n        bonus -= 2;\r\n    }\r\n\r\n    const base = presence * 4 + uniq * 10;\r\n    return base + bonus;\r\n}\r\n\r\nfunction inferOptionValueKeyFromRawList(rawList: any[], fallback = \"id\") {\r\n    const sample = Array.isArray(rawList) ? rawList.slice(0, 10) : [];\r\n    if (!sample.length) return { key: fallback, inferred: false };\r\n\r\n    const common = [\"id\", \"value\", \"key\", \"uuid\", \"slug\", \"_id\", \"code\"];\r\n    for (const k of common) {\r\n        const vals = sample.map((r) => r?.[k]).filter(isScalarIdLike);\r\n        const presence = vals.length / sample.length;\r\n        const uniq = uniqRatio(vals);\r\n        if (presence >= 0.9 && uniq >= 0.95) return { key: k, inferred: true };\r\n    }\r\n\r\n    const keys = new Set<string>();\r\n    for (const r of sample) {\r\n        if (!r || typeof r !== \"object\") continue;\r\n        for (const k of Object.keys(r)) keys.add(k);\r\n    }\r\n\r\n    let bestKey = fallback;\r\n    let bestScore = -Infinity;\r\n    let bestPresence = 0;\r\n    let bestUniq = 0;\r\n\r\n    for (const k of keys) {\r\n        const vals = sample.map((r) => r?.[k]).filter(isScalarIdLike);\r\n        const presence = vals.length / sample.length;\r\n        if (presence < 0.7) continue;\r\n\r\n        const uniq = uniqRatio(vals);\r\n        const score = scoreKey(k, presence, uniq);\r\n\r\n        if (score > bestScore) {\r\n            bestScore = score;\r\n            bestKey = k;\r\n            bestPresence = presence;\r\n            bestUniq = uniq;\r\n        }\r\n    }\r\n\r\n    if (bestPresence >= 0.9 && bestUniq >= 0.95) {\r\n        return { key: bestKey, inferred: true };\r\n    }\r\n\r\n    return { key: fallback, inferred: false };\r\n}\r\n\r\n/* ─────────────────────────────────────────────────────────────\r\n * Trigger display\r\n * ───────────────────────────────────────────────────────────── */\r\n\r\nfunction buildLabelsFromOptions(args: {\r\n    mode: ListerMode;\r\n    value: any;\r\n    selectedOptions: any[] | null;\r\n    placeholder: string;\r\n    maxItems: number;\r\n}) {\r\n    const { mode, value, selectedOptions, placeholder, maxItems } = args;\r\n\r\n    const labelFor = (opt: any) =>\r\n        String(\r\n            opt?.label ??\r\n                opt?.meta?.label ??\r\n                opt?.title ??\r\n                opt?.name ??\r\n                opt?.value ??\r\n                \"\",\r\n        ).trim();\r\n\r\n    const labels = (() => {\r\n        let options =\r\n            mode !== \"multiple\"\r\n                ? Array.isArray(selectedOptions)\r\n                    ? selectedOptions\r\n                    : selectedOptions\r\n                      ? [selectedOptions]\r\n                      : []\r\n                : selectedOptions;\r\n        const arr = Array.isArray(value) ? value : value ? [value] : [];\r\n        const map = new Map<any, string>();\r\n        for (const o of options ?? []) {\r\n            if (o?.value == null) continue;\r\n            const lbl = labelFor(o);\r\n            if (lbl) map.set(o.value, lbl);\r\n        }\r\n        return arr.map((v) => map.get(v) ?? String(v));\r\n    })();\r\n\r\n    if (!labels.length) {\r\n        return <span className=\"text-muted-foreground\">{placeholder}</span>;\r\n    }\r\n\r\n    if (mode !== \"multiple\") {\r\n        return <span className=\"truncate\">{labels[0]}</span>;\r\n    }\r\n\r\n    const shown = labels.slice(0, Math.max(1, maxItems));\r\n    const remaining = labels.length - shown.length;\r\n\r\n    return (\r\n        <span className=\"truncate\">\r\n            {shown.join(\", \")}\r\n            {remaining > 0 ? ` ..${remaining} more` : \"\"}\r\n        </span>\r\n    );\r\n}\r\n\r\n/* ─────────────────────────────────────────────────────────────\r\n * Defaults\r\n * ───────────────────────────────────────────────────────────── */\r\n\r\nconst defaultHost: ListerProviderHost = {\r\n    can: () => true,\r\n    log: () => {},\r\n};\r\n\r\nexport {\r\n    pick,\r\n    isSameValue,\r\n    inferOptionValueKeyFromRawList,\r\n    buildLabelsFromOptions,\r\n    defaultHost,\r\n};\r\n","// src/presets/shadcn-variants/lister/inline-def.ts\n\n/* ─────────────────────────────────────────────────────────────\n * Inline def builders\n * ───────────────────────────────────────────────────────────── */\n\nimport type {\n    ListerDefinition,\n    ListerId,\n    ListerMapping,\n    ListerSource,\n    Selector,\n} from \"@/presets/lister/types\";\nimport type { KeyOrFn } from \"@/presets/shadcn-variants/lister/types\";\nimport { pick } from \"@/presets/shadcn-variants/lister/utils\";\n\n/**\n * Full inline def (standalone).\n * NOTE: mapping keys MUST match what mapOptions() reads.\n */\nexport function makeInlineDef<\n    TRaw extends Record<string, any>,\n    TValue extends ListerId,\n    TFilters,\n    TMeta,\n    TCtx = any,\n>(args: {\n    endpoint: string;\n    method?: \"GET\" | \"POST\";\n    buildRequest?: ListerSource<TFilters>[\"buildRequest\"];\n    selector?: Selector<TRaw>;\n\n    optionValue: KeyOrFn<TRaw, TValue, TCtx>;\n    optionLabel?: KeyOrFn<TRaw, any, TCtx>;\n    optionIcon?: KeyOrFn<TRaw, any, TCtx>;\n    optionDescription?: KeyOrFn<TRaw, any, TCtx>;\n    optionDisabled?: KeyOrFn<TRaw, boolean, TCtx>;\n    optionGroup?: KeyOrFn<TRaw, string, TCtx>;\n    optionMeta?: KeyOrFn<TRaw, TMeta, TCtx>;\n}): ListerDefinition<TRaw, TValue, TFilters, TMeta, TCtx> {\n    const mapping = {\n        optionValue: (raw: TRaw, ctx: TCtx) =>\n            pick(raw as any, args.optionValue as any, ctx)!,\n\n        optionLabel: args.optionLabel\n            ? (raw: TRaw, ctx: TCtx) =>\n                  pick(raw as any, args.optionLabel as any, ctx)\n            : undefined,\n\n        optionIcon: args.optionIcon\n            ? (raw: TRaw, ctx: TCtx) =>\n                  pick(raw as any, args.optionIcon as any, ctx)\n            : undefined,\n\n        optionDescription: args.optionDescription\n            ? (raw: TRaw, ctx: TCtx) =>\n                  pick(raw as any, args.optionDescription as any, ctx)\n            : undefined,\n\n        optionDisabled: args.optionDisabled\n            ? (raw: TRaw, ctx: TCtx) =>\n                  !!pick(raw as any, args.optionDisabled as any, ctx)\n            : undefined,\n\n        optionGroup: (args.optionGroup\n            ? (raw: TRaw, ctx: TCtx) =>\n                  pick(raw as any, args.optionGroup as any, ctx)\n            : undefined) as any,\n\n        optionMeta: args.optionMeta\n            ? (raw: TRaw, ctx: TCtx) =>\n                  pick(raw as any, args.optionMeta as any, ctx)\n            : undefined,\n    } satisfies ListerMapping<any, any, any, any>;\n\n    return {\n        id: args.endpoint,\n        source: {\n            endpoint: args.endpoint,\n            // IMPORTANT: do not invent defaults here (method is optional upstream)\n            method: args.method,\n            buildRequest: args.buildRequest,\n        },\n        selector: args.selector,\n        mapping,\n    } as any;\n}\n\n/**\n * Inline override \"patch\" to merge into an existing def.\n *\n * IMPORTANT (your rule):\n * - this can be created even if some fields are undefined\n * - merge logic will ignore undefined keys at the leaf level\n * - mapping is always present (even empty) so it can merge\n *\n * NOTE:\n * - No invented defaults (method stays undefined unless provided).\n * - endpoint is optional, so you can patch JUST mapping/selector.\n */\nexport function makeInlinePatch<\n    TRaw extends Record<string, any>,\n    TValue extends ListerId,\n    TFilters,\n    TMeta,\n    TCtx = any,\n>(args: {\n    endpoint?: string;\n    method?: \"GET\" | \"POST\";\n    buildRequest?: ListerSource<TFilters>[\"buildRequest\"];\n    selector?: Selector<TRaw>;\n\n    optionValue?: KeyOrFn<TRaw, TValue, TCtx>;\n    optionLabel?: KeyOrFn<TRaw, any, TCtx>;\n    optionIcon?: KeyOrFn<TRaw, any, TCtx>;\n    optionDescription?: KeyOrFn<TRaw, any, TCtx>;\n    optionDisabled?: KeyOrFn<TRaw, boolean, TCtx>;\n    optionGroup?: KeyOrFn<TRaw, string, TCtx>;\n    optionMeta?: KeyOrFn<TRaw, TMeta, TCtx>;\n}): any {\n    const mapping: any = {};\n\n    if (args.optionValue)\n        mapping.optionValue = (raw: TRaw, ctx: TCtx) =>\n            pick(raw as any, args.optionValue as any, ctx)!;\n\n    if (args.optionLabel)\n        mapping.optionLabel = (raw: TRaw, ctx: TCtx) =>\n            pick(raw as any, args.optionLabel as any, ctx);\n\n    if (args.optionIcon)\n        mapping.optionIcon = (raw: TRaw, ctx: TCtx) =>\n            pick(raw as any, args.optionIcon as any, ctx);\n\n    if (args.optionDescription)\n        mapping.optionDescription = (raw: TRaw, ctx: TCtx) =>\n            pick(raw as any, args.optionDescription as any, ctx);\n\n    if (args.optionDisabled)\n        mapping.optionDisabled = (raw: TRaw, ctx: TCtx) =>\n            !!pick(raw as any, args.optionDisabled as any, ctx);\n\n    if (args.optionGroup)\n        mapping.optionGroup = (raw: TRaw, ctx: TCtx) =>\n            pick(raw as any, args.optionGroup as any, ctx);\n\n    if (args.optionMeta)\n        mapping.optionMeta = (raw: TRaw, ctx: TCtx) =>\n            pick(raw as any, args.optionMeta as any, ctx);\n\n    return {\n        id: args.endpoint,\n        source: args.endpoint\n            ? {\n                  endpoint: args.endpoint,\n                  // IMPORTANT: do not invent defaults\n                  method: args.method,\n                  buildRequest: args.buildRequest,\n              }\n            : undefined,\n        selector: args.selector,\n        // keep present even if empty (so deep merge can merge into base.mapping)\n        mapping,\n    };\n}\n\n/* ─────────────────────────────────────────────────────────────\n * Deep merge (def + inline)\n * ───────────────────────────────────────────────────────────── */\n\ntype AnyObj = Record<string, any>;\n\nfunction isPlainObject(x: any): x is AnyObj {\n    if (x == null || typeof x !== \"object\") return false;\n    const proto = Object.getPrototypeOf(x);\n    return proto === Object.prototype || proto === null;\n}\n\n/**\n * Deep merge:\n * - merges plain objects\n * - arrays are replaced\n * - undefined does not override\n */\nfunction deepMergeDefined<T>(base: T, patch: any): T {\n    if (patch === undefined) return base;\n\n    if (!isPlainObject(base) || !isPlainObject(patch)) {\n        if (Array.isArray(patch)) return patch as any;\n        return patch as any;\n    }\n\n    const out: AnyObj = { ...(base as any) };\n\n    for (const key of Object.keys(patch)) {\n        const pv = patch[key];\n        if (pv === undefined) continue;\n\n        const bv = (base as any)[key];\n\n        if (Array.isArray(pv)) {\n            out[key] = pv;\n            continue;\n        }\n\n        if (isPlainObject(bv) && isPlainObject(pv)) {\n            out[key] = deepMergeDefined(bv, pv);\n            continue;\n        }\n\n        out[key] = pv;\n    }\n\n    return out as T;\n}\n\n/**\n * Merge rule:\n * - if both are non-null/undefined, merge\n * - empty object still counts as \"exists\" and will merge\n */\nexport function mergeListerDef<\n    TRaw,\n    TValue extends ListerId,\n    TFilters,\n    TMeta,\n    TCtx = any,\n>(\n    baseDef: ListerDefinition<TRaw, TValue, TFilters, TMeta, TCtx> | undefined,\n    inlineDef: any | undefined,\n): ListerDefinition<TRaw, TValue, TFilters, TMeta, TCtx> | undefined {\n    if (baseDef == null) return inlineDef as any;\n    if (inlineDef == null) return baseDef;\n    return deepMergeDefined(baseDef, inlineDef);\n}\n","// OptionList (react-virtuoso, variable height, no forwardRef components)\r\n\r\nimport * as React from \"react\";\r\nimport { Virtuoso } from \"react-virtuoso\";\r\n\r\nimport {\r\n    ListerId,\r\n    ListerOption,\r\n    ListerSessionId,\r\n    useLister,\r\n} from \"@/presets/lister\";\r\n\r\nimport { cn } from \"@/lib/utils\";\r\nimport { ScrollArea } from \"@/presets/ui/scroll-area\";\r\nimport { Check } from \"lucide-react\";\r\n\r\ntype AnyPresetMap = any;\r\n\r\n// ─────────────────────────────────────────────\r\n// Icon helpers (opt.icon)\r\n// ─────────────────────────────────────────────\r\n\r\nfunction isSvgSnippetString(v: any): v is string {\r\n    if (typeof v !== \"string\") return false;\r\n    const s = v.trim();\r\n    return s.startsWith(\"<svg\") || (s.includes(\"<svg\") && s.includes(\"</svg>\"));\r\n}\r\n\r\nfunction isUrlishString(v: any): v is string {\r\n    if (typeof v !== \"string\") return false;\r\n    const s = v.trim();\r\n    return (\r\n        s.startsWith(\"http://\") ||\r\n        s.startsWith(\"https://\") ||\r\n        s.startsWith(\"data:image/\") ||\r\n        s.startsWith(\"/\") ||\r\n        s.startsWith(\"./\") ||\r\n        s.startsWith(\"../\")\r\n    );\r\n}\r\n\r\nfunction isIconifyNameString(v: any): v is string {\r\n    if (typeof v !== \"string\") return false;\r\n    const s = v.trim();\r\n    return s.includes(\":\") && !s.includes(\"/\") && !s.includes(\"<\");\r\n}\r\n\r\nfunction normalizeIconifyInput(icon: any): any | null {\r\n    if (icon == null) return null;\r\n    if (typeof icon === \"string\")\r\n        return isIconifyNameString(icon) ? { icon } : null;\r\n    if (typeof icon === \"object\") {\r\n        if (typeof (icon as any).icon === \"string\") return icon;\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction OptionIcon(props: { icon: any; className?: string }) {\r\n    const { icon, className } = props;\r\n\r\n    if (React.isValidElement(icon)) {\r\n        return <span className={cn(\"shrink-0\", className)}>{icon}</span>;\r\n    }\r\n\r\n    if (isSvgSnippetString(icon)) {\r\n        return (\r\n            <span\r\n                className={cn(\r\n                    \"shrink-0 inline-flex [&_svg]:h-4 [&_svg]:w-4\",\r\n                    className,\r\n                )}\r\n                aria-hidden\r\n                dangerouslySetInnerHTML={{ __html: icon }}\r\n            />\r\n        );\r\n    }\r\n\r\n    if (isUrlishString(icon)) {\r\n        return (\r\n            <img\r\n                src={icon}\r\n                alt=\"\"\r\n                aria-hidden\r\n                className={cn(\"shrink-0 h-4 w-4 object-contain\", className)}\r\n            />\r\n        );\r\n    }\r\n\r\n    const iconify = normalizeIconifyInput(icon);\r\n    if (iconify) {\r\n        const name = iconify.icon as string;\r\n\r\n        // Optional: if you expose @iconify/react somewhere globally\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        const IconifyReact = (globalThis as any)?.IconifyReactIcon;\r\n\r\n        if (IconifyReact) {\r\n            return (\r\n                <span\r\n                    className={cn(\"shrink-0 inline-flex\", className)}\r\n                    aria-hidden\r\n                >\r\n                    <IconifyReact {...iconify} className=\"h-4 w-4\" />\r\n                </span>\r\n            );\r\n        }\r\n\r\n        return (\r\n            <span className={cn(\"shrink-0 inline-flex\", className)} aria-hidden>\r\n                <span className=\"iconify h-4 w-4\" data-icon={name} />\r\n            </span>\r\n        );\r\n    }\r\n\r\n    return null;\r\n}\r\n\r\n// ─────────────────────────────────────────────\r\n// OptionList (Virtuoso)\r\n// ─────────────────────────────────────────────\r\n\r\nexport function OptionList(props: { id: ListerSessionId; className?: string }) {\r\n    const { id, className } = props;\r\n\r\n    const { state, actions, selectors } = useLister<AnyPresetMap>();\r\n    const s = (state.sessions as any)[id] as any;\r\n\r\n    const options: Array<ListerOption<any, any, any>> =\r\n        (selectors.visibleOptions(id) as any[]) ?? [];\r\n\r\n    const draft = s?.draftValue;\r\n    const isMulti = s?.mode === \"multiple\";\r\n\r\n    const isSelected = React.useCallback(\r\n        (value: ListerId) => {\r\n            if (isMulti) return Array.isArray(draft) && draft.includes(value);\r\n            return draft === value;\r\n        },\r\n        [draft, isMulti],\r\n    );\r\n\r\n    if (s?.errorCode) {\n        return (\n            <ScrollArea className={cn(\"h-full min-h-0\", className)}>\n                <div className=\"px-3 py-4 text-sm opacity-70\">\n                    Error: {String(s.errorCode)}\n                </div>\n            </ScrollArea>\n        );\n    }\n\r\n    if (s?.loading && !s?.optionsList?.length) {\r\n        return (\r\n            <ScrollArea className={cn(\"h-full min-h-0\", className)}>\r\n                <div className=\"px-3 py-4 text-sm opacity-70\">Loading…</div>\r\n            </ScrollArea>\r\n        );\r\n    }\r\n\r\n    if (!options.length) {\r\n        return (\r\n            <ScrollArea className={cn(\"h-full min-h-0\", className)}>\r\n                <div className=\"px-3 py-4 text-sm opacity-70\">No results</div>\r\n            </ScrollArea>\r\n        );\r\n    }\r\n\r\n    return (\r\n        <div className={cn(\"h-full min-h-0 overflow-hidden\", className)}>\r\n            <div className=\"h-full min-h-0 p-1\">\r\n                <Virtuoso\r\n                    style={{ height: \"100%\", minHeight: 0 }}\r\n                    data={options}\r\n                    increaseViewportBy={{ top: 400, bottom: 400 }}\r\n                    computeItemKey={(index, opt) =>\r\n                        String((opt as any)?.value ?? index)\r\n                    }\r\n                    itemContent={(_index, opt) => {\r\n                        const selected = isSelected(opt.value as any);\r\n                        const disabled = !!opt.disabled;\r\n\r\n                        const onClick = () => {\r\n                            if (disabled) return;\r\n                            actions.toggle(id, opt.value as any);\r\n                        };\r\n\r\n                        // space-y-1 equivalent\r\n                        return (\r\n                            <div className=\"py-1\">\r\n                                <button\r\n                                    type=\"button\"\r\n                                    onMouseDown={() => actions.focus(id)}\r\n                                    onClick={onClick}\r\n                                    disabled={disabled}\r\n                                    className={cn(\r\n                                        \"flex w-full items-start gap-2 rounded-sm px-3 py-2 text-left\",\r\n                                        \"transition hover:bg-muted/60\",\r\n                                        selected && \"bg-muted\",\r\n                                        disabled &&\r\n                                            \"cursor-not-allowed opacity-50\",\r\n                                    )}\r\n                                >\r\n                                    <div className=\"mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center\">\r\n                                        {selected ? (\r\n                                            <Check className=\"h-4 w-4\" />\r\n                                        ) : (\r\n                                            <span className=\"h-4 w-4\" />\r\n                                        )}\r\n                                    </div>\r\n\r\n                                    {opt.icon ? (\r\n                                        <div className=\"mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center opacity-80\">\r\n                                            <OptionIcon icon={opt.icon} />\r\n                                        </div>\r\n                                    ) : null}\r\n\r\n                                    <div className=\"min-w-0 flex-1\">\r\n                                        <div className=\"truncate text-sm font-medium\">\r\n                                            {opt.label ?? String(opt.value)}\r\n                                        </div>\r\n                                        {opt.description ? (\r\n                                            <div className=\"line-clamp-2 text-xs opacity-70\">\r\n                                                {opt.description}\r\n                                            </div>\r\n                                        ) : null}\r\n                                    </div>\r\n\r\n                                    {opt.group ? (\r\n                                        <div className=\"shrink-0 text-xs opacity-50\">\r\n                                            {opt.group}\r\n                                        </div>\r\n                                    ) : null}\r\n                                </button>\r\n                            </div>\r\n                        );\r\n                    }}\r\n                />\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n","// ─────────────────────────────────────────────\r\n// FooterBar\r\n// ─────────────────────────────────────────────\r\n\r\nimport * as React from \"react\";\r\n\r\nimport type { ListerMode, ListerSessionId } from \"../types\";\r\nimport { useLister } from \"..\";\r\n\r\nimport { Button } from \"@/presets/ui/button\";\r\n\r\nexport function FooterBar(props: {\r\n    id: ListerSessionId;\r\n    mode: ListerMode;\r\n    confirm: boolean;\r\n    onClear(): void;\r\n    onCancel(): void;\r\n    onApply(): void;\r\n}) {\r\n    const { actions } = useLister<any>();\r\n\r\n    const showConfirm = props.mode === \"multiple\" ? true : props.confirm;\r\n\r\n    return (\r\n        <div\r\n            className=\"flex items-center justify-between gap-2 px-3 py-2\"\r\n            onMouseDown={() => actions.focus(props.id)}\r\n        >\r\n            <Button\r\n                type=\"button\"\r\n                variant=\"ghost\"\r\n                size=\"sm\"\r\n                onClick={props.onClear}\r\n            >\r\n                Clear\r\n            </Button>\r\n\r\n            {showConfirm ? (\r\n                <div className=\"flex items-center gap-2\">\r\n                    <Button\r\n                        type=\"button\"\r\n                        variant=\"ghost\"\r\n                        size=\"sm\"\r\n                        onClick={props.onCancel}\r\n                    >\r\n                        Cancel\r\n                    </Button>\r\n                    <Button type=\"button\" size=\"sm\" onClick={props.onApply}>\r\n                        Apply\r\n                    </Button>\r\n                </div>\r\n            ) : (\r\n                <div className=\"text-xs opacity-60\">Click an item to apply</div>\r\n            )}\r\n        </div>\r\n    );\r\n}\r\n","// resources/js/presets/shadcn-variants/lister/popover.tsx\r\n\r\nimport type { ListerMode, ListerSessionId } from \"@/presets/lister/types\";\r\nimport { useLister } from \"@/presets/lister\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Separator } from \"@/presets/ui/separator\";\r\nimport * as React from \"react\";\r\nimport { SearchBar } from \"@/presets/lister/ui/search\";\r\nimport { OptionList } from \"@/presets/lister/ui/option-list\";\r\nimport { FooterBar } from \"@/presets/lister/ui/footer-bar\";\r\n\r\nexport function ListerPopoverPanel(props: {\r\n    className?: string;\r\n    id: ListerSessionId;\r\n    mode: ListerMode;\r\n    confirm: boolean;\r\n}) {\r\n    const { className, id, mode, confirm } = props;\r\n\r\n    const { actions, store } = useLister<any>() as any;\r\n\r\n    return (\r\n        <div\r\n            className={cn(\r\n                \"flex flex-col overflow-hidden\",\r\n                \"w-(--radix-popover-trigger-width)\",\r\n\r\n                // ✅ IMPORTANT: give the panel a REAL height, not only max-height\r\n                \"h-[min(520px,var(--radix-popover-content-available-height))]\",\r\n\r\n                // ✅ real fallback min-height (don’t depend on trigger-height var)\r\n                \"min-h-80\",\r\n\r\n                className,\r\n            )}\r\n        >\r\n            <div className=\"shrink-0\">\r\n                <SearchBar id={id} store={store} />\r\n            </div>\r\n\r\n            <Separator />\r\n\r\n            {/* ✅ this now has a real height because parent has real height */}\r\n            <div className=\"min-h-0 flex-1 overflow-hidden flex flex-col relative\">\r\n                <OptionList id={id} className=\"h-full absolute left-0 w-full top-0\" />\r\n            </div>\r\n\r\n            <Separator />\r\n\r\n            <div className=\"shrink-0\">\r\n                <FooterBar\r\n                    id={id}\r\n                    mode={mode}\r\n                    confirm={confirm}\r\n                    onClear={() => actions.clear(id)}\r\n                    onCancel={() => actions.cancel(id)}\r\n                    onApply={() => actions.apply(id)}\r\n                />\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n","// packages/form-palette/src/presets/lister/runtime/session/key.ts\r\n\r\n/**\r\n * Create a stable-ish unique runtime key for sessions/inflight ownership.\r\n * Uses crypto.randomUUID when available, otherwise falls back.\r\n */\r\nexport function createRuntimeKey(prefix = \"rt\"): string {\r\n    const anyCrypto = (globalThis as any)?.crypto;\r\n    if (anyCrypto?.randomUUID) return `${prefix}_${anyCrypto.randomUUID()}`;\r\n\r\n    return `${prefix}_${Date.now()}_${Math.random().toString(16).slice(2)}`;\r\n}\r\n","// resources/js/presets/shadcn-variants/lister/inner.tsx\r\n// noinspection DuplicatedCode\r\n\r\nimport * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/presets/ui/popover\";\r\nimport { ChevronDown, X } from \"lucide-react\";\r\n\r\nimport { useLister } from \"@/presets/lister\";\r\nimport type {\r\n    ListerApi,\r\n    ListerDefinition,\r\n    ListerId,\r\n    ListerMode,\r\n    ListerOpenOptions,\r\n    ListerOpenResult,\r\n    ListerSessionId,\r\n    PresetMap,\r\n} from \"@/presets/lister/types\";\r\n\r\nimport { ListerPopoverPanel } from \"./popover\";\r\nimport { buildLabelsFromOptions, isSameValue } from \"./utils\";\r\nimport { createRuntimeKey } from \"@/presets/lister/runtime/session/key\";\r\n\r\ntype Size = \"sm\" | \"md\" | \"lg\";\r\ntype Density = \"compact\" | \"comfortable\" | \"loose\";\r\n\r\nfunction triggerHeight(size?: Size) {\r\n    switch (size) {\r\n        case \"sm\":\r\n            return \"h-8 text-xs\";\r\n        case \"lg\":\r\n            return \"h-11 text-base\";\r\n        default:\r\n            return \"h-9 text-sm\";\r\n    }\r\n}\r\n\r\nfunction triggerPadding(density?: Density) {\r\n    switch (density) {\r\n        case \"compact\":\r\n            return \"py-1\";\r\n        case \"loose\":\r\n            return \"py-2\";\r\n        case \"comfortable\":\r\n        default:\r\n            return \"py-1.5\";\r\n    }\r\n}\r\n\r\nexport type ListerTriggerRenderCtx<\r\n    _TRaw extends Record<string, any>,\r\n    _TValue extends ListerId,\r\n    _TMeta,\r\n    TMode extends ListerMode,\r\n> = {\r\n    mode: TMode;\r\n    value: any;\r\n    selectedOptions: any[] | null;\r\n    placeholder: string;\r\n    maxDisplayItems: number;\r\n    display: React.ReactNode;\r\n\r\n    disabled?: boolean;\r\n    readOnly?: boolean;\r\n    isOpen: boolean;\r\n\r\n    /** convenience */\r\n    disabledTrigger: boolean;\r\n    hasValue: boolean;\r\n\r\n    /** convenience actions */\r\n    clear(): void;\r\n    open(): void;\r\n};\r\n\r\nexport type ListerInnerProps<\r\n    _P extends PresetMap = PresetMap,\r\n    TRaw extends Record<string, any> = any,\r\n    TValue extends ListerId = any,\r\n    TFilters = any,\r\n    TMeta = any,\r\n    TMode extends ListerMode = \"single\",\r\n> = {\r\n    /** FINAL resolved definition (already merged/ready). Required. */\r\n    def: ListerDefinition<TRaw, TValue, TFilters, TMeta>;\r\n\r\n    value: any;\r\n    onValue: (next: any, detail?: any) => void;\r\n\r\n    filters?: TFilters;\r\n\r\n    mode?: TMode;\r\n    confirm?: TMode extends \"single\" ? boolean : never;\r\n    permissions?: string[];\r\n\r\n    disabled?: boolean;\r\n    readOnly?: boolean;\r\n\r\n    openOptions?: Omit<\r\n        ListerOpenOptions<TRaw, TValue, TFilters, TMeta, TMode>,\r\n        \"mode\" | \"confirm\" | \"defaultValue\" | \"permissions\"\r\n    >;\r\n\r\n    renderTrigger?: (\r\n        ctx: ListerTriggerRenderCtx<TRaw, TValue, TMeta, TMode>,\r\n    ) => React.ReactElement;\r\n\r\n    placeholder?: string;\r\n    maxDisplayItems?: number;\r\n\r\n    size?: Size;\r\n    density?: Density;\r\n\r\n    clearable?: boolean;\r\n\r\n    leadingIcons?: React.ReactNode[];\r\n    trailingIcons?: React.ReactNode[];\r\n    icon?: React.ReactNode;\r\n\r\n    iconGap?: number;\r\n    leadingIconSpacing?: number;\r\n    trailingIconSpacing?: number;\r\n\r\n    leadingControl?: React.ReactNode;\r\n    trailingControl?: React.ReactNode;\r\n    leadingControlClassName?: string;\r\n    trailingControlClassName?: string;\r\n\r\n    joinControls?: boolean;\r\n    extendBoxToControls?: boolean;\r\n\r\n    className?: string;\r\n\r\n    contentClassName?: string;\r\n    panelClassName?: string;\r\n};\r\n\r\nfunction findSessionByOwner(store: any, ownerKey: string): any | null {\r\n    const sessions = store?.sessions;\r\n    if (!sessions) return null;\r\n\r\n    // prefer active session if it matches\r\n    const activeId = store?.activeId;\r\n    if (activeId != null) {\r\n        const s = sessions[activeId];\r\n        if (s?.ownerKey === ownerKey && s?.isOpen) return s;\r\n    }\r\n\r\n    // otherwise scan order (stable stacking)\r\n    const order: any[] = Array.isArray(store?.order) ? store.order : [];\r\n    for (const id of order) {\r\n        const s = sessions[id];\r\n        if (s?.ownerKey === ownerKey && s?.isOpen) return s;\r\n    }\r\n\r\n    // fallback scan (just in case)\r\n    for (const k of Object.keys(sessions)) {\r\n        const s = sessions[k];\r\n        if (s?.ownerKey === ownerKey && s?.isOpen) return s;\r\n    }\r\n\r\n    return null;\r\n}\r\n\r\nexport function ListerInner<\r\n    P extends PresetMap = PresetMap,\r\n    TRaw extends Record<string, any> = any,\r\n    TValue extends ListerId = any,\r\n    TFilters = any,\r\n    TMeta = any,\r\n    TMode extends ListerMode = \"single\",\r\n>(props: ListerInnerProps<P, TRaw, TValue, TFilters, TMeta, TMode>) {\r\n    const {\r\n        def,\r\n        value,\r\n        onValue,\r\n        filters,\r\n        mode: modeProp,\r\n        confirm: confirmProp,\r\n        permissions,\r\n        disabled,\r\n        readOnly,\r\n        openOptions,\r\n        renderTrigger,\r\n        placeholder = \"Select…\",\r\n        maxDisplayItems = 2,\r\n\r\n        size,\r\n        density,\r\n        clearable = true,\r\n\r\n        leadingIcons,\r\n        trailingIcons,\r\n        icon,\r\n        iconGap,\r\n        leadingIconSpacing,\r\n        trailingIconSpacing,\r\n\r\n        leadingControl,\r\n        trailingControl,\r\n        leadingControlClassName,\r\n        trailingControlClassName,\r\n        joinControls = true,\r\n        extendBoxToControls = true,\r\n\r\n        className,\r\n        contentClassName,\r\n        panelClassName,\r\n    } = props;\r\n\r\n    const { api, actions, store } = useLister<P>() as any;\r\n\r\n    // ✅ stable owner key per input mount\r\n    const ownerKeyRef = React.useRef<string>(\r\n        (openOptions as any)?.ownerKey ?? createRuntimeKey(\"lister_owner\"),\r\n    );\r\n    React.useEffect(() => {\r\n        const next = (openOptions as any)?.ownerKey as string | undefined;\r\n        if (next) ownerKeyRef.current = next;\r\n    }, [openOptions]);\r\n\r\n    // derive current session from global store by ownerKey\r\n    const session = findSessionByOwner(store, ownerKeyRef.current);\r\n    const sessionId = session?.sessionId as ListerSessionId | undefined;\r\n    const isOpen = !!session?.isOpen;\r\n\r\n    // Used ONLY for trigger display when closed.\r\n    const [selectedOptions, setSelectedOptions] = React.useState<any[] | null>(\r\n        null,\r\n    );\r\n\r\n    const openingRef = React.useRef(false);\r\n\r\n    const mode = (modeProp ?? \"single\") as TMode;\r\n    const confirm = (mode === \"multiple\" ? true : !!confirmProp) as any;\r\n\r\n    const disabledTrigger = !!(disabled || readOnly);\r\n\r\n    const hasValue =\r\n        mode === \"multiple\"\r\n            ? Array.isArray(value) && value.length > 0\r\n            : value != null && value !== \"\";\r\n\r\n    // Resolve selected options for trigger display (when value changes, or def/filters changes)\r\n    React.useEffect(() => {\r\n        if (!hasValue) {\r\n            setSelectedOptions(null);\r\n            return;\r\n        }\r\n\r\n        let alive = true;\r\n\r\n        (async () => {\r\n            const res = await (api as ListerApi<P>).fetch(\r\n                def as any,\r\n                filters as any,\r\n                { query: \"\" } as any,\r\n            );\r\n\r\n            if (!alive) return;\r\n\r\n            const optionsList = (res?.options ?? []) as any[];\r\n\r\n            const byValue = new Map<any, any>();\r\n            for (const o of optionsList) {\r\n                if (!o || o.value == null) continue;\r\n                byValue.set(o.value, o);\r\n            }\r\n\r\n            const nextSelected =\r\n                mode === \"multiple\"\r\n                    ? (Array.isArray(value) ? value : [])\r\n                          .map((v: any) => byValue.get(v))\r\n                          .filter(Boolean)\r\n                    : value != null && value !== \"\"\r\n                      ? [byValue.get(value)].filter(Boolean)\r\n                      : [];\r\n\r\n            setSelectedOptions((prev) => {\r\n                if (mode == \"single\" && prev && !Array.isArray(prev))\r\n                    prev = [prev];\r\n                const p = prev ?? [];\r\n                const n = nextSelected ?? [];\r\n                const pv = p.map((o) => o?.value);\r\n                const nv = n.map((o) => o?.value);\r\n                return isSameValue(pv, nv) ? prev : nextSelected;\r\n            });\r\n        })().catch(() => {\r\n            // ignore; trigger can still fall back to showing raw value\r\n        });\r\n\r\n        return () => {\r\n            alive = false;\r\n        };\r\n    }, [api, def, filters, mode, value, hasValue]);\r\n\r\n    const openSession = React.useCallback(async () => {\r\n        console.log(openingRef.current);\r\n        if (disabledTrigger) return;\r\n        if (openingRef.current) return;\r\n\r\n        openingRef.current = true;\r\n\r\n        try {\r\n            const opts: ListerOpenOptions<\r\n                TRaw,\r\n                TValue,\r\n                TFilters,\r\n                TMeta,\r\n                TMode\r\n            > = {\r\n                ...(openOptions as any),\r\n\r\n                // ✅ stable owner key so runtime can reuse session\r\n                ownerKey: ownerKeyRef.current as any,\r\n\r\n                mode,\r\n                confirm,\r\n                defaultValue: value as any,\r\n                permissions,\r\n            } as any;\r\n\r\n            const res = (await (api as ListerApi<P>).open(\r\n                def as any,\r\n                filters as any,\r\n                opts as any,\r\n            )) as unknown as ListerOpenResult<TRaw, TValue, TMeta, TMode>;\r\n\r\n            if (res?.reason === \"apply\") {\r\n                const snap = (res.details?.options as any[]) ?? null;\r\n                setSelectedOptions(snap);\r\n                onValue(res.value as any, res.details);\r\n            }\r\n        } finally {\r\n            openingRef.current = false;\r\n        }\r\n    }, [\r\n        api,\r\n        confirm,\r\n        def,\r\n        disabledTrigger,\r\n        filters,\r\n        mode,\r\n        onValue,\r\n        openOptions,\r\n        permissions,\r\n        value,\r\n    ]);\r\n\r\n    const clear = React.useCallback(() => {\r\n        if (disabledTrigger) return;\r\n\r\n        onValue(undefined as any, {\r\n            action: \"clear\",\r\n            source: \"variant\",\r\n        });\r\n\r\n        setSelectedOptions(null);\r\n    }, [disabledTrigger, onValue]);\r\n\r\n    const display = React.useMemo(() => {\r\n        return buildLabelsFromOptions({\r\n            mode,\r\n            value,\r\n            selectedOptions,\r\n            placeholder,\r\n            maxItems: maxDisplayItems,\r\n        });\r\n    }, [maxDisplayItems, mode, placeholder, selectedOptions, value]);\r\n\r\n    const triggerCtx: ListerTriggerRenderCtx<TRaw, TValue, TMeta, TMode> =\r\n        React.useMemo(\r\n            () => ({\r\n                mode,\r\n                value,\r\n                selectedOptions,\r\n                placeholder,\r\n                maxDisplayItems,\r\n                display,\r\n                disabled,\r\n                readOnly,\r\n                isOpen,\r\n                disabledTrigger,\r\n                hasValue,\r\n                clear,\r\n                open: () => void openSession(),\r\n            }),\r\n            [\r\n                mode,\r\n                value,\r\n                selectedOptions,\r\n                placeholder,\r\n                maxDisplayItems,\r\n                display,\r\n                disabled,\r\n                readOnly,\r\n                isOpen,\r\n                disabledTrigger,\r\n                hasValue,\r\n                clear,\r\n                openSession,\r\n            ],\r\n        );\r\n\r\n    // ─────────────────────────────────────────────\r\n    // Trigger visuals (mirrors multi-select default trigger)\r\n    // ─────────────────────────────────────────────\r\n\r\n    const heightCls = triggerHeight(size);\r\n    const padCls = triggerPadding(density);\r\n\r\n    const resolvedLeadingIcons: React.ReactNode[] = (() => {\r\n        if (leadingIcons && leadingIcons.length) return leadingIcons;\r\n        if (icon) return [icon];\r\n        return [];\r\n    })();\r\n\r\n    const resolvedTrailingIcons: React.ReactNode[] = trailingIcons ?? [];\r\n\r\n    const baseIconGap = iconGap ?? 4;\r\n    const leadingGap = leadingIconSpacing ?? baseIconGap;\r\n    const trailingGap = trailingIconSpacing ?? baseIconGap;\r\n\r\n    const hasLeadingIcons = resolvedLeadingIcons.length > 0;\r\n    const hasTrailingIcons = resolvedTrailingIcons.length > 0;\r\n\r\n    const hasLeadingControl = !!leadingControl;\r\n    const hasTrailingControl = !!trailingControl;\r\n    const hasControls = hasLeadingControl || hasTrailingControl;\r\n\r\n    const showClear = clearable && hasValue;\r\n\r\n    const baseBoxClasses = cn(\r\n        \"border-input w-full min-w-0 rounded-md border bg-surfaces-input shadow-xs\",\r\n        \"transition-[color,box-shadow] outline-none\",\r\n        \"focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]\",\r\n        \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\r\n    );\r\n\r\n    const DefaultTriggerButton = (\r\n        <button\r\n            type=\"button\"\r\n            disabled={disabledTrigger}\r\n            className={cn(\r\n                \"flex w-full items-center justify-between rounded-md border border-input bg-surfaces-input px-3 text-left shadow-xs\",\r\n                \"focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:border-ring\",\r\n                \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\r\n                heightCls,\r\n                padCls,\r\n                hasControls &&\r\n                    joinControls &&\r\n                    extendBoxToControls &&\r\n                    \"border-none shadow-none focus-visible:ring-0 focus-visible:outline-none\",\r\n                !hasControls ? className : undefined,\r\n            )}\r\n        >\r\n            <div className=\"flex w-full items-center justify-between gap-2\">\r\n                <div className=\"flex min-w-0 items-center grow gap-2\">\r\n                    {hasLeadingIcons && (\r\n                        <span\r\n                            className=\"flex items-center gap-1 shrink-0\"\r\n                            style={{ columnGap: leadingGap }}\r\n                            data-slot=\"leading-icons\"\r\n                        >\r\n                            {resolvedLeadingIcons.map((node, idx) => (\r\n                                <span\r\n                                    key={idx}\r\n                                    className=\"flex items-center justify-center\"\r\n                                >\r\n                                    {node}\r\n                                </span>\r\n                            ))}\r\n                        </span>\r\n                    )}\r\n\r\n                    <div className=\"min-w-0 flex-1 truncate\">{display}</div>\r\n                </div>\r\n\r\n                <div className=\"flex items-center gap-1 shrink-0\">\r\n                    {showClear && (\r\n                        <span\r\n                            aria-label=\"Clear selection\"\r\n                            onClick={(e) => {\r\n                                e.stopPropagation();\r\n                                e.preventDefault();\r\n                                clear();\r\n                            }}\r\n                            className=\"flex h-4 w-4 items-center justify-center rounded hover:bg-muted\"\r\n                            data-slot=\"clear\"\r\n                        >\r\n                            <X className=\"h-3 w-3 pointer-events-none\" />\r\n                        </span>\r\n                    )}\r\n\r\n                    {hasTrailingIcons && (\r\n                        <span\r\n                            className=\"flex items-center gap-1\"\r\n                            style={{ columnGap: trailingGap }}\r\n                            data-slot=\"trailing-icons\"\r\n                        >\r\n                            {resolvedTrailingIcons.map((node, idx) => (\r\n                                <span\r\n                                    key={idx}\r\n                                    className=\"flex items-center justify-center\"\r\n                                >\r\n                                    {node}\r\n                                </span>\r\n                            ))}\r\n                        </span>\r\n                    )}\r\n\r\n                    <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\r\n                </div>\r\n            </div>\r\n        </button>\r\n    );\r\n\r\n    const userTriggerEl = renderTrigger ? renderTrigger(triggerCtx) : null;\r\n\r\n    const TriggerNode =\r\n        renderTrigger && React.isValidElement(userTriggerEl)\r\n            ? React.cloneElement(userTriggerEl as any, {\r\n                  className: cn(\r\n                      (userTriggerEl as any).props?.className,\r\n                      className,\r\n                  ),\r\n              })\r\n            : DefaultTriggerButton;\r\n\r\n    const PopoverCore = (\r\n        <Popover\r\n            open={isOpen && !disabledTrigger}\r\n            onOpenChange={(next) => {\r\n                if (disabledTrigger) return;\r\n                if (next) void openSession();\r\n                else if (sessionId) actions.close(sessionId);\r\n            }}\r\n        >\r\n            <PopoverTrigger asChild>{TriggerNode}</PopoverTrigger>\r\n\r\n            <PopoverContent\r\n                align=\"start\"\r\n                side=\"bottom\"\r\n                sideOffset={8}\r\n                className={cn(\r\n                    \"p-0\",\r\n                    \"w-(--radix-popover-trigger-width)\",\r\n                    \"max-h-(--radix-popover-content-available-height)\",\r\n                    \"max-w-(--radix-popover-content-available-width)\",\r\n                    \"min-h-[calc(var(--radix-popover-trigger-height)*8)]\",\r\n                    contentClassName,\r\n                )}\r\n            >\r\n                {sessionId ? (\r\n                    <ListerPopoverPanel\r\n                        id={sessionId}\r\n                        mode={mode as any}\r\n                        confirm={!!confirm}\r\n                        className={cn(\"h-full w-full\", panelClassName)}\r\n                    />\r\n                ) : null}\r\n            </PopoverContent>\r\n        </Popover>\r\n    );\r\n\r\n    if (renderTrigger) {\r\n        return (\r\n            <div\r\n                data-slot=\"lister-field\"\r\n                className={cn(\"w-full\", className)}\r\n                aria-disabled={disabled ? \"true\" : undefined}\r\n            >\r\n                {PopoverCore}\r\n            </div>\r\n        );\r\n    }\r\n\r\n    if (!hasControls) {\r\n        return (\r\n            <div\r\n                data-slot=\"lister-field\"\r\n                className={cn(\r\n                    \"w-full\",\r\n                    disabledTrigger && \"opacity-50 cursor-not-allowed\",\r\n                )}\r\n                aria-disabled={disabledTrigger ? \"true\" : undefined}\r\n            >\r\n                {PopoverCore}\r\n            </div>\r\n        );\r\n    }\r\n\r\n    if (joinControls) {\r\n        const groupClassName = cn(\r\n            \"flex items-stretch w-full\",\r\n            extendBoxToControls\r\n                ? cn(\"relative\", baseBoxClasses)\r\n                : \"relative border-none shadow-none bg-transparent\",\r\n            className,\r\n        );\r\n\r\n        return (\r\n            <div\r\n                data-slot=\"lister-field\"\r\n                className=\"w-full\"\r\n                aria-disabled={disabledTrigger ? \"true\" : undefined}\r\n            >\r\n                <div\r\n                    className={groupClassName}\r\n                    data-slot=\"lister-group\"\r\n                    data-disabled={disabledTrigger ? \"true\" : \"false\"}\r\n                >\r\n                    {hasLeadingControl && (\r\n                        <div\r\n                            className={cn(\r\n                                \"flex items-center px-2\",\r\n                                leadingControlClassName,\r\n                            )}\r\n                            data-slot=\"leading-control\"\r\n                        >\r\n                            {leadingControl}\r\n                        </div>\r\n                    )}\r\n\r\n                    <div\r\n                        className=\"flex-1 min-w-0 flex items-stretch\"\r\n                        data-slot=\"lister-region\"\r\n                    >\r\n                        {PopoverCore}\r\n                    </div>\r\n\r\n                    {hasTrailingControl && (\r\n                        <div\r\n                            className={cn(\r\n                                \"flex items-center px-2\",\r\n                                trailingControlClassName,\r\n                            )}\r\n                            data-slot=\"trailing-control\"\r\n                        >\r\n                            {trailingControl}\r\n                        </div>\r\n                    )}\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    return (\r\n        <div\r\n            data-slot=\"lister-field\"\r\n            className={cn(\r\n                \"flex items-stretch w-full\",\r\n                disabledTrigger && \"opacity-50 cursor-not-allowed\",\r\n                className,\r\n            )}\r\n            aria-disabled={disabledTrigger ? \"true\" : undefined}\r\n        >\r\n            {hasLeadingControl && (\r\n                <div\r\n                    className={cn(\r\n                        \"flex items-center mr-1\",\r\n                        leadingControlClassName,\r\n                    )}\r\n                    data-slot=\"leading-control\"\r\n                >\r\n                    {leadingControl}\r\n                </div>\r\n            )}\r\n\r\n            <div className=\"flex-1 min-w-0\" data-slot=\"lister-region\">\r\n                {PopoverCore}\r\n            </div>\r\n\r\n            {hasTrailingControl && (\r\n                <div\r\n                    className={cn(\r\n                        \"flex items-center ml-1\",\r\n                        trailingControlClassName,\r\n                    )}\r\n                    data-slot=\"trailing-control\"\r\n                >\r\n                    {trailingControl}\r\n                </div>\r\n            )}\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default ListerInner;\r\n","// resources/js/presets/shadcn-variants/lister/index.tsx\nimport * as React from \"react\";\n\nimport { useLister } from \"@/presets/lister\";\nimport type {\n    ListerApi,\n    ListerDefinition,\n    ListerId,\n    PresetMap,\n} from \"@/presets/lister/types\";\n\nimport type { KeyOrFn, ListerVariantProps } from \"./types\";\nimport { inferOptionValueKeyFromRawList } from \"./utils\";\nimport { makeInlineDef, makeInlinePatch, mergeListerDef } from \"./patch\";\nimport ListerInner from \"./inner\";\n\nfunction ListerResolvedInner<\n    P extends PresetMap,\n    TRaw extends Record<string, any>,\n    TValue extends ListerId,\n    TFilters extends Record<string, any>,\n    TMeta,\n    TMode extends \"single\" | \"multiple\",\n>(props: ListerVariantProps<TMode, P, TRaw, TValue, TFilters, TMeta>) {\n    const { api } = useLister<P>();\n\n    const {\n        def,\n\n        // inline\n        endpoint,\n        method,\n        buildRequest,\n        selector,\n\n        optionValue,\n        optionLabel,\n        optionIcon,\n        optionDescription,\n        optionDisabled,\n        optionGroup,\n        optionMeta,\n\n        // ✅ NEW: search overrides\n        search,\n        searchTarget,\n\n        // data\n        value,\n        onValue,\n        filters,\n        mode,\n        confirm,\n        permissions,\n\n        // ui\n        disabled,\n        readOnly,\n        className,\n        placeholder,\n        maxDisplayItems,\n        panelClassName,\n        contentClassName,\n        renderTrigger,\n\n        // trigger styling + controls (multi-select parity)\n        size,\n        density,\n        clearable,\n        leadingIcons,\n        trailingIcons,\n        icon,\n        iconGap,\n        leadingIconSpacing,\n        trailingIconSpacing,\n        leadingControl,\n        trailingControl,\n        leadingControlClassName,\n        trailingControlClassName,\n        joinControls,\n        extendBoxToControls,\n\n        // open opts\n        title,\n        searchMode,\n        initialQuery,\n        showRefresh,\n        refreshMode,\n        filtersSpec,\n        renderOption,\n    } = props as any;\n\n    // standalone inline means: no base def + we actually have an endpoint\n    const isStandaloneInline = !def && endpoint != null;\n\n    // infer optionValue ONLY for standalone inline when not provided\n    const shouldInferOptionValue =\n        isStandaloneInline && optionValue === undefined;\n\n    const [resolvedOptionValue, setResolvedOptionValue] = React.useState<\n        KeyOrFn<TRaw, TValue> | undefined\n    >(() => optionValue ?? (\"id\" as any));\n\n    React.useEffect(() => {\n        if (optionValue !== undefined) setResolvedOptionValue(optionValue);\n    }, [optionValue]);\n\n    React.useEffect(() => {\n        if (!shouldInferOptionValue) return;\n        if (!endpoint) return;\n\n        let alive = true;\n\n        (async () => {\n            const provisional = makeInlineDef<TRaw, TValue, TFilters, TMeta>({\n                endpoint,\n                method,\n                buildRequest,\n                selector,\n                optionValue: \"id\" as any,\n                optionLabel,\n                optionIcon,\n                optionDescription,\n                optionDisabled,\n                optionGroup,\n                optionMeta,\n            });\n\n            const res = await (api as ListerApi<P>).fetch(\n                provisional as any,\n                filters as any,\n                { query: \"\", permissions } as any,\n            );\n\n            if (!alive) return;\n\n            const rawList = (res?.raw ?? []) as any[];\n            const inferred = inferOptionValueKeyFromRawList(rawList, \"id\");\n            setResolvedOptionValue(inferred.key as any);\n        })().catch(() => {});\n\n        return () => {\n            alive = false;\n        };\n    }, [\n        api,\n        endpoint,\n        method,\n        buildRequest,\n        selector,\n        filters,\n        permissions,\n        shouldInferOptionValue,\n        optionLabel,\n        optionIcon,\n        optionDescription,\n        optionDisabled,\n        optionGroup,\n        optionMeta,\n    ]);\n\n    // ✅ YOUR RULE:\n    // inlineExists is allowed to be always true because optionValue is always resolved.\n    const inlineExists =\n        endpoint !== undefined ||\n        method !== undefined ||\n        buildRequest !== undefined ||\n        selector !== undefined ||\n        resolvedOptionValue !== undefined || // ✅ KEEP THIS (your rule)\n        optionLabel !== undefined ||\n        optionIcon !== undefined ||\n        optionDescription !== undefined ||\n        optionDisabled !== undefined ||\n        optionGroup !== undefined ||\n        optionMeta !== undefined ||\n        // ✅ include search override as \"inline patch\" signal too\n        search !== undefined;\n\n    const finalDef = React.useMemo(() => {\n        const baseDef = def as\n            | ListerDefinition<TRaw, TValue, TFilters, TMeta>\n            | undefined;\n\n        if (!inlineExists) return baseDef;\n\n        // no base => must build standalone inline def (requires endpoint)\n        if (!baseDef) {\n            if (!endpoint) return undefined;\n\n            // ✅ ONLY resolvedOptionValue (no optionValue fallback)\n            const ov = (resolvedOptionValue ?? (\"id\" as any)) as any;\n\n            const built = makeInlineDef<TRaw, TValue, TFilters, TMeta>({\n                endpoint,\n                method,\n                buildRequest,\n                selector,\n                optionValue: ov,\n                optionLabel,\n                optionIcon,\n                optionDescription,\n                optionDisabled,\n                optionGroup,\n                optionMeta,\n            }) as any;\n\n            // ✅ attach search override (if provided)\n            if (search !== undefined) built.search = search;\n\n            return built as any;\n        }\n\n        // base + inline => ALWAYS merge (your rule)\n        const inlinePatch = makeInlinePatch<TRaw, TValue, TFilters, TMeta>({\n            endpoint,\n            method,\n            buildRequest,\n            selector,\n\n            // ✅ ONLY resolvedOptionValue (no optionValue fallback)\n            optionValue: (resolvedOptionValue ?? (\"id\" as any)) as any,\n\n            optionLabel,\n            optionIcon,\n            optionDescription,\n            optionDisabled,\n            optionGroup,\n            optionMeta,\n        });\n\n        const merged = mergeListerDef(baseDef, inlinePatch) as any;\n\n        // ✅ attach/override search (if provided)\n        if (search !== undefined) merged.search = search;\n\n        return merged as any;\n    }, [\n        def,\n        inlineExists,\n        endpoint,\n        method,\n        buildRequest,\n        selector,\n        resolvedOptionValue,\n        optionLabel,\n        optionIcon,\n        optionDescription,\n        optionDisabled,\n        optionGroup,\n        optionMeta,\n        search,\n    ]);\n\n    const openOptions = React.useMemo(() => {\n        return {\n            title,\n            searchMode,\n            initialQuery,\n            showRefresh,\n            refreshMode,\n            filtersSpec,\n            renderOption,\n\n            // ✅ NEW: allow caller to seed the session searchTarget\n            searchTarget,\n        } as any;\n    }, [\n        title,\n        searchMode,\n        initialQuery,\n        showRefresh,\n        refreshMode,\n        filtersSpec,\n        renderOption,\n        searchTarget,\n    ]);\n\n    if (!finalDef) return null;\n\n    return (\n        <ListerInner<P, TRaw, TValue, TFilters, TMeta, any>\n            def={finalDef}\n            value={value as any}\n            onValue={onValue as any}\n            filters={filters as any}\n            mode={mode as any}\n            confirm={confirm as any}\n            permissions={permissions as any}\n            disabled={disabled}\n            readOnly={readOnly}\n            className={className}\n            placeholder={placeholder}\n            maxDisplayItems={maxDisplayItems}\n            renderTrigger={renderTrigger}\n            contentClassName={contentClassName}\n            panelClassName={panelClassName}\n            openOptions={openOptions}\n            // ✅ forward UI/controls props to inner\n            size={size}\n            density={density}\n            clearable={clearable}\n            leadingIcons={leadingIcons}\n            trailingIcons={trailingIcons}\n            icon={icon}\n            iconGap={iconGap}\n            leadingIconSpacing={leadingIconSpacing}\n            trailingIconSpacing={trailingIconSpacing}\n            leadingControl={leadingControl}\n            trailingControl={trailingControl}\n            leadingControlClassName={leadingControlClassName}\n            trailingControlClassName={trailingControlClassName}\n            joinControls={joinControls}\n            extendBoxToControls={extendBoxToControls}\n        />\n    );\n}\n\nexport default ListerResolvedInner;\n","/* ─────────────────────────────────────────────────────────────\n * Public component\n * ───────────────────────────────────────────────────────────── */\n\nimport { ListerId, PresetMap } from \"@/presets/lister/types\";\nimport { ListerVariantProps } from \"@/presets/shadcn-variants/lister/types\";\nimport { ListerProvider } from \"@/presets/lister\";\nimport { defaultHost } from \"@/presets/shadcn-variants/lister/utils\";\nimport ListerResolvedInner from \"@/presets/shadcn-variants/lister/index\";\n\nexport default function ListerVariant<\n    TMode extends \"single\" | \"multiple\",\n    P extends PresetMap = PresetMap,\n    TRaw extends Record<string, any> = any,\n    TValue extends ListerId = any,\n    TFilters extends Record<string, any> = any,\n    TMeta = any,\n>(props: ListerVariantProps<TMode, P, TRaw, TValue, TFilters, TMeta>) {\n    const { host, presets, remoteDebounceMs, ...rest } = props;\n    return (\n        <ListerProvider\n            host={host ?? defaultHost}\n            presets={presets}\n            remoteDebounceMs={remoteDebounceMs}\n        >\n            <ListerResolvedInner {...(rest as any)} />\n        </ListerProvider>\n    );\n}\n","import { VariantModule } from \"@/schema/variant\";\nimport ShadcnListerVariant from \"@/presets/shadcn-variants/lister\";\n\nconst module: VariantModule<\"lister\"> = {\n    variant: \"lister\",\n    Variant: ShadcnListerVariant,\n\n    // Layout defaults for this variant\n    defaults: {\n        layout: {\n            labelPlacement: \"top\",\n            sublabelPlacement: \"right\",\n            descriptionPlacement: \"below\",\n            helpTextPlacement: \"below\",\n            errorTextPlacement: \"below\",\n            inline: false,\n            fullWidth: true,\n            defaultSize: \"md\",\n            defaultDensity: \"comfortable\",\n        },\n    },\n\n    meta: {\n        label: \"Lister\",\n        description:\n            \"Select/multi-select powered by the Lister runtime (popover body only).\",\n        tags: [\"select\", \"multiselect\", \"popover\", \"lister\"],\n    },\n};\n\nexport default module;\n","// src/presets/shadcn-variants/icon.tsx\n// noinspection DuplicatedCode\n\nimport * as React from \"react\";\nimport type { VariantBaseProps } from \"@/variants/shared\";\nimport { cn } from \"@/lib/utils\";\nimport { Button } from \"@/presets/ui/button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/presets/ui/popover\";\nimport { Badge } from \"@/presets/ui/badge\";\nimport {\n    AlertCircle,\n    ChevronDown,\n    LayoutGrid,\n    Loader2,\n    Plus,\n    Search,\n    X,\n} from \"lucide-react\";\nimport { Icon } from \"@iconify/react\";\nimport { getPaletteUtil } from \"@/lib/register-global\";\nimport { VirtuosoGrid } from \"react-virtuoso\";\nimport {\n    Select,\n    SelectContent,\n    SelectItem,\n    SelectTrigger,\n    SelectValue,\n} from \"@/presets/ui/select\"; // ─────────────────────────────────────────────\n\n// ─────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────\n\ntype Size = \"sm\" | \"md\" | \"lg\";\ntype Density = \"compact\" | \"comfortable\" | \"loose\";\n\nexport type IconGroup = {\n    id: string; // stable key for selection/filtering\n    label: string;\n    prefixes: string[]; // iconify prefixes to load\n};\n\n/**\n * Iconify /collection response (we only need these keys)\n * https://iconify.design/docs/api/collection.html\n */\ntype IconifyCollectionResponse = {\n    prefix?: string;\n    uncategorized?: string[];\n    categories?: Record<string, string[]>;\n    hidden?: string[];\n};\n\n// ─────────────────────────────────────────────\n// Defaults\n// ─────────────────────────────────────────────\n\nexport const DEFAULT_ICONIFY_URL = \"https://api.iconify.design\";\n\nexport const DEFAULT_GROUPS: IconGroup[] = [\n    { id: \"material\", label: \"Material Design Icons\", prefixes: [\"mdi\"] },\n    {\n        id: \"material-outline\",\n        label: \"Material Icons (Google)\",\n        prefixes: [\"ic\"],\n    },\n    { id: \"lucide\", label: \"Lucide\", prefixes: [\"lucide\"] },\n    { id: \"tabler\", label: \"Tabler\", prefixes: [\"tabler\"] },\n    { id: \"phosphor\", label: \"Phosphor\", prefixes: [\"ph\"] },\n    { id: \"remix\", label: \"Remix Icon\", prefixes: [\"ri\"] },\n    { id: \"bootstrap\", label: \"Bootstrap Icons\", prefixes: [\"bi\"] },\n    {\n        id: \"heroicons\",\n        label: \"Heroicons\",\n        prefixes: [\"heroicons-outline\", \"heroicons-solid\"],\n    },\n    { id: \"carbon\", label: \"Carbon\", prefixes: [\"carbon\"] },\n    {\n        id: \"fa\",\n        label: \"Font Awesome\",\n        prefixes: [\"fa-solid\", \"fa-regular\", \"fa-brands\"],\n    },\n    { id: \"ionicons\", label: \"Ionicons\", prefixes: [\"ion\"] },\n    { id: \"simple-icons\", label: \"Simple Icons\", prefixes: [\"simple-icons\"] },\n];\n\n// ─────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────\n\nfunction uniq<T>(arr: T[]): T[] {\n    return Array.from(new Set(arr));\n}\n\n/** ✅ Exact trigger height contract (same as file variant spec) */\nfunction triggerHeight(size?: Size) {\n    switch (size) {\n        case \"sm\":\n            return \"h-8 text-xs\";\n        case \"lg\":\n            return \"h-11 text-base\";\n        default:\n            return \"h-9 text-sm\";\n    }\n}\n\n/** Keep chips safely within the trigger height */\nfunction chipHeight(size?: Size) {\n    switch (size) {\n        case \"sm\":\n            return \"h-5\";\n        case \"lg\":\n            return \"h-7\";\n        default:\n            return \"h-6\";\n    }\n}\n\n/** Picker button sizing that fits inside each trigger height */\nfunction pickerBtnSize(size?: Size) {\n    switch (size) {\n        case \"sm\":\n            return \"h-6 w-6\";\n        case \"lg\":\n            return \"h-8 w-8\";\n        default:\n            return \"h-7 w-7\";\n    }\n}\n\nfunction densityTokens(density?: Density) {\n    switch (density) {\n        case \"compact\":\n            return {\n                triggerPadX: \"px-2\",\n                triggerGap: \"gap-1.5\",\n                headerPad: \"px-3 py-1.5\",\n                bodyPad: \"p-2\",\n                listPad: \"p-1\",\n                footerPad: \"p-1\",\n                chipPad: \"px-1\",\n                chipGap: \"gap-1\",\n            };\n        case \"loose\":\n            return {\n                triggerPadX: \"px-4\",\n                triggerGap: \"gap-3\",\n                headerPad: \"px-4 py-2.5\",\n                bodyPad: \"p-3\",\n                listPad: \"p-2\",\n                footerPad: \"p-2\",\n                chipPad: \"px-2\",\n                chipGap: \"gap-2\",\n            };\n        default:\n            return {\n                triggerPadX: \"px-3\",\n                triggerGap: \"gap-2\",\n                headerPad: \"px-3 py-2\",\n                bodyPad: \"p-2.5\",\n                listPad: \"p-1\",\n                footerPad: \"p-1\",\n                chipPad: \"px-1.5\",\n                chipGap: \"gap-1.5\",\n            };\n    }\n}\n\nfunction mergeHandlers<E>(\n    a: ((e: E) => void) | undefined,\n    b: ((e: E) => void) | undefined,\n) {\n    if (!a) return b;\n    if (!b) return a;\n    return (e: E) => {\n        a(e);\n        b(e);\n    };\n}\n\n// ─────────────────────────────────────────────\n// Cache (prefix list)\n// ─────────────────────────────────────────────\n\nconst collectionCache = new Map<string, string[]>(); // key: `${url}::${prefix}` -> [\"home\", \"account\", ...]\nconst inflightCache = new Map<string, Promise<string[]>>();\n\nasync function fetchCollectionIcons(opts: {\n    url: string;\n    prefix: string;\n    signal?: AbortSignal;\n}): Promise<string[]> {\n    const key = `${opts.url}::${opts.prefix}`;\n\n    const cached = collectionCache.get(key);\n    if (cached) return cached;\n\n    const inflight = inflightCache.get(key);\n    if (inflight) return inflight;\n\n    const run = (async () => {\n        const res = await fetch(\n            `${opts.url.replace(/\\/+$/, \"\")}/collection?prefix=${encodeURIComponent(opts.prefix)}`,\n            { signal: opts.signal },\n        );\n\n        if (!res.ok) {\n            throw new Error(\n                `Failed to load \"${opts.prefix}\" (HTTP ${res.status})`,\n            );\n        }\n\n        const json = (await res.json()) as IconifyCollectionResponse;\n\n        const names = new Set<string>();\n        (json.uncategorized ?? []).forEach((n) => names.add(n));\n        Object.values(json.categories ?? {}).forEach((arr) =>\n            arr.forEach((n) => names.add(n)),\n        );\n\n        // exclude hidden icons\n        (json.hidden ?? []).forEach((n) => names.delete(n));\n\n        const out = Array.from(names);\n        collectionCache.set(key, out);\n        return out;\n    })();\n\n    inflightCache.set(key, run);\n\n    try {\n        return await run;\n    } finally {\n        inflightCache.delete(key);\n    }\n}\n\n// ─────────────────────────────────────────────\n// IconPickerPanel (exported; usable by composed variants)\n// ─────────────────────────────────────────────\n\nexport type IconPickerPanelProps = {\n    url: string;\n    groups: IconGroup[];\n    allowedGroupIds?: string[];\n\n    multiple: boolean;\n    value: string[];\n    onValue: (next: string[]) => void;\n\n    density?: Density;\n\n    /** Close popover on pick (usually in single mode) */\n    onPicked?: () => void;\n\n    /** max items rendered (safety; prevents DOM meltdown on huge sets) */\n    maxRender?: number;\n};\n\nexport function IconPickerPanel(props: IconPickerPanelProps) {\n    const {\n        url,\n        groups: groupsProp,\n        allowedGroupIds,\n        multiple,\n        value,\n        onValue,\n        density = \"comfortable\",\n        onPicked,\n        maxRender = 2500,\n    } = props;\n\n    const den = densityTokens(density);\n\n    const groups = React.useMemo(() => {\n        const base = groupsProp ?? [];\n        if (!allowedGroupIds?.length) return base;\n        const allowed = base.filter((g) => allowedGroupIds.includes(g.id));\n        return allowed.length ? allowed : base;\n    }, [allowedGroupIds, groupsProp]);\n\n    const prefixes = React.useMemo(() => {\n        return uniq(groups.flatMap((g) => g.prefixes).filter(Boolean));\n    }, [groups]);\n\n    const [selectedGroupId, setSelectedGroupId] = React.useState<\n        string | undefined\n    >(() => groups[0]?.id);\n    const [searchQuery, setSearchQuery] = React.useState(\"\");\n    const [loading, setLoading] = React.useState(false);\n    const [error, setError] = React.useState<string | null>(null);\n    const [allIcons, setAllIcons] = React.useState<string[]>([]);\n\n    // keep group valid when groups list changes\n    React.useEffect(() => {\n        setSelectedGroupId((prev) => {\n            if (!prev) return groups[0]?.id;\n            const exists = groups.some((g) => g.id === prev);\n            return exists ? prev : groups[0]?.id;\n        });\n    }, [groups]);\n\n    React.useEffect(() => {\n        const controller = new AbortController();\n        let mounted = true;\n\n        const load = async () => {\n            setLoading(true);\n            setError(null);\n\n            try {\n                const missing = prefixes.filter(\n                    (p) => !collectionCache.has(`${url}::${p}`),\n                );\n\n                await Promise.all(\n                    missing.map((prefix) =>\n                        fetchCollectionIcons({\n                            url,\n                            prefix,\n                            signal: controller.signal,\n                        }),\n                    ),\n                );\n\n                const full: string[] = [];\n                for (const prefix of prefixes) {\n                    const names =\n                        collectionCache.get(`${url}::${prefix}`) ?? [];\n                    for (const n of names) full.push(`${prefix}:${n}`);\n                }\n\n                if (mounted) setAllIcons(full);\n            } catch (e: any) {\n                if (e?.name === \"AbortError\") return;\n                if (!mounted) return;\n                setError(e?.message ?? \"Failed to load icons\");\n                setAllIcons([]);\n            } finally {\n                if (mounted) setLoading(false);\n            }\n        };\n\n        if (prefixes.length) load();\n        else setAllIcons([]);\n\n        return () => {\n            mounted = false;\n            controller.abort();\n        };\n    }, [prefixes, url]);\n\n    const selectedGroup = React.useMemo(\n        () => groups.find((g) => g.id === selectedGroupId),\n        [groups, selectedGroupId],\n    );\n\n    const selectedGroupPrefixes = React.useMemo(() => {\n        if (!selectedGroup) return undefined; // means \"no group filter\"\n        return new Set(selectedGroup.prefixes);\n    }, [selectedGroup]);\n\n    const filteredIcons = React.useMemo(() => {\n        const q = searchQuery.trim().toLowerCase();\n\n        let list = allIcons;\n\n        if (selectedGroupPrefixes) {\n            list = list.filter((i) =>\n                selectedGroupPrefixes.has(i.split(\":\")[0] ?? \"\"),\n            );\n        }\n\n        if (q) {\n            list = list.filter((i) => i.toLowerCase().includes(q));\n        }\n\n        return list;\n    }, [allIcons, searchQuery, selectedGroupPrefixes]);\n\n    const limitedIcons = React.useMemo(() => {\n        if (filteredIcons.length <= maxRender) return filteredIcons;\n        return filteredIcons.slice(0, maxRender);\n    }, [filteredIcons, maxRender]);\n\n    const toggle = (iconName: string) => {\n        if (!multiple) {\n            onValue([iconName]);\n            onPicked?.();\n            return;\n        }\n\n        onValue(\n            value.includes(iconName)\n                ? value.filter((x) => x !== iconName)\n                : [...value, iconName],\n        );\n    };\n\n    // VirtuosoGrid scaffolding\n    const GridComponents = React.useMemo(\n        () => ({\n            List: (p: any) => (\n                <div\n                    {...p}\n                    className={cn(\"grid grid-cols-3 gap-2 p-1\", p.className)}\n                />\n            ),\n            Item: (p: any) => (\n                <div {...p} className={cn(\"flex\", p.className)} />\n            ),\n        }),\n        [],\n    );\n\n    const gridHeightStyle = React.useMemo<React.CSSProperties>(\n        () => ({ height: \"50vh\" }),\n        [],\n    );\n\n    return (\n        <div className=\"flex flex-col\">\n            {/* Controls */}\n            <div className={cn(\"flex items-center gap-2\", den.bodyPad)}>\n                <div className=\"relative flex-1 min-w-0\">\n                    <Search className=\"pointer-events-none absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground/60\" />\n                    <input\n                        value={searchQuery}\n                        onChange={(e) => setSearchQuery(e.target.value)}\n                        placeholder=\"Search icons...\"\n                        className={cn(\n                            \"h-9 w-full rounded-md border border-input bg-surfaces-input pl-8 pr-3 text-sm outline-none ring-offset-background\",\n                            \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n                        )}\n                    />\n                </div>\n\n                <Select\n                    value={selectedGroupId ?? \"\"}\n                    onValueChange={setSelectedGroupId}\n                >\n                    <SelectTrigger>\n                        <SelectValue placeholder={\"Select group...\"} />\n                    </SelectTrigger>\n                    <SelectContent>\n                        {groups.map((g) => (\n                            <SelectItem key={g.id} value={g.id}>\n                                {g.label}\n                            </SelectItem>\n                        ))}\n                    </SelectContent>\n                </Select>\n            </div>\n\n            {/* Status */}\n            {error && (\n                <div className=\"px-3 pb-2 text-xs text-destructive flex items-center gap-2\">\n                    <AlertCircle className=\"h-3.5 w-3.5\" />\n                    <span className=\"truncate\">{error}</span>\n                </div>\n            )}\n\n            {/* Grid (virtualized) */}\n            <div className={cn(\"w-full\", den.listPad)}>\n                {loading ? (\n                    <div\n                        style={gridHeightStyle}\n                        className=\"flex items-center justify-center text-xs text-muted-foreground gap-2\"\n                    >\n                        <Loader2 className=\"h-4 w-4 animate-spin\" />\n                        Loading icons…\n                    </div>\n                ) : limitedIcons.length ? (\n                    <div>\n                        {filteredIcons.length > limitedIcons.length && (\n                            <div className=\"px-2 pb-2 text-[11px] text-muted-foreground\">\n                                Showing first{\" \"}\n                                {limitedIcons.length.toLocaleString()} of{\" \"}\n                                {filteredIcons.length.toLocaleString()} results\n                                (refine search to narrow).\n                            </div>\n                        )}\n\n                        <VirtuosoGrid\n                            style={gridHeightStyle}\n                            data={limitedIcons}\n                            components={GridComponents as any}\n                            overscan={800}\n                            itemContent={(_, iconName) => {\n                                const isSelected = value.includes(iconName);\n\n                                return (\n                                    <button\n                                        key={iconName}\n                                        type=\"button\"\n                                        onClick={() => toggle(iconName)}\n                                        className={cn(\n                                            \"group flex min-h-16 w-full flex-col items-center justify-center gap-2 overflow-hidden rounded-sm border bg-card p-2 text-left transition-colors hover:bg-accent\",\n                                            isSelected &&\n                                                \"border-primary bg-primary/10\",\n                                        )}\n                                    >\n                                        <Icon\n                                            icon={iconName}\n                                            className=\"size-8\"\n                                        />\n                                        <span className=\"line-clamp-2 text-center text-[11px] text-muted-foreground group-hover:text-foreground\">\n                                            {iconName.split(\":\")[1] ?? iconName}\n                                        </span>\n                                    </button>\n                                );\n                            }}\n                        />\n                    </div>\n                ) : (\n                    <div\n                        style={gridHeightStyle}\n                        className=\"flex items-center justify-center text-xs text-muted-foreground\"\n                    >\n                        No icons found\n                    </div>\n                )}\n            </div>\n\n            {/* Footer */}\n            <div\n                className={cn(\n                    \"border-t flex items-center justify-between\",\n                    den.footerPad,\n                )}\n            >\n                <span className=\"text-xs text-muted-foreground\">\n                    {multiple\n                        ? `${value.length} selected`\n                        : value[0]\n                          ? \"Selected\"\n                          : \"No selection\"}\n                </span>\n\n                <Button\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    className=\"h-8 text-xs\"\n                    onClick={() => onValue([])}\n                    disabled={!value.length}\n                >\n                    Clear\n                </Button>\n            </div>\n        </div>\n    );\n}\n// ─────────────────────────────────────────────\n// Props (with mode discriminator)\n// ─────────────────────────────────────────────\n\ntype BadgeVariant = React.ComponentProps<typeof Badge>[\"variant\"];\n\ntype IconValue = string | string[] | null | undefined;\n\ntype IconVariantBaseProps = Pick<\n    VariantBaseProps<IconValue>,\n    \"value\" | \"onValue\" | \"error\" | \"disabled\" | \"readOnly\" | \"size\" | \"density\"\n> & {\n    /** When true, form value becomes string[]; else string */\n    multiple?: boolean;\n\n    /** Iconify API base url. Defaults to registry.iconPicker.url then Iconify default */\n    url?: string;\n\n    /** Groups available. Defaults to registry.iconPicker.groups then built-in defaults */\n    groups?: IconGroup[];\n\n    /** Restrict selectable groups by group id */\n    allowedGroupIds?: string[];\n\n    /** Search/group panel grid limit */\n    maxRender?: number;\n\n    placeholder?: string;\n\n    className?: string;\n    triggerClassName?: string;\n    popoverClassName?: string;\n\n    // drag/drop not meaningful here, but we keep file-variant parity for button triggers.\n    // (No-op, but event merging is used to enhance custom triggers.)\n};\n\ntype IconDefaultModeProps = {\n    mode?: \"default\";\n\n    leadingIcons?: React.ReactNode[];\n    trailingIcons?: React.ReactNode[];\n    icon?: React.ReactNode;\n\n    leadingControl?: React.ReactNode;\n    trailingControl?: React.ReactNode;\n    leadingControlClassName?: string;\n    trailingControlClassName?: string;\n    joinControls?: boolean;\n    extendBoxToControls?: boolean;\n\n    // not supported in default mode\n    button?: never;\n    children?: never;\n\n    selectedBadge?: never;\n    selectedBadgeHiddenWhenZero?: never;\n    selectedBadgeVariant?: never;\n    selectedBadgeClassName?: never;\n    selectedBadgePlacement?: never;\n};\n\ntype IconButtonTrigger =\n    | React.ReactNode\n    | ((ctx: {\n          open: boolean;\n          items: string[];\n          selectedCount: number;\n          disabled: boolean;\n      }) => React.ReactNode);\n\ntype IconButtonModeProps = {\n    mode: \"button\";\n\n    /** Used when mode=\"button\". If provided, this is the trigger. If not, `children` is used. */\n    button?: IconButtonTrigger;\n    children?: IconButtonTrigger;\n\n    /** Selected-count badge (mode=\"button\" only) */\n    selectedBadge?: boolean;\n    selectedBadgeHiddenWhenZero?: boolean;\n    selectedBadgeVariant?: BadgeVariant;\n    selectedBadgeClassName?: string;\n    selectedBadgePlacement?: \"end\" | \"corner\";\n\n    // icons & controls NOT supported in button mode\n    leadingIcons?: never;\n    trailingIcons?: never;\n    icon?: never;\n\n    leadingControl?: never;\n    trailingControl?: never;\n    leadingControlClassName?: never;\n    trailingControlClassName?: never;\n    joinControls?: never;\n    extendBoxToControls?: never;\n};\n\nexport type ShadcnIconVariantProps = IconVariantBaseProps &\n    (IconDefaultModeProps | IconButtonModeProps);\n\n// ─────────────────────────────────────────────\n// Main Component\n// ─────────────────────────────────────────────\n\nexport const ShadcnIconVariant = React.forwardRef<\n    HTMLDivElement,\n    ShadcnIconVariantProps\n>(function ShadcnIconVariant(props, ref) {\n    const {\n        value,\n        onValue,\n        disabled,\n        readOnly,\n        error,\n        size = \"md\",\n        density = \"comfortable\",\n\n        multiple = false,\n        url: urlProp,\n        groups: groupsProp,\n        allowedGroupIds,\n        maxRender,\n\n        placeholder = \"Select icon…\",\n        className,\n        triggerClassName,\n        popoverClassName,\n\n        // default-mode only\n        leadingIcons,\n        trailingIcons,\n        icon,\n        leadingControl,\n        trailingControl,\n        leadingControlClassName,\n        trailingControlClassName,\n        joinControls: joinControlsProp,\n        extendBoxToControls: extendBoxToControlsProp,\n\n        // button-mode only\n        mode = \"default\",\n        button,\n        children,\n        selectedBadge = true,\n        selectedBadgeHiddenWhenZero = true,\n        selectedBadgeVariant = \"secondary\",\n        selectedBadgeClassName,\n        selectedBadgePlacement = \"corner\",\n    } = props as ShadcnIconVariantProps & Record<string, any>;\n\n    const joinControls =\n        mode === \"default\" ? (joinControlsProp ?? true) : false;\n    const extendBoxToControls =\n        mode === \"default\" ? (extendBoxToControlsProp ?? true) : false;\n\n    const isDisabled = Boolean(disabled || readOnly);\n\n    // registry config fallback\n    const reg = getPaletteUtil(\"iconPicker\");\n    const url = urlProp ?? reg?.url ?? DEFAULT_ICONIFY_URL;\n    const groups = groupsProp ?? reg?.groups ?? DEFAULT_GROUPS;\n\n    const den = densityTokens(density as Density);\n    const heightCls = triggerHeight(size as Size);\n    const chipHeightCls = chipHeight(size as Size);\n    const pickerBtnCls = pickerBtnSize(size as Size);\n\n    const resolvedLeadingIcons = (\n        leadingIcons?.length ? leadingIcons : icon ? [icon] : []\n    ) as React.ReactNode[];\n    const resolvedTrailingIcons = (\n        trailingIcons?.length ? trailingIcons : []\n    ) as React.ReactNode[];\n    const hasExternalControls = !!leadingControl || !!trailingControl;\n\n    const [popoverOpen, setPopoverOpen] = React.useState(false);\n\n    const selected = React.useMemo<string[]>(() => {\n        if (multiple) return Array.isArray(value) ? value.filter(Boolean) : [];\n        return typeof value === \"string\" && value ? [value] : [];\n    }, [multiple, value]);\n\n    const emit = React.useCallback(\n        (nextArr: string[], meta: any) => {\n            if (!onValue) return;\n\n            if (multiple) {\n                onValue(nextArr, {\n                    source: \"variant\",\n                    raw: nextArr,\n                    nativeEvent: undefined,\n                    meta,\n                });\n            } else {\n                onValue(nextArr[0] ?? undefined, {\n                    source: \"variant\",\n                    raw: nextArr[0] ?? undefined,\n                    nativeEvent: undefined,\n                    meta,\n                });\n            }\n        },\n        [multiple, onValue],\n    );\n\n    // ─────────────────────────────────────────────\n    // UI Pieces: Chip (mini)\n    // ─────────────────────────────────────────────\n\n    const Chip = React.useCallback(\n        ({ iconName }: { iconName: string }) => {\n            const short = iconName.split(\":\")[1] ?? iconName;\n\n            return (\n                <div\n                    role=\"button\"\n                    tabIndex={0}\n                    className={cn(\n                        \"flex items-center overflow-hidden rounded-sm border bg-muted/60 text-xs transition-colors hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none cursor-pointer\",\n                        chipHeightCls,\n                        den.chipPad,\n                        den.chipGap,\n                        \"max-w-50\",\n                    )}\n                    onPointerDown={(e) => e.stopPropagation()}\n                    onClick={(e) => {\n                        e.stopPropagation();\n                        // in trigger we don't open anything per-chip; popover is global\n                        setPopoverOpen(true);\n                    }}\n                    onKeyDown={(e) => {\n                        if (e.key === \"Enter\" || e.key === \" \") {\n                            e.stopPropagation();\n                            setPopoverOpen(true);\n                        }\n                    }}\n                >\n                    <Icon\n                        icon={iconName}\n                        className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\"\n                    />\n                    <span className=\"truncate font-medium\">{short}</span>\n\n                    <button\n                        type=\"button\"\n                        onPointerDown={(e) => e.stopPropagation()}\n                        onClick={(e) => {\n                            e.stopPropagation();\n                            emit(\n                                selected.filter((x) => x !== iconName),\n                                {\n                                    action: \"remove\",\n                                    icon: iconName,\n                                },\n                            );\n                        }}\n                        className=\"ml-auto flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-muted-foreground/70 hover:bg-destructive/20 hover:text-destructive focus:outline-none\"\n                        aria-label=\"Remove icon\"\n                    >\n                        <X className=\"h-3 w-3\" />\n                    </button>\n                </div>\n            );\n        },\n        [chipHeightCls, den.chipGap, den.chipPad, emit, selected],\n    );\n\n    // ─────────────────────────────────────────────\n    // Button-mode trigger (with badge)\n    // ─────────────────────────────────────────────\n\n    const selectedCount = selected.length;\n\n    const resolveButtonTriggerElement =\n        React.useCallback((): React.ReactElement => {\n            const ctx = {\n                open: popoverOpen,\n                items: selected,\n                selectedCount,\n                disabled: isDisabled,\n            };\n\n            const rawNode =\n                typeof button === \"function\"\n                    ? button(ctx)\n                    : (button ??\n                      (typeof children === \"function\"\n                          ? children(ctx)\n                          : children));\n\n            const shouldShowBadge =\n                Boolean(selectedBadge) &&\n                (!selectedBadgeHiddenWhenZero || selectedCount > 0);\n\n            const badgeEl = shouldShowBadge ? (\n                <Badge\n                    variant={selectedBadgeVariant}\n                    className={cn(\n                        \"text-[10px] h-5 px-1.5 leading-none\",\n                        selectedBadgePlacement === \"corner\" &&\n                            \"absolute -top-2 -right-2\",\n                        selectedBadgeClassName,\n                    )}\n                >\n                    {selectedCount}\n                </Badge>\n            ) : null;\n\n            const injectBadgeIntoElement = (el: React.ReactElement<any>) => {\n                if (!badgeEl) return el;\n\n                const existingClass = (el.props as any).className as\n                    | string\n                    | undefined;\n                const nextClass = cn(\n                    existingClass,\n                    selectedBadgePlacement === \"corner\" && \"relative\",\n                );\n\n                const child = (el.props as any).children;\n\n                if (selectedBadgePlacement === \"end\") {\n                    return React.cloneElement(el, {\n                        className: nextClass,\n                        children: (\n                            <span className=\"inline-flex items-center gap-2\">\n                                <span className=\"min-w-0\">{child}</span>\n                                {badgeEl}\n                            </span>\n                        ),\n                    } as any);\n                }\n\n                return React.cloneElement(el, {\n                    className: nextClass,\n                    children: (\n                        <>\n                            {child}\n                            {badgeEl}\n                        </>\n                    ),\n                } as any);\n            };\n\n            const withNoopDnD = (el: React.ReactElement<any>) =>\n                React.cloneElement(el, {\n                    // keep event-merging parity with file variant (no-op, but safe)\n                    onDragOver: mergeHandlers(\n                        (el.props as any).onDragOver,\n                        (e: any) => e?.preventDefault?.(),\n                    ),\n                    onDrop: mergeHandlers((el.props as any).onDrop, (e: any) =>\n                        e?.preventDefault?.(),\n                    ),\n                } as any);\n\n            if (React.isValidElement(rawNode))\n                return withNoopDnD(injectBadgeIntoElement(rawNode));\n\n            const fallback = (\n                <button\n                    type=\"button\"\n                    disabled={isDisabled}\n                    className={cn(\n                        triggerClassName,\n                        selectedBadgePlacement === \"corner\" && \"relative\",\n                    )}\n                >\n                    {rawNode ?? <span>{placeholder}</span>}\n                    {badgeEl}\n                </button>\n            );\n\n            if (badgeEl && selectedBadgePlacement === \"end\") {\n                return (\n                    <button\n                        type=\"button\"\n                        disabled={isDisabled}\n                        className={cn(triggerClassName)}\n                    >\n                        <span className=\"inline-flex items-center gap-2\">\n                            <span className=\"min-w-0\">\n                                {rawNode ?? <span>{placeholder}</span>}\n                            </span>\n                            {badgeEl}\n                        </span>\n                    </button>\n                );\n            }\n\n            return fallback;\n        }, [\n            button,\n            children,\n            isDisabled,\n            placeholder,\n            popoverOpen,\n            selected,\n            selectedBadge,\n            selectedBadgeClassName,\n            selectedBadgeHiddenWhenZero,\n            selectedBadgePlacement,\n            selectedBadgeVariant,\n            selectedCount,\n            triggerClassName,\n        ]);\n\n    // ─────────────────────────────────────────────\n    // Trigger Region\n    // ─────────────────────────────────────────────\n\n    const COLLAPSE_LIMIT = 2;\n\n    const TriggerRegion = React.useMemo(() => {\n        const hasItems = selected.length > 0;\n        const visibleItems = selected.slice(0, COLLAPSE_LIMIT);\n        const hiddenCount = selected.length - COLLAPSE_LIMIT;\n        const isOverflowing = hiddenCount > 0;\n\n        const TriggerEl =\n            mode === \"button\" ? (\n                resolveButtonTriggerElement()\n            ) : (\n                <div\n                    className={cn(\n                        \"relative flex w-full cursor-pointer items-center py-0 transition-all\",\n                        heightCls,\n                        den.triggerPadX,\n                        den.triggerGap,\n                        (!joinControls || !hasExternalControls) &&\n                            \"rounded-md border border-input bg-surfaces-input ring-offset-background hover:bg-accent/5 focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n                        isDisabled && \"cursor-not-allowed opacity-50\",\n                        error &&\n                            (!joinControls || !hasExternalControls) &&\n                            \"border-destructive text-destructive\",\n                        triggerClassName,\n                    )}\n                    onClick={() => !isDisabled && setPopoverOpen(true)}\n                >\n                    {/* Leading Icons */}\n                    {resolvedLeadingIcons.map((ico, i) => (\n                        <span\n                            key={i}\n                            className=\"flex shrink-0 items-center justify-center text-muted-foreground\"\n                        >\n                            {ico}\n                        </span>\n                    ))}\n\n                    {/* Content: Chips or Placeholder */}\n                    <div\n                        className={cn(\n                            \"flex flex-1 items-center overflow-hidden\",\n                            den.triggerGap,\n                        )}\n                    >\n                        {hasItems ? (\n                            <>\n                                {visibleItems.map((iconName) => (\n                                    <Chip key={iconName} iconName={iconName} />\n                                ))}\n                                {isOverflowing && (\n                                    <span className=\"flex h-5 items-center justify-center rounded-sm bg-muted px-1.5 text-xs font-medium text-muted-foreground\">\n                                        +{hiddenCount}\n                                    </span>\n                                )}\n                            </>\n                        ) : (\n                            <span className=\"truncate text-muted-foreground\">\n                                {placeholder}\n                            </span>\n                        )}\n                    </div>\n\n                    {/* Trailing Icons */}\n                    {resolvedTrailingIcons.map((ico, i) => (\n                        <span\n                            key={i}\n                            className=\"flex shrink-0 items-center justify-center text-muted-foreground\"\n                        >\n                            {ico}\n                        </span>\n                    ))}\n\n                    {/* Dedicated Picker Button */}\n                    <Button\n                        type=\"button\"\n                        variant=\"ghost\"\n                        size=\"icon\"\n                        className={cn(\n                            \"shrink-0 text-muted-foreground hover:text-foreground\",\n                            pickerBtnCls,\n                        )}\n                        onPointerDown={(e) => e.stopPropagation()}\n                        onClick={(e) => {\n                            e.stopPropagation();\n                            setPopoverOpen(true);\n                        }}\n                    >\n                        <LayoutGrid className=\"h-4 w-4\" />\n                    </Button>\n\n                    {/* Chevron (for Popover) */}\n                    <ChevronDown\n                        className={cn(\n                            \"h-4 w-4 shrink-0 text-muted-foreground opacity-50 transition-transform duration-200\",\n                            popoverOpen && \"rotate-180\",\n                        )}\n                    />\n                </div>\n            );\n\n        return (\n            <Popover open={popoverOpen} onOpenChange={setPopoverOpen}>\n                <PopoverTrigger asChild>{TriggerEl}</PopoverTrigger>\n\n                <PopoverContent\n                    className={cn(\n                        \"w-(--radix-popover-trigger-width) p-0 max-h-(--radix-popper-available-height)\",\n                        popoverClassName,\n                    )}\n                    align=\"start\"\n                >\n                    <div className=\"flex flex-col\">\n                        {/* Header */}\n                        <div\n                            className={cn(\n                                \"flex items-center justify-between border-b text-xs font-medium text-muted-foreground\",\n                                den.headerPad,\n                            )}\n                        >\n                            <span>\n                                {multiple\n                                    ? `${selected.length} selected`\n                                    : selected[0]\n                                      ? \"1 selected\"\n                                      : \"No selection\"}\n                            </span>\n\n                            {selected.length > 0 ? (\n                                <button\n                                    type=\"button\"\n                                    className=\"text-muted-foreground hover:text-foreground\"\n                                    onClick={() =>\n                                        emit([], { action: \"clear\" })\n                                    }\n                                >\n                                    Clear\n                                </button>\n                            ) : null}\n                        </div>\n\n                        <IconPickerPanel\n                            url={url}\n                            groups={groups}\n                            allowedGroupIds={allowedGroupIds}\n                            multiple={multiple}\n                            density={density as Density}\n                            value={selected}\n                            maxRender={maxRender}\n                            onPicked={() => setPopoverOpen(false)}\n                            onValue={(next) => emit(next, { action: \"set\" })}\n                        />\n\n                        {/* Footer add hint (parity with file variant) */}\n                        <div className={cn(\"border-t\", den.footerPad)}>\n                            <Button\n                                variant=\"secondary\"\n                                size=\"sm\"\n                                className=\"w-full justify-start text-xs\"\n                                onClick={() => {\n                                    // focus search by opening; panel is already open\n                                }}\n                            >\n                                <Plus className=\"mr-2 h-3 w-3\" />\n                                {multiple ? \"Pick icons...\" : \"Pick an icon\"}\n                            </Button>\n                        </div>\n                    </div>\n                </PopoverContent>\n            </Popover>\n        );\n    }, [\n        Chip,\n        COLLAPSE_LIMIT,\n        allowedGroupIds,\n        den.footerPad,\n        den.headerPad,\n        den.triggerGap,\n        den.triggerPadX,\n        density,\n        emit,\n        error,\n        groups,\n        hasExternalControls,\n        heightCls,\n        isDisabled,\n        joinControls,\n        maxRender,\n        mode,\n        multiple,\n        pickerBtnCls,\n        placeholder,\n        popoverClassName,\n        popoverOpen,\n        resolveButtonTriggerElement,\n        resolvedLeadingIcons,\n        resolvedTrailingIcons,\n        selected,\n        setPopoverOpen,\n        triggerClassName,\n        url,\n    ]);\n\n    // ─────────────────────────────────────────────\n    // Render\n    // ─────────────────────────────────────────────\n\n    const joinedBox = mode === \"default\" && joinControls && extendBoxToControls;\n\n    return (\n        <div\n            ref={ref}\n            className={cn(\"w-full\", className)}\n            aria-disabled={isDisabled}\n            aria-invalid={!!error}\n        >\n            <div\n                className={cn(\n                    \"flex w-full\",\n                    joinedBox\n                        ? \"items-stretch rounded-md border border-input bg-surfaces-input shadow-xs ring-offset-background focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\"\n                        : \"items-start\",\n                    joinedBox && error && \"border-destructive\",\n                )}\n            >\n                {mode === \"default\" && leadingControl && (\n                    <div\n                        className={cn(\n                            \"flex items-center\",\n                            joinControls && \"border-r bg-muted/50 px-3\",\n                            leadingControlClassName,\n                        )}\n                    >\n                        {leadingControl}\n                    </div>\n                )}\n\n                <div className=\"flex-1 min-w-0\">{TriggerRegion}</div>\n\n                {mode === \"default\" && trailingControl && (\n                    <div\n                        className={cn(\n                            \"flex items-center\",\n                            joinControls && \"border-l bg-muted/50 px-3\",\n                            trailingControlClassName,\n                        )}\n                    >\n                        {trailingControl}\n                    </div>\n                )}\n            </div>\n        </div>\n    );\n});\n\nShadcnIconVariant.displayName = \"ShadcnIconVariant\";\nexport default ShadcnIconVariant;\n","// src/presets/shadcn-variants/image-icon.tsx\n// noinspection DuplicatedCode\n\nimport * as React from \"react\";\nimport type { VariantBaseProps } from \"@/variants/shared\";\nimport { cn, toArray } from \"@/lib/utils\";\nimport { ScrollArea } from \"@/presets/ui/scroll-area\";\nimport { Button } from \"@/presets/ui/button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/presets/ui/popover\";\nimport { Badge } from \"@/presets/ui/badge\";\nimport { Checkbox } from \"@/presets/ui/checkbox\";\nimport {\n    ChevronDown,\n    FolderUp,\n    Image as ImageIcon,\n    LayoutGrid,\n    Plus,\n    Trash2,\n    X,\n} from \"lucide-react\";\nimport { Icon } from \"@iconify/react\";\nimport { getPaletteUtil } from \"@/lib/register-global\";\n\nimport type {\n    CustomFileLoader,\n    FileItem,\n    FileLike,\n    FileSourceKind,\n} from \"@/presets/shadcn-variants/file\";\nimport {\n    DEFAULT_GROUPS,\n    DEFAULT_ICONIFY_URL,\n    type IconGroup,\n    IconPickerPanel,\n} from \"@/presets/shadcn-variants/icon\";\n\n// ─────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────\n\ntype Size = \"sm\" | \"md\" | \"lg\";\ntype Density = \"compact\" | \"comfortable\" | \"loose\";\n\nexport type ImageValue = File | string;\n\n/** Raw field value (what the field/defaultValue supports) */\nexport type ImageIconRawValue = string | File;\n\n/** Internal structured values (still accepted for backwards-compat) */\nexport type ImageIconValue =\n    | { kind: \"icon\"; icon: string }\n    | { kind: \"image\"; image: ImageValue; name?: string };\n\n/** What the component accepts as `value` */\nexport type ImageIconInputValue =\n    | ImageIconRawValue\n    | ImageIconRawValue[]\n    | ImageIconValue\n    | ImageIconValue[]\n    | null\n    | undefined;\n\n/** What the component emits via `onValue` */\nexport type ImageIconFieldValue =\n    | ImageIconRawValue\n    | ImageIconRawValue[]\n    | null\n    | undefined;\n\n// ─────────────────────────────────────────────\n// Helpers (copied from file variant style; minimal + safe)\n// ─────────────────────────────────────────────\n\nfunction fileId() {\n    return `file_${Math.random().toString(36).slice(2)}`;\n}\n\nfunction normaliseFileLike(input: FileLike): FileItem {\n    const asAny: any = input as any;\n    const existingId = asAny.id as string | undefined;\n\n    if (existingId && (asAny.file || asAny.path || asAny.url)) {\n        return {\n            id: existingId,\n            kind: (asAny.kind as FileSourceKind) ?? \"custom\",\n            file: asAny.file,\n            path: asAny.path,\n            url: asAny.url,\n            name: asAny.name ?? asAny.file?.name ?? existingId,\n            size: asAny.size ?? asAny.file?.size,\n            type: asAny.type ?? asAny.file?.type,\n            status: asAny.status ?? \"idle\",\n            error: asAny.error ?? null,\n            meta: asAny.meta,\n        };\n    }\n\n    if (input instanceof File) {\n        return {\n            id: existingId ?? fileId(),\n            kind: \"native\",\n            file: input,\n            name: input.name,\n            size: input.size,\n            type: input.type,\n            status: \"idle\",\n            error: null,\n        };\n    }\n\n    if (typeof input === \"string\") {\n        const isUrl = input.includes(\"://\");\n        const name = input.split(/[\\\\/]/).pop() ?? input;\n        return {\n            id: existingId ?? fileId(),\n            kind: isUrl ? \"url\" : \"path\",\n            [isUrl ? \"url\" : \"path\"]: input,\n            name,\n            status: \"idle\",\n            error: null,\n        } as FileItem;\n    }\n\n    return {\n        id: existingId ?? fileId(),\n        kind: \"custom\",\n        name: (input as any).name ?? \"Unknown File\",\n        status: \"idle\",\n        ...input,\n    } as FileItem;\n}\n\nfunction normaliseFromFiles(list: FileList | File[]): FileItem[] {\n    const arr: File[] = Array.isArray(list) ? list : Array.from(list);\n    return arr.map(normaliseFileLike);\n}\n\nfunction formatSizeDefault(size?: number): string {\n    if (!size || size <= 0) return \"—\";\n    const kb = size / 1024;\n    if (kb < 1024) return `${kb.toFixed(1)} KB`;\n    const mb = kb / 1024;\n    return `${mb.toFixed(1)} MB`;\n}\n\n/** ✅ Exact trigger height contract */\nfunction triggerHeight(size?: Size) {\n    switch (size) {\n        case \"sm\":\n            return \"h-8 text-xs\";\n        case \"lg\":\n            return \"h-11 text-base\";\n        default:\n            return \"h-9 text-sm\";\n    }\n}\n\nfunction chipHeight(size?: Size) {\n    switch (size) {\n        case \"sm\":\n            return \"h-5\";\n        case \"lg\":\n            return \"h-7\";\n        default:\n            return \"h-6\";\n    }\n}\n\nfunction pickerBtnSize(size?: Size) {\n    switch (size) {\n        case \"sm\":\n            return \"h-6 w-6\";\n        case \"lg\":\n            return \"h-8 w-8\";\n        default:\n            return \"h-7 w-7\";\n    }\n}\n\nfunction densityTokens(density?: Density) {\n    switch (density) {\n        case \"compact\":\n            return {\n                triggerPadX: \"px-2\",\n                triggerGap: \"gap-1.5\",\n                headerPad: \"px-3 py-1.5\",\n                bodyPad: \"p-2\",\n                listPad: \"p-1\",\n                rowPad: \"px-2 py-1.5\",\n                footerPad: \"p-1\",\n                chipPad: \"px-1\",\n                chipGap: \"gap-1\",\n            };\n        case \"loose\":\n            return {\n                triggerPadX: \"px-4\",\n                triggerGap: \"gap-3\",\n                headerPad: \"px-4 py-2.5\",\n                bodyPad: \"p-3\",\n                listPad: \"p-2\",\n                rowPad: \"px-3 py-2.5\",\n                footerPad: \"p-2\",\n                chipPad: \"px-2\",\n                chipGap: \"gap-2\",\n            };\n        default:\n            return {\n                triggerPadX: \"px-3\",\n                triggerGap: \"gap-2\",\n                headerPad: \"px-3 py-2\",\n                bodyPad: \"p-2.5\",\n                listPad: \"p-1\",\n                rowPad: \"px-2 py-2\",\n                footerPad: \"p-1\",\n                chipPad: \"px-1.5\",\n                chipGap: \"gap-1.5\",\n            };\n    }\n}\n\n// ─────────────────────────────────────────────\n// Raw string parsing (icon vs file)\n// ─────────────────────────────────────────────\n\nconst ICONIFY_KEY_RE = /^[a-z0-9]+[a-z0-9-]*:[a-z0-9]+[a-z0-9-]*$/i;\nconst FILE_EXT_RE =\n    /\\.(png|jpg|jpeg|gif|webp|svg|ico|bmp|tiff|avif|pdf|zip|rar|7z)$/i;\n\nfunction isFileLikeString(s: string) {\n    const v = s.trim();\n    if (!v) return false;\n\n    if (v.includes(\"://\")) return true;\n    if (\n        v.startsWith(\"http:\") ||\n        v.startsWith(\"https:\") ||\n        v.startsWith(\"blob:\") ||\n        v.startsWith(\"data:\") ||\n        v.startsWith(\"file:\")\n    )\n        return true;\n\n    // path-like\n    if (v.includes(\"/\") || v.includes(\"\\\\\")) return true;\n\n    // filename extension at the end\n    return FILE_EXT_RE.test(v);\n}\n\n// ─────────────────────────────────────────────\n// Props (mode discriminator)\n// ─────────────────────────────────────────────\n\ntype BadgeVariant = React.ComponentProps<typeof Badge>[\"variant\"];\n\ntype ImageIconVariantBaseProps = Pick<\n    VariantBaseProps<ImageIconFieldValue>,\n    \"onValue\" | \"error\" | \"disabled\" | \"readOnly\" | \"size\" | \"density\"\n> & {\n    value?: ImageIconInputValue;\n\n    multiple?: boolean;\n\n    // icon picker config\n    iconUrl?: string;\n    iconGroups?: IconGroup[];\n    allowedIconGroupIds?: string[];\n    iconMaxRender?: number;\n\n    // image picker config\n    accept?: string | string[];\n    maxFiles?: number;\n    maxTotalSize?: number;\n    customLoader?: CustomFileLoader | boolean;\n    mergeMode?: \"append\" | \"replace\";\n    formatFileName?: (item: FileItem) => React.ReactNode;\n    formatFileSize?: (size?: number) => React.ReactNode;\n\n    /**\n     * Convert FileItem (esp native File) into a persisted string value if possible.\n     * Falls back to:\n     *  - item.url\n     *  - item.path\n     *  - native File object\n     */\n    formatFileValue?: (file: FileItem) => string | undefined;\n\n    placeholder?: string;\n\n    className?: string;\n    triggerClassName?: string;\n    popoverClassName?: string;\n\n    showCheckboxes?: boolean;\n};\n\ntype DefaultModeProps = {\n    mode?: \"default\";\n\n    leadingIcons?: React.ReactNode[];\n    trailingIcons?: React.ReactNode[];\n    icon?: React.ReactNode;\n\n    leadingControl?: React.ReactNode;\n    trailingControl?: React.ReactNode;\n    leadingControlClassName?: string;\n    trailingControlClassName?: string;\n    joinControls?: boolean;\n    extendBoxToControls?: boolean;\n\n    // not supported in default mode\n    button?: never;\n    children?: never;\n\n    selectedBadge?: never;\n    selectedBadgeHiddenWhenZero?: never;\n    selectedBadgeVariant?: never;\n    selectedBadgeClassName?: never;\n    selectedBadgePlacement?: never;\n};\n\ntype ButtonTrigger =\n    | React.ReactNode\n    | ((ctx: {\n          open: boolean;\n          items: ImageIconValue[];\n          selectedCount: number;\n          disabled: boolean;\n      }) => React.ReactNode);\n\ntype ButtonModeProps = {\n    mode: \"button\";\n\n    button?: ButtonTrigger;\n    children?: ButtonTrigger;\n\n    selectedBadge?: boolean;\n    selectedBadgeHiddenWhenZero?: boolean;\n    selectedBadgeVariant?: BadgeVariant;\n    selectedBadgeClassName?: string;\n    selectedBadgePlacement?: \"end\" | \"corner\";\n\n    leadingIcons?: never;\n    trailingIcons?: never;\n    icon?: never;\n\n    leadingControl?: never;\n    trailingControl?: never;\n    leadingControlClassName?: never;\n    trailingControlClassName?: never;\n    joinControls?: never;\n    extendBoxToControls?: never;\n};\n\nexport type ShadcnImageIconVariantProps = ImageIconVariantBaseProps &\n    (DefaultModeProps | ButtonModeProps);\n\n// ─────────────────────────────────────────────\n// Small thumb preview for images\n// ─────────────────────────────────────────────\n\nfunction useImagePreview(value: ImageValue | undefined) {\n    const [src, setSrc] = React.useState<string | null>(null);\n\n    React.useEffect(() => {\n        if (!value) {\n            setSrc(null);\n            return;\n        }\n\n        if (value instanceof File) {\n            const url = URL.createObjectURL(value);\n            setSrc(url);\n            return () => URL.revokeObjectURL(url);\n        }\n\n        setSrc(value);\n    }, [value]);\n\n    return src;\n}\n\nconst ImageThumb = ({ image }: { image: ImageValue }) => {\n    const src = useImagePreview(image);\n\n    return (\n        <div className=\"relative flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-sm border bg-muted/50\">\n            {src ? (\n                <img src={src} alt=\"\" className=\"h-full w-full object-cover\" />\n            ) : (\n                <ImageIcon className=\"h-4 w-4 text-muted-foreground/50\" />\n            )}\n        </div>\n    );\n};\n\n// ─────────────────────────────────────────────\n// Main Component\n// ─────────────────────────────────────────────\n\nexport const ShadcnImageIconVariant = React.forwardRef<\n    HTMLDivElement,\n    ShadcnImageIconVariantProps\n>(function ShadcnImageIconVariant(props, ref) {\n    const {\n        value,\n        onValue,\n        disabled,\n        readOnly,\n        error,\n        size = \"md\",\n        density = \"comfortable\",\n\n        multiple = false,\n\n        // icon config\n        iconUrl,\n        iconGroups,\n        allowedIconGroupIds,\n        iconMaxRender,\n\n        // image config\n        accept,\n        maxFiles,\n        maxTotalSize,\n        customLoader,\n        mergeMode = \"append\",\n        formatFileName,\n        formatFileSize = formatSizeDefault,\n        formatFileValue: formatFileValueProp,\n\n        placeholder = \"Select icon or image…\",\n        className,\n        triggerClassName,\n        popoverClassName,\n        showCheckboxes = true,\n\n        // default-mode only\n        leadingIcons,\n        trailingIcons,\n        icon,\n        leadingControl,\n        trailingControl,\n        leadingControlClassName,\n        trailingControlClassName,\n        joinControls: joinControlsProp,\n        extendBoxToControls: extendBoxToControlsProp,\n\n        // button-mode only\n        mode = \"default\",\n        button,\n        children,\n        selectedBadge = true,\n        selectedBadgeHiddenWhenZero = true,\n        selectedBadgeVariant = \"secondary\",\n        selectedBadgeClassName,\n        selectedBadgePlacement = \"corner\",\n    } = props as ShadcnImageIconVariantProps & Record<string, any>;\n\n    const joinControls =\n        mode === \"default\" ? (joinControlsProp ?? true) : false;\n    const extendBoxToControls =\n        mode === \"default\" ? (extendBoxToControlsProp ?? true) : false;\n\n    const isDisabled = Boolean(disabled || readOnly);\n\n    const regFormatFileValue = getPaletteUtil(\"formatFileValue\");\n    const formatFileValue = formatFileValueProp ?? regFormatFileValue;\n\n    const regIcon = getPaletteUtil(\"iconPicker\");\n    const resolvedIconUrl = iconUrl ?? regIcon?.url;\n    const resolvedIconGroups = iconGroups ?? regIcon?.groups;\n\n    const effectiveIconGroups = React.useMemo(() => {\n        const groups = resolvedIconGroups ?? DEFAULT_GROUPS;\n        const allowed = toArray(allowedIconGroupIds).filter(\n            Boolean,\n        ) as string[];\n        if (!allowed.length) return groups;\n\n        const filtered = groups.filter((g) => allowed.includes(g.id));\n        return filtered.length ? filtered : groups;\n    }, [resolvedIconGroups, allowedIconGroupIds]);\n\n    const allowedIconPrefixes = React.useMemo(() => {\n        const set = new Set<string>();\n        for (const g of effectiveIconGroups) {\n            for (const p of g.prefixes ?? []) set.add(p);\n        }\n        return set;\n    }, [effectiveIconGroups]);\n\n    const isIconString = React.useCallback(\n        (raw: string) => {\n            const s = raw.trim();\n            if (!s) return false;\n\n            if (!ICONIFY_KEY_RE.test(s)) return false;\n\n            // If it looks file-like, prefer \"image\"\n            if (isFileLikeString(s)) return false;\n\n            // If groups are configured, enforce known prefixes\n            const prefix = s.split(\":\")[0] ?? \"\";\n            return !(\n                allowedIconPrefixes.size > 0 && !allowedIconPrefixes.has(prefix)\n            );\n        },\n        [allowedIconPrefixes],\n    );\n\n    const normaliseImageIconInput = React.useCallback(\n        (v: unknown): ImageIconValue | null => {\n            if (v == null) return null;\n\n            // Legacy structured\n            if (typeof v === \"object\" && v) {\n                const anyV: any = v;\n                if (anyV.kind === \"icon\" && typeof anyV.icon === \"string\") {\n                    return { kind: \"icon\", icon: anyV.icon };\n                }\n                if (\n                    anyV.kind === \"image\" &&\n                    (typeof anyV.image === \"string\" ||\n                        anyV.image instanceof File)\n                ) {\n                    return {\n                        kind: \"image\",\n                        image: anyV.image,\n                        name:\n                            typeof anyV.name === \"string\"\n                                ? anyV.name\n                                : undefined,\n                    };\n                }\n            }\n\n            // Raw file\n            if (v instanceof File) {\n                return { kind: \"image\", image: v, name: v.name };\n            }\n\n            // Raw string: icon or image(url/path/blob/data)\n            if (typeof v === \"string\") {\n                const s = v.trim();\n                if (!s) return null;\n\n                if (isIconString(s)) return { kind: \"icon\", icon: s };\n\n                return {\n                    kind: \"image\",\n                    image: s,\n                    name: s.split(/[\\\\/]/).pop() ?? s,\n                };\n            }\n\n            return null;\n        },\n        [isIconString],\n    );\n\n    const den = densityTokens(density as Density);\n    const heightCls = triggerHeight(size as Size);\n    const chipHeightCls = chipHeight(size as Size);\n    const pickerBtnCls = pickerBtnSize(size as Size);\n\n    const resolvedLeadingIcons = (\n        leadingIcons?.length ? leadingIcons : icon ? [icon] : []\n    ) as React.ReactNode[];\n    const resolvedTrailingIcons = (\n        trailingIcons?.length ? trailingIcons : []\n    ) as React.ReactNode[];\n    const hasExternalControls = !!leadingControl || !!trailingControl;\n\n    const [popoverOpen, setPopoverOpen] = React.useState(false);\n    const [tab, setTab] = React.useState<\"icon\" | \"image\">(\"icon\");\n\n    const list = React.useMemo<ImageIconValue[]>(() => {\n        const raw = multiple ? toArray(value) : value != null ? [value] : [];\n        return raw\n            .map(normaliseImageIconInput)\n            .filter(Boolean) as ImageIconValue[];\n    }, [multiple, normaliseImageIconInput, value]);\n\n    const iconsSelected = React.useMemo(() => {\n        return list.filter((x) => x.kind === \"icon\").map((x) => x.icon);\n    }, [list]);\n\n    const imagesSelected = React.useMemo(() => {\n        return list.filter((x) => x.kind === \"image\");\n    }, [list]);\n\n    const toFieldRaw = React.useCallback(\n        (x: ImageIconValue): ImageIconRawValue => {\n            return x.kind === \"icon\" ? x.icon : x.image;\n        },\n        [],\n    );\n\n    const emit = React.useCallback(\n        (nextList: ImageIconValue[], meta: any) => {\n            if (!onValue) return;\n\n            const rawList = nextList.map(toFieldRaw);\n\n            if (multiple) {\n                onValue(rawList, {\n                    source: \"variant\",\n                    raw: rawList,\n                    nativeEvent: undefined,\n                    meta,\n                });\n            } else {\n                onValue(rawList[0] ?? undefined, {\n                    source: \"variant\",\n                    raw: rawList[0] ?? undefined,\n                    nativeEvent: undefined,\n                    meta,\n                });\n            }\n        },\n        [multiple, onValue, toFieldRaw],\n    );\n\n    const removeAt = (idx: number) => {\n        const next = [...list];\n        next.splice(idx, 1);\n        emit(next, { action: \"remove\", index: idx });\n    };\n\n    const clearAll = () => emit([], { action: \"clear\" });\n\n    // ─────────────────────────────────────────────\n    // Chips (Icon / Image)\n    // ─────────────────────────────────────────────\n\n    const Chip = React.useCallback(\n        ({ item, index }: { item: ImageIconValue; index: number }) => {\n            const label =\n                item.kind === \"icon\"\n                    ? (item.icon.split(\":\")[1] ?? item.icon)\n                    : (item.name ??\n                      (typeof item.image === \"string\"\n                          ? (item.image.split(/[\\\\/]/).pop() ?? item.image)\n                          : item.image.name));\n\n            return (\n                <div\n                    role=\"button\"\n                    tabIndex={0}\n                    className={cn(\n                        \"flex items-center overflow-hidden rounded-sm border bg-muted/60 text-xs transition-colors hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none cursor-pointer\",\n                        chipHeightCls,\n                        den.chipPad,\n                        den.chipGap,\n                        \"max-w-50\",\n                    )}\n                    onPointerDown={(e) => e.stopPropagation()}\n                    onClick={(e) => {\n                        e.stopPropagation();\n                        setPopoverOpen(true);\n                    }}\n                >\n                    {item.kind === \"icon\" ? (\n                        <Icon\n                            icon={item.icon}\n                            className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\"\n                        />\n                    ) : (\n                        <ImageIcon className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n                    )}\n\n                    <span className=\"truncate font-medium\">{label}</span>\n\n                    <button\n                        type=\"button\"\n                        onPointerDown={(e) => e.stopPropagation()}\n                        onClick={(e) => {\n                            e.stopPropagation();\n                            removeAt(index);\n                        }}\n                        className=\"ml-auto flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-muted-foreground/70 hover:bg-destructive/20 hover:text-destructive focus:outline-none\"\n                        aria-label=\"Remove\"\n                    >\n                        <X className=\"h-3 w-3\" />\n                    </button>\n                </div>\n            );\n        },\n        [chipHeightCls, den.chipGap, den.chipPad, removeAt],\n    );\n\n    // ─────────────────────────────────────────────\n    // Button-mode trigger (badge)\n    // ─────────────────────────────────────────────\n\n    const selectedCount = list.length;\n\n    const resolveButtonTriggerElement =\n        React.useCallback((): React.ReactElement => {\n            const ctx = {\n                open: popoverOpen,\n                items: list,\n                selectedCount,\n                disabled: isDisabled,\n            };\n\n            const rawNode =\n                typeof button === \"function\"\n                    ? button(ctx)\n                    : (button ??\n                      (typeof children === \"function\"\n                          ? children(ctx)\n                          : children));\n\n            const shouldShowBadge =\n                Boolean(selectedBadge) &&\n                (!selectedBadgeHiddenWhenZero || selectedCount > 0);\n\n            const badgeEl = shouldShowBadge ? (\n                <Badge\n                    variant={selectedBadgeVariant}\n                    className={cn(\n                        \"text-[10px] h-5 px-1.5 leading-none\",\n                        selectedBadgePlacement === \"corner\" &&\n                            \"absolute -top-2 -right-2\",\n                        selectedBadgeClassName,\n                    )}\n                >\n                    {selectedCount}\n                </Badge>\n            ) : null;\n\n            const injectBadgeIntoElement = (el: React.ReactElement<any>) => {\n                if (!badgeEl) return el;\n\n                const existingClass = (el.props as any).className as\n                    | string\n                    | undefined;\n                const nextClass = cn(\n                    existingClass,\n                    selectedBadgePlacement === \"corner\" && \"relative\",\n                );\n                const child = (el.props as any).children;\n\n                if (selectedBadgePlacement === \"end\") {\n                    return React.cloneElement(el, {\n                        className: nextClass,\n                        children: (\n                            <span className=\"inline-flex items-center gap-2\">\n                                <span className=\"min-w-0\">{child}</span>\n                                {badgeEl}\n                            </span>\n                        ),\n                    } as any);\n                }\n\n                return React.cloneElement(el, {\n                    className: nextClass,\n                    children: (\n                        <>\n                            {child}\n                            {badgeEl}\n                        </>\n                    ),\n                } as any);\n            };\n\n            if (React.isValidElement(rawNode))\n                return injectBadgeIntoElement(rawNode);\n\n            return (\n                <button\n                    type=\"button\"\n                    disabled={isDisabled}\n                    className={cn(\n                        triggerClassName,\n                        selectedBadgePlacement === \"corner\" && \"relative\",\n                    )}\n                >\n                    {rawNode ?? <span>{placeholder}</span>}\n                    {badgeEl}\n                </button>\n            );\n        }, [\n            button,\n            children,\n            isDisabled,\n            list,\n            placeholder,\n            popoverOpen,\n            selectedBadge,\n            selectedBadgeClassName,\n            selectedBadgeHiddenWhenZero,\n            selectedBadgePlacement,\n            selectedBadgeVariant,\n            selectedCount,\n            triggerClassName,\n        ]);\n\n    // ─────────────────────────────────────────────\n    // Images panel logic (native input + custom loader)\n    // ─────────────────────────────────────────────\n\n    const [dragOver, setDragOver] = React.useState(false);\n    const fileInputRef = React.useRef<HTMLInputElement | null>(null);\n    const [imgSelectedIds, setImgSelectedIds] = React.useState<Set<string>>(\n        () => new Set(),\n    );\n\n    const imageItems: FileItem[] = React.useMemo(() => {\n        // derive FileItem[] from current image selections\n        return imagesSelected.map((x) => normaliseFileLike(x.image));\n    }, [imagesSelected]);\n\n    const canAddMore = (nextCount: number) => {\n        if (!multiple) return nextCount <= 1;\n        return !(maxFiles && nextCount > maxFiles);\n    };\n\n    const convertFileItemToImageValue = (\n        item: FileItem,\n    ): ImageValue | undefined => {\n        if (item.url) return item.url;\n        if (item.path) return item.path;\n\n        if (item.file) {\n            const maybe = formatFileValue?.(item);\n            return maybe ?? item.file;\n        }\n\n        return undefined;\n    };\n\n    const setImagesFromItems = (\n        itemsForImages: FileItem[],\n        detailMeta: any,\n    ) => {\n        const nextImages = itemsForImages\n            .map((it) => {\n                const v = convertFileItemToImageValue(it);\n                if (!v) return null;\n                return {\n                    kind: \"image\",\n                    image: v,\n                    name: it.name,\n                } as ImageIconValue;\n            })\n            .filter(Boolean) as ImageIconValue[];\n\n        if (multiple) {\n            const icons = list.filter((x) => x.kind === \"icon\");\n\n            const merged =\n                mergeMode === \"replace\"\n                    ? [...nextImages, ...icons]\n                    : [...imagesSelected, ...nextImages, ...icons].filter(\n                          Boolean,\n                      );\n\n            const onlyImages = merged.filter((x) => x.kind === \"image\");\n            const onlyIcons = merged.filter((x) => x.kind === \"icon\");\n            const limitedImages = maxFiles\n                ? onlyImages.slice(0, maxFiles)\n                : onlyImages;\n\n            emit([...limitedImages, ...onlyIcons], {\n                action: \"set-images\",\n                ...detailMeta,\n            });\n        } else {\n            const next = nextImages[0] ?? list.find((x) => x.kind === \"icon\");\n            emit(next ? [next] : [], { action: \"set-image\", ...detailMeta });\n        }\n    };\n\n    const handleAddImageItems = (\n        incoming: FileItem[],\n        from: \"input\" | \"drop\" | \"custom-loader\",\n    ) => {\n        if (isDisabled) return;\n\n        let next = multiple ? [...imageItems] : [];\n        const added: FileItem[] = [];\n\n        for (const item of incoming) {\n            if (!canAddMore(next.length + 1)) break;\n\n            const currentTotalSize = next.reduce(\n                (acc, i) => acc + (i.size || 0),\n                0,\n            );\n            if (\n                maxTotalSize &&\n                currentTotalSize + (item.size || 0) > maxTotalSize\n            )\n                break;\n\n            next.push(item);\n            added.push(item);\n        }\n\n        if (added.length) {\n            setImagesFromItems(next, { from });\n        }\n    };\n\n    const openImagePicker = React.useCallback(async () => {\n        if (isDisabled) return;\n\n        const resolvedLoader =\n            typeof customLoader == \"function\"\n                ? customLoader\n                : customLoader\n                  ? getPaletteUtil(\"customLoader\")\n                  : undefined;\n\n        if (resolvedLoader) {\n            try {\n                const result = await resolvedLoader({\n                    multiple,\n                    current: imageItems,\n                    allowedTypes: toArray(accept),\n                });\n                if (!result) return;\n\n                const normalized = toArray(result).map(normaliseFileLike);\n\n                if (!multiple || mergeMode === \"replace\") {\n                    setImagesFromItems(normalized, { from: \"custom-loader\" });\n                } else {\n                    handleAddImageItems(normalized, \"custom-loader\");\n                }\n            } catch (err) {\n                console.error(\"Custom loader failed\", err);\n            }\n            return;\n        }\n\n        fileInputRef.current?.click();\n    }, [accept, customLoader, imageItems, isDisabled, mergeMode, multiple]);\n\n    const onDragOver = React.useCallback(\n        (e: React.DragEvent) => {\n            e.preventDefault();\n            if (!isDisabled) setDragOver(true);\n        },\n        [isDisabled],\n    );\n\n    const onDrop = React.useCallback(\n        (e: React.DragEvent) => {\n            e.preventDefault();\n            setDragOver(false);\n            if (isDisabled || !e.dataTransfer.files?.length) return;\n            const files = normaliseFromFiles(e.dataTransfer.files);\n            handleAddImageItems(files, \"drop\");\n        },\n        [isDisabled, handleAddImageItems],\n    );\n\n    const onNativeChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n        if (e.target.files?.length) {\n            handleAddImageItems(normaliseFromFiles(e.target.files), \"input\");\n        }\n        e.target.value = \"\";\n    };\n\n    const removeImageItem = (id: string) => {\n        const next = imageItems.filter((x) => x.id !== id);\n        setImagesFromItems(next, { action: \"remove-image\", id });\n        if (imgSelectedIds.has(id)) {\n            const nextSel = new Set(imgSelectedIds);\n            nextSel.delete(id);\n            setImgSelectedIds(nextSel);\n        }\n    };\n\n    const bulkRemoveImages = () => {\n        const next = imageItems.filter((x) => !imgSelectedIds.has(x.id));\n        setImagesFromItems(next, {\n            action: \"bulk-remove-images\",\n            ids: Array.from(imgSelectedIds),\n        });\n        setImgSelectedIds(new Set());\n    };\n\n    // ─────────────────────────────────────────────\n    // Icon panel change\n    // ─────────────────────────────────────────────\n\n    const onIconsChange = (nextIcons: string[]) => {\n        const images = list.filter((x) => x.kind === \"image\");\n        const icons = nextIcons.map(\n            (i) => ({ kind: \"icon\", icon: i }) as ImageIconValue,\n        );\n\n        if (multiple) {\n            emit([...images, ...icons], { action: \"set-icons\" });\n        } else {\n            const next = icons[0] ?? images[0];\n            emit(next ? [next] : [], { action: \"set-icon\" });\n            if (icons[0]) setPopoverOpen(false);\n        }\n    };\n\n    // ─────────────────────────────────────────────\n    // Trigger Region (outer)\n    // ─────────────────────────────────────────────\n\n    const TriggerRegion = React.useMemo(() => {\n        const COLLAPSE_LIMIT = 2;\n\n        const hasItems = list.length > 0;\n        const visibleItems = list.slice(0, COLLAPSE_LIMIT);\n        const hiddenCount = list.length - COLLAPSE_LIMIT;\n        const isOverflowing = hiddenCount > 0;\n\n        const TriggerEl =\n            mode === \"button\" ? (\n                resolveButtonTriggerElement()\n            ) : (\n                <div\n                    className={cn(\n                        \"relative flex w-full cursor-pointer items-center py-0 transition-all\",\n                        heightCls,\n                        den.triggerPadX,\n                        den.triggerGap,\n                        (!joinControls || !hasExternalControls) &&\n                            \"rounded-md border border-input bg-surfaces-input ring-offset-background hover:bg-accent/5 focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n                        isDisabled && \"cursor-not-allowed opacity-50\",\n                        error &&\n                            (!joinControls || !hasExternalControls) &&\n                            \"border-destructive text-destructive\",\n                        triggerClassName,\n                    )}\n                >\n                    {/* Leading Icons */}\n                    {resolvedLeadingIcons.map((ico, i) => (\n                        <span\n                            key={i}\n                            className=\"flex shrink-0 items-center justify-center text-muted-foreground\"\n                        >\n                            {ico}\n                        </span>\n                    ))}\n\n                    {/* Content */}\n                    <div\n                        className={cn(\n                            \"flex flex-1 items-center overflow-hidden\",\n                            den.triggerGap,\n                        )}\n                    >\n                        {hasItems ? (\n                            <>\n                                {visibleItems.map((it, i) => (\n                                    <Chip\n                                        key={`${it.kind}:${i}`}\n                                        item={it}\n                                        index={i}\n                                    />\n                                ))}\n                                {isOverflowing && (\n                                    <span className=\"flex h-5 items-center justify-center rounded-sm bg-muted px-1.5 text-xs font-medium text-muted-foreground\">\n                                        +{hiddenCount}\n                                    </span>\n                                )}\n                            </>\n                        ) : (\n                            <span className=\"truncate text-muted-foreground\">\n                                {placeholder}\n                            </span>\n                        )}\n                    </div>\n\n                    {/* Trailing Icons */}\n                    {resolvedTrailingIcons.map((ico, i) => (\n                        <span\n                            key={i}\n                            className=\"flex shrink-0 items-center justify-center text-muted-foreground\"\n                        >\n                            {ico}\n                        </span>\n                    ))}\n\n                    {/* Picker button */}\n                    <Button\n                        type=\"button\"\n                        variant=\"ghost\"\n                        size=\"icon\"\n                        className={cn(\n                            \"shrink-0 text-muted-foreground hover:text-foreground\",\n                            pickerBtnCls,\n                        )}\n                        onPointerDown={(e) => e.stopPropagation()}\n                        onClick={(e) => {\n                            e.stopPropagation();\n                            setPopoverOpen(true);\n                        }}\n                    >\n                        <Plus className=\"h-4 w-4\" />\n                    </Button>\n\n                    <ChevronDown\n                        className={cn(\n                            \"h-4 w-4 shrink-0 text-muted-foreground opacity-50 transition-transform duration-200\",\n                            popoverOpen && \"rotate-180\",\n                        )}\n                    />\n                </div>\n            );\n\n        return (\n            <Popover open={popoverOpen} onOpenChange={setPopoverOpen}>\n                <PopoverTrigger asChild>{TriggerEl}</PopoverTrigger>\n\n                <PopoverContent\n                    className={cn(\n                        \"w-(--radix-popover-trigger-width) p-0 max-h-(--radix-popper-available-height)\",\n                        popoverClassName,\n                    )}\n                    align=\"start\"\n                >\n                    <div className=\"flex flex-col\">\n                        {/* Header */}\n                        <div\n                            className={cn(\n                                \"flex items-center justify-between border-b text-xs font-medium text-muted-foreground\",\n                                den.headerPad,\n                            )}\n                        >\n                            <span>\n                                {multiple\n                                    ? `${list.length} selected`\n                                    : list[0]\n                                      ? \"Selected\"\n                                      : \"No selection\"}\n                            </span>\n\n                            {list.length ? (\n                                <button\n                                    type=\"button\"\n                                    className=\"hover:text-foreground\"\n                                    onClick={clearAll}\n                                >\n                                    Clear all\n                                </button>\n                            ) : null}\n                        </div>\n\n                        {/* Tabs */}\n                        <div\n                            className={cn(\n                                \"flex items-center gap-2 border-b\",\n                                den.bodyPad,\n                            )}\n                        >\n                            <Button\n                                type=\"button\"\n                                variant={tab === \"icon\" ? \"secondary\" : \"ghost\"}\n                                size=\"sm\"\n                                className=\"h-8 text-xs\"\n                                onClick={() => setTab(\"icon\")}\n                            >\n                                <LayoutGrid className=\"mr-2 h-3.5 w-3.5\" />\n                                Icon\n                            </Button>\n                            <Button\n                                type=\"button\"\n                                variant={\n                                    tab === \"image\" ? \"secondary\" : \"ghost\"\n                                }\n                                size=\"sm\"\n                                className=\"h-8 text-xs\"\n                                onClick={() => setTab(\"image\")}\n                            >\n                                <ImageIcon className=\"mr-2 h-3.5 w-3.5\" />\n                                Image\n                            </Button>\n                        </div>\n\n                        {/* Body */}\n                        {tab === \"icon\" ? (\n                            <IconPickerPanel\n                                url={resolvedIconUrl ?? DEFAULT_ICONIFY_URL}\n                                groups={effectiveIconGroups ?? []}\n                                allowedGroupIds={allowedIconGroupIds}\n                                multiple={multiple}\n                                density={density as Density}\n                                value={iconsSelected}\n                                maxRender={iconMaxRender}\n                                onPicked={() => {\n                                    if (!multiple) setPopoverOpen(false);\n                                }}\n                                onValue={onIconsChange}\n                            />\n                        ) : (\n                            <div className=\"flex flex-col\">\n                                {/* Drop area / Add */}\n                                <div\n                                    onClick={openImagePicker}\n                                    onDragOver={onDragOver}\n                                    onDragLeave={() => setDragOver(false)}\n                                    onDrop={onDrop}\n                                    className={cn(\n                                        \"m-3 rounded-md border-2 border-dashed p-4 text-center text-xs transition-all\",\n                                        dragOver\n                                            ? \"border-primary bg-primary/5 ring-4 ring-primary/10\"\n                                            : \"border-muted-foreground/25 hover:bg-muted/30 hover:border-muted-foreground/50\",\n                                        isDisabled &&\n                                            \"cursor-not-allowed opacity-50\",\n                                        error &&\n                                            \"border-destructive/50 bg-destructive/5\",\n                                    )}\n                                >\n                                    <div className=\"flex items-center justify-center gap-2 text-muted-foreground\">\n                                        <FolderUp className=\"h-4 w-4\" />\n                                        <span>Click or drag to add image</span>\n                                    </div>\n                                    {(maxFiles || maxTotalSize) && (\n                                        <div className=\"mt-2 text-[11px] text-muted-foreground/70\">\n                                            {maxFiles\n                                                ? `Max files: ${maxFiles}`\n                                                : null}\n                                            {maxFiles && maxTotalSize\n                                                ? \" • \"\n                                                : null}\n                                            {maxTotalSize\n                                                ? `Max total: ${formatFileSize(maxTotalSize)}`\n                                                : null}\n                                        </div>\n                                    )}\n                                </div>\n\n                                {/* List */}\n                                <ScrollArea\n                                    className={cn(\n                                        \"h-auto max-h-75 w-full\",\n                                        den.listPad,\n                                    )}\n                                >\n                                    <div className=\"flex flex-col gap-1\">\n                                        {imageItems.map((it) => {\n                                            const selected = imgSelectedIds.has(\n                                                it.id,\n                                            );\n                                            const toggle = () => {\n                                                const next = new Set(\n                                                    imgSelectedIds,\n                                                );\n                                                if (next.has(it.id))\n                                                    next.delete(it.id);\n                                                else next.add(it.id);\n                                                setImgSelectedIds(next);\n                                            };\n\n                                            return (\n                                                <div\n                                                    key={it.id}\n                                                    className={cn(\n                                                        \"group flex items-center gap-3 rounded-md text-sm transition-colors hover:bg-muted/50\",\n                                                        den.rowPad,\n                                                    )}\n                                                >\n                                                    {showCheckboxes &&\n                                                        multiple && (\n                                                            <Checkbox\n                                                                checked={\n                                                                    selected\n                                                                }\n                                                                onCheckedChange={\n                                                                    toggle\n                                                                }\n                                                                className=\"h-4 w-4 shrink-0\"\n                                                            />\n                                                        )}\n\n                                                    <ImageThumb\n                                                        image={\n                                                            convertFileItemToImageValue(\n                                                                it,\n                                                            ) ??\n                                                            it.file ??\n                                                            it.name\n                                                        }\n                                                    />\n\n                                                    <div className=\"min-w-0 flex-1\">\n                                                        <div className=\"truncate font-medium\">\n                                                            {formatFileName?.(\n                                                                it,\n                                                            ) ?? it.name}\n                                                        </div>\n                                                        <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n                                                            <span>\n                                                                {formatFileSize(\n                                                                    it.size,\n                                                                )}\n                                                            </span>\n                                                            {it.status ===\n                                                                \"failed\" && (\n                                                                <span className=\"text-destructive\">\n                                                                    Failed\n                                                                </span>\n                                                            )}\n                                                        </div>\n                                                    </div>\n\n                                                    <Button\n                                                        variant=\"ghost\"\n                                                        size=\"icon\"\n                                                        className=\"h-7 w-7 opacity-0 group-hover:opacity-100\"\n                                                        onClick={(e) => {\n                                                            e.stopPropagation();\n                                                            removeImageItem(\n                                                                it.id,\n                                                            );\n                                                        }}\n                                                    >\n                                                        <Trash2 className=\"h-3.5 w-3.5 text-muted-foreground\" />\n                                                    </Button>\n                                                </div>\n                                            );\n                                        })}\n\n                                        {!imageItems.length && (\n                                            <div className=\"py-4 text-center text-xs text-muted-foreground\">\n                                                No images selected\n                                            </div>\n                                        )}\n                                    </div>\n                                </ScrollArea>\n\n                                {/* Footer */}\n                                <div\n                                    className={cn(\n                                        \"border-t flex items-center justify-between\",\n                                        den.footerPad,\n                                    )}\n                                >\n                                    {showCheckboxes &&\n                                    multiple &&\n                                    imgSelectedIds.size > 0 ? (\n                                        <button\n                                            type=\"button\"\n                                            className=\"text-xs text-destructive hover:underline\"\n                                            onClick={bulkRemoveImages}\n                                        >\n                                            Remove selected (\n                                            {imgSelectedIds.size})\n                                        </button>\n                                    ) : (\n                                        <span className=\"text-xs text-muted-foreground\">\n                                            {multiple\n                                                ? `${imageItems.length} images`\n                                                : imageItems[0]\n                                                  ? \"Image selected\"\n                                                  : \"No image\"}\n                                        </span>\n                                    )}\n\n                                    <Button\n                                        variant=\"secondary\"\n                                        size=\"sm\"\n                                        className=\"h-8 text-xs\"\n                                        onClick={openImagePicker}\n                                        disabled={isDisabled}\n                                    >\n                                        <Plus className=\"mr-2 h-3 w-3\" />\n                                        {multiple\n                                            ? \"Add images...\"\n                                            : imageItems.length\n                                              ? \"Replace image\"\n                                              : \"Add image\"}\n                                    </Button>\n                                </div>\n\n                                <input\n                                    ref={fileInputRef}\n                                    type=\"file\"\n                                    className=\"hidden\"\n                                    multiple={multiple}\n                                    accept={\n                                        Array.isArray(accept)\n                                            ? accept.join(\",\")\n                                            : accept\n                                    }\n                                    onChange={onNativeChange}\n                                />\n                            </div>\n                        )}\n                    </div>\n                </PopoverContent>\n            </Popover>\n        );\n    }, [\n        Chip,\n        accept,\n        allowedIconGroupIds,\n        bulkRemoveImages,\n        clearAll,\n        den.bodyPad,\n        den.headerPad,\n        den.listPad,\n        den.rowPad,\n        den.triggerGap,\n        den.triggerPadX,\n        den.footerPad,\n        dragOver,\n        error,\n        hasExternalControls,\n        heightCls,\n        iconMaxRender,\n        iconsSelected,\n        imageItems,\n        imgSelectedIds,\n        isDisabled,\n        joinControls,\n        list,\n        mode,\n        multiple,\n        onDragOver,\n        onDrop,\n        openImagePicker,\n        pickerBtnCls,\n        placeholder,\n        popoverClassName,\n        popoverOpen,\n        removeImageItem,\n        effectiveIconGroups,\n        resolvedIconUrl,\n        resolveButtonTriggerElement,\n        resolvedLeadingIcons,\n        resolvedTrailingIcons,\n        setPopoverOpen,\n        showCheckboxes,\n        tab,\n        triggerClassName,\n        density,\n        onIconsChange,\n        formatFileName,\n        formatFileSize,\n    ]);\n\n    // ─────────────────────────────────────────────\n    // Wrapper (joined controls)\n    // ─────────────────────────────────────────────\n\n    const joinedBox = mode === \"default\" && joinControls && extendBoxToControls;\n\n    return (\n        <div\n            ref={ref}\n            className={cn(\"w-full\", className)}\n            aria-disabled={isDisabled}\n            aria-invalid={!!error}\n        >\n            <div\n                className={cn(\n                    \"flex w-full\",\n                    joinedBox\n                        ? \"items-stretch rounded-md border border-input bg-surfaces-input shadow-xs ring-offset-background focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\"\n                        : \"items-start\",\n                    joinedBox && error && \"border-destructive\",\n                )}\n            >\n                {mode === \"default\" && leadingControl && (\n                    <div\n                        className={cn(\n                            \"flex items-center\",\n                            joinControls && \"border-r bg-muted/50 px-3\",\n                            leadingControlClassName,\n                        )}\n                    >\n                        {leadingControl}\n                    </div>\n                )}\n\n                <div className=\"flex-1 min-w-0\">{TriggerRegion}</div>\n\n                {mode === \"default\" && trailingControl && (\n                    <div\n                        className={cn(\n                            \"flex items-center\",\n                            joinControls && \"border-l bg-muted/50 px-3\",\n                            trailingControlClassName,\n                        )}\n                    >\n                        {trailingControl}\n                    </div>\n                )}\n            </div>\n        </div>\n    );\n});\n\nShadcnImageIconVariant.displayName = \"ShadcnImageIconVariant\";\nexport default ShadcnImageIconVariant;\n","// src/variants/core/image-icon.ts\r\n\r\nimport ShadcnImageIconVariant from \"@/presets/shadcn-variants/image-icon\";\r\nimport type { VariantModuleFor } from \"@/schema/variant\";\r\n\r\nexport const imageIconVariant: VariantModuleFor<\"image-icon\"> = {\r\n    variant: \"image-icon\",\r\n    Variant: ShadcnImageIconVariant as any,\r\n    defaults: {\r\n        layout: {\r\n            fullWidth: true,\r\n        },\r\n    },\r\n    meta: {\r\n        label: \"Image / Icon\",\r\n        description: \"Select an uploaded image/file OR an Iconify icon.\",\r\n        tags: [\"image\", \"icon\", \"file\", \"picker\", \"shadcn\"],\r\n    },\r\n};\r\n","// src/variants/core/icon.ts\r\n\r\nimport ShadcnIconVariant from \"@/presets/shadcn-variants/icon\";\r\nimport type { VariantModuleFor } from \"@/schema/variant\";\r\n\r\nexport const iconVariant: VariantModuleFor<\"icon\"> = {\r\n    variant: \"icon\",\r\n    Variant: ShadcnIconVariant as any,\r\n    defaults: {\r\n        layout: {\r\n            fullWidth: true,\r\n        },\r\n    },\r\n    meta: {\r\n        label: \"Icon\",\r\n        description:\r\n            \"Iconify icon picker (single/multiple, supports button mode).\",\r\n        tags: [\"icon\", \"iconify\", \"picker\", \"shadcn\"],\r\n    },\r\n};\r\n","// src/variants/index.ts\r\n\r\nimport {\r\n    registerVariant as _register,\r\n    getVariant as _get,\r\n    listVariants as _list,\r\n} from \"@/variants/registry\";\r\nimport type {\r\n    VariantKey,\r\n    VariantModule,\r\n    VariantValueFor,\r\n    VariantPropsFor,\r\n} from \"@/schema/variant\";\r\nimport { textVariant } from \"@/variants/core/text\";\r\nimport { numberVariant } from \"./core/number\";\r\nimport { PhoneVariantModule } from \"./core/phone\";\r\nimport { ColorVariantModule } from \"./core/color\";\r\nimport passwordVariant from \"./core/password\";\r\nimport { dateVariant } from \"./core/date\";\r\nimport { chipVariant } from \"./core/chips\";\r\nimport { textareaVariant } from \"./core/textarea\";\r\nimport ToggleVariantModule from \"./core/toggle\";\r\nimport { radioVariantModule } from \"./core/radio\";\r\nimport { checkboxModule } from \"./core/checkbox\";\r\nimport { selectModule } from \"./core/select\";\r\nimport multiSelectVariantModule from \"./core/multiselect\";\r\nimport sliderModule from './core/slider'\r\nimport { keyValueModule } from \"./core/keyvalue\";\r\nimport customVariant from \"./core/custom\";\r\nimport treeselectModule from \"./core/treeselect\";\r\nimport { fileManagerModule } from \"./core/file\";\r\nimport { toggleGroupModule } from \"./core/toggle-group\";\r\nimport { shadcnEditorVariant } from \"@/variants/core/editor\";\r\nimport { jsonEditorVariant } from \"./core/json-editor\";\r\nimport listerVariant from \"./core/lister\";\r\nimport { imageIconVariant } from \"@/variants/core/image-icon\";\r\nimport { iconVariant } from \"@/variants/core/icon\";\r\n\r\nexport type { VariantKey, VariantModule, VariantValueFor, VariantPropsFor };\r\nexport {\r\n    _register as registerVariant,\r\n    _get as getVariant,\r\n    _list as listVariants,\r\n};\r\nexport { textVariant };\r\n\r\n\r\nconst variants = [\r\n    textVariant,\r\n    numberVariant,\r\n    PhoneVariantModule,\r\n    ColorVariantModule,\r\n    passwordVariant,\r\n    dateVariant,\r\n    chipVariant,\r\n    textareaVariant,\r\n    ToggleVariantModule,\r\n    radioVariantModule,\r\n    checkboxModule,\r\n    selectModule,\r\n    multiSelectVariantModule,\r\n    sliderModule,\r\n    keyValueModule,\r\n    customVariant,\r\n    treeselectModule,\r\n    fileManagerModule,\r\n    toggleGroupModule,\r\n    shadcnEditorVariant,\r\n    jsonEditorVariant,\r\n    listerVariant,\r\n    imageIconVariant,\r\n    iconVariant,\r\n]\r\n\r\n/**\r\n * Register all core/built-in variants.\r\n *\r\n * Hosts can call this once at bootstrap:\r\n *\r\n *   import { registerCoreVariants } from \"@timeax/form-palette/variants\";\r\n *   registerCoreVariants();\r\n */\r\nexport function registerCoreVariants(): void {\r\n    variants.forEach(item => _register(item as any))\r\n}\r\n\r\nregisterCoreVariants();\r\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Label({\n  className,\n  ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n  return (\n    <LabelPrimitive.Root\n      data-slot=\"label\"\n      className={cn(\n        \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport { Label }\n","import { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"@/presets/ui/label\"\nimport { Separator } from \"@/presets/ui/separator\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n  return (\n    <fieldset\n      data-slot=\"field-set\"\n      className={cn(\n        \"flex flex-col gap-6\",\n        \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction FieldLegend({\n  className,\n  variant = \"legend\",\n  ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n  return (\n    <legend\n      data-slot=\"field-legend\"\n      data-variant={variant}\n      className={cn(\n        \"mb-3 font-medium\",\n        \"data-[variant=legend]:text-base\",\n        \"data-[variant=label]:text-sm\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"field-group\"\n      className={cn(\n        \"group/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nconst fieldVariants = cva(\n  \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\",\n  {\n    variants: {\n      orientation: {\n        vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n        horizontal: [\n          \"flex-row items-center\",\n          \"[&>[data-slot=field-label]]:flex-auto\",\n          \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n        ],\n        responsive: [\n          \"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto\",\n          \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n          \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n        ],\n      },\n    },\n    defaultVariants: {\n      orientation: \"vertical\",\n    },\n  }\n)\n\nfunction Field({\n  className,\n  orientation = \"vertical\",\n  ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n  return (\n    <div\n      role=\"group\"\n      data-slot=\"field\"\n      data-orientation={orientation}\n      className={cn(fieldVariants({ orientation }), className)}\n      {...props}\n    />\n  )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"field-content\"\n      className={cn(\n        \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction FieldLabel({\n  className,\n  ...props\n}: React.ComponentProps<typeof Label>) {\n  return (\n    <Label\n      data-slot=\"field-label\"\n      className={cn(\n        \"group/field-label peer/field-label flex w-fit gap-1 leading-snug group-data-[disabled=true]/field:opacity-50\",\n        \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4\",\n        \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"field-label\"\n      className={cn(\n        \"flex w-fit items-center gap-1 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n  return (\n    <p\n      data-slot=\"field-description\"\n      className={cn(\n        \"text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance\",\n        \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\n        \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction FieldSeparator({\n  children,\n  className,\n  ...props\n}: React.ComponentProps<\"div\"> & {\n  children?: React.ReactNode\n}) {\n  return (\n    <div\n      data-slot=\"field-separator\"\n      data-content={!!children}\n      className={cn(\n        \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\n        className\n      )}\n      {...props}\n    >\n      <Separator className=\"absolute inset-0 top-1/2\" />\n      {children && (\n        <span\n          className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n          data-slot=\"field-separator-content\"\n        >\n          {children}\n        </span>\n      )}\n    </div>\n  )\n}\n\nfunction FieldError({\n  className,\n  children,\n  errors,\n  ...props\n}: React.ComponentProps<\"div\"> & {\n  errors?: Array<{ message?: string } | undefined>\n}) {\n  const content = useMemo(() => {\n    if (children) {\n      return children\n    }\n\n    if (!errors?.length) {\n      return null\n    }\n\n    const uniqueErrors = [\n      ...new Map(errors.map((error) => [error?.message, error])).values(),\n    ]\n\n    if (uniqueErrors?.length == 1) {\n      return uniqueErrors[0]?.message\n    }\n\n    return (\n      <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n        {uniqueErrors.map(\n          (error, index) =>\n            error?.message && <li key={index}>{error.message}</li>\n        )}\n      </ul>\n    )\n  }, [children, errors])\n\n  if (!content) {\n    return null\n  }\n\n  return (\n    <div\n      role=\"alert\"\n      data-slot=\"field-error\"\n      className={cn(\"text-destructive text-sm font-normal\", className)}\n      {...props}\n    >\n      {content}\n    </div>\n  )\n}\n\nexport {\n  Field,\n  FieldLabel,\n  FieldDescription,\n  FieldError,\n  FieldGroup,\n  FieldLegend,\n  FieldSeparator,\n  FieldSet,\n  FieldContent,\n  FieldTitle,\n}\n","// src/input/input-layout-graph.ts\n\nimport * as React from \"react\";\n\nimport type {\n    FieldLayoutConfig,\n    FieldOrdering,\n    FieldRootId,\n    FieldSlotId,\n    RelativeRootsMap,\n    SlotPlacement,\n} from \"@/schema/input-field\";\n\n/**\n * Helper slots are all non-root slots:\n * - sublabel\n * - description\n * - helpText\n * - errorText\n */\nexport type HelperSlotId = Exclude<FieldSlotId, FieldRootId>;\n\nexport interface HelperSlot {\n    id: HelperSlotId;\n    root: FieldRootId;\n    placement: SlotPlacement;\n    content: React.ReactNode;\n}\n\n/**\n * Accessor for a (root, placement) group.\n *\n * - `slots()` gives you the concrete HelperSlot[] (possibly empty).\n * - `render(fn)` calls `fn(slots)` only if there are slots,\n *   otherwise returns null (so React renders nothing).\n */\nexport interface SlotAccessor {\n    root: FieldRootId;\n    placement: SlotPlacement;\n\n    /**\n     * Concrete list of slots for this root + placement.\n     * May be an empty array.\n     */\n    slots(): HelperSlot[];\n\n    /**\n     * Render this group.\n     *\n     * If no slots are present, returns null so nothing is rendered.\n     *\n     * Example:\n     *   graph\n     *     .getSlotsFor(\"input\", \"below\")\n     *     .render((slots) =>\n     *       slots.map((slot) =>\n     *         renderHelperSlot(\"input\", slot, classes)\n     *       )\n     *     );\n     */\n    render(renderFn: (slots: HelperSlot[]) => React.ReactNode): React.ReactNode;\n}\n\n/**\n * Layout graph for helpers.\n */\nexport interface LayoutGraph {\n    helperSlots: HelperSlot[];\n\n    /**\n     * Get a slot accessor for a given root + placement.\n     */\n    getSlotsFor(root: FieldRootId, placement: SlotPlacement): SlotAccessor;\n}\n\n/**\n * Default root attachment for helpers when layout.relativeRoots\n * does not specify anything.\n */\nconst defaultRelativeRoots: RelativeRootsMap = {\n    sublabel: \"label\",\n    description: \"input\",\n    helpText: \"input\",\n    errorText: \"input\",\n};\n\n/**\n * Default relative ordering per root when layout.ordering\n * is not provided.\n *\n * Only governs *priority* when multiple helpers share the same\n * root + placement. It does not decide the placement itself.\n */\nconst defaultOrdering: FieldOrdering = {\n    label: [\"sublabel\"],\n    input: [\"errorText\", \"description\", \"helpText\"],\n};\n\nfunction defaultPlacementFor(id: HelperSlotId): SlotPlacement {\n    if (id === \"sublabel\") {\n        // Typical: small label text to the right of the main label\n        return \"right\";\n    }\n\n    if (id == \"tags\") return \"right\";\n    // For description/help/error, \"below\" the root is the usual default\n    return \"below\";\n}\n\ninterface BuildLayoutGraphArgs {\n    layout: FieldLayoutConfig;\n    /**\n     * Raw contents for each helper slot.\n     * Undefined/null means \"no slot\".\n     */\n    sublabel?: React.ReactNode;\n    description?: React.ReactNode;\n    helpText?: React.ReactNode;\n    errorText?: React.ReactNode;\n    tags?: React.ReactNode;\n}\n\n/**\n * Build a layout graph for helper slots given:\n * - the effective layout (after variant defaults + overrides)\n * - the actual content for each slot\n */\nexport function buildLayoutGraph(args: BuildLayoutGraphArgs): LayoutGraph {\n    const { layout, sublabel, description, helpText, errorText, tags } = args;\n\n    const relativeRoots: RelativeRootsMap = {\n        ...defaultRelativeRoots,\n        ...(layout.relativeRoots ?? {}),\n    };\n\n    const ordering: FieldOrdering = {\n        ...defaultOrdering,\n        ...(layout.ordering ?? {}),\n    };\n\n    const helperSlots: HelperSlot[] = [];\n\n    const pushSlot = (\n        id: HelperSlotId,\n        content: React.ReactNode | undefined,\n        placement: SlotPlacement | undefined,\n    ) => {\n        if (content === undefined || content === null) return;\n\n        const root: FieldRootId =\n            relativeRoots[id] ?? ((id === \"sublabel\" || id == 'tags') ? \"label\" : \"input\");\n\n        const effectivePlacement: SlotPlacement =\n            placement ?? defaultPlacementFor(id);\n\n        if (effectivePlacement === \"hidden\") return;\n\n        helperSlots.push({\n            id,\n            root,\n            placement: effectivePlacement,\n            content,\n        });\n    };\n\n    pushSlot(\"sublabel\", sublabel, layout.sublabelPlacement);\n    pushSlot(\"description\", description, layout.descriptionPlacement);\n    pushSlot(\"helpText\", helpText, layout.helpTextPlacement);\n    pushSlot(\"errorText\", errorText, layout.errorTextPlacement);\n    pushSlot(\"tags\", tags, layout.tagPlacement);\n\n    function makeAccessor(\n        root: FieldRootId,\n        placement: SlotPlacement,\n    ): SlotAccessor {\n        // cache per accessor so multiple .slots()/.render() calls\n        // don't keep re-filtering\n        let cache: HelperSlot[] | null = null;\n\n        const compute = (): HelperSlot[] => {\n            if (cache) return cache;\n\n            const base = helperSlots.filter(\n                (s) => s.root === root && s.placement === placement,\n            );\n\n            const order = ordering[root] ?? [];\n            if (!order.length) {\n                cache = base;\n                return cache;\n            }\n\n            cache = [...base].sort((a, b) => {\n                const ai = order.indexOf(a.id);\n                const bi = order.indexOf(b.id);\n\n                const aRank = ai === -1 ? Number.POSITIVE_INFINITY : ai;\n                const bRank = bi === -1 ? Number.POSITIVE_INFINITY : bi;\n\n                return aRank - bRank;\n            });\n\n            return cache;\n        };\n\n        return {\n            root,\n            placement,\n            slots: () => compute(),\n            render(renderFn) {\n                const slots = compute();\n                if (!slots.length) return null; // nothing rendered\n                return renderFn(slots);\n            },\n        };\n    }\n\n    return {\n        helperSlots,\n        getSlotsFor(root, placement) {\n            return makeAccessor(root, placement);\n        },\n    };\n}\n","// src/core/context.ts\nimport React from \"react\";\nimport type { CoreContext, Dict } from \"@/schema/core\";\n\n/**\n * Non-generic alias for the core context type used at runtime.\n *\n * We store CoreContext<Dict> in React context and let\n * caller-side hooks (useCore, useCoreContext, etc.) cast\n * to a more specific generic shape when needed.\n */\nexport type AnyCoreContext = CoreContext<Dict>;\n\n/**\n * React context carrying the current form/core instance.\n *\n * - Provider is set up in core-provider.tsx.\n * - Consumers should generally use the typed hook in\n *   hooks/use-core-context.ts instead of reading this directly.\n */\nexport const CoreContextReact = React.createContext<AnyCoreContext | null>(\n    null\n);\n","// src/core/hooks/use-core-context.ts\nimport { useContext } from \"react\";\nimport { CoreContextReact } from \"@/core/context\";\nimport type { CoreContext, Dict } from \"@/schema/core\";\n\n/**\n * Typed hook to access the current core/form context.\n *\n * Must be used inside a <CoreProvider>. If no provider is found,\n * this will throw to make misuse obvious.\n */\nexport function useCoreContext<V extends Dict = Dict>(): CoreContext<V> {\n    const ctx = useContext(CoreContextReact);\n\n    if (!ctx) {\n        throw new Error(\"useCoreContext must be used within a <CoreProvider>.\");\n    }\n\n    return ctx as CoreContext<V>;\n}\n","// src/core/hooks/use-field.ts\r\n// noinspection JSUnusedGlobalSymbols,GrazieInspection\r\n\r\nimport * as React from \"react\";\r\n\r\nimport { useCoreContext } from \"@/core/hooks/use-core-context\";\r\nimport type { CoreContext, Dict } from \"@/schema/core\";\r\nimport type { Field } from \"@/schema/field\";\r\nimport { VariantKey } from \"@/schema/variant\";\r\n\r\nexport type UseFieldValidate<T> = (\r\n    value: T,\r\n    field?: Field,\r\n    form?: CoreContext<any>,\r\n    report?: boolean,\r\n) => boolean | string;\r\n\r\nexport interface UseFieldOptions<T = unknown> {\r\n    /**\r\n     * Primary field name.\r\n     *\r\n     * This is the key that will show up in the values snapshot and\r\n     * error bags (unless mapped via `shared` or `alias`).\r\n     */\r\n    name?: string;\r\n\r\n    variant: VariantKey\r\n\r\n    /**\r\n     * Optional internal binding identifier.\r\n     *\r\n     * Used by the bound helpers (observeBoundField, waitForBoundField)\r\n     * and the binder registry.\r\n     */\r\n    bindId?: string;\r\n\r\n    /**\r\n     * Optional external binding key – a semantic identifier for this\r\n     * field’s binding group.\r\n     *\r\n     * Example:\r\n     *   bind=\"shipping\"\r\n     */\r\n    bind?: string;\r\n\r\n    /**\r\n     * Shared key for nested grouping, e.g:\r\n     *\r\n     *   shared=\"profile\", name=\"first_name\"\r\n     *   → values.profile.first_name\r\n     */\r\n    shared?: string;\r\n\r\n    /**\r\n     * Optional grouping identifier used to group related controls\r\n     * (e.g. radio groups, segmented inputs).\r\n     */\r\n    groupId?: string;\r\n\r\n    /**\r\n     * Optional alias for error / mapping purposes.\r\n     *\r\n     * Example:\r\n     *   alias=\"email\" but name=\"contact.email\"\r\n     */\r\n    alias?: string;\r\n\r\n    /**\r\n     * Marks this field as the \"main\" one in a group.\r\n     */\r\n    main?: boolean;\r\n\r\n    /**\r\n     * If true, this field is ignored by snapshot / some validation\r\n     * flows, but may still exist in the registry.\r\n     */\r\n    ignore?: boolean;\r\n\r\n    /**\r\n     * Whether the field is required.\r\n     */\r\n    required?: boolean;\r\n\r\n    /**\r\n     * Controlled value prop.\r\n     */\r\n    value?: T;\r\n\r\n    /**\r\n     * Initial/default value for this field.\r\n     */\r\n    defaultValue?: T;\r\n\r\n    /**\r\n     * Initial disabled flag.\r\n     */\r\n    disabled?: boolean;\r\n\r\n    /**\r\n     * Initial readOnly flag.\r\n     */\r\n    readOnly?: boolean;\r\n\r\n    /**\r\n     * Custom validation hook.\r\n     *\r\n     * Return:\r\n     * - `true`       → valid\r\n     * - `false`      → invalid (no message)\r\n     * - `\"message\"`  → invalid with explicit message\r\n     */\r\n    validate?: UseFieldValidate<T>;\r\n\r\n    /**\r\n     * Optional projector to derive an \"original\" value from the\r\n     * initial default.\r\n     */\r\n    getOriginalValue?(value: T | undefined): unknown;\r\n\r\n    /**\r\n     * Local change hook for the field.\r\n     *\r\n     * This is in addition to the form-level `onChange`.\r\n     */\r\n    onValueChange?(next: T, prev: T, variant: string): void;\r\n\r\n    onSubmit?(e: any): any;\r\n}\r\n\r\nexport interface UseFieldReturn<T = unknown> {\r\n    /** Ref to the underlying DOM element */\r\n    ref: React.RefObject<HTMLElement>;\r\n    key: string;\r\n    /** Current value */\r\n    value: T | undefined;\r\n    setValue(next: T | undefined, variant?: string): void;\r\n\r\n    /** Current error message */\r\n    error: string;\r\n    setError(message: string): void;\r\n\r\n    /** Async-loading flag (e.g. remote validation) */\r\n    loading: boolean;\r\n    setLoading(loading: boolean): void;\r\n\r\n    /** Required flag */\r\n    required: boolean;\r\n    setRequired(required: boolean): void;\r\n\r\n    /** Disabled flag */\r\n    disabled: boolean;\r\n    setDisabled(disabled: boolean): void;\r\n\r\n    /** Readonly flag */\r\n    readOnly: boolean;\r\n    setReadOnly(readOnly: boolean): void;\r\n\r\n    /** Metadata / wiring */\r\n    name: string;\r\n    bindId: string;\r\n    bind?: string;\r\n    shared?: string;\r\n    groupId?: string;\r\n    alias?: string;\r\n    main?: boolean;\r\n    ignore?: boolean;\r\n\r\n    /** Snapshots */\r\n    readonly defaultValue: T | undefined;\r\n    readonly originalValue: unknown;\r\n\r\n    /** Owning core context */\r\n    form: CoreContext<Dict>;\r\n\r\n    /** Run validation (optionally reporting errors) */\r\n    validate(report?: boolean): boolean | undefined;\r\n}\r\n\r\n/**\r\n * Strict field hook.\r\n *\r\n * - Registers the field with the core provider / registry.\r\n * - Exposes value/error/loading and lifecycle helpers.\r\n * - Wires into:\r\n *   - core-level `onChange`\r\n *   - `controlButton()` dirty logic\r\n */\r\nexport function useField<T = unknown>(\r\n    options: UseFieldOptions<T>,\r\n): UseFieldReturn<T> {\r\n    const form = useCoreContext<Dict>();\r\n\r\n    const {\r\n        name: rawName,\r\n        bindId: rawBindId,\r\n        bind,\r\n        shared,\r\n        groupId,\r\n        alias,\r\n        main,\r\n        ignore,\r\n        required: requiredProp = false,\r\n        value: valueProp,\r\n        defaultValue,\r\n        disabled: disabledProp = false,\r\n        readOnly: readOnlyProp = false,\r\n        validate,\r\n        getOriginalValue,\r\n        onValueChange,\r\n        onSubmit,\r\n    } = options;\r\n\r\n    const ref = React.useRef<HTMLElement>(null);\r\n\r\n    // Core state (value, error, loading, original) lives in a ref\r\n    const stateRef = React.useRef<{\r\n        value: T | undefined;\r\n        error: string;\r\n        loading: boolean;\r\n        original: unknown;\r\n    }>({\r\n        value: defaultValue,\r\n        error: \"\",\r\n        loading: false,\r\n        original: getOriginalValue\r\n            ? getOriginalValue(defaultValue)\r\n            : defaultValue,\r\n    });\r\n\r\n    // React state mirrors (used for rerenders)\r\n    const [valueState, setValueState] = React.useState<T | undefined>(\r\n        stateRef.current.value,\r\n    );\r\n\r\n    const isControlled = valueProp !== undefined;\r\n    const value = isControlled ? valueProp : valueState;\r\n\r\n    React.useEffect(() => {\r\n        if (isControlled && valueProp !== stateRef.current.value) {\r\n            stateRef.current.value = valueProp;\r\n            setValueState(valueProp);\r\n        }\r\n    }, [isControlled, valueProp]);\r\n    const [error, setErrorState] = React.useState<string>(\r\n        stateRef.current.error,\r\n    );\r\n    const [loading, setLoadingState] = React.useState<boolean>(\r\n        stateRef.current.loading,\r\n    );\r\n    const [required, setRequired] = React.useState<boolean>(\r\n        Boolean(requiredProp),\r\n    );\r\n    const [disabled, setDisabled] = React.useState<boolean>(\r\n        Boolean(disabledProp),\r\n    );\r\n    const [readOnly, setReadOnly] = React.useState<boolean>(\r\n        Boolean(readOnlyProp),\r\n    );\r\n\r\n    const id = React.useId();\r\n    // Stable wiring keys\r\n    // @ts-ignore\r\n    const keyRef = React.useRef<string>(\r\n        (() => {\r\n            if (rawName && rawName.trim()) return `${rawName.trim()}-${id}`;\r\n            if (rawBindId && rawBindId.trim())\r\n                return `${rawBindId.trim()}-${id}`;\r\n            return `field-${Math.random().toString(36).slice(2)}-${id}`;\r\n        })(),\r\n    ) as React.RefObject<string>;\r\n\r\n    const bindIdRef = React.useRef<string>(\r\n        (rawBindId && rawBindId.trim()) || keyRef.current,\r\n    );\r\n\r\n    const fieldRef = React.useRef<Field | null>(null);\r\n\r\n    // Build the Field object once\r\n    if (!fieldRef.current) {\r\n        const key = keyRef.current;\r\n        const bindId = bindIdRef.current;\r\n        const trimmedName = rawName?.trim() ?? \"\";\r\n\r\n        const validateFn = (report?: boolean): boolean => {\r\n            const formDisabled = false; // core-level disable could be added later\r\n            const curDisabled = formDisabled || disabled || readOnly;\r\n\r\n            if (curDisabled && !report) {\r\n                return true;\r\n            }\r\n\r\n            const current = stateRef.current.value as T;\r\n            let ok = true;\r\n            let message = \"\";\r\n\r\n            if (\r\n                required &&\r\n                (current === undefined ||\r\n                    current === null ||\r\n                    (typeof current === \"string\" && current.trim() === \"\") ||\r\n                    (Array.isArray(current) && current.length === 0))\r\n            ) {\r\n                ok = false;\r\n                message = \"This field is required.\";\r\n            } else if (validate) {\r\n                const result = validate(\r\n                    current,\r\n                    fieldRef.current!,\r\n                    form,\r\n                    !!report,\r\n                );\r\n                if (typeof result === \"string\") {\r\n                    ok = false;\r\n                    message = result;\r\n                } else if (!result) {\r\n                    ok = false;\r\n                }\r\n            }\r\n\r\n            if (!report) {\r\n                return ok;\r\n            }\r\n\r\n            // Report mode → set/clear error\r\n            stateRef.current.error = ok ? \"\" : message;\r\n            setErrorState(ok ? \"\" : message);\r\n            return ok;\r\n        };\r\n\r\n        const f: Field = {\r\n            key,\r\n            bindId,\r\n            bind,\r\n            name: trimmedName,\r\n            shared,\r\n            groupId,\r\n            alias,\r\n            main,\r\n            ignore,\r\n            required,\r\n            onSubmit,\r\n            ref: ref as React.RefObject<HTMLElement>,\r\n            get defaultValue() {\r\n                return stateRef.current.original;\r\n            },\r\n            get value() {\r\n                return stateRef.current.value;\r\n            },\r\n            set value(v: unknown) {\r\n                stateRef.current.value = v as T | undefined;\r\n                setValueState(v as T | undefined);\r\n            },\r\n            get originalValue() {\r\n                return stateRef.current.original;\r\n            },\r\n            get error() {\r\n                return stateRef.current.error;\r\n            },\r\n            set error(msg: string) {\r\n                stateRef.current.error = msg;\r\n                setErrorState(msg);\r\n            },\r\n            get loading() {\r\n                return stateRef.current.loading;\r\n            },\r\n            set loading(v: boolean) {\r\n                stateRef.current.loading = v;\r\n                setLoadingState(v);\r\n            },\r\n            validate: validateFn,\r\n            onChange(value: unknown, old: unknown, variant: string) {\r\n                if (onValueChange) {\r\n                    onValueChange(value as T, old as T, variant);\r\n                }\r\n            },\r\n            variant: options.variant\r\n            // Flags not directly on the Field interface but used via `as any`\r\n            // in core-provider (getValue/setValue/reset).\r\n        } as Field & {\r\n            getValue(): T | undefined;\r\n            setValue(next: T | undefined): void;\r\n            reset(): void;\r\n        };\r\n\r\n        // Imperative helpers used by the core\r\n        (f as any).getValue = () => stateRef.current.value;\r\n        (f as any).setValue = (next: T | undefined) => {\r\n            stateRef.current.value = next;\r\n            setValueState(next);\r\n        };\r\n        (f as any).reset = () => {\r\n            stateRef.current.value = defaultValue;\r\n            stateRef.current.error = \"\";\r\n            stateRef.current.loading = false;\r\n\r\n            setValueState(defaultValue);\r\n            setErrorState(\"\");\r\n            setLoadingState(false);\r\n        };\r\n\r\n        fieldRef.current = f;\r\n    }\r\n\r\n    const field = fieldRef.current;\r\n\r\n    // Sync prop-driven flags when they change\r\n    React.useEffect(() => {\r\n        setRequired(requiredProp);\r\n        if (field) {\r\n            field.required = requiredProp;\r\n        }\r\n    }, [requiredProp, field]);\r\n\r\n    React.useEffect(() => {\r\n        setDisabled(disabledProp);\r\n    }, [disabledProp]);\r\n\r\n    React.useEffect(() => {\r\n        setReadOnly(readOnlyProp);\r\n    }, [readOnlyProp]);\r\n\r\n    // Register field with the core\r\n    React.useEffect(() => {\r\n        if (!field) return;\r\n\r\n        form.addField(field);\r\n\r\n        return () => {\r\n            // Remove from registry directly\r\n            const registry = form.inputs as any;\r\n            if (registry && typeof registry.remove === \"function\") {\r\n                registry.remove(field.key);\r\n            }\r\n        };\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [form, field]);\r\n\r\n    // Value setter that wires into form-level change + button control\r\n    function setValue(next: T | undefined, variant: string = \"direct\") {\r\n        const prev = stateRef.current.value as T | undefined;\r\n        if (Object.is(prev, next)) return;\r\n\r\n        const runFormOnChange = () => {\r\n            const props: any = form.props ?? {};\r\n            const fn = props.onChange as\r\n                | ((\r\n                      form: CoreContext<Dict>,\r\n                      current: Field,\r\n                      options: Dict,\r\n                  ) => void)\r\n                | undefined;\r\n\r\n            if (!fn) return;\r\n\r\n            fn(form as any, field, {\r\n                variant,\r\n                value: next,\r\n                previous: prev,\r\n            });\r\n        };\r\n\r\n        const props: any = form.props ?? {};\r\n        const changeBefore = !!props.changeBefore;\r\n\r\n        if (changeBefore) {\r\n            runFormOnChange();\r\n        }\r\n\r\n        stateRef.current.value = next;\r\n        setValueState(next);\r\n\r\n        // Local field-level onChange\r\n        if (field.onChange) {\r\n            field.onChange(next, prev, variant);\r\n        }\r\n\r\n        if (!changeBefore) {\r\n            runFormOnChange();\r\n        }\r\n\r\n        // Let the core adjust the active button’s disabled state\r\n        form.controlButton();\r\n    }\r\n\r\n    function setError(message: string) {\r\n        stateRef.current.error = message;\r\n        setErrorState(message);\r\n    }\r\n\r\n    function setLoading(loading: boolean) {\r\n        stateRef.current.loading = loading;\r\n        setLoadingState(loading);\r\n    }\r\n\r\n    return {\r\n        ref: ref as React.RefObject<HTMLElement>,\r\n        get key() {\r\n            return keyRef.current!;\r\n        },\r\n        value,\r\n        setValue,\r\n        error,\r\n        setError,\r\n        loading,\r\n        setLoading,\r\n        required,\r\n        setRequired,\r\n        disabled,\r\n        setDisabled,\r\n        readOnly,\r\n        setReadOnly,\r\n        name: field.name!,\r\n        bindId: field.bindId!,\r\n        bind: field.bind,\r\n        shared: field.shared,\r\n        groupId: field.groupId,\r\n        alias: field.alias,\r\n        main: field.main,\r\n        ignore: field.ignore,\r\n        get defaultValue() {\r\n            return stateRef.current.original as T | undefined;\r\n        },\r\n        get originalValue() {\r\n            return stateRef.current.original;\r\n        },\r\n        form,\r\n        validate(report?: boolean) {\r\n            return field.validate?.(report);\r\n        },\r\n    };\r\n}\r\n","// src/core/hooks/use-optional-field.ts\r\n// noinspection GrazieInspection\r\nimport * as React from \"react\";\r\nimport {\r\n    useField,\r\n    type UseFieldOptions,\r\n    type UseFieldReturn,\r\n} from \"@/core/hooks/use-field\";\r\nimport type { CoreContext, Dict } from \"@/schema/core\";\r\n\r\n/**\r\n * Optional variant of `useField`.\r\n *\r\n * - If there is a CoreProvider, behaves like `useField`.\r\n * - If not, it becomes a self-managed field (value/error/loading/etc).\r\n */\r\nexport function useOptionalField<T = unknown>(\r\n    options: UseFieldOptions<T>\r\n): UseFieldReturn<T> {\r\n    // Try strict core-bound field first.\r\n    try {\r\n        return useField<T>(options);\r\n    } catch {\r\n        // Fall through to self-managed mode.\r\n    }\r\n\r\n    // --- Self-managed fallback (no CoreProvider) ---\r\n\r\n    if (process.env.NODE_ENV !== \"production\") {\r\n        // eslint-disable-next-line no-console\r\n        console.warn(\r\n            \"[FormPalette] useOptionalField: No CoreProvider found. \" +\r\n            \"Running in self-managed mode.\"\r\n        );\r\n    }\r\n\r\n    const {\r\n        name: rawName,\r\n        bindId: rawBindId,\r\n        bind,\r\n        shared,\r\n        groupId,\r\n        alias,\r\n        main,\r\n        ignore,\r\n        required: requiredProp = false,\r\n        value: valueProp,\r\n        defaultValue,\r\n        disabled: disabledProp = false,\r\n        readOnly: readOnlyProp = false,\r\n        validate,\r\n        getOriginalValue,\r\n        onValueChange,\r\n    } = options;\r\n\r\n    const ref = React.useRef<HTMLElement>(null);\r\n    const [valueState, setValueState] = React.useState<T | undefined>(defaultValue);\r\n\r\n    const isControlled = valueProp !== undefined;\r\n    const value = isControlled ? valueProp : valueState;\r\n\r\n    React.useEffect(() => {\r\n        if (isControlled) {\r\n            setValueState(valueProp);\r\n        }\r\n    }, [isControlled, valueProp]);\r\n\r\n    const [error, setErrorState] = React.useState<string>(\"\");\r\n    const [loading, setLoadingState] = React.useState<boolean>(false);\r\n    const [required, setRequired] = React.useState<boolean>(requiredProp);\r\n    const [disabled, setDisabled] = React.useState<boolean>(disabledProp);\r\n    const [readOnly, setReadOnly] = React.useState<boolean>(readOnlyProp);\r\n\r\n    const originalRef = React.useRef<unknown>(\r\n        getOriginalValue\r\n            ? getOriginalValue(defaultValue as T | undefined)\r\n            : defaultValue\r\n    );\r\n\r\n    const id = React.useId();\r\n\r\n    const keyRef = React.useRef<string>(\"\");\r\n    if (!keyRef.current) {\r\n        if (rawName && rawName.trim()) {\r\n            keyRef.current = `${rawName.trim()}-${id}`;\r\n        } else if (rawBindId && rawBindId.trim()) {\r\n            keyRef.current = `${rawBindId.trim()}-${id}`;\r\n        } else {\r\n            keyRef.current = `field-${Math.random()\r\n                .toString(36)\r\n                .slice(2)}-${id}`;\r\n        }\r\n    }\r\n\r\n    const bindIdRef = React.useRef<string>(\"\");\r\n    if (!bindIdRef.current) {\r\n        bindIdRef.current = (rawBindId && rawBindId.trim()) || keyRef.current;\r\n    }\r\n\r\n    // Keep prop-driven flags in sync\r\n    React.useEffect(() => {\r\n        setRequired(requiredProp);\r\n    }, [requiredProp]);\r\n\r\n    React.useEffect(() => {\r\n        setDisabled(disabledProp);\r\n    }, [disabledProp]);\r\n\r\n    React.useEffect(() => {\r\n        setReadOnly(readOnlyProp);\r\n    }, [readOnlyProp]);\r\n\r\n    function setValue(next: T | undefined, variant: string = \"direct\") {\r\n        const prev = value;\r\n        if (Object.is(prev, next)) return;\r\n\r\n        setValueState(next);\r\n\r\n        if (onValueChange) {\r\n            onValueChange(next as T, prev as T, variant);\r\n        }\r\n    }\r\n\r\n    function setError(message: string) {\r\n        setErrorState(message);\r\n    }\r\n\r\n    function setLoading(next: boolean) {\r\n        setLoadingState(next);\r\n    }\r\n\r\n    function runValidate(report?: boolean): boolean {\r\n        const current = value as T;\r\n        let ok = true;\r\n        let message = \"\";\r\n\r\n        if (\r\n            required &&\r\n            (current === undefined ||\r\n                current === null ||\r\n                (typeof current === \"string\" && current.trim() === \"\") ||\r\n                (Array.isArray(current) && current.length === 0))\r\n        ) {\r\n            ok = false;\r\n            message = \"This field is required.\";\r\n        } else if (validate) {\r\n            const result = validate(current, undefined, undefined, !!report);\r\n            if (typeof result === \"string\") {\r\n                ok = false;\r\n                message = result;\r\n            } else if (!result) {\r\n                ok = false;\r\n            }\r\n        }\r\n\r\n        if (report) {\r\n            setErrorState(ok ? \"\" : message);\r\n        }\r\n\r\n        return ok;\r\n    }\r\n\r\n    // Minimal stub so callers can safely access `field.form`\r\n    const dummyForm = {} as CoreContext<Dict>;\r\n\r\n    return {\r\n        ref: ref as React.RefObject<HTMLElement>,\r\n        get key() {\r\n            return keyRef.current;\r\n        },\r\n        value,\r\n        setValue,\r\n        error,\r\n        setError,\r\n        loading,\r\n        setLoading,\r\n        required,\r\n        setRequired,\r\n        disabled,\r\n        setDisabled,\r\n        readOnly,\r\n        setReadOnly,\r\n        name: rawName?.trim() ?? \"\",\r\n        bindId: bindIdRef.current,\r\n        bind,\r\n        shared,\r\n        groupId,\r\n        alias,\r\n        main,\r\n        ignore,\r\n        get defaultValue() {\r\n            return originalRef.current as T | undefined;\r\n        },\r\n        get originalValue() {\r\n            return originalRef.current;\r\n        },\r\n        form: dummyForm,\r\n        validate(report?: boolean) {\r\n            return runValidate(report);\r\n        },\r\n    };\r\n}","// src/input/input-field.tsx\r\n// noinspection JSUnusedLocalSymbols,SpellCheckingInspection,DuplicatedCode\r\n\r\nimport * as React from \"react\";\r\n\r\nimport type {\r\n    InputFieldClassNameProps,\r\n    InputFieldClassNames,\r\n    InputFieldProps,\r\n} from \"@/input/input-props\";\r\nimport type {\r\n    FieldLayoutConfig,\r\n    LayoutResolveContext,\r\n    SlotPlacement,\r\n    ValidateResult,\r\n} from \"@/schema/input-field\";\r\nimport type { VariantKey, VariantValueFor } from \"@/schema/variant\";\r\nimport { getVariant } from \"@/variants\";\r\n\r\nimport {\r\n    Field as UiField,\r\n    FieldContent,\r\n    FieldDescription,\r\n    FieldError,\r\n    FieldGroup,\r\n    FieldLabel,\r\n    FieldTitle,\r\n} from \"@/presets/ui/field\";\r\nimport { ChangeDetail } from \"@/variants/shared\";\r\nimport { buildLayoutGraph, type HelperSlot } from \"@/input/input-layout-graph\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { useOptionalField } from \"@/core\";\r\n\r\n/**\r\n * Normalise a ValidateResult into an array of error messages.\r\n */\r\nfunction normalizeValidateResult(result: ValidateResult): string[] {\r\n    if (result === undefined || result === null || result === true) return [];\r\n    if (result === false) return [\"Invalid value.\"];\r\n    if (typeof result === \"string\") return result ? [result] : [];\r\n    if (Array.isArray(result)) return result.filter(Boolean);\r\n    return [];\r\n}\r\n\r\n/**\r\n * Build the layout for this field using:\r\n * - variant defaults\r\n * - host overrides\r\n * - optional variant-level resolveLayout()\r\n */\r\nfunction resolveLayoutForField(\r\n    defaults: FieldLayoutConfig | undefined,\r\n    overrides: Partial<FieldLayoutConfig>,\r\n    props: unknown,\r\n    variantResolve?: (ctx: LayoutResolveContext) => FieldLayoutConfig,\r\n): FieldLayoutConfig {\r\n    const base: FieldLayoutConfig = defaults ? { ...defaults } : {};\r\n\r\n    if (variantResolve) {\r\n        return variantResolve({\r\n            defaults: base,\r\n            overrides,\r\n            props,\r\n        });\r\n    }\r\n\r\n    // Fallback: shallow merge defaults + overrides\r\n    return {\r\n        ...base,\r\n        ...overrides,\r\n    };\r\n}\r\n\r\n/**\r\n * Render a single helper slot using the Shadcn field primitives.\r\n */\r\nfunction renderHelperSlot(\r\n    root: \"label\" | \"input\",\r\n    slot: HelperSlot,\r\n    classes: any,\r\n): React.ReactNode {\r\n    const placement: SlotPlacement = slot.placement;\r\n\r\n    switch (slot.id) {\r\n        case \"sublabel\":\r\n            return (\r\n                <FieldDescription\r\n                    key={`sublabel-${placement}-${root}`}\r\n                    className={cn(\r\n                        \"text-xs text-muted-foreground\",\r\n                        classes?.sublabel,\r\n                    )}\r\n                    data-slot={`sublabel-${placement}`}\r\n                >\r\n                    {slot.content}\r\n                </FieldDescription>\r\n            );\r\n\r\n        case \"description\":\r\n            return (\r\n                <FieldDescription\r\n                    key={`description-${placement}-${root}`}\r\n                    className={cn(\r\n                        \"text-xs text-muted-foreground\",\r\n                        classes?.description,\r\n                    )}\r\n                    data-slot={`description-${placement}`}\r\n                >\r\n                    {slot.content}\r\n                </FieldDescription>\r\n            );\r\n\r\n        case \"helpText\":\r\n            return (\r\n                <FieldDescription\r\n                    key={`helpText-${placement}-${root}`}\r\n                    className={cn(\r\n                        \"text-xs text-muted-foreground\",\r\n                        classes?.helpText,\r\n                    )}\r\n                    data-slot={`helptext-${placement}`}\r\n                >\r\n                    {slot.content}\r\n                </FieldDescription>\r\n            );\r\n\r\n        case \"errorText\":\r\n            return (\r\n                <FieldError\r\n                    key={`error-${placement}-${root}`}\r\n                    className={cn(\"text-xs text-destructive\", classes?.error)}\r\n                    data-slot={`error-${placement}`}\r\n                >\r\n                    {slot.content}\r\n                </FieldError>\r\n            );\r\n\r\n        case \"tags\":\r\n            return (\r\n                <div\r\n                    key={`tags-${placement}-${root}`}\r\n                    className={cn(\"flex items-center gap-1\", classes?.tags)}\r\n                    data-slot={`tags-${placement}`}\r\n                >\r\n                    {slot.content}\r\n                </div>\r\n            );\r\n\r\n        default:\r\n            return null;\r\n    }\r\n}\r\n\r\nexport function getClasses(\r\n    props: InputFieldClassNameProps & {\r\n        className?: string;\r\n        classes?: Partial<InputFieldClassNames>;\r\n    },\r\n): InputFieldClassNames {\r\n    const legacy = props.classes ?? {};\r\n\r\n    return {\r\n        root: cn(legacy.root, props.className) || undefined,\r\n\r\n        labelRow: cn(legacy.labelRow, props.labelRowClassName) || undefined,\r\n        inlineRow: cn(legacy.inlineRow, props.inlineRowClassName) || undefined,\r\n\r\n        label: cn(legacy.label, props.labelClassName) || undefined,\r\n        sublabel: cn(legacy.sublabel, props.sublabelClassName) || undefined,\r\n        description:\r\n            cn(legacy.description, props.descriptionClassName) || undefined,\r\n        helpText: cn(legacy.helpText, props.helpTextClassName) || undefined,\r\n        error: cn(legacy.error, props.errorClassName) || undefined,\r\n\r\n        group: cn(legacy.group, props.groupClassName) || undefined,\r\n        content: cn(legacy.content, props.contentClassName) || undefined,\r\n        variant: cn(legacy.variant, props.variantClassName) || undefined,\r\n\r\n        inlineInputColumn:\r\n            cn(legacy.inlineInputColumn, props.inlineInputColumnClassName) ||\r\n            undefined,\r\n        inlineLabelColumn:\r\n            cn(legacy.inlineLabelColumn, props.inlineLabelColumnClassName) ||\r\n            undefined,\r\n\r\n        required: cn(legacy.required, props.requiredClassName) || undefined,\r\n        tag: cn(legacy.tag, props.tagClassName) || undefined,\r\n    };\r\n}\r\n\r\n/**\r\n * Public InputField component.\r\n *\r\n * - Uses `useField` to register a Field and manage value/error/loading.\r\n * - Delegates rendering to the chosen variant's `Variant` component.\r\n * - Uses Shadcn's Field primitives for structure.\r\n * - Lets variants influence layout via defaults + optional resolveLayout().\r\n * - Uses a layout graph (buildLayoutGraph) + getSlotsFor().render(...) to\r\n *   position helpers (sublabel, description, helpText, error, tags) relative to\r\n *   \"label\" vs \"input\" roots without empty wrapper divs.\r\n */\r\nexport function InputField<K extends VariantKey = VariantKey>(\r\n    props: InputFieldProps<K>,\r\n) {\r\n    const {\r\n        variant,\r\n        onSubmit,\r\n\r\n        // Field identity / wiring\r\n        name,\r\n        bind,\r\n        shared,\r\n        groupId,\r\n        alias,\r\n        main,\r\n        ignore,\r\n        required,\r\n        defaultValue,\r\n\r\n        // Chrome\r\n        label,\r\n        sublabel,\r\n        description,\r\n        helpText,\r\n        errorText,\r\n        autoOff,\r\n\r\n        // Container + tags\r\n        contain,\r\n        tags,\r\n        tagPlacement,\r\n\r\n        // Layout overrides\r\n        labelPlacement,\r\n        sublabelPlacement,\r\n        descriptionPlacement,\r\n        helpTextPlacement,\r\n        errorTextPlacement,\r\n        inline,\r\n        fullWidth,\r\n        size,\r\n        density,\r\n\r\n        value,\r\n\r\n        // Validation hook\r\n        onValidate,\r\n        onChange,\r\n\r\n        // Field wrapper props\r\n        className,\r\n        style,\r\n        classes: _depreciated,\r\n\r\n        // Everything else → forwarded to variant\r\n        ...rest\r\n    } = props as InputFieldProps & {\r\n        className?: string;\r\n        style?: React.CSSProperties;\r\n    };\r\n\r\n    const module = getVariant(variant);\r\n\r\n    if (!module) {\r\n        if (process.env.NODE_ENV !== \"production\") {\r\n            // eslint-disable-next-line no-console\r\n            console.warn(\r\n                `[form-palette] InputField: variant \"${String(\r\n                    variant,\r\n                )}\" is not registered.`,\r\n            );\r\n        }\r\n        return null;\r\n    }\r\n\r\n    const classes = getClasses(props);\r\n\r\n    type TValue = VariantValueFor<K>;\r\n\r\n    // Compute layout: defaults + host overrides + optional variant resolver\r\n    const layout = React.useMemo(() => {\r\n        const defaultsLayout = module.defaults?.layout;\r\n        const overrides: Partial<FieldLayoutConfig> = {};\r\n\r\n        if (labelPlacement !== undefined) {\r\n            overrides.labelPlacement = labelPlacement;\r\n        }\r\n        if (sublabelPlacement !== undefined) {\r\n            overrides.sublabelPlacement = sublabelPlacement;\r\n        }\r\n        if (descriptionPlacement !== undefined) {\r\n            overrides.descriptionPlacement = descriptionPlacement;\r\n        }\r\n        if (helpTextPlacement !== undefined) {\r\n            overrides.helpTextPlacement = helpTextPlacement;\r\n        }\r\n        if (errorTextPlacement !== undefined) {\r\n            overrides.errorTextPlacement = errorTextPlacement;\r\n        }\r\n        if (tagPlacement !== undefined) {\r\n            overrides.tagPlacement = tagPlacement;\r\n        }\r\n        if (inline !== undefined) {\r\n            overrides.inline = inline;\r\n        }\r\n        if (fullWidth !== undefined) {\r\n            overrides.fullWidth = fullWidth;\r\n        }\r\n\r\n        return resolveLayoutForField(\r\n            defaultsLayout,\r\n            overrides,\r\n            props,\r\n            module.resolveLayout as any,\r\n        );\r\n    }, [\r\n        module,\r\n        labelPlacement,\r\n        sublabelPlacement,\r\n        descriptionPlacement,\r\n        helpTextPlacement,\r\n        errorTextPlacement,\r\n        tagPlacement,\r\n        inline,\r\n        fullWidth,\r\n        props,\r\n    ]);\r\n\r\n    const effectiveSize =\r\n        size ?? module.defaults?.layout?.defaultSize ?? undefined;\r\n    const effectiveDensity =\r\n        density ?? module.defaults?.layout?.defaultDensity ?? undefined;\r\n\r\n    /**\r\n     * Validation callback used by the field hook.\r\n     *\r\n     * It combines:\r\n     * - variant-level validation (module.validate)\r\n     * - per-field validation (props.onValidate)\r\n     */\r\n    const validate = React.useCallback(\r\n        (\r\n            value: TValue | undefined,\r\n            field: any,\r\n            form: any,\r\n            _report: boolean,\r\n        ): boolean | string => {\r\n            const messages: string[] = [];\r\n\r\n            if (module.validate) {\r\n                const res = module.validate(value, {\r\n                    required: !!required,\r\n                    props: props as any,\r\n                    field: field as any,\r\n                    form: form as any,\r\n                });\r\n                messages.push(...normalizeValidateResult(res));\r\n            }\r\n\r\n            if (onValidate) {\r\n                const res = onValidate(value as any, field as any, form as any);\r\n                messages.push(...normalizeValidateResult(res));\r\n            }\r\n\r\n            if (!messages.length) return true;\r\n            return messages[0] ?? \"Invalid value.\";\r\n        },\r\n        [module, required, onValidate, props],\r\n    );\r\n\r\n    // Hook into the core: register field, track value/error/loading\r\n    const field = useOptionalField<TValue>({\r\n        name,\r\n        bind,\r\n        shared,\r\n        groupId,\r\n        alias,\r\n        main,\r\n        ignore,\r\n        onSubmit,\r\n        variant,\r\n        required,\r\n        value: value as TValue | undefined,\r\n        defaultValue: defaultValue as TValue | undefined,\r\n        validate,\r\n    } as any);\r\n\r\n    const { value: fieldValue, setValue, error, ref, key } = field;\r\n\r\n    const Variant = module.Variant as React.ComponentType<any>;\r\n    const visualError = (errorText ?? error) || \"\";\r\n\r\n    /**\r\n     * Central change handler for this field.\r\n     *\r\n     * Flow:\r\n     *   Variant.onValue(next, detail) →\r\n     *   InputField.handleValueChange →\r\n     *   props.onChange?.({ value, detail, event, preventDefault }) →\r\n     *   (if not prevented) setValue(final)\r\n     */\r\n    const handleValueChange = React.useCallback(\r\n        (next: TValue | undefined, detail?: ChangeDetail) => {\r\n            let finalValue = next;\r\n            let defaultPrevented = false;\r\n\r\n            if (onChange) {\r\n                const e = {\r\n                    value: next,\r\n                    preventDefault() {\r\n                        defaultPrevented = true;\r\n                    },\r\n                    get isDefaultPrevented() {\r\n                        return defaultPrevented;\r\n                    },\r\n                    event: detail?.nativeEvent as\r\n                        | React.SyntheticEvent\r\n                        | undefined,\r\n                    detail: detail as ChangeDetail,\r\n                };\r\n\r\n                onChange(e);\r\n\r\n                // If the handler returns a value, use it instead of `next`.\r\n                finalValue = e.value;\r\n                if (defaultPrevented) {\r\n                    // Host took control and blocked the core update.\r\n                    return;\r\n                }\r\n            }\r\n\r\n            // NOTE: Second argument is an optional \"source\" tag.\r\n            // If your setValue only accepts one arg, drop `String(variant)`.\r\n            (setValue as any)(finalValue, String(variant));\r\n        },\r\n        [onChange, setValue, variant],\r\n    );\r\n\r\n    const disabledProp = (rest as any).disabled;\r\n    const readOnlyProp = (rest as any).readOnly;\r\n\r\n    // Convenience shorthands for layout\r\n    const lp = layout.labelPlacement;\r\n    const sp = layout.sublabelPlacement;\r\n    const dp = layout.descriptionPlacement;\r\n    const hp = layout.helpTextPlacement;\r\n    const ep = layout.errorTextPlacement;\r\n    const tp = layout.tagPlacement;\r\n\r\n    const isInline = !!layout.inline;\r\n    const isCompactInline = isInline && layout.fullWidth === false;\r\n\r\n    const rootClassName = cn(\r\n        \"gap-1\",\r\n        contain && !inline && \"rounded-xl border border-border bg-background\",\r\n        classes?.root,\r\n        className,\r\n    );\r\n\r\n    // Variant-level className merge (host + classes.variant)\r\n    const hostVariantClass = (rest as any).className as string | undefined;\r\n\r\n    const mergedVariantClass =\r\n        cn(\r\n            // In compact inline mode, force the control to size to its content\r\n            isCompactInline && \"inline-flex w-auto\",\r\n            hostVariantClass,\r\n            classes?.variant,\r\n        ) || undefined;\r\n\r\n    // Build tags content cluster (individual pills)\r\n    const tagsContent = React.useMemo(() => {\r\n        const items = (tags ?? []) as any[];\r\n\r\n        if (!items.length) return null;\r\n\r\n        return (\r\n            <>\r\n                {items.map((tag, index) => (\r\n                    <span\r\n                        key={index}\r\n                        onClick={tag.onClick}\r\n                        className={cn(\r\n                            \"inline-flex items-center gap-1 rounded-full px-3 py-1 text-xs font-medium\",\r\n                            tag.className,\r\n                            classes?.tag,\r\n                        )}\r\n                        style={{\r\n                            color: tag.color,\r\n                            backgroundColor: tag.bgColor,\r\n                        }}\r\n                    >\r\n                        {tag.icon && (\r\n                            <span className=\"shrink-0\">{tag.icon}</span>\r\n                        )}\r\n                        <span>{tag.label}</span>\r\n                    </span>\r\n                ))}\r\n            </>\r\n        );\r\n    }, [tags, classes?.tag]);\r\n\r\n    // Build helper layout graph for this field\r\n    const graph = React.useMemo(\r\n        () =>\r\n            buildLayoutGraph({\r\n                layout,\r\n                sublabel,\r\n                description,\r\n                helpText,\r\n                errorText: visualError || undefined,\r\n                tags: tagsContent || undefined,\r\n            }),\r\n        [layout, sublabel, description, helpText, visualError, tagsContent],\r\n    );\r\n\r\n    // Detect whether there are any label-root slots so we don't render empty rows/spacing\r\n    const hasLabelSlotsAt = (placement: SlotPlacement): boolean => {\r\n        let found = false;\r\n\r\n        graph.getSlotsFor(\"label\", placement).render((slots: HelperSlot[]) => {\r\n            if (slots.length > 0) {\r\n                found = true;\r\n            }\r\n            return null;\r\n        });\r\n\r\n        return found;\r\n    };\r\n\r\n    const hasLabelLeftSlots = hasLabelSlotsAt(\"left\");\r\n    const hasLabelRightSlots = hasLabelSlotsAt(\"right\");\r\n    const hasLabelAboveSlots = hasLabelSlotsAt(\"above\");\r\n    const hasLabelBelowSlots = hasLabelSlotsAt(\"below\");\r\n\r\n    // Any content that belongs to the label *block* at all\r\n    const hasAnyLabelBlockContent =\r\n        !!label ||\r\n        hasLabelLeftSlots ||\r\n        hasLabelRightSlots ||\r\n        hasLabelAboveSlots ||\r\n        hasLabelBelowSlots;\r\n\r\n    // Content that specifically lives inside the label \"row\"\r\n    const hasLabelRowContent =\r\n        !!label || hasLabelLeftSlots || hasLabelRightSlots;\r\n\r\n    // ─────────────────────────────────────────────────────\r\n    // INLINE LAYOUT\r\n    // ─────────────────────────────────────────────────────\r\n\r\n    // In inline mode, label can effectively be left / right / hidden.\r\n    const inlineLabelSide: \"left\" | \"right\" | \"hidden\" =\r\n        lp === \"right\" ? \"right\" : lp === \"hidden\" ? \"hidden\" : \"left\";\r\n\r\n    // Width semantics for inline:\r\n    // - compact inline (fullWidth === false) → input column is content-sized\r\n    // - normal inline                     → input grows, label minimal\r\n    const inlineInputColClass = cn(\r\n        \"flex flex-col\",\r\n        isCompactInline ? \"flex-none\" : \"flex-1 min-w-0\",\r\n        classes?.inlineInputColumn,\r\n    );\r\n\r\n    const inlineLabelColClass = cn(\r\n        isCompactInline ? \"flex-1 min-w-0\" : \"min-w-0\",\r\n        classes?.inlineLabelColumn,\r\n    );\r\n\r\n    const inlineFieldGroupClass = isCompactInline\r\n        ? cn(\r\n              // compact, content-sized group\r\n              \"inline-flex w-auto\",\r\n              // kill the Shadcn container on this group in compact-inline mode\r\n              \"[container-type:normal]\",\r\n              \"[container-name:none]\",\r\n              classes?.group,\r\n          )\r\n        : (classes?.group ?? undefined);\r\n\r\n    const inlineFieldContentClass = isCompactInline\r\n        ? cn(\"flex-none w-auto\", classes?.content)\r\n        : cn(\"w-full\", classes?.content);\r\n\r\n    const inlineInputColumn = (\r\n        <div className={inlineInputColClass}>\r\n            {/* Above input (input root) */}\r\n            {graph\r\n                .getSlotsFor(\"input\", \"above\")\r\n                .render((slots) =>\r\n                    slots.map((slot) =>\r\n                        renderHelperSlot(\"input\", slot, classes),\r\n                    ),\r\n                )}\r\n\r\n            <FieldGroup className={inlineFieldGroupClass}>\r\n                <FieldContent className={inlineFieldContentClass}>\r\n                    <Variant\r\n                        {...(rest as any)}\r\n                        name={autoOff ? undefined : name}\r\n                        id={key}\r\n                        value={fieldValue}\r\n                        onValue={handleValueChange}\r\n                        error={error}\r\n                        required={required}\r\n                        disabled={disabledProp}\r\n                        readOnly={readOnlyProp}\r\n                        size={effectiveSize}\r\n                        density={effectiveDensity}\r\n                        className={mergedVariantClass}\r\n                    />\r\n                </FieldContent>\r\n            </FieldGroup>\r\n\r\n            {/* Below input (input root) */}\r\n            {graph\r\n                .getSlotsFor(\"input\", \"below\")\r\n                .render((slots) =>\r\n                    slots.map((slot) =>\r\n                        renderHelperSlot(\"input\", slot, classes),\r\n                    ),\r\n                )}\r\n        </div>\r\n    );\r\n\r\n    const inlineLabelColumn =\r\n        inlineLabelSide === \"hidden\" || !hasAnyLabelBlockContent ? null : (\r\n            <div className={cn(\"flex flex-col gap-0\", inlineLabelColClass)}>\r\n                {/* Above label (label root) */}\r\n                {graph\r\n                    .getSlotsFor(\"label\", \"above\")\r\n                    .render((slots) =>\r\n                        slots.map((slot) =>\r\n                            renderHelperSlot(\"label\", slot, classes),\r\n                        ),\r\n                    )}\r\n\r\n                {hasLabelRowContent && (\r\n                    <div\r\n                        className={cn(\r\n                            \"flex items-baseline justify-between gap-1\",\r\n                            classes?.labelRow,\r\n                        )}\r\n                        data-slot=\"label-row\"\r\n                    >\r\n                        {/* Left-of-label helpers (label root) */}\r\n                        {graph.getSlotsFor(\"label\", \"left\").render((slots) => (\r\n                            <div className=\"flex items-baseline gap-1\">\r\n                                {slots.map((slot) =>\r\n                                    renderHelperSlot(\"label\", slot, classes),\r\n                                )}\r\n                            </div>\r\n                        ))}\r\n\r\n                        {label && (\r\n                            <FieldLabel\r\n                                htmlFor={key}\r\n                                className={cn(\r\n                                    \"text-sm font-medium text-foreground\",\r\n                                    classes?.label,\r\n                                )}\r\n                            >\r\n                                <FieldTitle>\r\n                                    {label}{\" \"}\r\n                                    {required ? (\r\n                                        <span\r\n                                            className={cn(\r\n                                                \"text-destructive\",\r\n                                                classes?.required,\r\n                                            )}\r\n                                        >\r\n                                            *\r\n                                        </span>\r\n                                    ) : (\r\n                                        \"\"\r\n                                    )}\r\n                                </FieldTitle>\r\n                            </FieldLabel>\r\n                        )}\r\n\r\n                        {/* Right-of-label helpers (label root) */}\r\n                        {graph.getSlotsFor(\"label\", \"right\").render((slots) => (\r\n                            <div className=\"flex items-baseline gap-1\">\r\n                                {slots.map((slot) =>\r\n                                    renderHelperSlot(\"label\", slot, classes),\r\n                                )}\r\n                            </div>\r\n                        ))}\r\n                    </div>\r\n                )}\r\n\r\n                {/* Below label (label root) */}\r\n                {graph\r\n                    .getSlotsFor(\"label\", \"below\")\r\n                    .render((slots) =>\r\n                        slots.map((slot) =>\r\n                            renderHelperSlot(\"label\", slot, classes),\r\n                        ),\r\n                    )}\r\n            </div>\r\n        );\r\n\r\n    const inlineRowClassName = cn(\r\n        \"flex gap-2\",\r\n        hasLabelAboveSlots || hasLabelBelowSlots\r\n            ? \"items-start\"\r\n            : \"items-center\",\r\n        classes?.inlineRow,\r\n    );\r\n\r\n    // ─────────────────────────────────────────────────────\r\n    // STACKED LAYOUT\r\n    // ─────────────────────────────────────────────────────\r\n\r\n    const hasStackedLabelBlock = lp !== \"hidden\" && hasAnyLabelBlockContent;\r\n\r\n    const stackedGroupClassName = cn(\r\n        hasStackedLabelBlock && hasLabelRowContent && \"mt-0.5\",\r\n        classes?.group,\r\n    );\r\n\r\n    const Element = contain ? \"div\" : React.Fragment;\r\n    const attrs = (a: \"l\" | \"i\" = \"l\") =>\r\n        contain\r\n            ? a === \"l\"\r\n                ? { className: \"p-4 border-b border-input\" }\r\n                : { className: \"px-4 pt-2 pb-4\" }\r\n            : {};\r\n\r\n    return (\r\n        <UiField\r\n            className={rootClassName}\r\n            ref={ref as any}\r\n            style={style}\r\n            data-variant={String(variant)}\r\n            data-label-placement={lp ?? undefined}\r\n            data-sublabel-placement={sp ?? undefined}\r\n            data-description-placement={dp ?? undefined}\r\n            data-helptext-placement={hp ?? undefined}\r\n            data-errortext-placement={ep ?? undefined}\r\n            data-tag-placement={tp ?? undefined}\r\n            data-inline={isInline ? \"true\" : \"false\"}\r\n            data-fullwidth={layout.fullWidth ? \"true\" : \"false\"}\r\n        >\r\n            {isInline ? (\r\n                // INLINE MODE: label + control on the same row\r\n                <div className={inlineRowClassName} data-slot=\"inline-row\">\r\n                    {inlineLabelSide === \"right\" ? (\r\n                        <>\r\n                            {inlineInputColumn}\r\n                            {inlineLabelColumn}\r\n                        </>\r\n                    ) : inlineLabelSide === \"hidden\" ? (\r\n                        <>{inlineInputColumn}</>\r\n                    ) : (\r\n                        <>\r\n                            {inlineLabelColumn}\r\n                            {inlineInputColumn}\r\n                        </>\r\n                    )}\r\n                </div>\r\n            ) : (\r\n                // STACKED MODE\r\n                <>\r\n                    {hasStackedLabelBlock && (\r\n                        <Element {...attrs()}>\r\n                            {/* Above label (label root) */}\r\n                            {graph\r\n                                .getSlotsFor(\"label\", \"above\")\r\n                                .render((slots) =>\r\n                                    slots.map((slot) =>\r\n                                        renderHelperSlot(\r\n                                            \"label\",\r\n                                            slot,\r\n                                            classes,\r\n                                        ),\r\n                                    ),\r\n                                )}\r\n\r\n                            {hasLabelRowContent && (\r\n                                <div\r\n                                    className={cn(\r\n                                        \"flex items-baseline justify-between gap-1\",\r\n                                        classes?.labelRow,\r\n                                    )}\r\n                                    data-slot=\"label-row\"\r\n                                >\r\n                                    {/* Left-of-label helpers (label root) */}\r\n                                    {graph\r\n                                        .getSlotsFor(\"label\", \"left\")\r\n                                        .render((slots) => (\r\n                                            <div className=\"flex items-baseline gap-1\">\r\n                                                {slots.map((slot) =>\r\n                                                    renderHelperSlot(\r\n                                                        \"label\",\r\n                                                        slot,\r\n                                                        classes,\r\n                                                    ),\r\n                                                )}\r\n                                            </div>\r\n                                        ))}\r\n\r\n                                    {label && (\r\n                                        <FieldLabel\r\n                                            htmlFor={key}\r\n                                            className={cn(\r\n                                                \"text-sm font-medium text-foreground\",\r\n                                                classes?.label,\r\n                                            )}\r\n                                        >\r\n                                            <FieldTitle>\r\n                                                {label}{\" \"}\r\n                                                {required ? (\r\n                                                    <span\r\n                                                        className={cn(\r\n                                                            \"text-destructive\",\r\n                                                            classes?.required,\r\n                                                        )}\r\n                                                    >\r\n                                                        *\r\n                                                    </span>\r\n                                                ) : (\r\n                                                    \"\"\r\n                                                )}\r\n                                            </FieldTitle>\r\n                                        </FieldLabel>\r\n                                    )}\r\n\r\n                                    {/* Right-of-label helpers (label root) */}\r\n                                    {graph\r\n                                        .getSlotsFor(\"label\", \"right\")\r\n                                        .render((slots) => (\r\n                                            <div className=\"flex items-baseline gap-1\">\r\n                                                {slots.map((slot) =>\r\n                                                    renderHelperSlot(\r\n                                                        \"label\",\r\n                                                        slot,\r\n                                                        classes,\r\n                                                    ),\r\n                                                )}\r\n                                            </div>\r\n                                        ))}\r\n                                </div>\r\n                            )}\r\n\r\n                            {/* Below label (label root) */}\r\n                            {graph\r\n                                .getSlotsFor(\"label\", \"below\")\r\n                                .render((slots) =>\r\n                                    slots.map((slot) =>\r\n                                        renderHelperSlot(\r\n                                            \"label\",\r\n                                            slot,\r\n                                            classes,\r\n                                        ),\r\n                                    ),\r\n                                )}\r\n                        </Element>\r\n                    )}\r\n\r\n                    <Element {...attrs(\"i\")}>\r\n                        {/* Above input (input root) */}\r\n                        {graph\r\n                            .getSlotsFor(\"input\", \"above\")\r\n                            .render((slots) =>\r\n                                slots.map((slot) =>\r\n                                    renderHelperSlot(\"input\", slot, classes),\r\n                                ),\r\n                            )}\r\n\r\n                        <FieldGroup className={stackedGroupClassName}>\r\n                            <FieldContent\r\n                                className={cn(\"w-full\", classes?.content)}\r\n                            >\r\n                                <Variant\r\n                                    {...(rest as any)}\r\n                                    name={autoOff ? undefined : name}\r\n                                    id={key}\r\n                                    value={fieldValue}\r\n                                    onValue={handleValueChange}\r\n                                    error={error}\r\n                                    required={required}\r\n                                    disabled={disabledProp}\r\n                                    readOnly={readOnlyProp}\r\n                                    size={effectiveSize}\r\n                                    density={effectiveDensity}\r\n                                    className={mergedVariantClass}\r\n                                />\r\n                            </FieldContent>\r\n                        </FieldGroup>\r\n\r\n                        {/* Below input (input root) */}\r\n                        {graph\r\n                            .getSlotsFor(\"input\", \"below\")\r\n                            .render((slots) =>\r\n                                slots.map((slot) =>\r\n                                    renderHelperSlot(\"input\", slot, classes),\r\n                                ),\r\n                            )}\r\n                    </Element>\r\n                </>\r\n            )}\r\n        </UiField>\r\n    );\r\n}\r\n","// packages/form-palette/src/presets/lister/ui/filter-ui.tsx\r\n\r\nimport * as React from \"react\";\r\nimport { Button } from \"@/presets/ui/button\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/presets/ui/popover\";\r\nimport { InputField } from \"@/input/input-field\";\r\n\r\nimport { Check, ChevronRight, Filter, X } from \"lucide-react\";\r\n\r\nimport type {\r\n    ListerFilterCtx,\r\n    ListerFilterOption,\r\n    ListerSessionId,\r\n    ListerStoreState,\r\n} from \"@/presets/lister/types\";\r\n\r\nimport { useLister } from \"@/presets/lister\";\r\nimport type { VariantKey, VariantPropsFor } from \"@/schema/variant\";\r\n\r\ntype AnyPresetMap = any;\r\n\r\ntype FilterValue = string | number;\r\n\r\nfunction asArray<T>(v: any): T[] {\r\n    if (v == null) return [];\r\n    return Array.isArray(v) ? (v as T[]) : ([v] as T[]);\r\n}\r\n\r\nfunction isEmptyValue(v: any) {\r\n    if (v == null) return true;\r\n    if (typeof v === \"string\") return v.trim() === \"\";\r\n    if (Array.isArray(v)) return v.length === 0;\r\n    return false;\r\n}\r\n\r\nfunction extractValueFromInputFieldEvent(e: any) {\r\n    if (e && typeof e === \"object\" && \"value\" in e) return (e as any).value;\r\n    return e;\r\n}\r\n\r\n/**\r\n * Option id used by runtime applyFilterOption:\r\n * prefer explicit opt.id; fallback for legacy shapes.\r\n */\r\nfunction getOptionId(opt: any): FilterValue {\r\n    if (opt?.id != null) return opt.id as FilterValue;\r\n    if (opt?.value != null) return opt.value as FilterValue;\r\n    return String(opt?.label ?? \"node\");\r\n}\r\n\r\nexport function ListerFiltersButton<TFilters>(props: {\r\n    id: ListerSessionId;\r\n\r\n    /** kept for compatibility, but we use live state from useLister() */\r\n    store: ListerStoreState;\r\n\r\n    icon?: React.ReactNode;\r\n    buttonProps?: Partial<React.ComponentProps<typeof Button>>;\r\n}) {\r\n    const { id } = props;\r\n\r\n    const { actions, state } = useLister<AnyPresetMap>();\r\n\r\n    const session = (state.sessions as any)[id] as any;\r\n\r\n    const spec = session?.filtersSpec as\r\n        | undefined\r\n        | { options: Array<ListerFilterOption<TFilters>> };\r\n\r\n    const options = (spec?.options ?? []) as Array<\r\n        ListerFilterOption<TFilters>\r\n    >;\r\n    const hasFilters = options.length > 0;\r\n\r\n    if (!hasFilters) return null;\r\n\r\n    const ctx = actions.getFilterCtx<TFilters>(id);\r\n\r\n    const [openGroups, setOpenGroups] = React.useState<Record<string, boolean>>(\r\n        {},\r\n    );\r\n\r\n    const toggleGroup = (key: string) => {\r\n        setOpenGroups((m) => ({ ...m, [key]: !m[key] }));\r\n    };\r\n\r\n    const selectedIds = asArray<FilterValue>(session?.selectedFilterValues);\r\n\r\n    const appliedCount = React.useMemo(() => {\r\n        const patch = (session?.filtersPatch ?? {}) as Record<string, any>;\r\n        return Object.keys(patch).length;\r\n    }, [session?.filtersPatch]);\r\n\r\n    return (\r\n        <Popover>\r\n            <PopoverTrigger asChild>\r\n                <Button\r\n                    type=\"button\"\r\n                    variant=\"link\"\r\n                    title=\"Filters\"\r\n                    className=\"relative px-1! pr-2! cursor-pointer\"\r\n                    {...(props.buttonProps as any)}\r\n                >\r\n                    {props.icon ?? <Filter className=\"size-3\" />}\r\n\r\n                    {appliedCount > 0 ? (\r\n                        <span\r\n                            className={[\r\n                                \"absolute right-1 top-1\",\r\n                                \"min-w-3 h-3 px-1\",\r\n                                \"rounded-full\",\r\n                                \"bg-primary text-primary-foreground\",\r\n                                \"text-[9px] leading-4\",\r\n                                \"flex items-center justify-center\",\r\n                            ].join(\" \")}\r\n                            aria-label={`${appliedCount} filters applied`}\r\n                        >\r\n                            {appliedCount}\r\n                        </span>\r\n                    ) : null}\r\n                </Button>\r\n            </PopoverTrigger>\r\n\r\n            <PopoverContent align=\"end\" className=\"w-90 p-3\">\r\n                <div className=\"flex items-center justify-between\">\r\n                    <div className=\"text-sm font-medium\">Filters</div>\r\n                    <div className=\"text-xs opacity-60\">\r\n                        Tap outside to close\r\n                    </div>\r\n                </div>\r\n\r\n                <div className=\"mt-3 space-y-1\">\r\n                    {options.map((opt) => {\r\n                        const nodeId = getOptionId(opt as any);\r\n                        return (\r\n                            <FilterNode\r\n                                key={String(nodeId)}\r\n                                nodeId={nodeId}\r\n                                option={opt}\r\n                                ctx={ctx}\r\n                                selectedIds={selectedIds}\r\n                                openGroups={openGroups}\r\n                                onToggleGroup={toggleGroup}\r\n                                onApply={(optionId) =>\r\n                                    actions.applyFilterOption(id, optionId)\r\n                                }\r\n                            />\r\n                        );\r\n                    })}\r\n                </div>\r\n\r\n                <div className=\"mt-3 flex items-center justify-end gap-2\">\r\n                    <Button\r\n                        type=\"button\"\r\n                        size=\"sm\"\r\n                        variant=\"ghost\"\r\n                        onClick={() => ctx.clear()}\r\n                        title=\"Clear filter values\"\r\n                    >\r\n                        <X className=\"h-4 w-4\" />\r\n                        <span className=\"ml-1\">Clear</span>\r\n                    </Button>\r\n                </div>\r\n            </PopoverContent>\r\n        </Popover>\r\n    );\r\n}\r\n\r\nfunction FilterNode<TFilters>(props: {\r\n    nodeId: FilterValue;\r\n\r\n    option: ListerFilterOption<TFilters>;\r\n    ctx: ListerFilterCtx<TFilters>;\r\n\r\n    selectedIds: Array<FilterValue>;\r\n\r\n    openGroups: Record<string, boolean>;\r\n    onToggleGroup: (key: string) => void;\r\n\r\n    onApply: (optionId: FilterValue) => void;\r\n\r\n    depth?: number;\r\n}) {\r\n    const { option, ctx, selectedIds, onApply, nodeId } = props;\r\n    const depth = props.depth ?? 0;\r\n\r\n    const optAny = option as any;\r\n\r\n    // custom render wins\r\n    if (option.render) {\r\n        return (\r\n            <div className={depth ? \"pl-3\" : \"\"}>\r\n                {option.render({\r\n                    option,\r\n                    ctx,\r\n                    state: {\r\n                        open: true,\r\n                        selected: selectedIds.includes(nodeId),\r\n                    },\r\n                    actions: { close() {} },\r\n                })}\r\n            </div>\r\n        );\r\n    }\r\n\r\n    const hasChildren = !!option.children?.length;\r\n\r\n    const groupKey = `group:${String(nodeId)}`;\r\n    const groupOpen = Boolean(props.openGroups[groupKey]);\r\n\r\n    // value nodes are clickable (also allow apply presence)\r\n    const isValueKind = optAny?.kind === \"value\";\r\n    const hasApply = !!optAny?.apply;\r\n    const isClickableToggle = isValueKind || hasApply;\r\n\r\n    const isInput = !!optAny.input;\r\n    const isSelected = selectedIds.includes(nodeId);\r\n\r\n    const resolvedInputBindKey = (optAny.input?.bindKey ?? optAny.bindKey) as\r\n        | (keyof TFilters & string)\r\n        | undefined;\r\n\r\n    const renderRow = () => {\r\n        return (\r\n            <div\r\n                className={[\r\n                    \"flex items-center gap-2 rounded-md px-2 py-1.5\",\r\n                    \"hover:bg-muted/50\",\r\n                    option.disabled ? \"opacity-50 pointer-events-none\" : \"\",\r\n                ].join(\" \")}\r\n            >\r\n                {hasChildren ? (\r\n                    <button\r\n                        type=\"button\"\r\n                        className=\"flex size-5 items-center justify-center rounded-md hover:bg-muted\"\r\n                        onClick={(e) => {\r\n                            e.preventDefault();\r\n                            e.stopPropagation();\r\n                            props.onToggleGroup(groupKey);\r\n                        }}\r\n                        aria-label=\"Toggle group\"\r\n                    >\r\n                        <ChevronRight\r\n                            className={[\r\n                                \"h-4 w-4 transition-transform\",\r\n                                groupOpen ? \"rotate-90\" : \"\",\r\n                            ].join(\" \")}\r\n                        />\r\n                    </button>\r\n                ) : (\r\n                    <span className=\"size-5\" />\r\n                )}\r\n\r\n                {isClickableToggle ? (\r\n                    <button\r\n                        type=\"button\"\r\n                        className=\"flex flex-1 items-center justify-between gap-3 text-left\"\r\n                        onClick={(e) => {\r\n                            e.preventDefault();\r\n                            e.stopPropagation();\r\n                            onApply(nodeId);\r\n                        }}\r\n                    >\r\n                        <div className=\"min-w-0\">\r\n                            <div className=\"truncate text-sm\">\r\n                                {option.label ?? String((option as any).value)}\r\n                            </div>\r\n                            {option.description ? (\r\n                                <div className=\"truncate text-xs opacity-70\">\r\n                                    {option.description}\r\n                                </div>\r\n                            ) : null}\r\n                        </div>\r\n\r\n                        <span className=\"flex items-center\">\r\n                            {isSelected ? (\r\n                                <Check className=\"h-4 w-4\" />\r\n                            ) : (\r\n                                <span className=\"h-4 w-4\" />\r\n                            )}\r\n                        </span>\r\n                    </button>\r\n                ) : (\r\n                    <div className=\"flex-1 min-w-0\">\r\n                        <div className=\"truncate text-sm\">\r\n                            {option.label ?? String((option as any).value)}\r\n                        </div>\r\n                        {option.description ? (\r\n                            <div className=\"truncate text-xs opacity-70\">\r\n                                {option.description}\r\n                            </div>\r\n                        ) : null}\r\n                    </div>\r\n                )}\r\n            </div>\r\n        );\r\n    };\r\n\r\n    const renderInput = () => {\r\n        if (!optAny.input) return null;\r\n        if (!resolvedInputBindKey) return null;\r\n\r\n        const currentValue = ctx.get(resolvedInputBindKey as any);\r\n        const variant = optAny.input.variant as VariantKey;\r\n        const extraProps = (optAny.input.props ?? {}) as VariantPropsFor<any>;\r\n\r\n        return (\r\n            <div className=\"pl-9 pr-2 pb-2\">\r\n                <InputField\r\n                    variant={variant}\r\n                    {...(extraProps as any)}\r\n                    value={currentValue as any}\r\n                    onChange={(e: any) => {\r\n                        const v = extractValueFromInputFieldEvent(e);\r\n\r\n                        if (optAny.input?.unsetOnEmpty && isEmptyValue(v)) {\r\n                            ctx.unset(resolvedInputBindKey as any);\r\n                            return;\r\n                        }\r\n\r\n                        const mode = optAny.input?.mode ?? \"replace\";\r\n                        if (mode === \"merge\") {\r\n                            ctx.merge({ [resolvedInputBindKey]: v } as any);\r\n                        } else {\r\n                            ctx.set(resolvedInputBindKey as any, v);\r\n                        }\r\n                    }}\r\n                />\r\n            </div>\r\n        );\r\n    };\r\n\r\n    return (\r\n        <div className={depth ? \"pl-2\" : \"\"}>\r\n            {renderRow()}\r\n\r\n            {isInput ? renderInput() : null}\r\n\r\n            {hasChildren && groupOpen ? (\r\n                <div className=\"mt-1 space-y-1\">\r\n                    {option.children!.map((child) => {\r\n                        const childId = getOptionId(child as any);\r\n                        return (\r\n                            <FilterNode\r\n                                key={String(childId)}\r\n                                nodeId={childId}\r\n                                option={child}\r\n                                ctx={ctx}\r\n                                selectedIds={selectedIds}\r\n                                openGroups={props.openGroups}\r\n                                onToggleGroup={props.onToggleGroup}\r\n                                onApply={onApply}\r\n                                depth={depth + 1}\r\n                            />\r\n                        );\r\n                    })}\r\n                </div>\r\n            ) : null}\r\n        </div>\r\n    );\r\n}\r\n","// packages/form-palette/src/presets/lister/ui/search.tsx\r\n\r\nimport * as React from \"react\";\r\nimport { InputField } from \"@/input/input-field\";\r\nimport {\r\n    MapPin,\r\n    Search,\r\n    Globe as FaGlobeAmericas,\r\n    SlidersHorizontal,\r\n} from \"lucide-react\";\r\n\r\nimport type {\r\n    ListerSearchTarget,\r\n    ListerSessionId,\r\n    ListerStoreState,\r\n} from \"@/presets/lister/types\";\r\n\r\nimport { useLister } from \"@/presets/lister\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/presets/ui/popover\";\r\nimport { Input } from \"@/presets/ui/input\";\r\nimport { Button } from \"@/presets/ui/button\";\r\n\r\nimport { ListerFiltersButton } from \"./filter-ui\";\r\n\r\ntype AnyPresetMap = any;\r\ntype FilterValue = string | number;\r\n\r\nfunction asArray(v: any): FilterValue[] {\r\n    if (v == null) return [];\r\n    return Array.isArray(v) ? (v as FilterValue[]) : ([v] as FilterValue[]);\r\n}\r\n\r\n/**\r\n * Search bar + trailing controls:\r\n * - Search target popover (all/subject/only)\r\n * - Search mode toggle (remote/local/hybrid)\r\n * - Filters button\r\n *\r\n * Runtime responsibilities:\r\n * - actions.setQuery schedules remote refresh for remote/hybrid; local doesn't fetch\r\n * - actions.setSearchTarget schedules remote refresh for remote/hybrid\r\n * - selectors.visibleOptions handles local/hybrid client filtering\r\n */\r\nexport function SearchBar(props: {\r\n    id: ListerSessionId;\r\n    store?: ListerStoreState;\r\n}) {\r\n    const { id } = props;\r\n\r\n    const { actions, state } = useLister<AnyPresetMap>();\r\n    const store = (props.store ?? (state as any)) as ListerStoreState;\r\n\r\n    const session = (store.sessions as any)?.[id] as any;\r\n    if (!session) return null;\r\n\r\n    const searchMode: \"local\" | \"remote\" | \"hybrid\" = (session.searchMode ??\r\n        \"remote\") as any;\r\n    const query = String(session.query ?? \"\");\r\n\r\n    const hasFilters = !!session?.filtersSpec?.options?.length;\r\n\r\n    // Spec coming from your ListerDefinition.search\r\n    const searchSpec = session?.searchSpec as\r\n        | undefined\r\n        | {\r\n              subjects?: readonly string[];\r\n              only?: readonly string[];\r\n              allowAll?: boolean;\r\n              allowCustomSubject?: boolean;\r\n              allowCustomOnly?: boolean;\r\n              default?: string;\r\n          };\r\n\r\n    const specSubjects = (searchSpec?.subjects ?? []) as string[];\r\n    const specOnly = (searchSpec?.only ?? []) as string[];\r\n    const allowAll = !!searchSpec?.allowAll;\r\n    const allowCustomSubject = !!searchSpec?.allowCustomSubject;\r\n    const allowCustomOnly = !!searchSpec?.allowCustomOnly;\r\n\r\n    // Persisted target, with sane defaults\r\n    const target: ListerSearchTarget =\r\n        (session?.searchTarget as any) ??\r\n        (searchSpec?.default\r\n            ? { mode: \"subject\", subject: searchSpec.default }\r\n            : allowAll\r\n              ? { mode: \"all\" }\r\n              : { mode: \"subject\", subject: specSubjects[0] ?? null });\r\n\r\n    const subjectValue = String((target as any)?.subject ?? \"\");\r\n    const isCustomSubject =\r\n        !!subjectValue &&\r\n        specSubjects.length > 0 &&\r\n        !specSubjects.includes(subjectValue);\r\n\r\n    const subjectSelectValue =\r\n        isCustomSubject && allowCustomSubject ? \"__custom__\" : subjectValue;\r\n\r\n    const onlyValue = asArray((target as any)?.only);\r\n\r\n    const commitSearchTarget = (next: ListerSearchTarget) => {\r\n        actions.setSearchTarget(id, next);\r\n\r\n        // local/hybrid UI should feel immediate; state change triggers re-render anyway\r\n        if (searchMode === \"local\") {\r\n            queueMicrotask(() => {\r\n                // no fetch needed; visibleOptions should respect target+query if selector does\r\n                // (see note below)\r\n            });\r\n        }\r\n    };\r\n\r\n    const onQueryChange = (q: string) => {\r\n        actions.setQuery(id, q);\r\n    };\r\n\r\n    const onSearchModeChange = (mode: \"local\" | \"remote\" | \"hybrid\") => {\r\n        // runtime should expose this; keep call flexible until you add it\r\n        actions.setSearchMode(id, mode);\r\n\r\n        // make switching feel immediate for remote/hybrid\r\n        queueMicrotask(() => {\r\n            if (mode === \"remote\" || mode === \"hybrid\") actions.refresh(id);\r\n            // local: no fetch\r\n        });\r\n    };\r\n\r\n    const hasSearchTargetUI =\r\n        !!searchSpec &&\r\n        (allowAll ||\r\n            specSubjects.length > 0 ||\r\n            specOnly.length > 0 ||\r\n            allowCustomSubject);\r\n\r\n    return (\r\n        <div className=\"px-3 py-2\" onMouseDown={() => actions.focus(id)}>\r\n            <Input\r\n                value={query}\r\n                onChange={(e) => onQueryChange(e.target.value)}\r\n                placeholder={\r\n                    searchMode === \"local\"\r\n                        ? \"Search…\"\r\n                        : searchMode === \"hybrid\"\r\n                          ? \"Search (hybrid)…\"\r\n                          : \"Search (remote)…\"\r\n                }\r\n                icon={<Search className=\"h-4 w-4\" />}\r\n                leadingControl={\r\n                    hasSearchTargetUI ? (\r\n                        <Popover>\r\n                            <PopoverTrigger asChild>\r\n                                <Button\r\n                                    type=\"button\"\r\n                                    size=\"icon\"\r\n                                    variant=\"ghost\"\r\n                                    title=\"Search target\"\r\n                                >\r\n                                    <SlidersHorizontal className=\"h-4 w-4\" />\r\n                                </Button>\r\n                            </PopoverTrigger>\r\n\r\n                            <PopoverContent className=\"w-80 p-3\">\r\n                                <div className=\"space-y-3\">\r\n                                    <div className=\"text-xs opacity-70\">\r\n                                        Search target\r\n                                    </div>\r\n\r\n                                    <InputField\r\n                                        variant=\"select\"\r\n                                        mode=\"button\"\r\n                                        value={(target as any).mode}\r\n                                        options={[\r\n                                            ...(allowAll\r\n                                                ? [\r\n                                                      {\r\n                                                          label: \"All\",\r\n                                                          value: \"all\",\r\n                                                      },\r\n                                                  ]\r\n                                                : []),\r\n                                            {\r\n                                                label: \"Subject\",\r\n                                                value: \"subject\",\r\n                                            },\r\n                                            { label: \"Only\", value: \"only\" },\r\n                                        ]}\r\n                                        onChange={(e: any) => {\r\n                                            const mode =\r\n                                                e?.value as ListerSearchTarget[\"mode\"];\r\n\r\n                                            if (mode === \"all\") {\r\n                                                commitSearchTarget({\r\n                                                    mode: \"all\",\r\n                                                } as any);\r\n                                                return;\r\n                                            }\r\n\r\n                                            if (mode === \"only\") {\r\n                                                commitSearchTarget({\r\n                                                    mode: \"only\",\r\n                                                    only: onlyValue.length\r\n                                                        ? onlyValue\r\n                                                        : specOnly.length\r\n                                                          ? [specOnly[0]]\r\n                                                          : [],\r\n                                                } as any);\r\n                                                return;\r\n                                            }\r\n\r\n                                            commitSearchTarget({\r\n                                                mode: \"subject\",\r\n                                                subject:\r\n                                                    subjectValue ||\r\n                                                    searchSpec?.default ||\r\n                                                    specSubjects[0] ||\r\n                                                    null,\r\n                                            } as any);\r\n                                        }}\r\n                                    />\r\n\r\n                                    {(target as any).mode === \"subject\" ? (\r\n                                        <div className=\"space-y-2\">\r\n                                            {specSubjects.length ? (\r\n                                                <InputField\r\n                                                    variant=\"select\"\r\n                                                    mode=\"button\"\r\n                                                    value={subjectSelectValue}\r\n                                                    options={[\r\n                                                        ...specSubjects.map(\r\n                                                            (c) => ({\r\n                                                                label: c,\r\n                                                                value: c,\r\n                                                            }),\r\n                                                        ),\r\n                                                        ...(allowCustomSubject\r\n                                                            ? [\r\n                                                                  {\r\n                                                                      label: \"Custom…\",\r\n                                                                      value: \"__custom__\",\r\n                                                                  },\r\n                                                              ]\r\n                                                            : []),\r\n                                                    ]}\r\n                                                    onChange={(e: any) => {\r\n                                                        const v =\r\n                                                            e?.value as string;\r\n\r\n                                                        if (\r\n                                                            v === \"__custom__\"\r\n                                                        ) {\r\n                                                            commitSearchTarget({\r\n                                                                mode: \"subject\",\r\n                                                                subject:\r\n                                                                    subjectValue ||\r\n                                                                    \"\",\r\n                                                            } as any);\r\n                                                            return;\r\n                                                        }\r\n\r\n                                                        commitSearchTarget({\r\n                                                            mode: \"subject\",\r\n                                                            subject: v,\r\n                                                        } as any);\r\n                                                    }}\r\n                                                />\r\n                                            ) : null}\r\n\r\n                                            {allowCustomSubject &&\r\n                                            subjectSelectValue ===\r\n                                                \"__custom__\" ? (\r\n                                                <div className=\"space-y-1\">\r\n                                                    <div className=\"text-xs opacity-70\">\r\n                                                        Custom column\r\n                                                    </div>\r\n                                                    <input\r\n                                                        value={subjectValue}\r\n                                                        onChange={(e) =>\r\n                                                            commitSearchTarget({\r\n                                                                mode: \"subject\",\r\n                                                                subject:\r\n                                                                    e.target\r\n                                                                        .value,\r\n                                                            } as any)\r\n                                                        }\r\n                                                        placeholder=\"e.g. email\"\r\n                                                        className=\"h-9 w-full rounded-md border px-3 text-sm\"\r\n                                                    />\r\n                                                </div>\r\n                                            ) : null}\r\n                                        </div>\r\n                                    ) : null}\r\n\r\n                                    {(target as any).mode === \"only\" ? (\r\n                                        <div className=\"space-y-2\">\r\n                                            <InputField\r\n                                                variant=\"multi-select\"\r\n                                                mode=\"button\"\r\n                                                value={onlyValue as any}\r\n                                                options={specOnly.map((c) => ({\r\n                                                    label: c,\r\n                                                    value: c,\r\n                                                }))}\r\n                                                onChange={(e: any) =>\r\n                                                    commitSearchTarget({\r\n                                                        mode: \"only\",\r\n                                                        only: asArray(e?.value),\r\n                                                    } as any)\r\n                                                }\r\n                                            />\r\n\r\n                                            {allowCustomOnly ? (\r\n                                                <div className=\"space-y-1\">\r\n                                                    <div className=\"text-xs opacity-70\">\r\n                                                        Add custom column\r\n                                                    </div>\r\n                                                    <input\r\n                                                        placeholder=\"type column + Enter\"\r\n                                                        className=\"h-9 w-full rounded-md border px-3 text-sm\"\r\n                                                        onKeyDown={(e) => {\r\n                                                            if (\r\n                                                                e.key !==\r\n                                                                \"Enter\"\r\n                                                            )\r\n                                                                return;\r\n\r\n                                                            const v = (\r\n                                                                e.currentTarget\r\n                                                                    .value ?? \"\"\r\n                                                            ).trim();\r\n                                                            if (!v) return;\r\n\r\n                                                            e.preventDefault();\r\n\r\n                                                            const next =\r\n                                                                Array.from(\r\n                                                                    new Set([\r\n                                                                        ...onlyValue.map(\r\n                                                                            String,\r\n                                                                        ),\r\n                                                                        v,\r\n                                                                    ]),\r\n                                                                );\r\n\r\n                                                            e.currentTarget.value =\r\n                                                                \"\";\r\n\r\n                                                            commitSearchTarget({\r\n                                                                mode: \"only\",\r\n                                                                only: next,\r\n                                                            } as any);\r\n                                                        }}\r\n                                                    />\r\n                                                </div>\r\n                                            ) : null}\r\n                                        </div>\r\n                                    ) : null}\r\n                                </div>\r\n                            </PopoverContent>\r\n                        </Popover>\r\n                    ) : null\r\n                }\r\n                trailingControl={\r\n                    <div className=\"flex items-center gap-2\">\r\n                        <InputField\r\n                            variant=\"select\"\r\n                            mode=\"button\"\r\n                            value={searchMode}\r\n                            triggerClassName=\"border-none ring-0 shadow-none! px-1! cursor-pointer\"\r\n                            options={[\r\n                                {\r\n                                    label: \"Remote search\",\r\n                                    value: \"remote\",\r\n                                    icon: (\r\n                                        <FaGlobeAmericas className=\"size-3\" />\r\n                                    ),\r\n                                },\r\n                                {\r\n                                    label: \"Local search\",\r\n                                    value: \"local\",\r\n                                    icon: <MapPin className=\"size-3\" />,\r\n                                },\r\n                                {\r\n                                    label: \"Hybrid search\",\r\n                                    value: \"hybrid\",\r\n                                    icon: (\r\n                                        <FaGlobeAmericas className=\"size-3\" />\r\n                                    ),\r\n                                },\r\n                            ]}\r\n                            onChange={(e: any) =>\r\n                                onSearchModeChange(e?.value as any)\r\n                            }\r\n                        />\r\n\r\n                        {hasFilters ? (\r\n                            <ListerFiltersButton id={id} store={store} />\r\n                        ) : null}\r\n                    </div>\r\n                }\r\n            />\r\n        </div>\r\n    );\r\n}\r\n","import { ListerRuntime } from \"@/presets/lister/runtime/session\";\r\nimport { ListerSessionState } from \"@/presets/lister\";\r\nimport { GripVertical, RefreshCw, X } from \"lucide-react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Button } from \"@/presets/ui/button\";\r\n\r\nexport const Header: React.FC<{\r\n    draggable: boolean;\r\n    actions: ListerRuntime<any>[\"actions\"];\r\n    session: ListerSessionState<any, any, any, any, any>;\r\n    id: string;\r\n}> = ({ actions, draggable, session, id }) => {\r\n    const title = session?.title ?? session?.kind ?? \"Select\";\r\n    const showRefresh = !!(session as any)?.showRefresh;\r\n\r\n    return (\r\n        <div className=\"flex items-center justify-between gap-2 px-3 py-2\">\r\n            <div\r\n                data-slot=\"lister-drag-handle\"\r\n                className={cn(\r\n                    \"flex min-w-0 items-center gap-2\",\r\n                    draggable && \"cursor-grab select-none touch-none\",\r\n                )}\r\n                onMouseDown={() => actions.focus(id)}\r\n            >\r\n                {draggable && (\r\n                    <GripVertical className=\"h-4 w-4 shrink-0 opacity-60\" />\r\n                )}\r\n                <div className=\"min-w-0\">\r\n                    <div className=\"truncate text-sm font-medium\">{title}</div>\r\n                    <div className=\"text-xs opacity-60\">\r\n                        {session?.loading\r\n                            ? \"Loading…\"\r\n                            : session?.refreshing\r\n                              ? \"Refreshing…\"\r\n                              : \" \"}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <div className=\"flex items-center gap-1\">\r\n                {showRefresh && (\r\n                    <Button\r\n                        type=\"button\"\r\n                        size=\"sm\"\r\n                        variant=\"ghost\"\r\n                        onClick={() => actions.refresh(id)}\r\n                        disabled={!!session?.loading || !!session?.refreshing}\r\n                    >\r\n                        <RefreshCw className=\"h-4 w-4\" />\r\n                    </Button>\r\n                )}\r\n\r\n                <Button\r\n                    type=\"button\"\r\n                    variant=\"ghost\"\r\n                    size=\"sm\"\r\n                    onClick={() => actions.close(id)}\r\n                >\r\n                    <X className=\"h-4 w-4\" />\r\n                </Button>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n","// resources/js/context/lister/lister-ui.tsx\r\n\r\nimport * as React from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport Draggable, {\r\n    type DraggableData,\r\n    type DraggableEvent,\r\n} from \"react-draggable\";\r\n\r\nimport type { ListerMode, ListerSessionId, ListerStoreState } from \"./types\";\r\nimport { useLister } from \".\";\r\n\r\nimport { Separator } from \"@/presets/ui/separator\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nimport { SearchBar } from \"./ui/search\";\r\nimport { FooterBar } from \"@/presets/lister/ui/footer-bar\";\r\nimport { OptionList } from \"@/presets/lister/ui/option-list\";\r\nimport { Header } from \"@/presets/lister/ui/header\";\r\n\r\ntype AnyPresetMap = any;\r\n\r\n// ─────────────────────────────────────────────\r\n// Position helpers (UI-only)\r\n// ─────────────────────────────────────────────\r\n\r\nfunction clamp(n: number, min: number, max: number) {\r\n    return Math.max(min, Math.min(max, n));\r\n}\r\n\r\nfunction computeDefaultPos(idx: number) {\r\n    const pad = 8;\r\n    const margin = 24;\r\n\r\n    const approxW = 420; // w-105\r\n    const approxH = 560;\r\n\r\n    const maxX = Math.max(pad, window.innerWidth - approxW - pad);\r\n    const maxY = Math.max(pad, window.innerHeight - approxH - pad);\r\n\r\n    const x = clamp(window.innerWidth - margin - approxW, pad, maxX);\r\n    const y = clamp(\r\n        window.innerHeight - margin - approxH - idx * 12,\r\n        pad,\r\n        maxY,\r\n    );\r\n\r\n    return { x, y };\r\n}\r\n\r\nfunction usePortalRoot(id = \"__timeax_lister_ui__\") {\r\n    const [el, setEl] = React.useState<HTMLElement | null>(null);\r\n\r\n    React.useEffect(() => {\r\n        if (typeof document === \"undefined\") return;\r\n\r\n        const existing = document.getElementById(id);\r\n        const node = existing ?? document.createElement(\"div\");\r\n        if (!existing) {\r\n            node.id = id;\r\n            document.body.appendChild(node);\r\n        }\r\n\r\n        setEl(node);\r\n\r\n        return () => {\r\n            // Only remove if we created it\r\n            if (!existing && node.parentNode) node.parentNode.removeChild(node);\r\n        };\r\n    }, [id]);\r\n\r\n    return el;\r\n}\r\n\r\n// ─────────────────────────────────────────────\r\n// UI overlay (PORTALED to document.body)\r\n// ─────────────────────────────────────────────\r\n\r\nexport function ListerUI() {\r\n    const { state } = useLister<AnyPresetMap>();\r\n\r\n    // ✅ Hook must be before conditional returns\r\n    const positionsRef = React.useRef(\r\n        new Map<ListerSessionId, { x: number; y: number }>(),\r\n    );\r\n\r\n    const portalRoot = usePortalRoot();\r\n    if (!portalRoot) return null;\r\n\r\n    if (!state.order.length) return null;\r\n\r\n    return createPortal(\r\n        <div className=\"fixed inset-0 z-50 pointer-events-none\">\r\n            {/* bounds parent */}\r\n            <div className=\"relative h-full w-full\">\r\n                {state.order.map((id) => (\r\n                    <ListerSessionPanel\r\n                        key={String(id)}\r\n                        id={id}\r\n                        positionsRef={positionsRef}\r\n                    />\r\n                ))}\r\n            </div>\r\n        </div>,\r\n        portalRoot,\r\n    );\r\n}\r\n\r\nfunction ListerSessionPanel(props: {\r\n    id: ListerSessionId;\r\n    positionsRef: React.MutableRefObject<\r\n        Map<ListerSessionId, { x: number; y: number }>\r\n    >;\r\n}) {\r\n    const { id, positionsRef } = props;\r\n    const { state, actions } = useLister<AnyPresetMap>();\r\n\r\n    const session = (state.sessions as any)[id] as any;\r\n    const isOpen = !!session?.isOpen;\r\n\r\n    const idx = Math.max(0, state.order.indexOf(id));\r\n    const isActive = state.activeId === id;\r\n\r\n    // ✅ draggable defaults true\r\n    const draggable: boolean = session?.draggable !== false;\r\n\r\n    // ✅ nodeRef MUST be attached to the Draggable CHILD element\r\n    const nodeRef = React.useRef<HTMLDivElement>(null);\r\n\r\n    // ✅ compute defaultPosition ONCE per mount (no ref-mutation-in-render bug)\r\n    const [defaultPos] = React.useState<{ x: number; y: number }>(() => {\r\n        const saved = positionsRef.current.get(id);\r\n        if (saved) return saved;\r\n\r\n        const p = session?.position;\r\n\r\n        return p && typeof p.x === \"number\" && typeof p.y === \"number\"\r\n            ? { x: p.x, y: p.y }\r\n            : computeDefaultPos(idx);\r\n    });\r\n\r\n    // ✅ ensure store has an entry (so non-draggable uses it too)\r\n    React.useEffect(() => {\r\n        if (!positionsRef.current.has(id)) {\r\n            positionsRef.current.set(id, defaultPos);\r\n        }\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [id]);\r\n\r\n    // keep stacking stable; bump active\r\n    const zIndex = 1000 + idx + (isActive ? 1000 : 0);\r\n\r\n    const panelClass = cn(\r\n        \"pointer-events-auto\",\r\n        \"bg-popover text-popover-foreground border shadow-md rounded-lg\",\r\n        \"w-105 max-w-[calc(100vw-16px)]\",\r\n        // ✅ IMPORTANT: give the panel a definite height\r\n        \"h-[min(560px,calc(100vh-100px))]\",\r\n        \"overflow-hidden flex flex-col\",\r\n        isActive && \"ring-2 ring-primary/30\",\r\n    );\r\n    // ✅ Persist ONLY on stop (smooth drag)\r\n    const onStop = (_e: DraggableEvent, data: DraggableData) => {\r\n        positionsRef.current.set(id, { x: data.x, y: data.y });\r\n    };\r\n\r\n    // ✅ return null after hooks\r\n    if (!isOpen) return null;\r\n\r\n    const PanelBody = (\r\n        <>\r\n            <Header\r\n                draggable={draggable}\r\n                actions={actions}\r\n                session={session}\r\n                id={String(id)}\r\n            />\r\n\r\n            <Separator />\r\n\r\n            <div className=\"shrink-0\">\r\n                <SearchBar\r\n                    id={id}\r\n                    store={state as unknown as ListerStoreState}\r\n                />\r\n            </div>\r\n\r\n            <Separator />\r\n\r\n            {/* ✅ overflow fix: min-h-0 + flex-1 + overflow-hidden on parent */}\r\n            <div className=\"min-h-0 flex-1 overflow-hidden flex flex-col\">\r\n                <OptionList id={id} className=\"h-full\" />\r\n            </div>\r\n\r\n            <Separator />\r\n\r\n            <div className=\"shrink-0\">\r\n                <FooterBar\r\n                    id={id}\r\n                    mode={session?.mode as ListerMode}\r\n                    confirm={!!session?.confirm}\r\n                    onClear={() => actions.clear(id)}\r\n                    onCancel={() => actions.cancel(id)}\r\n                    onApply={() => actions.apply(id)}\r\n                />\r\n            </div>\r\n        </>\r\n    );\r\n\r\n    // Non-draggable: render at stored position (absolute)\r\n    if (!draggable) {\r\n        const p = positionsRef.current.get(id) ?? defaultPos;\r\n\r\n        return (\r\n            <div\r\n                className=\"absolute\"\r\n                style={{ left: p.x, top: p.y, zIndex }}\r\n                onMouseDown={() => actions.focus(id)}\r\n            >\r\n                <div className={panelClass} style={{ zIndex }}>\r\n                    {PanelBody}\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    // Draggable: uncontrolled (smooth)\r\n    return (\r\n        <Draggable\r\n            nodeRef={nodeRef}\r\n            bounds=\"parent\"\r\n            handle='[data-slot=\"lister-drag-handle\"]'\r\n            defaultPosition={defaultPos}\r\n            onStart={(e) => {\r\n                // ignore right-click / non-primary\r\n                // @ts-expect-error - react-draggable uses MouseEvent/TouchEvent union\r\n                if (e?.button != null && e.button !== 0) return false;\r\n                actions.focus(id);\r\n            }}\r\n            onStop={onStop}\r\n        >\r\n            {/* ✅ nodeRef is HERE (Draggable child) */}\r\n            <div\r\n                ref={nodeRef}\r\n                className={cn(\"absolute left-0 top-0\", panelClass)}\r\n                style={{ zIndex }}\r\n                onMouseDown={() => actions.focus(id)}\r\n            >\r\n                {PanelBody}\r\n            </div>\r\n        </Draggable>\r\n    );\r\n}\r\n","import * as React from \"react\";\r\nimport type { ListerSessionId, PresetMap } from \"@/presets/lister/types\";\r\nimport { useListerRuntime } from \"@/presets/lister/provider\";\r\n\r\n/**\r\n * useLister — stable hook returning { api, store/state, actions, selectors }.\r\n *\r\n * It directly mirrors the current runtime, with stable reference equality\r\n * for top-level properties (api/actions/selectors), while `state` updates on\r\n * store changes.\r\n */\r\nexport function useLister<P extends PresetMap>() {\r\n    const runtime = useListerRuntime<P>();\r\n    const [state, setState] = React.useState(runtime.getState());\r\n\r\n    React.useEffect(() => {\r\n        return runtime.subscribe(() => {\r\n            setState(runtime.getState());\r\n        });\r\n    }, [runtime]);\r\n\r\n    // Flatten runtime shape for easy destructuring\r\n    return React.useMemo(\r\n        () => ({\r\n            api: runtime.api,\r\n            actions: runtime.actions,\r\n            selectors: runtime.selectors,\r\n            state,\r\n            store: state, // alias for backward compatibility\r\n        }),\r\n        [runtime, state],\r\n    );\r\n}\r\n\r\n/**\r\n * useListerSession — convenience hook for one active session.\r\n * Example: UI overlays or modals can call this to get the current session.\r\n */\r\nexport function useListerSession<P extends PresetMap>(\r\n    sessionId?: ListerSessionId,\r\n) {\r\n    const { state } = useLister<P>();\r\n\r\n    const sid = sessionId ?? state.activeId;\r\n    const session = sid ? state.sessions[sid] : undefined;\r\n\r\n    return { session, activeId: sid };\r\n}\r\n","// packages/form-palette/src/presets/lister/hooks/use-data.ts\n\nimport * as React from \"react\";\n\nimport type { ListerSearchMode, ListerSearchPayload, ListerSearchTarget, } from \"@/presets/lister/types\";\n\nimport { extractArray } from \"@/presets/lister/runtime/engine/extract\";\nimport { defaultHttpClient, type ListerHttpClient, } from \"@/presets/lister/runtime/engine/http\";\nimport { createRequestId } from \"@/presets/lister/runtime/engine/engine\";\nimport { buildSearchPayloadFromTarget } from \"@/presets/lister/runtime/engine/search\";\n\n// ✅ NEW: runtime inflight (abort + debounce + latest)\nimport { createInFlight } from \"@/presets/lister/runtime/session/inflight\";\nimport { createRuntimeKey } from \"@/presets/lister/runtime/session/key\";\n\n/**\n * Minimal selector contract (matches extractArray contract used by lister)\n * - function: (body) => array\n * - string: path selector\n */\nexport type DataSelector<T> = ((body: any) => T[]) | string;\n\nexport type DataSearchConfig = {\n    default?: string;\n};\n\nexport type DataBuildRequestCtx<TFilters> = {\n    filters?: TFilters;\n    query: string;\n    cursor: any;\n};\n\nexport type DataBuildRequestResult = {\n    params?: any;\n    body?: any;\n    headers?: any;\n};\n\nexport type DataKey = string | number;\n\nexport type DataSelectionMode = \"none\" | \"single\" | \"multiple\";\n\nexport type DataSelectionKey<TItem> =\n    | keyof TItem\n    | string\n    | ((item: TItem) => DataKey | null | undefined);\n\nexport type DataSelectionConfig<TItem> = {\n    mode?: Exclude<DataSelectionMode, \"none\">;\n    /**\n     * How to resolve the ID for an item.\n     * - string/ keyof: item[key]\n     * - function: (item) => id\n     * Defaults to: item.id ?? item.value\n     */\n    key?: DataSelectionKey<TItem>;\n    /**\n     * If \"missing\", selection IDs that don't exist in the *latest fetched list* are removed.\n     * Default: \"never\" (recommended; avoids wiping selection on remote searches).\n     */\n    prune?: \"never\" | \"missing\";\n};\n\nexport type UseDataOptions<TItem = any, TFilters = Record<string, any>> = {\n    id?: string;\n\n    endpoint: string;\n    method?: \"GET\" | \"POST\";\n\n    selector?: DataSelector<TItem>;\n\n    /**\n     * Passed through into request builder (same signature shape as legacy provider)\n     */\n    buildRequest?: (\n        ctx: DataBuildRequestCtx<TFilters>,\n    ) => DataBuildRequestResult;\n\n    /**\n     * Minimal search config (default subject column).\n     */\n    search?: DataSearchConfig;\n\n    /**\n     * Raw filters object\n     */\n    filters?: TFilters;\n\n    initial?: TItem[];\n\n    enabled?: boolean;\n    fetchOnMount?: boolean;\n\n    searchMode?: ListerSearchMode;\n    debounceMs?: number;\n\n    autoFetchOnFilterChange?: boolean;\n\n    /**\n     * Optional selection support (by stable item key)\n     */\n    selection?: DataSelectionConfig<TItem>;\n\n    /**\n     * Optional override: custom http client (otherwise uses global axios / axios import)\n     */\n    http?: ListerHttpClient;\n};\n\nexport type UseDataResult<TItem = any, TFilters = Record<string, any>> = {\n    id?: string;\n\n    data: TItem[];\n    visible: TItem[];\n    res?: any;\n\n    loading: boolean;\n    error: any;\n\n    query: string;\n    setQuery: (q: string) => void;\n\n    searchMode: ListerSearchMode;\n    setSearchMode: (m: ListerSearchMode) => void;\n\n    searchTarget?: ListerSearchTarget;\n    setSearchTarget: (t: ListerSearchTarget) => void;\n\n    filters?: TFilters;\n    setFilters: (next: TFilters | undefined) => void;\n    patchFilters: (patch: Partial<TFilters>) => void;\n    clearFilters: () => void;\n\n    // selection\n    selectionMode: DataSelectionMode;\n    selectedIds: DataKey | DataKey[] | null;\n    selected: TItem | TItem[] | null;\n\n    select: (id: DataKey | DataKey[]) => void;\n    deselect: (id: DataKey | DataKey[]) => void;\n    toggle: (id: DataKey) => void;\n    clearSelection: () => void;\n    isSelected: (id: DataKey) => boolean;\n    getSelection: () => TItem | TItem[] | null;\n\n    refresh: () => Promise<TItem[]>;\n    override(data: TItem[]): void;\n\n    fetch: (override?: {\n        query?: string;\n        filters?: TFilters;\n        searchTarget?: ListerSearchTarget;\n        search?: ListerSearchPayload;\n    }) => Promise<TItem[]>;\n};\n\nfunction defaultSearchTarget(\n    search?: DataSearchConfig,\n): ListerSearchTarget | undefined {\n    const def = search?.default;\n    return def ? { mode: \"subject\", subject: def, only: null } : undefined;\n}\n\nfunction isKey(x: any): x is DataKey {\n    return typeof x === \"string\" || typeof x === \"number\";\n}\n\nfunction isAbortError(e: any): boolean {\n    const name = String(e?.name ?? \"\");\n    const msg = String(e?.message ?? \"\");\n    return (\n        name === \"AbortError\" ||\n        name === \"CanceledError\" ||\n        name === \"CancelError\" ||\n        /aborted|canceled|cancelled/i.test(msg)\n    );\n}\n\nfunction stringifyForSearch(v: any): string {\n    if (v == null) return \"\";\n    if (typeof v === \"string\") return v;\n    if (\n        typeof v === \"number\" ||\n        typeof v === \"boolean\" ||\n        typeof v === \"bigint\"\n    ) {\n        return String(v);\n    }\n    if (v instanceof Date) {\n        return Number.isNaN(v.getTime()) ? \"\" : v.toISOString();\n    }\n    if (Array.isArray(v)) {\n        return v.map(stringifyForSearch).join(\" \");\n    }\n    if (typeof v === \"object\") {\n        try {\n            return JSON.stringify(v);\n        } catch {\n            return String(v);\n        }\n    }\n    return String(v);\n}\n\nexport function useData<TItem = any, TFilters = Record<string, any>>(\n    opts: UseDataOptions<TItem, TFilters>,\n    deps: any[] = [],\n): UseDataResult<TItem, TFilters> {\n    const enabled = opts.enabled ?? true;\n    const debounceMs = opts.debounceMs ?? 300;\n\n    const http = opts.http ?? defaultHttpClient;\n\n    const [data, setData] = React.useState<TItem[]>(() => opts.initial ?? []);\n    const [res, setRes] = React.useState<any>();\n    const [loading, setLoading] = React.useState(false);\n    const [error, setError] = React.useState<any>(undefined);\n\n    const dataRef = React.useRef<TItem[]>(data);\n    React.useEffect(() => {\n        dataRef.current = data;\n    }, [data]);\n\n    const [query, _setQuery] = React.useState(\"\");\n    const [searchMode, _setSearchMode] = React.useState<ListerSearchMode>(\n        opts.searchMode ?? \"remote\",\n    );\n\n    const [searchTarget, _setSearchTarget] = React.useState<\n        ListerSearchTarget | undefined\n    >(() => defaultSearchTarget(opts.search));\n\n    const [filters, _setFilters] = React.useState<TFilters | undefined>(\n        opts.filters,\n    );\n\n    // ✅ NEW: runtime inflight (per hook instance)\n    const inflight = React.useMemo(\n        () => createInFlight(debounceMs),\n        [debounceMs],\n    );\n\n    // ✅ stable key for inflight map (not tied to lister context)\n    const inflightKeyRef = React.useRef<string>(\n        opts.id ?? createRuntimeKey(\"data\"),\n    );\n    React.useEffect(() => {\n        // if user provides an id later, adopt it\n        if (opts.id) inflightKeyRef.current = opts.id;\n    }, [opts.id]);\n\n    React.useEffect(() => {\n        return () => {\n            // cancel timers + abort requests\n            inflight.clear(inflightKeyRef.current as any);\n        };\n    }, [inflight]);\n\n    // selection config\n    const selectionMode: DataSelectionMode = opts.selection?.mode ?? \"none\";\n    const selectionPrune = opts.selection?.prune ?? \"never\";\n\n    const getItemKey = React.useMemo(() => {\n        const key = opts.selection?.key;\n\n        // default: item.id ?? item.value\n        if (!key) {\n            return (item: any): DataKey | null => {\n                const v = item?.id ?? item?.value;\n                return isKey(v) ? v : null;\n            };\n        }\n\n        if (typeof key === \"function\") {\n            return (item: TItem): DataKey | null => {\n                const v = key(item);\n                return isKey(v) ? v : null;\n            };\n        }\n\n        // string/ keyof\n        return (item: any): DataKey | null => {\n            const v = item?.[key as any];\n            return isKey(v) ? v : null;\n        };\n    }, [opts.selection?.key]);\n\n    /**\n     * IMPORTANT:\n     * Keep internal selection state as an array ALWAYS.\n     */\n    const [selectedIdsArr, setSelectedIdsArr] = React.useState<DataKey[]>([]);\n\n    // cache id -> latest known item\n    const selectedCacheRef = React.useRef<Map<DataKey, TItem>>(new Map());\n\n    // avoid effect double-fetch\n    const didMountRef = React.useRef(false);\n\n    // prevent mode switch immediate-fetch from also triggering debounce fetch\n    const skipNextModeEffectRef = React.useRef(false);\n\n    const dataById = React.useMemo(() => {\n        const map = new Map<DataKey, TItem>();\n        if (selectionMode === \"none\") return map;\n\n        for (const item of data) {\n            const k = getItemKey(item);\n            if (k == null) continue;\n            map.set(k, item);\n        }\n        return map;\n    }, [data, getItemKey, selectionMode]);\n\n    const normalizeIds = React.useCallback((v: DataKey | DataKey[]) => {\n        return Array.isArray(v) ? v : [v];\n    }, []);\n\n    const commitSelectedCache = React.useCallback(\n        (list: TItem[]) => {\n            if (selectionMode === \"none\") return;\n\n            for (const item of list) {\n                const k = getItemKey(item);\n                if (k == null) continue;\n                selectedCacheRef.current.set(k, item);\n            }\n        },\n        [getItemKey, selectionMode],\n    );\n\n    const fetchImpl = React.useCallback(\n        async (override?: {\n            query?: string;\n            filters?: TFilters;\n            searchTarget?: ListerSearchTarget;\n            search?: ListerSearchPayload;\n        }): Promise<TItem[]> => {\n            if (!enabled) return dataRef.current;\n\n            const q = override?.query ?? query;\n            const f = override?.filters ?? filters;\n            const t = override?.searchTarget ?? searchTarget;\n\n            const requestId = createRequestId();\n            const inflightKey = inflightKeyRef.current as any;\n            const { signal } = inflight.begin(inflightKey, requestId);\n\n            setLoading(true);\n            setError(undefined);\n\n            try {\n                const payload: ListerSearchPayload | undefined =\n                    override?.search ?? buildSearchPayloadFromTarget(t);\n\n                const built =\n                    opts.buildRequest?.({\n                        filters: f,\n                        query: q,\n                        cursor: null,\n                    }) ?? {};\n\n                // Compatibility: default query key is \"search\"\n                const baseParams = built.params ?? {\n                    ...(f ?? ({} as any)),\n                    search: q,\n                };\n\n                const params = payload\n                    ? { ...baseParams, ...payload }\n                    : baseParams;\n\n                const body = built.body ?? {};\n                const headers = built.headers;\n\n                const resBody = await http({\n                    endpoint: opts.endpoint,\n                    method: (opts.method ?? \"GET\") as any,\n                    params,\n                    body,\n                    headers,\n                    signal,\n                    requestId,\n                });\n                //---\n                setRes(resBody);\n\n                const list = extractArray<TItem>(resBody, opts.selector as any);\n\n                // ✅ last-request-wins\n                if (!inflight.isLatest(inflightKey, requestId)) return list;\n\n                commitSelectedCache(list);\n\n                if (selectionMode !== \"none\" && selectionPrune === \"missing\") {\n                    const nextIds = new Set<DataKey>();\n                    for (const item of list) {\n                        const k = getItemKey(item);\n                        if (k != null) nextIds.add(k);\n                    }\n                    setSelectedIdsArr((prev) =>\n                        prev.filter((x) => nextIds.has(x)),\n                    );\n                }\n\n                setData(list);\n                setLoading(false);\n                return list;\n            } catch (e: any) {\n                const inflightKey = inflightKeyRef.current as any;\n\n                // ✅ last-request-wins\n                if (!inflight.isLatest(inflightKey, requestId)) {\n                    return dataRef.current;\n                }\n\n                if (isAbortError(e)) {\n                    setLoading(false);\n                    return dataRef.current;\n                }\n\n                setError(e);\n                setLoading(false);\n                return dataRef.current;\n            }\n        },\n        [\n            enabled,\n            query,\n            filters,\n            searchTarget,\n            inflight,\n            http,\n            opts.endpoint,\n            opts.method,\n            opts.selector,\n            opts.buildRequest,\n            commitSelectedCache,\n            selectionMode,\n            selectionPrune,\n            getItemKey,\n        ],\n    );\n\n    const refresh = React.useCallback(async () => {\n        return fetchImpl();\n    }, [fetchImpl]);\n\n    const override = React.useCallback((newData: TItem[]) => {\n        setData(newData);\n    }, []);\n\n    const setQuery = React.useCallback((q: string) => _setQuery(q), []);\n\n    /**\n     * Mode switch semantics:\n     * - switching to local: fetch a \"base list\" once (query \"\", no search payload)\n     * - switching to remote/hybrid: immediate fetch (skip next debounced effect fetch)\n     */\n    const setSearchMode = React.useCallback(\n        (m: ListerSearchMode) => {\n            // cancel pending debounce + abort in-flight\n            inflight.abort(inflightKeyRef.current as any);\n\n            if (m === \"remote\" || m === \"hybrid\") {\n                skipNextModeEffectRef.current = true;\n                _setSearchMode(m);\n                void fetchImpl();\n                return;\n            }\n\n            _setSearchMode(m);\n\n            if (m === \"local\") {\n                void fetchImpl({\n                    query: \"\",\n                    search: undefined,\n                });\n            }\n        },\n        [fetchImpl, inflight],\n    );\n\n    const setSearchTarget = React.useCallback((t: ListerSearchTarget) => {\n        _setSearchTarget(t);\n        // debounced fetch handled by effect\n    }, []);\n\n    const setFilters = React.useCallback(\n        (next: TFilters | undefined) => _setFilters(next),\n        [],\n    );\n\n    const patchFilters = React.useCallback((patch: Partial<TFilters>) => {\n        _setFilters((prev) => ({\n            ...(prev ?? ({} as any)),\n            ...(patch as any),\n        }));\n    }, []);\n\n    const clearFilters = React.useCallback(() => _setFilters(undefined), []);\n\n    const fetchOnMount = opts.fetchOnMount ?? !opts.initial;\n\n    React.useEffect(() => {\n        if (!enabled) return;\n        if (!fetchOnMount) return;\n        void fetchImpl();\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, deps);\n\n    /**\n     * Debounced fetch on query/searchTarget changes (remote/hybrid only)\n     */\n    React.useEffect(() => {\n        if (!enabled) return;\n\n        if (!didMountRef.current) {\n            didMountRef.current = true;\n            return;\n        }\n\n        if (searchMode !== \"remote\" && searchMode !== \"hybrid\") return;\n\n        if (skipNextModeEffectRef.current) {\n            skipNextModeEffectRef.current = false;\n            return;\n        }\n\n        const key = inflightKeyRef.current as any;\n\n        // ✅ runtime debounce scheduler\n        inflight.schedule(key, createRequestId(), () => {\n            void fetchImpl();\n        });\n\n        return () => {\n            // cancel pending debounce only (and abort any in-flight)\n            inflight.abort(key);\n        };\n    }, [enabled, fetchImpl, inflight, query, searchMode, searchTarget]);\n\n    /**\n     * Filter changes:\n     * - auto fetch in remote/hybrid\n     * - local mode doesn't need fetch; filtering is client-side over base dataset\n     */\n    React.useEffect(() => {\n        if (!enabled) return;\n        if (opts.autoFetchOnFilterChange === false) return;\n        if (!didMountRef.current) return;\n\n        if (searchMode !== \"remote\" && searchMode !== \"hybrid\") return;\n\n        void fetchImpl();\n    }, [enabled, fetchImpl, filters, opts.autoFetchOnFilterChange, searchMode]);\n\n    /**\n     * Visible list (local/hybrid):\n     * - subject => search only that field\n     * - searchAll => search stringify\n     * - searchOnly => restrict to IDs\n     */\n    const visible = React.useMemo(() => {\n        if (searchMode !== \"local\" && searchMode !== \"hybrid\") return data;\n\n        const payload = buildSearchPayloadFromTarget(searchTarget);\n        let list = data;\n\n        if (payload?.searchOnly && payload.searchOnly.length) {\n            const allow = new Set(payload.searchOnly as any[]);\n            list = list.filter((item) => {\n                const k = getItemKey(item);\n                return k != null && allow.has(k as any);\n            });\n        }\n\n        const q = query.trim();\n        if (!q) return list;\n\n        const ql = q.toLowerCase();\n\n        if (payload?.subject) {\n            const key = payload.subject;\n            return list.filter((item: any) =>\n                String(item?.[key] ?? \"\")\n                    .toLowerCase()\n                    .includes(ql),\n            );\n        }\n\n        return list.filter((item: any) =>\n            stringifyForSearch(item).toLowerCase().includes(ql),\n        );\n    }, [data, getItemKey, query, searchMode, searchTarget]);\n\n    // ─────────────────────────────────────────────\n    // Selection API\n    // ─────────────────────────────────────────────\n\n    const selectedIds: DataKey | DataKey[] | null = React.useMemo(() => {\n        if (selectionMode === \"none\") return null;\n        if (selectionMode === \"single\") return selectedIdsArr[0] ?? null;\n        return selectedIdsArr;\n    }, [selectionMode, selectedIdsArr]);\n\n    const isSelected = React.useCallback(\n        (id: DataKey) => {\n            if (selectionMode === \"none\") return false;\n            return selectedIdsArr.includes(id);\n        },\n        [selectedIdsArr, selectionMode],\n    );\n\n    const clearSelection = React.useCallback(() => {\n        if (selectionMode === \"none\") return;\n        setSelectedIdsArr([]);\n    }, [selectionMode]);\n\n    const select = React.useCallback(\n        (idOrIds: DataKey | DataKey[]) => {\n            if (selectionMode === \"none\") return;\n\n            const ids = normalizeIds(idOrIds).filter(isKey);\n            if (!ids.length) return clearSelection();\n\n            for (const id of ids) {\n                const hit = dataById.get(id);\n                if (hit) selectedCacheRef.current.set(id, hit);\n            }\n\n            if (selectionMode === \"single\") {\n                setSelectedIdsArr([ids[0]]);\n                return;\n            }\n\n            setSelectedIdsArr(ids);\n        },\n        [dataById, normalizeIds, selectionMode],\n    );\n\n    const deselect = React.useCallback(\n        (idOrIds: DataKey | DataKey[]) => {\n            if (selectionMode === \"none\") return;\n\n            const ids = new Set(normalizeIds(idOrIds).filter(isKey));\n            if (!ids.size) return;\n\n            setSelectedIdsArr((prev) => {\n                const next = prev.filter((x) => !ids.has(x));\n                if (selectionMode === \"single\") return next.slice(0, 1);\n                return next;\n            });\n        },\n        [normalizeIds, selectionMode],\n    );\n\n    const toggle = React.useCallback(\n        (id: DataKey) => {\n            if (selectionMode === \"none\") return;\n\n            const hit = dataById.get(id);\n            if (hit) selectedCacheRef.current.set(id, hit);\n\n            if (selectionMode === \"single\") {\n                setSelectedIdsArr((prev) => (prev[0] === id ? [] : [id]));\n                return;\n            }\n\n            setSelectedIdsArr((prev) => {\n                const set = new Set<DataKey>(prev);\n                if (set.has(id)) set.delete(id);\n                else set.add(id);\n                return Array.from(set);\n            });\n        },\n        [dataById, selectionMode],\n    );\n\n    const selected = React.useMemo((): TItem | TItem[] | null => {\n        if (selectionMode === \"none\") return null;\n\n        if (selectionMode === \"single\") {\n            const id = selectedIdsArr[0];\n            if (id == null) return null;\n            return dataById.get(id) ?? selectedCacheRef.current.get(id) ?? null;\n        }\n\n        const out: TItem[] = [];\n        for (const id of selectedIdsArr) {\n            const item =\n                dataById.get(id) ?? selectedCacheRef.current.get(id) ?? null;\n            if (item) out.push(item);\n        }\n        return out;\n    }, [dataById, selectedIdsArr, selectionMode]);\n\n    const getSelection = React.useCallback(() => selected, [selected]);\n\n    React.useEffect(() => {\n        if (selectionMode === \"none\") {\n            setSelectedIdsArr([]);\n            return;\n        }\n        if (selectionMode === \"single\") {\n            setSelectedIdsArr((prev) => (prev.length ? [prev[0]] : []));\n        }\n    }, [selectionMode]);\n\n    return {\n        id: opts.id,\n\n        data,\n        visible,\n        res,\n\n        loading,\n        error,\n\n        query,\n        setQuery,\n\n        searchMode,\n        setSearchMode,\n\n        searchTarget,\n        setSearchTarget,\n\n        filters,\n        setFilters,\n        patchFilters,\n        clearFilters,\n\n        selectionMode,\n        selectedIds,\n        selected,\n\n        select,\n        deselect,\n        toggle,\n        clearSelection,\n        isSelected,\n        getSelection,\n\n        refresh,\n        override,\n        fetch: fetchImpl,\n    };\n}\n"]}