123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- import useVars from './useVars.js'
- import { getClasses } from '../utils/classes.js'
- import useColor from './useColor.js'
- function useHook() { // useTypography
- const { colors, color } = useColor()
- const { pxs, percents, xls } = useVars()
- const FontFamily = {
- title: 'Font Family',
- classes: getClasses('sans, serif, mono', {
- name: ['font-'],
- value: [d => {
- const fs = {
- sans: `ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"`,
- serif: `ui-serif, Georgia, Cambria, "Times New Roman", Times, serif`,
- mono: `ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace`,
- }
- return [`font-family: ${fs[d.value]};`]
- }]
- })
- }
- const FontSize = ({
- title: 'Font Size',
- classes: getClasses(xls, {
- name: 'text-',
- value: d => {
- return [{ value: `font-size: ${d.value};`, rpx: d.fontSize * 2 }, { value: `line-height: ${d.lineHeightValue};`, desc: d.lineHeight > 0 ? `${d.lineHeight * 2}rpx` : 1 }]
- }
- }),
- })
- const FontSmoothing = { title: 'Font Smoothing', classes: [] }
- const FontStyle = {
- title: 'Font Style',
- classes: getClasses([
- { name: 'italic', value: 'italic' },
- { name: 'not-italic', value: 'normal' },
- ], { name: '', value: 'font-style' })
- }
- const FontWeight = ({
- title: 'Font Weight',
- classes: getClasses('thin,extralight,light,normal,medium,semibold,bold,extrabold,black', {
- name: 'font-',
- value: (d, i) => {
- return [`font-weight: ${(i + 1) * 100};`]
- }
- }),
- })
- const FontVariantNumeric = {
- title: 'Font Variant Numeric',
- classes: getClasses([
- { name: 'normal-nums', value: 'normal' },
- { name: 'ordinal', value: 'ordinal' },
- { name: 'slashed-zero', value: 'slashed-zero' },
- { name: 'lining-nums', value: 'lining-nums' },
- { name: 'oldstyle-nums', value: 'oldstyle-nums' },
- { name: 'proportional-nums', value: 'proportional-nums' },
- { name: 'tabular-nums', value: 'tabular-nums' },
- { name: 'diagonal-fractions', value: 'diagonal-fractions' },
- { name: 'stacked-fractions', value: 'stacked-fractions' },
- ], { name: '', value: 'font-variant-numeric' })
- }
- // 1em = 16px .1em = 16 * 0.1 = 1.6px = 3.2rpx
- const LetterSpacing = {
- title: 'Letter Spacing',
- classes: getClasses([
- { name: 'tighter', value: '-0.05em', rpx: -16 * 2 * .05 },
- { name: 'tight', value: '-0.025em', rpx: -16 * 2 * .025 },
- { name: 'normal', value: '0em', rpx: 0 },
- { name: 'wide', value: '0.025em', rpx: 16 * 2 * .025 },
- { name: 'wider', value: '0.05em', rpx: 16 * 2 * .05 },
- { name: 'widest', value: '0.1em', rpx: 16 * 2 * .1 },
- ], { name: 'tracking-', value: 'letter-spacing' })
- }
- const LineClamp = {
- title: 'Line Clamp',
- classes: [
- ...new Array(6).fill(0).map((d, i) => {
- return {
- name: `line-clamp-${i + 1}`,
- value: [
- 'overflow: hidden;',
- 'display: -webkit-box;',
- '-webkit-box-orient: vertical;',
- `-webkit-line-clamp: ${i + 1};`
- ]
- }
- }),
- {
- name: 'line-clamp-none',
- value: [
- 'overflow: visible;',
- 'display: block;',
- '-webkit-box-orient: horizontal;',
- '-webkit-line-clamp: none;'
- ]
- }
- ]
- }
- const LineHeight = {
- title: 'Line Height',
- classes: getClasses([
- { name: '3', value: '.75rem', rpx: 16 * 2 * .75 },
- { name: '4', value: '1rem', rpx: 16 * 2 * 1 },
- { name: '5', value: '1.25rem', rpx: 16 * 2 * 1.25 },
- { name: '6', value: '1.5rem', rpx: 16 * 2 * 1.5 },
- { name: '7', value: '1.75rem', rpx: 16 * 2 * 1.75 },
- { name: '8', value: '2rem', rpx: 16 * 2 * 2 },
- { name: '9', value: '2.25rem', rpx: 16 * 2 * 2.25 },
- { name: '10', value: '2.5rem', rpx: 16 * 2 * 2.5 },
- { name: 'none', value: '1' },
- { name: 'tight', value: '1.25' },
- { name: 'snug', value: '1.375' },
- { name: 'normal', value: '1.5' },
- { name: 'relaxed', value: '1.625' },
- { name: 'loose', value: '2' },
- ], { name: 'leading-', value: 'line-height' })
- }
- const ListStyleImage = { title: 'List StyleImage', classes: [] }
- const ListStylePosition = { title: 'List StylePosition', classes: [] }
- const ListStyleType = { title: 'List StyleType', classes: [] }
- const TextAlign = ({
- title: 'Text Align',
- classes: getClasses('left,center,right,justify,start,end', { name: 'text-', value: 'text-align' }),
- })
- const TextColor = {
- title: 'Text Color',
- classes: color.map(c => {
- return {
- ...c,
- name: `text-${c.name}`,
- value: [`color: ${c.value};`],
- textcolor: c.color,
- desc: c.rgb,
- }
- })
- }
- const TextDecoration = {
- title: 'Text Decoration',
- classes: getClasses([
- { name: 'underline', value: 'underline' },
- { name: 'overline', value: 'overline' },
- { name: 'line-through', value: 'line-through' },
- { name: 'no-underline', value: 'none' },
- ], { name: '', value: 'text-decoration-line' })
- }
- const TextDecorationColor = {
- title: 'Text DecorationColor',
- classes: color.map(c => {
- return {
- ...c,
- name: `decoration-${c.name}`,
- value: [`color: ${c.value};`],
- // textcolor: c.color,
- desc: c.rgb,
- }
- })
- }
- const TextDecorationStyle = {
- title: 'Text DecorationStyle',
- classes: getClasses('solid, double, dotted, dashed, wavy', { name: 'decoration-', value: 'text-decoration-style' })
- }
- const TextDecorationThickness = {
- title: 'Text Decoration Thickness',
- classes: getClasses([
- { name: 'auto', value: 'auto' },
- { name: 'from-font', value: 'from-font' },
- { name: '0', value: '0' },
- { name: '1', value: `${1 * 2}rpx` },
- { name: '2', value: `${2 * 2}rpx` },
- { name: '4', value: `${4 * 2}rpx` },
- { name: '8', value: `${8 * 2}rpx` },
- ], { name: 'decoration-', value: 'text-decoration-thickness', scss: 0 })
- }
- const TextUnderlineOffset = {
- title: 'Text Underline Offset',
- classes: getClasses([
- { name: 'auto', value: 'auto' },
- { name: '0', value: '0' },
- { name: '1', value: `${1 * 2}rpx` },
- { name: '2', value: `${2 * 2}rpx` },
- { name: '4', value: `${4 * 2}rpx` },
- { name: '8', value: `${8 * 2}rpx` },
- ], { name: 'underline-offset-', value: 'text-underline-offset', scss: 0 })
- }
- const TextTransform = {
- title: 'Text Transform',
- classes: getClasses([
- { name: 'uppercase', value: 'uppercase' },
- { name: 'lowercase', value: 'lowercase' },
- { name: 'capitalize', value: 'capitalize' },
- { name: 'normal-case', value: 'none' },
- ], { name: '', value: 'text-transform', scss: 0 })
- }
- const TextOverflow = {
- title: 'Text Overflow',
- classes: [{
- name: 'truncate',
- value: ['overflow: hidden;',
- 'text-overflow: ellipsis;',
- 'white-space: nowrap;'
- ]
- },
- { name: 'text-ellipsis', value: ['text-overflow: ellipsis;'] },
- { name: 'text-clip', value: ['text-overflow: clip;'] },
- ]
- }
- const TextIndent = {
- title: 'Text Indent',
- classes: getClasses(pxs, {
- name: ['indent-'],
- value: ['text-indent'],
- })
- }
- const VerticalAlign = {
- title: 'Vertical Align',
- classes: getClasses([
- { name: 'baseline', value: 'baseline' },
- { name: 'top', value: 'top' },
- { name: 'middle', value: 'middle' },
- { name: 'bottom', value: 'bottom' },
- { name: 'text-top', value: 'text-top' },
- { name: 'text-bottom', value: 'text-bottom' },
- { name: 'sub', value: 'sub' },
- { name: 'super', value: 'super' },
- ], { name: 'align-', value: 'vertical-align', scss: 0 })
- }
- const Whitespace = { title: 'Whitespace', classes: getClasses(`normal, nowrap, pre, pre-line, pre-wrap, break-spaces`, { name: 'whitespace-', value: 'white-space', scss: 0 }) }
- const WordBreak = {
- title: 'WordBreak',
- classes: [
- {name: 'break-normal', value: ['overflow-wrap: normal;', 'word-break: normal;']},
- {name: 'break-words', value: ['overflow-wrap: break-word;']},
- {name: 'break-all', value: ['word-break: break-all;']},
- {name: 'break-keep', value: ['word-break: keep-all;']},
- ]
- }
- const Hyphens = { title: 'Hyphens', classes: getClasses(`none, manual, auto`, { name: 'hyphens-', value: 'hyphens', scss: 0 }) }
- const Content = { title: 'Content', classes: getClasses(`none`, { name: 'content-', value: 'content', scss: 0 }) }
- return {
- FontFamily,
- FontSize,
- FontSmoothing,
- FontStyle,
- FontWeight,
- FontVariantNumeric,
- LetterSpacing,
- LineClamp,
- LineHeight,
- ListStyleImage,
- ListStylePosition,
- ListStyleType,
- TextAlign,
- TextColor,
- TextDecoration,
- TextDecorationColor,
- TextDecorationStyle,
- TextDecorationThickness,
- TextUnderlineOffset,
- TextTransform,
- TextOverflow,
- TextIndent,
- VerticalAlign,
- Whitespace,
- WordBreak,
- Hyphens,
- Content
- }
- }
- export default useHook
|