Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
196 changes: 196 additions & 0 deletions external-services.md

Large diffs are not rendered by default.

17 changes: 17 additions & 0 deletions packages/atomize-css/node_modules/.bin/c8

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions packages/atomize-css/node_modules/.bin/cssbeautify

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions packages/atomize-css/node_modules/.bin/jest

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions packages/atomize-css/node_modules/.bin/json-beautify

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions packages/atomize-css/node_modules/.bin/sass

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions packages/atomize-css/node_modules/.bin/sort-json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions packages/atomize-css/node_modules/.bin/vite

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions packages/atomize-css/node_modules/.bin/vitest

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/@codemirror/lang-css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/@testing-library/react

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/@types/react

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/@types/react-dom

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/@uiw/react-codemirror

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/@vitejs/plugin-react

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/@vitest/ui

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/allotment

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/colord

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/cssbeautify

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/jest

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/json-beautify

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/react

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/react-dom

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/sort-json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/vite

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/atomize-css/node_modules/vitest

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 15 additions & 3 deletions packages/atomize-css/src/atomize-css/helpers/combineSelectors.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,22 @@ export default function combineSelectors(cssClassesObj) {
})

if (sameProValSelectors.length > 1) {
if (!combinedCssRulesObj[sameProValSelectors.join(',')]) {
combinedCssRulesObj[sameProValSelectors.join(',')] = { [prop]: value }
// ignore selectors for combine
const ignoreSelectors = /(-webkit-)|(-moz-)|(-ms-)/
const ignoreConcatSelectors = sameProValSelectors.filter((sel) => ignoreSelectors.test(sel))
const validConcatSelectors = sameProValSelectors.filter((sel) => !ignoreSelectors.test(sel))
ignoreConcatSelectors.forEach((selectr) => {
if (!combinedCssRulesObj[selectr]) {
combinedCssRulesObj[selectr] = { [prop]: value }
} else {
combinedCssRulesObj[selectr][prop] = value
}
})

if (!combinedCssRulesObj[validConcatSelectors.join(',')]) {
combinedCssRulesObj[validConcatSelectors.join(',')] = { [prop]: value }
} else {
combinedCssRulesObj[sameProValSelectors.join(',')][prop] = value
combinedCssRulesObj[validConcatSelectors.join(',')][prop] = value
}
Comment on lines +40 to 44

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

If validConcatSelectors is an empty array, validConcatSelectors.join(',') will produce an empty string ''. This will result in creating a CSS rule with an empty selector ('' { ... }), which is invalid and might cause issues in some CSS parsers or browsers. You should add a check to ensure validConcatSelectors is not empty before joining and creating the rule.

        if (validConcatSelectors.length > 0) {
          if (!combinedCssRulesObj[validConcatSelectors.join(',')]) {
            combinedCssRulesObj[validConcatSelectors.join(',')] = { [prop]: value }
          } else {
            combinedCssRulesObj[validConcatSelectors.join(',')][prop] = value
          }
        }

Comment on lines +40 to 44

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

If validConcatSelectors is an empty array, validConcatSelectors.join(',') will result in an empty string ''. This will create a CSS rule with an empty selector, which is likely not intended and could lead to unexpected behavior. It's better to guard this block to only execute if there are valid selectors to combine.

        if (validConcatSelectors.length > 0) {
          const combinedSelector = validConcatSelectors.join(',');
          if (!combinedCssRulesObj[combinedSelector]) {
            combinedCssRulesObj[combinedSelector] = { [prop]: value };
          } else {
            combinedCssRulesObj[combinedSelector][prop] = value;
          }
        }

Comment on lines +40 to 44

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

If validConcatSelectors is an empty array (which can happen if all selectors with the same property-value pair have vendor prefixes), validConcatSelectors.join(',') will result in an empty string. This will create a CSS rule with an empty selector ('' { ... }), which is invalid and can cause issues in CSS parsing.

You should add a check to ensure validConcatSelectors has elements before creating the combined rule.

        if (validConcatSelectors.length > 0) {
          if (!combinedCssRulesObj[validConcatSelectors.join(',')]) {
            combinedCssRulesObj[validConcatSelectors.join(',')] = { [prop]: value }
          } else {
            combinedCssRulesObj[validConcatSelectors.join(',')][prop] = value
          }
        }


sameProValSelectors.forEach((selectr) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export default function optimizeAndDefineCssClassProps(selectorObj, cssVarDefina
for (let i = 0; i < selectorsCount; i += 1) {
const selector = selectors[i]
if (Object.hasOwnProperty.call(selectorsObj, selector)) {
const declaration = selectorsObj[selector]
const declaration = selectorsObj[selector] || {}
const newSelectors = normalizeSelector(selector).split(',')
const props = Object.keys(declaration)
const propsCount = props.length
Expand All @@ -30,7 +30,7 @@ export default function optimizeAndDefineCssClassProps(selectorObj, cssVarDefina
}
if (value === undefined || value === null) value = ''
let newValue = value
.trim()
?.trim()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The optional chaining (?.) on .trim() is redundant here. The preceding line if (value === undefined || value === null) value = '' ensures that value is always a string, so it will always have the trim method. Removing the optional chaining will make the code slightly cleaner.

Suggested change
?.trim()
.trim()

.replace(/\s{2,}/g, ' ')
.replace(/\\n\s*/g, '')
.replace(/,\s*/g, ',')
Expand Down
Loading