@cube-dev/ui-kit 0.74.3 → 0.75.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/es/_internal/hooks/index.js +1 -1
- package/es/_internal/hooks/use-chained-callback.js +1 -1
- package/es/_internal/hooks/use-debounced-value.js +1 -1
- package/es/_internal/hooks/use-deprecation-warning.js +1 -1
- package/es/_internal/hooks/use-effect-once.js +1 -1
- package/es/_internal/hooks/use-event.js +1 -1
- package/es/_internal/hooks/use-is-first-render.js +1 -1
- package/es/_internal/hooks/use-sync-ref.js +1 -1
- package/es/_internal/hooks/use-timer/index.js +1 -1
- package/es/_internal/hooks/use-timer/timer.js +1 -1
- package/es/_internal/hooks/use-timer/use-timer.js +1 -1
- package/es/_internal/hooks/use-update-effect.js +1 -1
- package/es/_internal/hooks/use-warn.js +1 -1
- package/es/_internal/index.js +1 -1
- package/es/components/Block.js +1 -1
- package/es/components/GlobalStyles.js +10 -15
- package/es/components/GridProvider.js +1 -1
- package/es/components/HiddenInput.js +25 -24
- package/es/components/Item.js +1 -1
- package/es/components/OpenTrasition.js +1 -1
- package/es/components/Root.js +2 -2
- package/es/components/actions/Action/Action.js +15 -19
- package/es/components/actions/Button/Button.js +2 -1
- package/es/components/actions/Button/index.js +1 -1
- package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/es/components/actions/CommandMenu/index.js +1 -1
- package/es/components/actions/CommandMenu/styled.js +1 -1
- package/es/components/actions/ItemButton/ItemButton.js +1 -1
- package/es/components/actions/ItemButton/index.js +1 -1
- package/es/components/actions/Menu/Menu.js +1 -1
- package/es/components/actions/Menu/MenuItem.js +3 -8
- package/es/components/actions/Menu/MenuSection.js +1 -1
- package/es/components/actions/Menu/MenuTrigger.js +1 -1
- package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/es/components/actions/Menu/context.js +1 -1
- package/es/components/actions/Menu/index.js +1 -1
- package/es/components/actions/Menu/styled.js +1 -1
- package/es/components/actions/index.js +1 -1
- package/es/components/actions/use-action.js +1 -1
- package/es/components/actions/use-anchored-menu.js +1 -1
- package/es/components/actions/use-context-menu.js +1 -1
- package/es/components/content/ActiveZone/ActiveZone.js +1 -1
- package/es/components/content/Alert/Alert.js +1 -1
- package/es/components/content/Alert/index.js +1 -1
- package/es/components/content/Alert/types.js +1 -1
- package/es/components/content/Alert/use-alert.js +1 -1
- package/es/components/content/Avatar/Avatar.js +1 -1
- package/es/components/content/Badge/Badge.js +1 -1
- package/es/components/content/Card/Card.js +1 -1
- package/es/components/content/Content.js +1 -1
- package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/es/components/content/CopyPasteBlock/index.js +1 -1
- package/es/components/content/CopySnippet/CopySnippet.js +1 -1
- package/es/components/content/CopySnippet/index.js +1 -1
- package/es/components/content/Divider.js +1 -1
- package/es/components/content/Footer.js +1 -1
- package/es/components/content/Header.js +1 -1
- package/es/components/content/HotKeys/HotKeys.js +1 -1
- package/es/components/content/HotKeys/index.js +1 -1
- package/es/components/content/ItemBase/ItemBase.js +9 -3
- package/es/components/content/ItemBase/index.js +1 -1
- package/es/components/content/List/SectionHeading.js +1 -1
- package/es/components/content/List/index.js +1 -1
- package/es/components/content/Paragraph.js +1 -1
- package/es/components/content/Placeholder/Placeholder.js +46 -41
- package/es/components/content/PrismCode/PrismCode.js +1 -1
- package/es/components/content/PrismCode/prismSetup.js +1 -1
- package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/es/components/content/Result/Result.js +1 -1
- package/es/components/content/Skeleton/Skeleton.js +1 -1
- package/es/components/content/Tag/Tag.js +1 -1
- package/es/components/content/Text.js +3 -3
- package/es/components/content/Title.js +3 -3
- package/es/components/fields/Checkbox/Checkbox.js +1 -1
- package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/es/components/fields/Checkbox/context.js +1 -1
- package/es/components/fields/Checkbox/index.js +1 -1
- package/es/components/fields/ComboBox/ComboBox.js +1 -1
- package/es/components/fields/ComboBox/index.js +1 -1
- package/es/components/fields/DatePicker/DateInput.js +1 -1
- package/es/components/fields/DatePicker/DateInputBase.js +1 -1
- package/es/components/fields/DatePicker/DatePicker.js +1 -1
- package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/es/components/fields/DatePicker/TimeInput.js +1 -1
- package/es/components/fields/DatePicker/index.js +1 -1
- package/es/components/fields/DatePicker/intl.js +1 -1
- package/es/components/fields/DatePicker/parseDate.js +1 -1
- package/es/components/fields/DatePicker/props.js +1 -1
- package/es/components/fields/DatePicker/types.js +1 -1
- package/es/components/fields/DatePicker/utils.js +1 -1
- package/es/components/fields/FileInput/FileInput.js +1 -1
- package/es/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/es/components/fields/FilterListBox/index.js +1 -1
- package/es/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/es/components/fields/FilterPicker/index.js +1 -1
- package/es/components/fields/Input/Input.js +1 -1
- package/es/components/fields/Input/index.js +1 -1
- package/es/components/fields/ListBox/ListBox.js +1 -1
- package/es/components/fields/ListBox/index.js +1 -1
- package/es/components/fields/NumberInput/NumberInput.js +1 -1
- package/es/components/fields/NumberInput/StepButton.js +1 -1
- package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/es/components/fields/RadioGroup/Radio.js +2 -2
- package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/es/components/fields/RadioGroup/context.js +1 -1
- package/es/components/fields/RadioGroup/index.js +1 -1
- package/es/components/fields/SearchInput/SearchInput.js +1 -1
- package/es/components/fields/SearchInput/index.js +1 -1
- package/es/components/fields/Select/Select.js +1 -1
- package/es/components/fields/Select/index.js +1 -1
- package/es/components/fields/Slider/Gradation.js +1 -1
- package/es/components/fields/Slider/Header.js +1 -1
- package/es/components/fields/Slider/RangeSlider.js +1 -1
- package/es/components/fields/Slider/Slider.js +1 -1
- package/es/components/fields/Slider/SliderBase.js +1 -1
- package/es/components/fields/Slider/SliderInput.js +1 -1
- package/es/components/fields/Slider/SliderThumb.js +1 -1
- package/es/components/fields/Slider/SliderTrack.js +1 -1
- package/es/components/fields/Slider/elements.js +1 -1
- package/es/components/fields/Slider/index.js +1 -1
- package/es/components/fields/Slider/types.js +1 -1
- package/es/components/fields/Switch/Switch.js +1 -1
- package/es/components/fields/Switch/index.js +1 -1
- package/es/components/fields/TextArea/TextArea.js +1 -1
- package/es/components/fields/TextArea/index.js +1 -1
- package/es/components/fields/TextInput/TextInput.js +1 -1
- package/es/components/fields/TextInput/TextInputBase.js +3 -2
- package/es/components/fields/TextInput/index.js +1 -1
- package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/es/components/fields/TextInputMapper/index.js +1 -1
- package/es/components/fields/index.js +1 -1
- package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
- package/es/components/form/FieldWrapper/index.js +1 -1
- package/es/components/form/FieldWrapper/types.js +1 -1
- package/es/components/form/Form/Field.js +1 -1
- package/es/components/form/Form/Form.js +1 -1
- package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/es/components/form/Form/ResetButton/index.js +1 -1
- package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/es/components/form/Form/SubmitButton/index.js +1 -1
- package/es/components/form/Form/SubmitError.js +1 -1
- package/es/components/form/Form/index.js +1 -1
- package/es/components/form/Form/types.js +1 -1
- package/es/components/form/Form/use-field/index.js +1 -1
- package/es/components/form/Form/use-field/types.js +1 -1
- package/es/components/form/Form/use-field/use-field-props.js +1 -1
- package/es/components/form/Form/use-field/use-field.js +1 -1
- package/es/components/form/Form/use-form.js +1 -1
- package/es/components/form/Form/validation.js +1 -1
- package/es/components/form/Label.js +1 -1
- package/es/components/form/index.js +1 -1
- package/es/components/form/wrapper.js +1 -1
- package/es/components/layout/Flex.js +1 -1
- package/es/components/layout/Flow.js +1 -1
- package/es/components/layout/Grid.js +1 -1
- package/es/components/layout/Panel.js +1 -1
- package/es/components/layout/Prefix.js +1 -1
- package/es/components/layout/ResizablePanel.js +1 -1
- package/es/components/layout/Space.js +1 -1
- package/es/components/layout/Suffix.js +1 -1
- package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
- package/es/components/navigation/Link/Link.js +1 -1
- package/es/components/organisms/FileTabs/FileTabs.js +1 -1
- package/es/components/organisms/Modal/Modal.js +59 -68
- package/es/components/organisms/StatsCard/StatsCard.js +1 -1
- package/es/components/other/Base64Upload/Base64Upload.js +1 -1
- package/es/components/other/Calendar/Calendar.js +1 -1
- package/es/components/other/Calendar/CalendarCell.js +1 -1
- package/es/components/other/Calendar/CalendarGrid.js +1 -1
- package/es/components/other/Calendar/RangeCalendar.js +1 -1
- package/es/components/other/CloudLogo/CloudLogo.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/es/components/overlays/AlertDialog/index.js +1 -1
- package/es/components/overlays/AlertDialog/types.js +1 -1
- package/es/components/overlays/Dialog/Dialog.js +1 -1
- package/es/components/overlays/Dialog/DialogContainer.js +1 -1
- package/es/components/overlays/Dialog/DialogForm.js +1 -1
- package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/es/components/overlays/Dialog/context.js +1 -1
- package/es/components/overlays/Dialog/index.js +1 -1
- package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/es/components/overlays/Modal/Modal.js +1 -1
- package/es/components/overlays/Modal/OpenTransition.js +1 -1
- package/es/components/overlays/Modal/Overlay.js +1 -1
- package/es/components/overlays/Modal/Popover.js +1 -1
- package/es/components/overlays/Modal/Tray.js +1 -1
- package/es/components/overlays/Modal/Underlay.js +1 -1
- package/es/components/overlays/Modal/index.js +1 -1
- package/es/components/overlays/Modal/types.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
- package/es/components/overlays/NewNotifications/Notification.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
- package/es/components/overlays/NewNotifications/index.js +1 -1
- package/es/components/overlays/NewNotifications/types.js +1 -1
- package/es/components/overlays/Notification/Notification.js +1 -1
- package/es/components/overlays/OverlayWrapper.js +1 -1
- package/es/components/overlays/Toasts/Toast.js +1 -1
- package/es/components/overlays/Toasts/index.js +1 -1
- package/es/components/overlays/Toasts/types.js +1 -1
- package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
- package/es/components/overlays/Tooltip/Tooltip.js +1 -1
- package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/es/components/overlays/Tooltip/context.js +1 -1
- package/es/components/overlays/Tooltip/index.js +1 -1
- package/es/components/portal/Portal.js +1 -1
- package/es/components/portal/PortalProvider.js +1 -1
- package/es/components/portal/index.js +1 -1
- package/es/components/portal/types.js +1 -1
- package/es/components/portal/usePortal.js +1 -1
- package/es/components/shared/InvalidIcon.js +1 -1
- package/es/components/shared/ValidIcon.js +1 -1
- package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/es/components/status/LoadingAnimation/index.js +1 -1
- package/es/components/status/Spin/Cube.js +1 -1
- package/es/components/status/Spin/InternalSpinner.js +1 -1
- package/es/components/status/Spin/Spin.js +1 -1
- package/es/components/status/Spin/SpinsContainer.js +1 -1
- package/es/components/status/Spin/index.js +1 -1
- package/es/components/status/Spin/types.js +1 -1
- package/es/components/status/index.js +1 -1
- package/es/data/item-themes.js +1 -1
- package/es/data/themes.js +1 -1
- package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/es/icons/AdjustmentsIcon.js +1 -1
- package/es/icons/AiIcon.js +1 -1
- package/es/icons/AreaChartIcon.js +1 -1
- package/es/icons/BackwardIcon.js +1 -1
- package/es/icons/BarChartIcon.js +1 -1
- package/es/icons/BellFilledIcon.js +1 -1
- package/es/icons/BellIcon.js +1 -1
- package/es/icons/BooleanIcon.js +1 -1
- package/es/icons/CalendarEditIcon.js +1 -1
- package/es/icons/CalendarIcon.js +1 -1
- package/es/icons/CaretDownIcon.js +1 -1
- package/es/icons/CaretUpIcon.js +1 -1
- package/es/icons/ChartAreaStackedIcon.js +1 -1
- package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/es/icons/ChartBarGroupedIcon.js +1 -1
- package/es/icons/ChartBarHorizontalIcon.js +1 -1
- package/es/icons/ChartBarLineIcon.js +1 -1
- package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/es/icons/ChartBarStackedIcon.js +1 -1
- package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/es/icons/ChartBoxPlot2Icon.js +1 -1
- package/es/icons/ChartBoxPlotIcon.js +1 -1
- package/es/icons/ChartBubbleIcon.js +1 -1
- package/es/icons/ChartDonut2Icon.js +1 -1
- package/es/icons/ChartFunnelIcon.js +1 -1
- package/es/icons/ChartKPIIcon.js +1 -1
- package/es/icons/ChartPie2Icon.js +1 -1
- package/es/icons/ChartScatterIcon.js +1 -1
- package/es/icons/CheckCircleFilledIcon.js +1 -1
- package/es/icons/CheckCircleIcon.js +1 -1
- package/es/icons/CheckIcon.js +1 -1
- package/es/icons/CircleFilledIcon.js +1 -1
- package/es/icons/ClearIcon.js +1 -1
- package/es/icons/CloseCircleFilledIcon.js +1 -1
- package/es/icons/CloseCircleIcon.js +1 -1
- package/es/icons/CloseIcon.js +1 -1
- package/es/icons/CodeIcon.js +1 -1
- package/es/icons/CopyIcon.js +1 -1
- package/es/icons/CountIcon.js +1 -1
- package/es/icons/CubeIcon.js +1 -1
- package/es/icons/DangerIcon.js +1 -1
- package/es/icons/DashboardIcon.js +1 -1
- package/es/icons/DatabaseIcon.js +1 -1
- package/es/icons/DirectionIcon.js +1 -1
- package/es/icons/DonutIcon.js +1 -1
- package/es/icons/DownIcon.js +1 -1
- package/es/icons/EditIcon.js +1 -1
- package/es/icons/ExclamationCircleFilledIcon.js +1 -1
- package/es/icons/ExclamationCircleIcon.js +1 -1
- package/es/icons/ExclamationIcon.js +1 -1
- package/es/icons/EyeIcon.js +1 -1
- package/es/icons/EyeInvisibleIcon.js +1 -1
- package/es/icons/FilterIcon.js +1 -1
- package/es/icons/FolderFilledIcon.js +1 -1
- package/es/icons/FolderIcon.js +1 -1
- package/es/icons/FolderOpenFilledIcon.js +1 -1
- package/es/icons/FolderOpenIcon.js +1 -1
- package/es/icons/ForwardIcon.js +1 -1
- package/es/icons/HierarchyIcon.js +1 -1
- package/es/icons/Icon.js +1 -1
- package/es/icons/InfoCircleIcon.js +1 -1
- package/es/icons/InfoIcon.js +1 -1
- package/es/icons/KeyIcon.js +1 -1
- package/es/icons/LeftIcon.js +1 -1
- package/es/icons/LineChartIcon.js +1 -1
- package/es/icons/LoadingIcon.js +1 -1
- package/es/icons/LockFilledIcon.js +1 -1
- package/es/icons/LockIcon.js +1 -1
- package/es/icons/MoreIcon.js +1 -1
- package/es/icons/NotAllowedIcon.js +1 -1
- package/es/icons/NumberIcon.js +1 -1
- package/es/icons/PauseCircleFilledIcon.js +1 -1
- package/es/icons/PauseCircleIcon.js +1 -1
- package/es/icons/PauseIcon.js +1 -1
- package/es/icons/PieChartIcon.js +1 -1
- package/es/icons/PlayCircleIcon.js +1 -1
- package/es/icons/PlayIcon.js +1 -1
- package/es/icons/PlusIcon.js +1 -1
- package/es/icons/ReloadIcon.js +1 -1
- package/es/icons/ReportIcon.js +1 -1
- package/es/icons/ReturnIcon.js +1 -1
- package/es/icons/RightIcon.js +1 -1
- package/es/icons/SchemeIcon.js +1 -1
- package/es/icons/SearchIcon.js +1 -1
- package/es/icons/SettingsIcon.js +1 -1
- package/es/icons/ShieldFilledIcon.js +1 -1
- package/es/icons/ShieldIcon.js +1 -1
- package/es/icons/SlashIcon.js +1 -1
- package/es/icons/SparklesIcon.js +1 -1
- package/es/icons/SqlIcon.js +1 -1
- package/es/icons/StatsIcon.js +1 -1
- package/es/icons/StopIcon.js +1 -1
- package/es/icons/StringIcon.js +1 -1
- package/es/icons/SwitchIcon.js +1 -1
- package/es/icons/TableIcon.js +1 -1
- package/es/icons/ThumbsDownIcon.js +1 -1
- package/es/icons/ThumbsUpIcon.js +1 -1
- package/es/icons/ThunderboltCrossedIcon.js +1 -1
- package/es/icons/ThunderboltFilledIcon.js +1 -1
- package/es/icons/ThunderboltIcon.js +1 -1
- package/es/icons/TimeIcon.js +1 -1
- package/es/icons/UnlockIcon.js +1 -1
- package/es/icons/UpIcon.js +1 -1
- package/es/icons/UserGroupIcon.js +1 -1
- package/es/icons/UserIcon.js +1 -1
- package/es/icons/UserLockIcon.js +1 -1
- package/es/icons/ViewIcon.js +1 -1
- package/es/icons/WarningFilledIcon.js +1 -1
- package/es/icons/WarningIcon.js +1 -1
- package/es/icons/add-new-icon.js +1 -1
- package/es/icons/index.js +1 -1
- package/es/icons/wrap-icon.js +1 -1
- package/es/index.js +1 -1
- package/es/provider.js +1 -1
- package/es/providers/TrackingProvider.js +1 -1
- package/es/services/notification.js +1 -1
- package/es/shared/form.js +1 -1
- package/es/shared/index.js +1 -1
- package/es/stories/Form.legacy-stories.js +1 -1
- package/es/stories/FormFieldArgs.js +1 -1
- package/es/stories/Layout.stories.js +1 -1
- package/es/stories/Tasty.stories.js +1 -1
- package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
- package/es/stories/components/DialogFormApp.js +1 -1
- package/es/stories/components/StyledButton.js +1 -1
- package/es/stories/lists/baseProps.js +1 -2
- package/es/tasty/debug.js +906 -0
- package/es/tasty/index.js +3 -1
- package/es/tasty/injector/index.js +171 -0
- package/es/tasty/injector/injector.js +688 -0
- package/es/tasty/injector/sheet-manager.js +754 -0
- package/es/tasty/injector/types.js +10 -0
- package/es/tasty/parser/classify.js +1 -1
- package/es/tasty/parser/const.js +1 -1
- package/es/tasty/parser/lru.js +38 -2
- package/es/tasty/parser/parser.js +1 -1
- package/es/tasty/parser/tokenizer.js +1 -1
- package/es/tasty/parser/types.js +1 -1
- package/es/tasty/providers/BreakpointsProvider.js +1 -1
- package/es/tasty/styles/align.js +1 -1
- package/es/tasty/styles/border.js +1 -1
- package/es/tasty/styles/boxShadow.combinator.js +1 -1
- package/es/tasty/styles/color.js +8 -12
- package/es/tasty/styles/createStyle.js +19 -4
- package/es/tasty/styles/dimension.js +1 -1
- package/es/tasty/styles/display.js +1 -1
- package/es/tasty/styles/fade.js +1 -1
- package/es/tasty/styles/fill.js +6 -8
- package/es/tasty/styles/flow.js +1 -1
- package/es/tasty/styles/font.js +1 -1
- package/es/tasty/styles/fontStyle.js +1 -1
- package/es/tasty/styles/gap.js +1 -1
- package/es/tasty/styles/groupRadius.js +1 -1
- package/es/tasty/styles/height.js +1 -1
- package/es/tasty/styles/index.js +1 -1
- package/es/tasty/styles/inset.js +1 -1
- package/es/tasty/styles/justify.js +1 -1
- package/es/tasty/styles/list.js +1 -1
- package/es/tasty/styles/margin.js +1 -1
- package/es/tasty/styles/marginBlock.js +1 -1
- package/es/tasty/styles/marginInline.js +1 -1
- package/es/tasty/styles/outline.js +1 -1
- package/es/tasty/styles/padding.js +1 -1
- package/es/tasty/styles/paddingBlock.js +1 -1
- package/es/tasty/styles/paddingInline.js +1 -1
- package/es/tasty/styles/place.js +1 -1
- package/es/tasty/styles/predefined.js +1 -3
- package/es/tasty/styles/preset.js +1 -1
- package/es/tasty/styles/radius.js +1 -1
- package/es/tasty/styles/reset.js +40 -44
- package/es/tasty/styles/scrollbar.js +1 -1
- package/es/tasty/styles/shadow.js +1 -1
- package/es/tasty/styles/styledScrollbar.js +1 -1
- package/es/tasty/styles/transition.js +2 -1
- package/es/tasty/styles/types.js +1 -1
- package/es/tasty/styles/width.js +1 -1
- package/es/tasty/tasty.js +94 -20
- package/es/tasty/types.js +1 -1
- package/es/tasty/utils/cache-wrapper.js +1 -1
- package/es/tasty/utils/case-converter.js +1 -1
- package/es/tasty/utils/colors.js +1 -1
- package/es/tasty/utils/dotize.js +1 -1
- package/es/tasty/utils/filterBaseProps.js +1 -1
- package/es/tasty/utils/getDisplayName.js +1 -1
- package/es/tasty/utils/getModCombinations.js +26 -30
- package/es/tasty/utils/mergeStyles.js +1 -1
- package/es/tasty/utils/modAttrs.js +1 -1
- package/es/tasty/utils/renderStyles.js +670 -58
- package/es/tasty/utils/responsive.js +1 -7
- package/es/tasty/utils/string.js +1 -1
- package/es/tasty/utils/styles.js +62 -235
- package/es/tasty/utils/warnings.js +1 -1
- package/es/tokens.js +1 -12
- package/es/type-checks.js +1 -1
- package/es/utils/ResizeSensor.js +1 -1
- package/es/utils/modules.js +1 -1
- package/es/utils/promise.js +1 -1
- package/es/utils/random.js +1 -1
- package/es/utils/range.js +1 -1
- package/es/utils/react/Slots.js +1 -1
- package/es/utils/react/chain.js +1 -1
- package/es/utils/react/forwardRefWithGenerics.js +1 -1
- package/es/utils/react/index.js +1 -1
- package/es/utils/react/interactions.js +1 -1
- package/es/utils/react/isTextOnly.js +1 -1
- package/es/utils/react/mapProps.js +1 -1
- package/es/utils/react/mergeProps.js +1 -1
- package/es/utils/react/nullableValue.js +1 -1
- package/es/utils/react/sharedStore.js +1 -1
- package/es/utils/react/useCombinedRefs.js +1 -1
- package/es/utils/react/useControlledFocusVisible.js +1 -1
- package/es/utils/react/useEventBus.js +1 -1
- package/es/utils/react/useId.js +1 -1
- package/es/utils/react/useIsDarwin.js +1 -1
- package/es/utils/react/useKeySymbols.js +1 -1
- package/es/utils/react/useLayoutEffect.js +1 -1
- package/es/utils/react/useQaProps.js +1 -1
- package/es/utils/react/useViewportSize.js +1 -1
- package/es/utils/react/wrapNodeIfPlain.js +1 -1
- package/es/utils/transitions.js +1 -1
- package/es/utils/tree.js +1 -1
- package/es/utils/warnings.js +1 -1
- package/es/version.js +2 -2
- package/package.json +1 -1
- package/types/components/HiddenInput.d.ts +1 -3
- package/types/components/actions/Button/Button.d.ts +1 -0
- package/types/components/actions/Menu/styled.d.ts +702 -705
- package/types/components/actions/use-action.d.ts +1 -1
- package/types/components/content/List/SectionHeading.d.ts +234 -235
- package/types/components/fields/DatePicker/DatePickerElement.d.ts +234 -235
- package/types/tasty/debug.d.ts +250 -0
- package/types/tasty/index.d.ts +2 -0
- package/types/tasty/injector/index.d.ts +71 -0
- package/types/tasty/injector/injector.d.ts +109 -0
- package/types/tasty/injector/sheet-manager.d.ts +94 -0
- package/types/tasty/injector/types.d.ts +90 -0
- package/types/tasty/parser/lru.d.ts +5 -1
- package/types/tasty/styles/color.d.ts +3 -1
- package/types/tasty/styles/reset.d.ts +1 -2
- package/types/tasty/types.d.ts +0 -2
- package/types/tasty/utils/getModCombinations.d.ts +9 -1
- package/types/tasty/utils/renderStyles.d.ts +25 -7
- package/types/tasty/utils/responsive.d.ts +0 -1
- package/types/tasty/utils/styles.d.ts +6 -90
- package/types/tokens.d.ts +0 -11
@@ -0,0 +1,906 @@
|
|
1
|
+
/**
|
2
|
+
* @license MIT
|
3
|
+
* author: Cube Dev Team
|
4
|
+
* @cube-dev/ui-kit v0.75.0
|
5
|
+
* Released under the MIT license.
|
6
|
+
*/
|
7
|
+
|
8
|
+
/**
|
9
|
+
* Debug utilities for inspecting tasty-generated CSS at runtime
|
10
|
+
*/
|
11
|
+
import { getCssText, getCssTextForNode, injector } from './injector';
|
12
|
+
/**
|
13
|
+
* Pretty-print CSS with proper indentation and formatting
|
14
|
+
*/
|
15
|
+
function prettifyCSS(css) {
|
16
|
+
if (!css || css.trim() === '') {
|
17
|
+
return '';
|
18
|
+
}
|
19
|
+
// First, normalize whitespace but preserve structure
|
20
|
+
let formatted = css.replace(/\s+/g, ' ').trim();
|
21
|
+
// Add newlines after opening braces
|
22
|
+
formatted = formatted.replace(/\s*\{\s*/g, ' {\n');
|
23
|
+
// Add newlines after semicolons (but not inside strings or functions)
|
24
|
+
formatted = formatted.replace(/;(?![^"']*["'][^"']*$)(?![^()]*\))/g, ';\n');
|
25
|
+
// Add newlines before closing braces
|
26
|
+
formatted = formatted.replace(/\s*\}\s*/g, '\n}\n');
|
27
|
+
// Handle comma-separated selectors (only outside of property values)
|
28
|
+
// This regex looks for commas that are:
|
29
|
+
// 1. Not inside quotes
|
30
|
+
// 2. Not inside parentheses (CSS functions)
|
31
|
+
// 3. Not followed by a colon (not in a property value)
|
32
|
+
formatted = formatted.replace(/,(?![^"']*["'][^"']*$)(?![^()]*\))(?=.*:.*\{|.*\{)/g, ',\n');
|
33
|
+
// Process line by line for proper indentation
|
34
|
+
const lines = formatted.split('\n');
|
35
|
+
let indentLevel = 0;
|
36
|
+
const indentSize = 2;
|
37
|
+
const formattedLines = lines.map((line) => {
|
38
|
+
const trimmed = line.trim();
|
39
|
+
if (!trimmed)
|
40
|
+
return '';
|
41
|
+
// Handle closing braces - decrease indent first
|
42
|
+
if (trimmed === '}') {
|
43
|
+
indentLevel = Math.max(0, indentLevel - 1);
|
44
|
+
return ' '.repeat(indentLevel * indentSize) + trimmed;
|
45
|
+
}
|
46
|
+
// Current line with proper indentation
|
47
|
+
const indent = ' '.repeat(indentLevel * indentSize);
|
48
|
+
let result = indent + trimmed;
|
49
|
+
// Handle opening braces - increase indent for next line
|
50
|
+
if (trimmed.endsWith('{')) {
|
51
|
+
indentLevel++;
|
52
|
+
}
|
53
|
+
return result;
|
54
|
+
});
|
55
|
+
// Clean up the result and ensure proper spacing
|
56
|
+
let result = formattedLines
|
57
|
+
.filter((line) => line.trim()) // Remove empty lines
|
58
|
+
.join('\n')
|
59
|
+
.replace(/\n{3,}/g, '\n\n') // Max 2 consecutive newlines
|
60
|
+
.trim();
|
61
|
+
// Final cleanup: ensure single spaces in function calls
|
62
|
+
result = result.replace(/,\s+/g, ', ');
|
63
|
+
return result;
|
64
|
+
}
|
65
|
+
/**
|
66
|
+
* Debug utilities for inspecting tasty styles in runtime applications
|
67
|
+
*/
|
68
|
+
export const tastyDebug = {
|
69
|
+
/**
|
70
|
+
* Get CSS for a specific tasty class (e.g., 't24')
|
71
|
+
*/
|
72
|
+
getCSSForClass(className) {
|
73
|
+
if (!className.match(/^t\d+$/)) {
|
74
|
+
console.warn(`"${className}" doesn't look like a tasty class. Expected format: t{number}`);
|
75
|
+
}
|
76
|
+
const css = injector.instance.getCssTextForClasses([className]);
|
77
|
+
return prettifyCSS(css);
|
78
|
+
},
|
79
|
+
/**
|
80
|
+
* Get CSS for multiple tasty classes
|
81
|
+
*/
|
82
|
+
getCSSForClasses(classNames) {
|
83
|
+
const css = injector.instance.getCssTextForClasses(classNames);
|
84
|
+
return prettifyCSS(css);
|
85
|
+
},
|
86
|
+
/**
|
87
|
+
* Log CSS for a specific tasty class (e.g., 't24') to console
|
88
|
+
*/
|
89
|
+
logCSSForClass(className) {
|
90
|
+
if (!className.match(/^t\d+$/)) {
|
91
|
+
console.warn(`"${className}" doesn't look like a tasty class. Expected format: t{number}`);
|
92
|
+
}
|
93
|
+
const css = this.getCSSForClass(className);
|
94
|
+
this.logCSS(css, `CSS for class "${className}"`);
|
95
|
+
},
|
96
|
+
/**
|
97
|
+
* Log CSS for multiple tasty classes to console
|
98
|
+
*/
|
99
|
+
logCSSForClasses(classNames) {
|
100
|
+
const css = this.getCSSForClasses(classNames);
|
101
|
+
const title = `CSS for classes [${classNames.join(', ')}]`;
|
102
|
+
this.logCSS(css, title);
|
103
|
+
},
|
104
|
+
/**
|
105
|
+
* Inspect an element by CSS selector and get its tasty CSS
|
106
|
+
*/
|
107
|
+
inspectElement(selector) {
|
108
|
+
const element = document.querySelector(selector);
|
109
|
+
if (!element) {
|
110
|
+
return `Element not found: ${selector}`;
|
111
|
+
}
|
112
|
+
console.group(`🎨 Tasty CSS for "${selector}"`);
|
113
|
+
console.log('Element:', element);
|
114
|
+
const css = getCssTextForNode(element);
|
115
|
+
if (css) {
|
116
|
+
const prettified = prettifyCSS(css);
|
117
|
+
console.log('Generated CSS:\n' + prettified);
|
118
|
+
console.groupEnd();
|
119
|
+
return prettified;
|
120
|
+
}
|
121
|
+
else {
|
122
|
+
console.log('No tasty CSS found for this element');
|
123
|
+
console.groupEnd();
|
124
|
+
return 'No tasty CSS found';
|
125
|
+
}
|
126
|
+
},
|
127
|
+
/**
|
128
|
+
* Inspect a DOM element directly and get its tasty CSS
|
129
|
+
*/
|
130
|
+
inspectDOMElement(element) {
|
131
|
+
if (!element) {
|
132
|
+
return 'Element is null or undefined';
|
133
|
+
}
|
134
|
+
console.group('🎨 Tasty CSS for element');
|
135
|
+
console.log('Element:', element);
|
136
|
+
const css = getCssTextForNode(element);
|
137
|
+
if (css) {
|
138
|
+
const prettified = prettifyCSS(css);
|
139
|
+
console.log('Generated CSS:\n' + prettified);
|
140
|
+
console.groupEnd();
|
141
|
+
return prettified;
|
142
|
+
}
|
143
|
+
else {
|
144
|
+
console.log('No tasty CSS found for this element');
|
145
|
+
console.groupEnd();
|
146
|
+
return 'No tasty CSS found';
|
147
|
+
}
|
148
|
+
},
|
149
|
+
/**
|
150
|
+
* Get all tasty CSS currently injected into the page
|
151
|
+
*/
|
152
|
+
getAllCSS() {
|
153
|
+
return getCssText();
|
154
|
+
},
|
155
|
+
/**
|
156
|
+
* Find all tasty classes used in the page (in DOM)
|
157
|
+
*/
|
158
|
+
findAllTastyClasses() {
|
159
|
+
const classes = new Set();
|
160
|
+
// Find all elements with class attributes
|
161
|
+
const elements = document.querySelectorAll('[class]');
|
162
|
+
elements.forEach((element) => {
|
163
|
+
const classList = element.getAttribute('class');
|
164
|
+
if (classList) {
|
165
|
+
// Extract tasty classes (t + digits)
|
166
|
+
const tastyClasses = classList
|
167
|
+
.split(/\s+/)
|
168
|
+
.filter((cls) => /^t\d+$/.test(cls));
|
169
|
+
tastyClasses.forEach((cls) => classes.add(cls));
|
170
|
+
}
|
171
|
+
});
|
172
|
+
return Array.from(classes).sort((a, b) => {
|
173
|
+
// Sort numerically by the number part
|
174
|
+
const aNum = parseInt(a.slice(1));
|
175
|
+
const bNum = parseInt(b.slice(1));
|
176
|
+
return aNum - bNum;
|
177
|
+
});
|
178
|
+
},
|
179
|
+
/**
|
180
|
+
* Find all tasty classes that have styles in the stylesheet (used + unused)
|
181
|
+
*/
|
182
|
+
findAllStyledClasses() {
|
183
|
+
const registry = injector.instance['sheetManager'].getRegistry(document);
|
184
|
+
const classes = new Set();
|
185
|
+
// Add all classes from rules map (active + unused)
|
186
|
+
if (registry?.rules) {
|
187
|
+
for (const className of registry.rules.keys()) {
|
188
|
+
if (/^t\d+$/.test(className)) {
|
189
|
+
classes.add(className);
|
190
|
+
}
|
191
|
+
}
|
192
|
+
}
|
193
|
+
return Array.from(classes).sort((a, b) => {
|
194
|
+
// Sort numerically by the number part
|
195
|
+
const aNum = parseInt(a.slice(1));
|
196
|
+
const bNum = parseInt(b.slice(1));
|
197
|
+
return aNum - bNum;
|
198
|
+
});
|
199
|
+
},
|
200
|
+
/**
|
201
|
+
* Get active vs cached class breakdown
|
202
|
+
*/
|
203
|
+
getClassUsage() {
|
204
|
+
const domClasses = this.findAllTastyClasses();
|
205
|
+
const styledClasses = this.findAllStyledClasses();
|
206
|
+
const registry = injector.instance['sheetManager'].getRegistry(document);
|
207
|
+
const activeClasses = domClasses;
|
208
|
+
const cachedClasses = styledClasses.filter((cls) => !domClasses.includes(cls));
|
209
|
+
// Also check unusedRules registry for classes that are marked as cached (unused but kept for performance)
|
210
|
+
if (registry?.unusedRules) {
|
211
|
+
for (const className of registry.unusedRules.keys()) {
|
212
|
+
if (/^t\d+$/.test(className) && !cachedClasses.includes(className)) {
|
213
|
+
cachedClasses.push(className);
|
214
|
+
}
|
215
|
+
}
|
216
|
+
}
|
217
|
+
return {
|
218
|
+
activeClasses: activeClasses.sort((a, b) => {
|
219
|
+
const aNum = parseInt(a.slice(1));
|
220
|
+
const bNum = parseInt(b.slice(1));
|
221
|
+
return aNum - bNum;
|
222
|
+
}),
|
223
|
+
cachedClasses: cachedClasses.sort((a, b) => {
|
224
|
+
const aNum = parseInt(a.slice(1));
|
225
|
+
const bNum = parseInt(b.slice(1));
|
226
|
+
return aNum - bNum;
|
227
|
+
}),
|
228
|
+
totalStyledClasses: styledClasses,
|
229
|
+
};
|
230
|
+
},
|
231
|
+
/**
|
232
|
+
* Get a comprehensive summary of all tasty styles
|
233
|
+
*/
|
234
|
+
getSummary() {
|
235
|
+
const usage = this.getClassUsage();
|
236
|
+
const allCSS = this.getAllCSS();
|
237
|
+
const activeCSS = this.getCSSForClasses(usage.activeClasses);
|
238
|
+
const cachedCSS = this.getCSSForClasses(usage.cachedClasses);
|
239
|
+
const globalCSS = this.getGlobalCSS();
|
240
|
+
const globalBreakdown = this.getGlobalCSSBreakdown();
|
241
|
+
const metrics = injector.instance.getMetrics();
|
242
|
+
const definedProperties = this.getDefinedProperties();
|
243
|
+
const definedKeyframes = this.getDefinedKeyframes();
|
244
|
+
const cleanupSummary = this.getCleanupSummary();
|
245
|
+
const summary = {
|
246
|
+
activeClasses: usage.activeClasses,
|
247
|
+
cachedClasses: usage.cachedClasses,
|
248
|
+
totalStyledClasses: usage.totalStyledClasses,
|
249
|
+
activeCSSSize: activeCSS.length,
|
250
|
+
cachedCSSSize: cachedCSS.length,
|
251
|
+
totalCSSSize: allCSS.length,
|
252
|
+
activeCSS,
|
253
|
+
cachedCSS,
|
254
|
+
allCSS,
|
255
|
+
globalCSS,
|
256
|
+
globalCSSSize: globalCSS.length,
|
257
|
+
globalRuleCount: globalBreakdown.totalRules,
|
258
|
+
metrics,
|
259
|
+
definedProperties,
|
260
|
+
definedKeyframes,
|
261
|
+
propertyCount: definedProperties.length,
|
262
|
+
keyframeCount: definedKeyframes.length,
|
263
|
+
cleanupSummary,
|
264
|
+
};
|
265
|
+
console.group('🎨 Comprehensive Tasty Debug Summary');
|
266
|
+
console.log(`📊 Style Cache Status:`);
|
267
|
+
console.log(` • Active classes (in DOM): ${summary.activeClasses.length}`);
|
268
|
+
console.log(` • Cached classes (performance cache): ${summary.cachedClasses.length}`);
|
269
|
+
console.log(` • Total styled classes: ${summary.totalStyledClasses.length}`);
|
270
|
+
console.log(`💾 CSS Size:`);
|
271
|
+
console.log(` • Active CSS: ${summary.activeCSSSize} characters`);
|
272
|
+
console.log(` • Cached CSS: ${summary.cachedCSSSize} characters`);
|
273
|
+
console.log(` • Global CSS: ${summary.globalCSSSize} characters (${summary.globalRuleCount} rules)`);
|
274
|
+
console.log(` • Total CSS: ${summary.totalCSSSize} characters`);
|
275
|
+
console.log('🏷️ Properties & Keyframes:');
|
276
|
+
console.log(` • Defined @property: ${definedProperties.length}`);
|
277
|
+
console.log(` • Defined keyframes: ${definedKeyframes.length}`);
|
278
|
+
if (definedProperties.length > 0) {
|
279
|
+
console.log(' • Properties:', definedProperties);
|
280
|
+
}
|
281
|
+
if (definedKeyframes.length > 0) {
|
282
|
+
console.log(' • Keyframes:', definedKeyframes.map((k) => `${k.name} (refs: ${k.refCount})`));
|
283
|
+
}
|
284
|
+
console.log('🧹 Cleanup Statistics:');
|
285
|
+
if (cleanupSummary.enabled) {
|
286
|
+
console.log(` • Total cleanups performed: ${cleanupSummary.totalCleanups}`);
|
287
|
+
console.log(` • Total classes deleted: ${cleanupSummary.totalClassesDeleted}`);
|
288
|
+
console.log(` • Total CSS deleted: ${cleanupSummary.totalCssDeleted} chars`);
|
289
|
+
console.log(` • Total rules deleted: ${cleanupSummary.totalRulesDeleted}`);
|
290
|
+
if (cleanupSummary.totalCleanups > 0) {
|
291
|
+
console.log(` • Avg classes per cleanup: ${cleanupSummary.averageClassesPerCleanup.toFixed(1)}`);
|
292
|
+
console.log(` • Avg CSS per cleanup: ${cleanupSummary.averageCssPerCleanup.toFixed(0)} chars`);
|
293
|
+
console.log(` • Avg rules per cleanup: ${cleanupSummary.averageRulesPerCleanup.toFixed(1)}`);
|
294
|
+
}
|
295
|
+
if (cleanupSummary.lastCleanup) {
|
296
|
+
console.log(` • Last cleanup: ${cleanupSummary.lastCleanup.date}`);
|
297
|
+
}
|
298
|
+
}
|
299
|
+
else {
|
300
|
+
console.log(' • Metrics collection disabled (enable with collectMetrics: true)');
|
301
|
+
}
|
302
|
+
console.log(`⚡ Performance Metrics:`);
|
303
|
+
if (metrics) {
|
304
|
+
console.log(` • Cache hits: ${metrics.hits}`);
|
305
|
+
console.log(` • Cache misses: ${metrics.misses}`);
|
306
|
+
console.log(` • Cached style reuses: ${metrics.unusedHits}`);
|
307
|
+
console.log(` • Total insertions: ${metrics.totalInsertions}`);
|
308
|
+
console.log(` • Styles cleaned up: ${metrics.stylesCleanedUp}`);
|
309
|
+
const hitRate = metrics.hits + metrics.misses > 0
|
310
|
+
? (((metrics.hits + metrics.unusedHits) /
|
311
|
+
(metrics.hits + metrics.misses)) *
|
312
|
+
100).toFixed(1)
|
313
|
+
: 0;
|
314
|
+
console.log(` • Overall cache hit rate: ${hitRate}%`);
|
315
|
+
}
|
316
|
+
else {
|
317
|
+
console.log(` • Metrics not available (enable with collectMetrics: true)`);
|
318
|
+
}
|
319
|
+
console.log('🔍 Details:');
|
320
|
+
console.log(' • Active classes:', summary.activeClasses);
|
321
|
+
console.log(' • Cached classes:', summary.cachedClasses);
|
322
|
+
console.log('ℹ️ Note: Cached styles are kept for performance - avoiding expensive DOM operations');
|
323
|
+
console.groupEnd();
|
324
|
+
return summary;
|
325
|
+
},
|
326
|
+
/**
|
327
|
+
* Helper to log CSS in a readable format
|
328
|
+
*/
|
329
|
+
logCSS(css, title = 'CSS') {
|
330
|
+
if (!css || css.trim() === '') {
|
331
|
+
console.log(`${title}: (empty)`);
|
332
|
+
return;
|
333
|
+
}
|
334
|
+
console.group(`🎨 ${title}`);
|
335
|
+
const prettified = prettifyCSS(css);
|
336
|
+
console.log(prettified);
|
337
|
+
console.groupEnd();
|
338
|
+
},
|
339
|
+
/**
|
340
|
+
* Advanced inspection with detailed breakdown and statistics
|
341
|
+
*/
|
342
|
+
inspect(target) {
|
343
|
+
const element = typeof target === 'string' ? document.querySelector(target) : target;
|
344
|
+
if (!element) {
|
345
|
+
console.error(`Element not found: ${target}`);
|
346
|
+
return {
|
347
|
+
element: null,
|
348
|
+
tastyClasses: [],
|
349
|
+
css: '',
|
350
|
+
cssSize: 0,
|
351
|
+
ruleCount: 0,
|
352
|
+
breakdown: {},
|
353
|
+
stats: {
|
354
|
+
totalClasses: 0,
|
355
|
+
totalRules: 0,
|
356
|
+
totalCSSSize: 0,
|
357
|
+
averageRulesPerClass: 0,
|
358
|
+
averageCSSPerClass: 0,
|
359
|
+
},
|
360
|
+
};
|
361
|
+
}
|
362
|
+
// Find tasty classes on this element
|
363
|
+
const classList = element.getAttribute('class') || '';
|
364
|
+
const tastyClasses = classList
|
365
|
+
.split(/\s+/)
|
366
|
+
.filter((cls) => /^t\d+$/.test(cls));
|
367
|
+
// Get CSS for the entire subtree
|
368
|
+
const fullCSS = getCssTextForNode(element);
|
369
|
+
const prettifiedCSS = prettifyCSS(fullCSS);
|
370
|
+
// Count CSS rules in the full CSS
|
371
|
+
const ruleCount = (fullCSS.match(/\{[^}]*\}/g) || []).length;
|
372
|
+
// Get CSS breakdown per class with detailed stats
|
373
|
+
const breakdown = {};
|
374
|
+
let totalClassRules = 0;
|
375
|
+
let totalClassCSSSize = 0;
|
376
|
+
tastyClasses.forEach((className) => {
|
377
|
+
const classCSS = this.getCSSForClass(className);
|
378
|
+
const classRuleCount = (classCSS.match(/\{[^}]*\}/g) || []).length;
|
379
|
+
breakdown[className] = {
|
380
|
+
css: classCSS,
|
381
|
+
cssSize: classCSS.length,
|
382
|
+
ruleCount: classRuleCount,
|
383
|
+
};
|
384
|
+
totalClassRules += classRuleCount;
|
385
|
+
totalClassCSSSize += classCSS.length;
|
386
|
+
});
|
387
|
+
// Calculate statistics
|
388
|
+
const stats = {
|
389
|
+
totalClasses: tastyClasses.length,
|
390
|
+
totalRules: totalClassRules,
|
391
|
+
totalCSSSize: totalClassCSSSize,
|
392
|
+
averageRulesPerClass: tastyClasses.length > 0 ? totalClassRules / tastyClasses.length : 0,
|
393
|
+
averageCSSPerClass: tastyClasses.length > 0 ? totalClassCSSSize / tastyClasses.length : 0,
|
394
|
+
};
|
395
|
+
const result = {
|
396
|
+
element,
|
397
|
+
tastyClasses,
|
398
|
+
css: prettifiedCSS,
|
399
|
+
cssSize: fullCSS.length,
|
400
|
+
ruleCount,
|
401
|
+
breakdown,
|
402
|
+
stats,
|
403
|
+
};
|
404
|
+
console.group(`🔍 Detailed Tasty Inspection`);
|
405
|
+
console.log('Element:', element);
|
406
|
+
console.log('📊 Overview:');
|
407
|
+
console.log(` • Tasty classes: ${stats.totalClasses}`);
|
408
|
+
console.log(` • Total rules applied: ${ruleCount}`);
|
409
|
+
console.log(` • Total CSS size: ${fullCSS.length} characters`);
|
410
|
+
console.log('🏷️ Classes:', tastyClasses);
|
411
|
+
console.log('📈 Statistics:');
|
412
|
+
console.log(` • Rules per class (avg): ${stats.averageRulesPerClass.toFixed(1)}`);
|
413
|
+
console.log(` • CSS per class (avg): ${stats.averageCSSPerClass.toFixed(0)} chars`);
|
414
|
+
console.log('🎨 Element CSS:\n' + prettifiedCSS);
|
415
|
+
console.log('🔨 CSS breakdown by class:');
|
416
|
+
Object.entries(breakdown).forEach(([className, data]) => {
|
417
|
+
console.log(` ${className}: ${data.ruleCount} rules, ${data.cssSize} chars`);
|
418
|
+
});
|
419
|
+
console.groupEnd();
|
420
|
+
return result;
|
421
|
+
},
|
422
|
+
/**
|
423
|
+
* Get CSS for active classes only
|
424
|
+
*/
|
425
|
+
getActiveCSS() {
|
426
|
+
const usage = this.getClassUsage();
|
427
|
+
return this.getCSSForClasses(usage.activeClasses);
|
428
|
+
},
|
429
|
+
/**
|
430
|
+
* Get CSS for cached classes only
|
431
|
+
*/
|
432
|
+
getCachedCSS() {
|
433
|
+
const usage = this.getClassUsage();
|
434
|
+
return this.getCSSForClasses(usage.cachedClasses);
|
435
|
+
},
|
436
|
+
/**
|
437
|
+
* Get all defined @property custom properties
|
438
|
+
*/
|
439
|
+
getDefinedProperties() {
|
440
|
+
const registry = injector.instance['sheetManager'].getRegistry(document);
|
441
|
+
if (!registry?.injectedProperties) {
|
442
|
+
return [];
|
443
|
+
}
|
444
|
+
return Array.from(registry.injectedProperties).sort();
|
445
|
+
},
|
446
|
+
/**
|
447
|
+
* Get all defined keyframes
|
448
|
+
*/
|
449
|
+
getDefinedKeyframes() {
|
450
|
+
const registry = injector.instance['sheetManager'].getRegistry(document);
|
451
|
+
if (!registry?.keyframesCache) {
|
452
|
+
return [];
|
453
|
+
}
|
454
|
+
const keyframes = [];
|
455
|
+
for (const [cacheKey, entry] of registry.keyframesCache.entries()) {
|
456
|
+
keyframes.push({
|
457
|
+
name: entry.name,
|
458
|
+
refCount: entry.refCount,
|
459
|
+
cssText: entry.info?.cssText,
|
460
|
+
});
|
461
|
+
}
|
462
|
+
return keyframes.sort((a, b) => a.name.localeCompare(b.name));
|
463
|
+
},
|
464
|
+
/**
|
465
|
+
* Check if a specific @property is defined
|
466
|
+
*/
|
467
|
+
isPropertyDefined(propertyName) {
|
468
|
+
return injector.instance.isPropertyDefined(propertyName);
|
469
|
+
},
|
470
|
+
/**
|
471
|
+
* Check if a specific keyframe is defined
|
472
|
+
*/
|
473
|
+
isKeyframeDefined(keyframeName) {
|
474
|
+
const registry = injector.instance['sheetManager'].getRegistry(document);
|
475
|
+
if (!registry?.keyframesCache) {
|
476
|
+
return false;
|
477
|
+
}
|
478
|
+
for (const entry of registry.keyframesCache.values()) {
|
479
|
+
if (entry.name === keyframeName) {
|
480
|
+
return true;
|
481
|
+
}
|
482
|
+
}
|
483
|
+
return false;
|
484
|
+
},
|
485
|
+
/**
|
486
|
+
* Get detailed cleanup statistics history
|
487
|
+
*/
|
488
|
+
getCleanupHistory() {
|
489
|
+
const registry = injector.instance['sheetManager'].getRegistry(document);
|
490
|
+
if (!registry?.metrics?.cleanupHistory) {
|
491
|
+
return {
|
492
|
+
totalCleanups: 0,
|
493
|
+
totalClassesDeleted: 0,
|
494
|
+
totalCssDeleted: 0,
|
495
|
+
totalRulesDeleted: 0,
|
496
|
+
cleanupHistory: [],
|
497
|
+
};
|
498
|
+
}
|
499
|
+
const history = registry.metrics.cleanupHistory;
|
500
|
+
const totalClassesDeleted = history.reduce((sum, cleanup) => sum + cleanup.classesDeleted, 0);
|
501
|
+
const totalCssDeleted = history.reduce((sum, cleanup) => sum + cleanup.cssSize, 0);
|
502
|
+
const totalRulesDeleted = history.reduce((sum, cleanup) => sum + cleanup.rulesDeleted, 0);
|
503
|
+
return {
|
504
|
+
totalCleanups: history.length,
|
505
|
+
totalClassesDeleted,
|
506
|
+
totalCssDeleted,
|
507
|
+
totalRulesDeleted,
|
508
|
+
cleanupHistory: history.map((cleanup) => ({
|
509
|
+
...cleanup,
|
510
|
+
date: new Date(cleanup.timestamp).toISOString(),
|
511
|
+
})),
|
512
|
+
};
|
513
|
+
},
|
514
|
+
/**
|
515
|
+
* Get cleanup statistics summary
|
516
|
+
*/
|
517
|
+
getCleanupSummary() {
|
518
|
+
const registry = injector.instance['sheetManager'].getRegistry(document);
|
519
|
+
if (!registry?.metrics) {
|
520
|
+
return {
|
521
|
+
enabled: false,
|
522
|
+
totalCleanups: 0,
|
523
|
+
totalClassesDeleted: 0,
|
524
|
+
totalCssDeleted: 0,
|
525
|
+
totalRulesDeleted: 0,
|
526
|
+
averageClassesPerCleanup: 0,
|
527
|
+
averageCssPerCleanup: 0,
|
528
|
+
averageRulesPerCleanup: 0,
|
529
|
+
};
|
530
|
+
}
|
531
|
+
const history = registry.metrics.cleanupHistory || [];
|
532
|
+
const totalClassesDeleted = history.reduce((sum, cleanup) => sum + cleanup.classesDeleted, 0);
|
533
|
+
const totalCssDeleted = history.reduce((sum, cleanup) => sum + cleanup.cssSize, 0);
|
534
|
+
const totalRulesDeleted = history.reduce((sum, cleanup) => sum + cleanup.rulesDeleted, 0);
|
535
|
+
const totalCleanups = history.length;
|
536
|
+
const lastCleanup = history.length > 0 ? history[history.length - 1] : undefined;
|
537
|
+
return {
|
538
|
+
enabled: true,
|
539
|
+
totalCleanups,
|
540
|
+
totalClassesDeleted,
|
541
|
+
totalCssDeleted,
|
542
|
+
totalRulesDeleted,
|
543
|
+
averageClassesPerCleanup: totalCleanups > 0 ? totalClassesDeleted / totalCleanups : 0,
|
544
|
+
averageCssPerCleanup: totalCleanups > 0 ? totalCssDeleted / totalCleanups : 0,
|
545
|
+
averageRulesPerCleanup: totalCleanups > 0 ? totalRulesDeleted / totalCleanups : 0,
|
546
|
+
lastCleanup: lastCleanup
|
547
|
+
? {
|
548
|
+
...lastCleanup,
|
549
|
+
date: new Date(lastCleanup.timestamp).toISOString(),
|
550
|
+
}
|
551
|
+
: undefined,
|
552
|
+
};
|
553
|
+
},
|
554
|
+
/**
|
555
|
+
* Log cleanup history to console in a readable format
|
556
|
+
*/
|
557
|
+
logCleanupHistory() {
|
558
|
+
const cleanupData = this.getCleanupHistory();
|
559
|
+
if (cleanupData.totalCleanups === 0) {
|
560
|
+
console.log('🧹 No cleanup history available');
|
561
|
+
return;
|
562
|
+
}
|
563
|
+
console.group(`🧹 Cleanup History (${cleanupData.totalCleanups} cleanups)`);
|
564
|
+
console.log('📊 Total Statistics:');
|
565
|
+
console.log(` • Total classes deleted: ${cleanupData.totalClassesDeleted}`);
|
566
|
+
console.log(` • Total CSS deleted: ${cleanupData.totalCssDeleted} characters`);
|
567
|
+
console.log(` • Total rules deleted: ${cleanupData.totalRulesDeleted}`);
|
568
|
+
console.log('\n📅 Cleanup Sessions:');
|
569
|
+
cleanupData.cleanupHistory.forEach((cleanup, index) => {
|
570
|
+
console.log(` ${index + 1}. ${cleanup.date}`);
|
571
|
+
console.log(` • Classes: ${cleanup.classesDeleted}`);
|
572
|
+
console.log(` • CSS: ${cleanup.cssSize} chars`);
|
573
|
+
console.log(` • Rules: ${cleanup.rulesDeleted}`);
|
574
|
+
});
|
575
|
+
console.groupEnd();
|
576
|
+
},
|
577
|
+
/**
|
578
|
+
* Get all global CSS rules (non-tasty class selectors)
|
579
|
+
*/
|
580
|
+
getGlobalCSS() {
|
581
|
+
const allCSS = this.getAllCSS();
|
582
|
+
// Split CSS into rules and filter out tasty class rules
|
583
|
+
const rules = this.extractCSSRules(allCSS);
|
584
|
+
const globalRules = rules.filter((rule) => {
|
585
|
+
// Filter out rules that only contain tasty classes (t + digits)
|
586
|
+
const selectors = rule.selector.split(',').map((s) => s.trim());
|
587
|
+
return !selectors.every((selector) => {
|
588
|
+
// Check if selector is purely a tasty class or contains only tasty classes
|
589
|
+
const cleanSelector = selector.replace(/[.#:\s>+~[\]()]/g, ' ');
|
590
|
+
const parts = cleanSelector.split(/\s+/).filter(Boolean);
|
591
|
+
return parts.length > 0 && parts.every((part) => /^t\d+$/.test(part));
|
592
|
+
});
|
593
|
+
});
|
594
|
+
const globalCSS = globalRules
|
595
|
+
.map((rule) => `${rule.selector} { ${rule.declarations} }`)
|
596
|
+
.join('\n');
|
597
|
+
return prettifyCSS(globalCSS);
|
598
|
+
},
|
599
|
+
/**
|
600
|
+
* Log global CSS to console
|
601
|
+
*/
|
602
|
+
logGlobalCSS() {
|
603
|
+
const globalCSS = this.getGlobalCSS();
|
604
|
+
if (!globalCSS.trim()) {
|
605
|
+
console.log('🌍 No global CSS found');
|
606
|
+
return;
|
607
|
+
}
|
608
|
+
this.logCSS(globalCSS, 'Global CSS (createGlobalStyle)');
|
609
|
+
},
|
610
|
+
/**
|
611
|
+
* Get global CSS rules breakdown with detailed analysis
|
612
|
+
*/
|
613
|
+
getGlobalCSSBreakdown() {
|
614
|
+
const allCSS = this.getAllCSS();
|
615
|
+
const rules = this.extractCSSRules(allCSS);
|
616
|
+
const globalRules = rules.filter((rule) => {
|
617
|
+
const selectors = rule.selector.split(',').map((s) => s.trim());
|
618
|
+
return !selectors.every((selector) => {
|
619
|
+
const cleanSelector = selector.replace(/[.#:\s>+~[\]()]/g, ' ');
|
620
|
+
const parts = cleanSelector.split(/\s+/).filter(Boolean);
|
621
|
+
return parts.length > 0 && parts.every((part) => /^t\d+$/.test(part));
|
622
|
+
});
|
623
|
+
});
|
624
|
+
const breakdown = globalRules.map((rule) => ({
|
625
|
+
selector: rule.selector,
|
626
|
+
declarations: rule.declarations,
|
627
|
+
ruleCount: 1,
|
628
|
+
}));
|
629
|
+
const css = globalRules
|
630
|
+
.map((rule) => `${rule.selector} { ${rule.declarations} }`)
|
631
|
+
.join('\n');
|
632
|
+
const prettifiedCSS = prettifyCSS(css);
|
633
|
+
// Analyze selectors
|
634
|
+
const selectors = {
|
635
|
+
elements: [],
|
636
|
+
classes: [],
|
637
|
+
ids: [],
|
638
|
+
pseudoClasses: [],
|
639
|
+
mediaQueries: [],
|
640
|
+
keyframes: [],
|
641
|
+
other: [],
|
642
|
+
};
|
643
|
+
globalRules.forEach((rule) => {
|
644
|
+
const selector = rule.selector;
|
645
|
+
// Categorize selectors
|
646
|
+
if (selector.startsWith('@media')) {
|
647
|
+
selectors.mediaQueries.push(selector);
|
648
|
+
}
|
649
|
+
else if (selector.startsWith('@keyframes')) {
|
650
|
+
selectors.keyframes.push(selector);
|
651
|
+
}
|
652
|
+
else if (selector.includes('.') &&
|
653
|
+
!selector.includes('#') &&
|
654
|
+
!selector.includes(':')) {
|
655
|
+
selectors.classes.push(selector);
|
656
|
+
}
|
657
|
+
else if (selector.includes('#') &&
|
658
|
+
!selector.includes('.') &&
|
659
|
+
!selector.includes(':')) {
|
660
|
+
selectors.ids.push(selector);
|
661
|
+
}
|
662
|
+
else if (selector.includes(':')) {
|
663
|
+
selectors.pseudoClasses.push(selector);
|
664
|
+
}
|
665
|
+
else if (/^[a-zA-Z][a-zA-Z0-9]*$/.test(selector.trim())) {
|
666
|
+
selectors.elements.push(selector);
|
667
|
+
}
|
668
|
+
else {
|
669
|
+
selectors.other.push(selector);
|
670
|
+
}
|
671
|
+
});
|
672
|
+
return {
|
673
|
+
globalRules: breakdown,
|
674
|
+
totalRules: breakdown.length,
|
675
|
+
totalCSSSize: css.length,
|
676
|
+
css: prettifiedCSS,
|
677
|
+
selectors,
|
678
|
+
};
|
679
|
+
},
|
680
|
+
/**
|
681
|
+
* Log detailed global CSS breakdown
|
682
|
+
*/
|
683
|
+
logGlobalCSSBreakdown() {
|
684
|
+
const breakdown = this.getGlobalCSSBreakdown();
|
685
|
+
if (breakdown.totalRules === 0) {
|
686
|
+
console.log('🌍 No global CSS rules found');
|
687
|
+
return;
|
688
|
+
}
|
689
|
+
console.group(`🌍 Global CSS Breakdown (${breakdown.totalRules} rules)`);
|
690
|
+
console.log(`📊 Statistics:`);
|
691
|
+
console.log(` • Total global rules: ${breakdown.totalRules}`);
|
692
|
+
console.log(` • Total CSS size: ${breakdown.totalCSSSize} characters`);
|
693
|
+
console.log(`🎯 Selector Analysis:`);
|
694
|
+
if (breakdown.selectors.elements.length > 0) {
|
695
|
+
console.log(` • Element selectors: ${breakdown.selectors.elements.length}`, breakdown.selectors.elements.slice(0, 5));
|
696
|
+
}
|
697
|
+
if (breakdown.selectors.classes.length > 0) {
|
698
|
+
console.log(` • Class selectors: ${breakdown.selectors.classes.length}`, breakdown.selectors.classes.slice(0, 5));
|
699
|
+
}
|
700
|
+
if (breakdown.selectors.ids.length > 0) {
|
701
|
+
console.log(` • ID selectors: ${breakdown.selectors.ids.length}`, breakdown.selectors.ids.slice(0, 5));
|
702
|
+
}
|
703
|
+
if (breakdown.selectors.pseudoClasses.length > 0) {
|
704
|
+
console.log(` • Pseudo-class selectors: ${breakdown.selectors.pseudoClasses.length}`, breakdown.selectors.pseudoClasses.slice(0, 5));
|
705
|
+
}
|
706
|
+
if (breakdown.selectors.mediaQueries.length > 0) {
|
707
|
+
console.log(` • Media queries: ${breakdown.selectors.mediaQueries.length}`, breakdown.selectors.mediaQueries.slice(0, 3));
|
708
|
+
}
|
709
|
+
if (breakdown.selectors.keyframes.length > 0) {
|
710
|
+
console.log(` • Keyframe rules: ${breakdown.selectors.keyframes.length}`, breakdown.selectors.keyframes.slice(0, 3));
|
711
|
+
}
|
712
|
+
if (breakdown.selectors.other.length > 0) {
|
713
|
+
console.log(` • Other selectors: ${breakdown.selectors.other.length}`, breakdown.selectors.other.slice(0, 5));
|
714
|
+
}
|
715
|
+
console.log(`🎨 CSS Output:`);
|
716
|
+
console.log(breakdown.css);
|
717
|
+
console.groupEnd();
|
718
|
+
},
|
719
|
+
/**
|
720
|
+
* Helper to extract CSS rules from raw CSS text
|
721
|
+
*/
|
722
|
+
extractCSSRules(css) {
|
723
|
+
const rules = [];
|
724
|
+
// Remove comments
|
725
|
+
let cleanCSS = css.replace(/\/\*[\s\S]*?\*\//g, '');
|
726
|
+
// Enhanced parser that handles nested CSS properly
|
727
|
+
this.parseCSSSafe(cleanCSS, rules);
|
728
|
+
return rules;
|
729
|
+
},
|
730
|
+
/**
|
731
|
+
* Safe CSS parser that handles nested rules properly
|
732
|
+
*/
|
733
|
+
parseCSSSafe(css, rules) {
|
734
|
+
let i = 0;
|
735
|
+
while (i < css.length) {
|
736
|
+
// Skip whitespace
|
737
|
+
while (i < css.length && /\s/.test(css[i])) {
|
738
|
+
i++;
|
739
|
+
}
|
740
|
+
if (i >= css.length)
|
741
|
+
break;
|
742
|
+
// Find selector start
|
743
|
+
const selectorStart = i;
|
744
|
+
let braceDepth = 0;
|
745
|
+
let inString = false;
|
746
|
+
let stringChar = '';
|
747
|
+
// Find opening brace for this rule
|
748
|
+
while (i < css.length) {
|
749
|
+
const char = css[i];
|
750
|
+
if (inString) {
|
751
|
+
if (char === stringChar && css[i - 1] !== '\\') {
|
752
|
+
inString = false;
|
753
|
+
}
|
754
|
+
}
|
755
|
+
else {
|
756
|
+
if (char === '"' || char === "'") {
|
757
|
+
inString = true;
|
758
|
+
stringChar = char;
|
759
|
+
}
|
760
|
+
else if (char === '{') {
|
761
|
+
braceDepth++;
|
762
|
+
if (braceDepth === 1) {
|
763
|
+
break; // Found opening brace
|
764
|
+
}
|
765
|
+
}
|
766
|
+
}
|
767
|
+
i++;
|
768
|
+
}
|
769
|
+
if (i >= css.length)
|
770
|
+
break;
|
771
|
+
const selector = css.substring(selectorStart, i).trim();
|
772
|
+
i++; // Skip opening brace
|
773
|
+
// Find matching closing brace and extract content
|
774
|
+
const contentStart = i;
|
775
|
+
braceDepth = 1;
|
776
|
+
inString = false;
|
777
|
+
while (i < css.length && braceDepth > 0) {
|
778
|
+
const char = css[i];
|
779
|
+
if (inString) {
|
780
|
+
if (char === stringChar && css[i - 1] !== '\\') {
|
781
|
+
inString = false;
|
782
|
+
}
|
783
|
+
}
|
784
|
+
else {
|
785
|
+
if (char === '"' || char === "'") {
|
786
|
+
inString = true;
|
787
|
+
stringChar = char;
|
788
|
+
}
|
789
|
+
else if (char === '{') {
|
790
|
+
braceDepth++;
|
791
|
+
}
|
792
|
+
else if (char === '}') {
|
793
|
+
braceDepth--;
|
794
|
+
}
|
795
|
+
}
|
796
|
+
i++;
|
797
|
+
}
|
798
|
+
const content = css.substring(contentStart, i - 1).trim();
|
799
|
+
// Check if content has nested rules
|
800
|
+
if (content.includes('{') && content.includes('}')) {
|
801
|
+
// Extract declarations (before any nested rules)
|
802
|
+
const declarationMatch = content.match(/^([^{]*)/);
|
803
|
+
const declarations = declarationMatch ? declarationMatch[1].trim() : '';
|
804
|
+
if (declarations) {
|
805
|
+
rules.push({ selector, declarations });
|
806
|
+
}
|
807
|
+
// Extract and parse nested rules recursively
|
808
|
+
const nestedStart = content.indexOf('{');
|
809
|
+
if (nestedStart !== -1) {
|
810
|
+
const nestedCSS = content.substring(nestedStart);
|
811
|
+
this.parseCSSSafe(nestedCSS, rules);
|
812
|
+
}
|
813
|
+
}
|
814
|
+
else if (content.trim()) {
|
815
|
+
// Simple rule with just declarations
|
816
|
+
rules.push({ selector, declarations: content });
|
817
|
+
}
|
818
|
+
}
|
819
|
+
},
|
820
|
+
/**
|
821
|
+
* Debug method to see raw CSS content and rule parsing
|
822
|
+
*/
|
823
|
+
debugRawCSS() {
|
824
|
+
const allCSS = this.getAllCSS();
|
825
|
+
console.group('🔍 Raw CSS Debug');
|
826
|
+
console.log('📝 Raw CSS length:', allCSS.length);
|
827
|
+
console.log('📝 Raw CSS preview (first 2000 chars):');
|
828
|
+
console.log(allCSS.substring(0, 2000));
|
829
|
+
const rules = this.extractCSSRules(allCSS);
|
830
|
+
console.log('📊 Total extracted rules:', rules.length);
|
831
|
+
console.log('📋 First 10 rules:');
|
832
|
+
rules.slice(0, 10).forEach((rule, i) => {
|
833
|
+
console.log(` ${i + 1}. ${rule.selector}`);
|
834
|
+
});
|
835
|
+
// Show some examples of what gets filtered as tasty vs global
|
836
|
+
const tastyRules = rules.filter((rule) => {
|
837
|
+
const selectors = rule.selector.split(',').map((s) => s.trim());
|
838
|
+
return selectors.every((selector) => {
|
839
|
+
const cleanSelector = selector.replace(/[.#:\s>+~[\]()]/g, ' ');
|
840
|
+
const parts = cleanSelector.split(/\s+/).filter(Boolean);
|
841
|
+
return parts.length > 0 && parts.every((part) => /^t\d+$/.test(part));
|
842
|
+
});
|
843
|
+
});
|
844
|
+
const globalRules = rules.filter((rule) => {
|
845
|
+
const selectors = rule.selector.split(',').map((s) => s.trim());
|
846
|
+
return !selectors.every((selector) => {
|
847
|
+
const cleanSelector = selector.replace(/[.#:\s>+~[\]()]/g, ' ');
|
848
|
+
const parts = cleanSelector.split(/\s+/).filter(Boolean);
|
849
|
+
return parts.length > 0 && parts.every((part) => /^t\d+$/.test(part));
|
850
|
+
});
|
851
|
+
});
|
852
|
+
console.log('🏷️ Tasty class rules found:', tastyRules.length);
|
853
|
+
console.log('🌍 Global rules found:', globalRules.length);
|
854
|
+
if (globalRules.length > 0) {
|
855
|
+
console.log('📋 First 5 global rules:');
|
856
|
+
globalRules.slice(0, 5).forEach((rule, i) => {
|
857
|
+
console.log(` ${i + 1}. ${rule.selector}`);
|
858
|
+
});
|
859
|
+
}
|
860
|
+
console.groupEnd();
|
861
|
+
},
|
862
|
+
};
|
863
|
+
/**
|
864
|
+
* Check if we're in a development environment at runtime
|
865
|
+
* Uses bracket notation to avoid bundler compilation
|
866
|
+
*/
|
867
|
+
function isDevelopmentEnvironment() {
|
868
|
+
if (typeof process === 'undefined')
|
869
|
+
return false;
|
870
|
+
// Use bracket notation to avoid bundler replacement
|
871
|
+
const nodeEnv = process.env?.['NODE_ENV'];
|
872
|
+
return nodeEnv === 'development' || nodeEnv !== 'production';
|
873
|
+
}
|
874
|
+
/**
|
875
|
+
* Install tastyDebug on window object for easy access in browser console
|
876
|
+
* Only in non-production environments
|
877
|
+
*/
|
878
|
+
export function installGlobalDebug(options) {
|
879
|
+
const shouldInstall = options?.force || isDevelopmentEnvironment();
|
880
|
+
if (typeof window !== 'undefined' &&
|
881
|
+
shouldInstall &&
|
882
|
+
window.tastyDebug !== tastyDebug) {
|
883
|
+
window.tastyDebug = tastyDebug;
|
884
|
+
console.log('🎨 tastyDebug installed on window.\n' +
|
885
|
+
'💡 Quick start:\n' +
|
886
|
+
' • tastyDebug.getSummary() - comprehensive overview with properties, keyframes & global CSS\n' +
|
887
|
+
' • tastyDebug.inspect(".my-element") - detailed element inspection\n' +
|
888
|
+
' • tastyDebug.getGlobalCSS() - get all global CSS from createGlobalStyle()\n' +
|
889
|
+
' • tastyDebug.logGlobalCSS() - log global CSS to console\n' +
|
890
|
+
' • tastyDebug.logGlobalCSSBreakdown() - detailed global CSS analysis\n' +
|
891
|
+
' • tastyDebug.debugRawCSS() - debug raw CSS parsing and filtering\n' +
|
892
|
+
' • tastyDebug.getDefinedProperties() - list all @property definitions\n' +
|
893
|
+
' • tastyDebug.getDefinedKeyframes() - list all keyframe definitions\n' +
|
894
|
+
' • tastyDebug.getActiveCSS() / getCachedCSS() - get specific CSS\n' +
|
895
|
+
' • tastyDebug.getCleanupSummary() - cleanup statistics overview\n' +
|
896
|
+
' • tastyDebug.logCleanupHistory() - detailed cleanup history');
|
897
|
+
}
|
898
|
+
}
|
899
|
+
/**
|
900
|
+
* Auto-install in development
|
901
|
+
*/
|
902
|
+
if (typeof window !== 'undefined' && isDevelopmentEnvironment()) {
|
903
|
+
installGlobalDebug();
|
904
|
+
}
|
905
|
+
|
906
|
+
|