Skip to content

Contract with ICSS #241

Open
Open
@TrySound

Description

@TrySound

This thread to summarize all contracts between icss plugins

  • postcss-icss-selectors
  • postcss-icss-values
  • postcss-icss-composes

This plugins do not require contracts

  • postcss-icss-import
  • postcss-icss-url
  • postcss-icss-keyframes

Values plugin before selectors and composes plugins

If local identifier already exists :import keys then skip scoping

@value local1 from 'path';
.local1 {}
.local2 { composes: local1; }
.local3 { composes: exported from 'path'; }

/* after values */

:import('path') {
  __local1: local1
}
:export {
  local1: __local1
}
.__local1 {}
.local2 { composes: __local1; }
.local3 { composes: exported from 'path'; }

/* after selectors and compose */

:import('path') {
  __local1: local1;
  __exported: exported;
}
:export {
  local1: __local1;
  local2: __scope__local2;
  local3: __scope__local3;
}
.__local1 {}
.__scope__local2 {}
.__scope__local3 {}

Values plugin after selectors and composes plugin

Values can't be detected in compound exported values

@value local2 from 'path';
.local1 {}
.local2 { composes: local1; }
.local3 { composes: exported from 'path'; }

/* after selectors and compose */

:import('path') {
  __exported: exported;
}
:export {
  local1: __scope__local1;
  local2: __scope__local2 __scope__local1;
  local3: __scope__local3 __exported;
}
@value local2 from 'path';
.__scope__local1 {}
.__scope__local2 {}
.__scope__local3 {}

Composes plugin before selectors plugin

If exported key already exists then apply scoping and replace exported value if present in scoped list
Else add identifier as key and scoped class name as value

.local1 {}
.local2 { composes: local1; }
.local3 { composes: exported from 'path'; }

/* after composes */

:import('path') {
  __exported: exported
}
:export {
  local2: local1;
  local3: __exported;
}
.local1 {}
.local2 {}

/* after selectors */

:import('path') {
  __exported: exported
}
:export {
  local1: __scope__local1;
  local2: __scope__local2 __scope__local1;
  local3: __scope__local3 __exported;
}
.__scope__local1 {}
.__scope__local2 {}
.__scope__local3 {}

Composes plugin after selectors plugin

If exported value contains class name then append composed one
else add class name as key and composed one as value

.local1 {}
.local2 {
  composes: local1;
}
.local3 {
  composes: exported from 'path';
}

/* after selectors */

:export {
  local1: __scope__local1;
  local2: __scope__local2;
  local3: __scope__local3
}
.__scope__local1 {}
.__scope__local2 {
  composes: local1;
}
.__scope__local3 {
  composes: exported from 'path';
}

/* after composes */

:import('path') {
  __exported: exported
}
:export {
  local1: __scope__local1;
  local2: __scope__local2 __scope__local1;
  local3: __scope__local3 __exported
}
.__scope__local1 {}
.__scope__local2 {}
.__scope__local3 {}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions