@tabula/forge
Advanced tools
Changelog
2.0.0-next.2
#62 bcd685a
Thanks @demiazz! - emulate Vite's environment variables
The vanilla-extract
uses esbuild
under the hood with CJS format. In that case, if you import any code with usage of
import
.
We assume usage only import.meta.env.DEV
, import.meta.env.PROD
and import.meta.env.MODE
variables in bundler
user's code and emulate only it with defining constants.
But this constants working only in compile time when CSS is generated and based on mode in which the forge
is running
at compilation moment.
Be careful when use code which based on that variables in your vanilla-extract
styles.
Changelog
2.0.0-next.0
#57 d3c40d7
Thanks @demiazz! - added support of transformation of SVG component name with svgrComponentName
option.
By default, SVGR uses Svg<CamelCaseFileName>
name for components. You can override this behaviour through
svgrComponentName
options, which should be function of format (svgrName: string) => string
.
Example:
export default {
// ...
svgrComponentName(name) {
return `Ui${name.slice(3)}Icon`;
},
// ...
};
If you have a file column.svg
then component name is SvgColumn
by default. But with config from about the name
will be UiColumnIcon
.
If you use memoization it looks like:
import { memo } from 'react';
const UiColumnIcon = (props) => {
// ...
};
const Memo = memo(UiColumnIcon);
export { Memo as ReactComponent };
This option doesn't affect named exports.
#57 d3c40d7
Thanks @demiazz! - allow to append displayName
for SVGR components.
By default, SVGR doesn't append displayName
for exported components. You can add this behaviour through svgrDisplayName
option, which should be function of format (componentName: string) => string | { displayName: string; isDebugOnly?: boolean }
.
When function is returns string, then isDebugOnly
equals to false
.
The componentName
is name of component itself (before memoization if enabled). If you provide svgrComponentName
option,
then result of applying this function is componentName
.
The isDebugOnly
enables wrapping the assignment in Vite compatible condition.
// `isDebugOnly` = false
Component.displayName = 'scope(ComponentDisplayName)';
// `isDebugOnly` = true
if (import.meta.env.DEV) {
Component.displayName = `scope(ComponentDisplayName)`;
}
If memoization is enabled, then the displayName
will be assigned to the memoized component:
const Component = (props) => {
// ...
};
const Memo = memo(Component);
Memo.displayName = `scope(ComponentDisplayName)`;
Changelog
1.2.0
#32 a92544c
Thanks @demiazz! - added cssClassPrefix
option
The option can be boolean or string.
If string option is used, then it will be used as simple template with following placeholders:
[full-name]
- full package name (with scope if it presented);[scope]
- package scope if presented or an empty string;[name]
- package name without scope.The prefix has format [full-name]__
by default or when option is true
.
When package name is awesome-ui
, then:
[full-name]__
, then the prefix is awesome_ui__
;[scope]__
, then the prefix is __
;[scope]__[name]__
, then the prefix is __awesome_ui__
.When package name is @awesome-ui/theme
, then:
[full-name]__
, then the prefix is awesome_ui_theme_
;[scope]__
, then the prefix is awesome_ui__
;[scope]__[name]__
, then the prefix is awesome_ui__theme__
.