@tuuject/koi-react 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +73 -2
- package/dist/alert/Alert.d.ts +13 -0
- package/dist/alert/Alert.js +16 -0
- package/dist/avatar/Avatar.d.ts +7 -0
- package/dist/avatar/Avatar.js +10 -0
- package/dist/badge/Badge.d.ts +7 -0
- package/dist/badge/Badge.js +8 -0
- package/dist/button/Button.d.ts +22 -0
- package/dist/button/Button.js +28 -0
- package/dist/card/Card.d.ts +9 -0
- package/dist/card/Card.js +8 -0
- package/dist/chat-bubble/ChatBubble.d.ts +7 -0
- package/dist/chat-bubble/ChatBubble.js +7 -0
- package/dist/checkbox/Checkbox.d.ts +18 -0
- package/dist/checkbox/Checkbox.js +25 -0
- package/dist/dialog/Dialog.d.ts +13 -0
- package/dist/dialog/Dialog.js +38 -0
- package/dist/divider/Divider.d.ts +6 -0
- package/dist/divider/Divider.js +17 -0
- package/dist/field/Field.d.ts +14 -0
- package/dist/field/Field.js +19 -0
- package/dist/field/context.d.ts +5 -0
- package/dist/field/context.js +2 -0
- package/dist/icons.d.ts +26 -0
- package/dist/icons.js +46 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.js +30 -0
- package/dist/input/Input.d.ts +9 -0
- package/dist/input/Input.js +15 -0
- package/dist/link/Link.d.ts +11 -0
- package/dist/link/Link.js +17 -0
- package/dist/pagination/Pagination.d.ts +7 -0
- package/dist/pagination/Pagination.js +26 -0
- package/dist/panda/buildinfo.json +10442 -0
- package/dist/panda/lib.json +18 -0
- package/dist/panda/preset.mjs +3907 -0
- package/dist/progress/Progress.d.ts +7 -0
- package/dist/progress/Progress.js +17 -0
- package/dist/prose/Prose.d.ts +10 -0
- package/dist/prose/Prose.js +10 -0
- package/dist/radio-group/RadioGroup.d.ts +15 -0
- package/dist/radio-group/RadioGroup.js +26 -0
- package/dist/select/Select.d.ts +11 -0
- package/dist/select/Select.js +21 -0
- package/dist/select/SelectPanel.d.ts +24 -0
- package/dist/select/SelectPanel.js +105 -0
- package/dist/shape.d.ts +16 -0
- package/dist/shape.js +17 -0
- package/dist/skeleton/Skeleton.d.ts +8 -0
- package/dist/skeleton/Skeleton.js +8 -0
- package/dist/spinner/Spinner.d.ts +7 -0
- package/dist/spinner/Spinner.js +13 -0
- package/dist/switch/Switch.d.ts +22 -0
- package/dist/switch/Switch.js +23 -0
- package/dist/table/DataTable.d.ts +12 -0
- package/dist/table/DataTable.js +12 -0
- package/dist/table/Table.d.ts +38 -0
- package/dist/table/Table.js +45 -0
- package/dist/tabs/Tabs.d.ts +11 -0
- package/dist/tabs/Tabs.js +20 -0
- package/dist/tag/Tag.d.ts +6 -0
- package/dist/tag/Tag.js +15 -0
- package/dist/textarea/Textarea.d.ts +9 -0
- package/dist/textarea/Textarea.js +14 -0
- package/dist/toast/Toast.d.ts +23 -0
- package/dist/toast/Toast.js +80 -0
- package/dist/tooltip/Tooltip.d.ts +9 -0
- package/dist/tooltip/Tooltip.js +29 -0
- package/dist/types.d.ts +11 -0
- package/dist/types.js +1 -0
- package/package.json +218 -3
- package/styled-system/css/conditions.d.ts +7 -0
- package/styled-system/css/conditions.js +32 -0
- package/styled-system/css/css.d.ts +22 -0
- package/styled-system/css/css.js +63 -0
- package/styled-system/css/cva.d.ts +5 -0
- package/styled-system/css/cva.js +51 -0
- package/styled-system/css/cx.d.ts +6 -0
- package/styled-system/css/cx.js +16 -0
- package/styled-system/css/first-that-works.d.ts +22 -0
- package/styled-system/css/first-that-works.js +1 -0
- package/styled-system/css/index.d.ts +8 -0
- package/styled-system/css/index.js +8 -0
- package/styled-system/css/keyframes.d.ts +5 -0
- package/styled-system/css/keyframes.js +8 -0
- package/styled-system/css/position-try.d.ts +5 -0
- package/styled-system/css/position-try.js +11 -0
- package/styled-system/css/sva.d.ts +3 -0
- package/styled-system/css/sva.js +49 -0
- package/styled-system/css/view-transition.d.ts +7 -0
- package/styled-system/css/view-transition.js +18 -0
- package/styled-system/helpers.d.ts +67 -0
- package/styled-system/helpers.js +624 -0
- package/styled-system/jsx/aspect-ratio.d.ts +7 -0
- package/styled-system/jsx/aspect-ratio.js +11 -0
- package/styled-system/jsx/bleed.d.ts +7 -0
- package/styled-system/jsx/bleed.js +11 -0
- package/styled-system/jsx/box.d.ts +7 -0
- package/styled-system/jsx/box.js +11 -0
- package/styled-system/jsx/center.d.ts +7 -0
- package/styled-system/jsx/center.js +11 -0
- package/styled-system/jsx/circle.d.ts +7 -0
- package/styled-system/jsx/circle.js +11 -0
- package/styled-system/jsx/container.d.ts +7 -0
- package/styled-system/jsx/container.js +11 -0
- package/styled-system/jsx/cq.d.ts +7 -0
- package/styled-system/jsx/cq.js +11 -0
- package/styled-system/jsx/create-recipe-context.d.ts +32 -0
- package/styled-system/jsx/create-recipe-context.js +38 -0
- package/styled-system/jsx/create-slot-recipe-context.d.ts +48 -0
- package/styled-system/jsx/create-slot-recipe-context.js +116 -0
- package/styled-system/jsx/divider.d.ts +7 -0
- package/styled-system/jsx/divider.js +11 -0
- package/styled-system/jsx/factory.d.ts +3 -0
- package/styled-system/jsx/factory.js +91 -0
- package/styled-system/jsx/flex.d.ts +7 -0
- package/styled-system/jsx/flex.js +11 -0
- package/styled-system/jsx/float.d.ts +7 -0
- package/styled-system/jsx/float.js +11 -0
- package/styled-system/jsx/grid-item.d.ts +7 -0
- package/styled-system/jsx/grid-item.js +11 -0
- package/styled-system/jsx/grid.d.ts +7 -0
- package/styled-system/jsx/grid.js +11 -0
- package/styled-system/jsx/helper.d.ts +34 -0
- package/styled-system/jsx/helper.js +83 -0
- package/styled-system/jsx/hstack.d.ts +7 -0
- package/styled-system/jsx/hstack.js +11 -0
- package/styled-system/jsx/index.d.ts +25 -0
- package/styled-system/jsx/index.js +24 -0
- package/styled-system/jsx/is-valid-prop.d.ts +7 -0
- package/styled-system/jsx/is-valid-prop.js +12 -0
- package/styled-system/jsx/link-overlay.d.ts +7 -0
- package/styled-system/jsx/link-overlay.js +11 -0
- package/styled-system/jsx/spacer.d.ts +7 -0
- package/styled-system/jsx/spacer.js +11 -0
- package/styled-system/jsx/square.d.ts +7 -0
- package/styled-system/jsx/square.js +11 -0
- package/styled-system/jsx/stack.d.ts +7 -0
- package/styled-system/jsx/stack.js +11 -0
- package/styled-system/jsx/visually-hidden.d.ts +7 -0
- package/styled-system/jsx/visually-hidden.js +11 -0
- package/styled-system/jsx/vstack.d.ts +7 -0
- package/styled-system/jsx/vstack.js +11 -0
- package/styled-system/jsx/wrap.d.ts +7 -0
- package/styled-system/jsx/wrap.js +11 -0
- package/styled-system/patterns/aspect-ratio.d.ts +19 -0
- package/styled-system/patterns/aspect-ratio.js +37 -0
- package/styled-system/patterns/bleed.d.ts +20 -0
- package/styled-system/patterns/bleed.js +30 -0
- package/styled-system/patterns/box.d.ts +17 -0
- package/styled-system/patterns/box.js +16 -0
- package/styled-system/patterns/center.d.ts +19 -0
- package/styled-system/patterns/center.js +22 -0
- package/styled-system/patterns/circle.d.ts +19 -0
- package/styled-system/patterns/circle.js +26 -0
- package/styled-system/patterns/container.d.ts +17 -0
- package/styled-system/patterns/container.js +26 -0
- package/styled-system/patterns/cq.d.ts +21 -0
- package/styled-system/patterns/cq.js +24 -0
- package/styled-system/patterns/divider.d.ts +22 -0
- package/styled-system/patterns/divider.js +31 -0
- package/styled-system/patterns/flex.d.ts +25 -0
- package/styled-system/patterns/flex.js +27 -0
- package/styled-system/patterns/float.d.ts +23 -0
- package/styled-system/patterns/float.js +84 -0
- package/styled-system/patterns/grid-item.d.ts +24 -0
- package/styled-system/patterns/grid-item.js +26 -0
- package/styled-system/patterns/grid.d.ts +24 -0
- package/styled-system/patterns/grid.js +30 -0
- package/styled-system/patterns/hstack.d.ts +20 -0
- package/styled-system/patterns/hstack.js +27 -0
- package/styled-system/patterns/index.d.ts +20 -0
- package/styled-system/patterns/index.js +20 -0
- package/styled-system/patterns/link-overlay.d.ts +17 -0
- package/styled-system/patterns/link-overlay.js +25 -0
- package/styled-system/patterns/runtime.js +25 -0
- package/styled-system/patterns/spacer.d.ts +20 -0
- package/styled-system/patterns/spacer.js +26 -0
- package/styled-system/patterns/square.d.ts +19 -0
- package/styled-system/patterns/square.js +25 -0
- package/styled-system/patterns/stack.d.ts +22 -0
- package/styled-system/patterns/stack.js +30 -0
- package/styled-system/patterns/visually-hidden.d.ts +17 -0
- package/styled-system/patterns/visually-hidden.js +19 -0
- package/styled-system/patterns/vstack.d.ts +20 -0
- package/styled-system/patterns/vstack.js +27 -0
- package/styled-system/patterns/wrap.d.ts +23 -0
- package/styled-system/patterns/wrap.js +26 -0
- package/styled-system/recipes/alert.d.ts +19 -0
- package/styled-system/recipes/alert.js +5 -0
- package/styled-system/recipes/avatar.d.ts +19 -0
- package/styled-system/recipes/avatar.js +5 -0
- package/styled-system/recipes/badge.d.ts +18 -0
- package/styled-system/recipes/badge.js +5 -0
- package/styled-system/recipes/button.d.ts +20 -0
- package/styled-system/recipes/button.js +5 -0
- package/styled-system/recipes/card.d.ts +19 -0
- package/styled-system/recipes/card.js +5 -0
- package/styled-system/recipes/chat-bubble.d.ts +16 -0
- package/styled-system/recipes/chat-bubble.js +5 -0
- package/styled-system/recipes/checkbox.d.ts +16 -0
- package/styled-system/recipes/checkbox.js +5 -0
- package/styled-system/recipes/dialog.d.ts +18 -0
- package/styled-system/recipes/dialog.js +5 -0
- package/styled-system/recipes/field.d.ts +16 -0
- package/styled-system/recipes/field.js +5 -0
- package/styled-system/recipes/index.d.ts +27 -0
- package/styled-system/recipes/index.js +27 -0
- package/styled-system/recipes/input.d.ts +18 -0
- package/styled-system/recipes/input.js +5 -0
- package/styled-system/recipes/link.d.ts +18 -0
- package/styled-system/recipes/link.js +5 -0
- package/styled-system/recipes/pagination.d.ts +19 -0
- package/styled-system/recipes/pagination.js +5 -0
- package/styled-system/recipes/progress.d.ts +18 -0
- package/styled-system/recipes/progress.js +5 -0
- package/styled-system/recipes/prose.d.ts +16 -0
- package/styled-system/recipes/prose.js +5 -0
- package/styled-system/recipes/radio-group.d.ts +18 -0
- package/styled-system/recipes/radio-group.js +5 -0
- package/styled-system/recipes/runtime.js +133 -0
- package/styled-system/recipes/select-panel.d.ts +18 -0
- package/styled-system/recipes/select-panel.js +5 -0
- package/styled-system/recipes/select.d.ts +18 -0
- package/styled-system/recipes/select.js +5 -0
- package/styled-system/recipes/separator.d.ts +16 -0
- package/styled-system/recipes/separator.js +5 -0
- package/styled-system/recipes/skeleton.d.ts +14 -0
- package/styled-system/recipes/skeleton.js +5 -0
- package/styled-system/recipes/spinner.d.ts +16 -0
- package/styled-system/recipes/spinner.js +5 -0
- package/styled-system/recipes/switch-recipe.d.ts +16 -0
- package/styled-system/recipes/switch-recipe.js +5 -0
- package/styled-system/recipes/table.d.ts +20 -0
- package/styled-system/recipes/table.js +5 -0
- package/styled-system/recipes/tabs.d.ts +18 -0
- package/styled-system/recipes/tabs.js +5 -0
- package/styled-system/recipes/tag.d.ts +18 -0
- package/styled-system/recipes/tag.js +5 -0
- package/styled-system/recipes/textarea.d.ts +14 -0
- package/styled-system/recipes/textarea.js +5 -0
- package/styled-system/recipes/toast.d.ts +20 -0
- package/styled-system/recipes/toast.js +5 -0
- package/styled-system/recipes/tooltip.d.ts +16 -0
- package/styled-system/recipes/tooltip.js +5 -0
- package/styled-system/tokens/index.d.ts +8 -0
- package/styled-system/tokens/index.js +18 -0
- package/styled-system/types/index.d.ts +5 -0
- package/styled-system/types/jsx.d.ts +80 -0
- package/styled-system/types/pattern.d.ts +26 -0
- package/styled-system/types/recipe.d.ts +77 -0
- package/styled-system/types/system.d.ts +1645 -0
- package/styled-system/types/tokens.d.ts +47 -0
|
@@ -0,0 +1,624 @@
|
|
|
1
|
+
export function isObject(v) {
|
|
2
|
+
return typeof v === "object" && v != null && !Array.isArray(v)
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
const HAS_OWN = Object.prototype.hasOwnProperty
|
|
6
|
+
|
|
7
|
+
export function isBaseCondition(v) {
|
|
8
|
+
return v === "base"
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function filterBaseConditions(c) {
|
|
12
|
+
const out = []
|
|
13
|
+
for (let i = 0; i < c.length; i++) {
|
|
14
|
+
if (!isBaseCondition(c[i])) out.push(c[i])
|
|
15
|
+
}
|
|
16
|
+
return out
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function toHash(v) {
|
|
20
|
+
let h = 5381
|
|
21
|
+
for (let i = v.length; i; ) h = (h * 33) ^ v.charCodeAt(--i)
|
|
22
|
+
let x = h >>> 0, out = ''
|
|
23
|
+
for (; x > 52; x = (x / 52) | 0) {
|
|
24
|
+
const c = x % 52
|
|
25
|
+
out = String.fromCharCode(c + (c > 25 ? 39 : 97)) + out
|
|
26
|
+
}
|
|
27
|
+
const c = x % 52
|
|
28
|
+
return String.fromCharCode(c + (c > 25 ? 39 : 97)) + out
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function stableStringify(value) {
|
|
32
|
+
if (value === null) return 'null'
|
|
33
|
+
const t = typeof value
|
|
34
|
+
if (t === 'boolean') return value ? 'true' : 'false'
|
|
35
|
+
if (t === 'number') return Number.isFinite(value) ? String(value) : 'null'
|
|
36
|
+
if (t === 'string') return JSON.stringify(value)
|
|
37
|
+
if (Array.isArray(value)) {
|
|
38
|
+
let out = '['
|
|
39
|
+
for (let i = 0; i < value.length; i++) {
|
|
40
|
+
if (i) out += ','
|
|
41
|
+
out += stableStringify(value[i])
|
|
42
|
+
}
|
|
43
|
+
return out + ']'
|
|
44
|
+
}
|
|
45
|
+
if (t === 'object') {
|
|
46
|
+
const keys = Object.keys(value).sort()
|
|
47
|
+
let out = '{'
|
|
48
|
+
for (let i = 0; i < keys.length; i++) {
|
|
49
|
+
if (i) out += ','
|
|
50
|
+
const key = keys[i]
|
|
51
|
+
out += JSON.stringify(key) + ':' + stableStringify(value[key])
|
|
52
|
+
}
|
|
53
|
+
return out + '}'
|
|
54
|
+
}
|
|
55
|
+
return 'null'
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const CSS_VAR_CHAR_REGEX = /[a-z0-9_-]/
|
|
59
|
+
|
|
60
|
+
export function toCssVar(path) {
|
|
61
|
+
let out = ""
|
|
62
|
+
for (const ch of path.replaceAll(".", "-")) {
|
|
63
|
+
if (ch >= "A" && ch <= "Z") out += "-" + ch.toLowerCase()
|
|
64
|
+
else if (CSS_VAR_CHAR_REGEX.test(ch) || ch >= "\u0081") out += ch
|
|
65
|
+
else out += "\\" + ch
|
|
66
|
+
}
|
|
67
|
+
return "var(--" + out + ")"
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function colorMix(tokens, path, resolveVar) {
|
|
71
|
+
const colorPrefix = "colors."
|
|
72
|
+
if (!path.startsWith(colorPrefix)) return
|
|
73
|
+
|
|
74
|
+
const index = path.indexOf("/", colorPrefix.length)
|
|
75
|
+
if (index === -1 || index === path.length - 1) return
|
|
76
|
+
|
|
77
|
+
const colorPath = path.slice(0, index)
|
|
78
|
+
if (tokens[colorPath] === undefined) return
|
|
79
|
+
|
|
80
|
+
const rawOpacity = path.slice(index + 1)
|
|
81
|
+
const opacity = tokens["opacity." + rawOpacity]
|
|
82
|
+
const percent = opacity === undefined ? Number(rawOpacity) : Number(opacity) * 100
|
|
83
|
+
if (Number.isNaN(percent)) return
|
|
84
|
+
|
|
85
|
+
return "color-mix(in oklab, " + (resolveVar || toCssVar)(colorPath) + " " + percent + "%, transparent)"
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function compact(v) {
|
|
89
|
+
const out = {}
|
|
90
|
+
if (!v) return out
|
|
91
|
+
for (const k in v) {
|
|
92
|
+
if (v[k] !== void 0) out[k] = v[k]
|
|
93
|
+
}
|
|
94
|
+
return out
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function withDefaults(defaults, props) {
|
|
98
|
+
return { ...defaults, ...compact(props) }
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function toVariantMap(variants) {
|
|
102
|
+
const map = {}
|
|
103
|
+
for (const key in variants) map[key] = Object.keys(variants[key])
|
|
104
|
+
return map
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function compoundVariantMatches(compound, variants) {
|
|
108
|
+
for (const key in compound) {
|
|
109
|
+
if (key === "css" || key === "className" || key === "classNames") continue
|
|
110
|
+
const expected = compound[key]
|
|
111
|
+
const actual = variants[key]
|
|
112
|
+
if (Array.isArray(expected) ? !expected.includes(actual) : actual !== expected) return false
|
|
113
|
+
}
|
|
114
|
+
return true
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export function getCompoundVariantClassNames(compoundVariants, variants, formatClassName) {
|
|
118
|
+
const classes = []
|
|
119
|
+
for (const compound of compoundVariants) {
|
|
120
|
+
if (!compoundVariantMatches(compound, variants)) continue
|
|
121
|
+
if (compound.className) classes.push(formatClassName ? formatClassName(compound.className) : compound.className)
|
|
122
|
+
}
|
|
123
|
+
return classes.join(" ")
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export function getCompoundVariantCss(compoundVariants, variants) {
|
|
127
|
+
let result = {}
|
|
128
|
+
for (const variant of compoundVariants) {
|
|
129
|
+
if (!compoundVariantMatches(variant, variants)) continue
|
|
130
|
+
result = mergeProps(result, variant.css)
|
|
131
|
+
}
|
|
132
|
+
return result
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export function getSlotCompoundVariant(compoundVariants, slot) {
|
|
136
|
+
const result = []
|
|
137
|
+
for (const variant of compoundVariants) {
|
|
138
|
+
const css = variant.css?.[slot]
|
|
139
|
+
const className = variant.classNames?.[slot] ?? variant.className
|
|
140
|
+
if (!css && !className) continue
|
|
141
|
+
const next = css ? { css } : {}
|
|
142
|
+
for (const key in variant) {
|
|
143
|
+
if (key === "css" || key === "className" || key === "classNames") continue
|
|
144
|
+
next[key] = variant[key]
|
|
145
|
+
}
|
|
146
|
+
if (className) next.className = className
|
|
147
|
+
result.push(next)
|
|
148
|
+
}
|
|
149
|
+
return result
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export function getSlotRecipes(recipe) {
|
|
153
|
+
const result = {}
|
|
154
|
+
const slots = recipe.slots ?? []
|
|
155
|
+
for (const slot of slots) {
|
|
156
|
+
result[slot] = {
|
|
157
|
+
className: recipe.className ? recipe.className + "__" + slot : slot,
|
|
158
|
+
base: recipe.base?.[slot] ?? {},
|
|
159
|
+
variants: {},
|
|
160
|
+
defaultVariants: recipe.defaultVariants ?? {},
|
|
161
|
+
compoundVariants: getSlotCompoundVariant(recipe.compoundVariants ?? [], slot),
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const variants = recipe.variants ?? {}
|
|
165
|
+
for (const variantsKey in variants) {
|
|
166
|
+
const variantGroup = variants[variantsKey]
|
|
167
|
+
for (const slot of slots) {
|
|
168
|
+
const group = result[slot].variants[variantsKey] = {}
|
|
169
|
+
for (const variantKey in variantGroup) {
|
|
170
|
+
group[variantKey] = variantGroup[variantKey][slot] ?? {}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return result
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export function toResponsiveObject(values, breakpoints) {
|
|
178
|
+
const out = {}
|
|
179
|
+
for (let i = 0; i < values.length; i++) {
|
|
180
|
+
if (values[i] != null) out[breakpoints[i]] = values[i]
|
|
181
|
+
}
|
|
182
|
+
return out
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export function walkObject(target, fn, options) {
|
|
186
|
+
options ||= {}
|
|
187
|
+
const { stop, getKey } = options
|
|
188
|
+
const inner = (value, path = []) => {
|
|
189
|
+
if (!value || typeof value !== "object") return fn(value, path)
|
|
190
|
+
if (stop?.(value, path)) return fn(value, path)
|
|
191
|
+
const out = Array.isArray(value) ? [] : {}
|
|
192
|
+
for (const prop in value) {
|
|
193
|
+
if (!HAS_OWN.call(value, prop) || prop === "__proto__") continue
|
|
194
|
+
const key = getKey?.(prop, value[prop]) ?? prop
|
|
195
|
+
path.push(key)
|
|
196
|
+
const next = inner(value[prop], path)
|
|
197
|
+
path.pop()
|
|
198
|
+
if (next != null) out[key] = next
|
|
199
|
+
}
|
|
200
|
+
return out
|
|
201
|
+
}
|
|
202
|
+
return inner(target)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export function mapObject(obj, fn) {
|
|
206
|
+
return Array.isArray(obj) ? obj.map(fn) : isObject(obj) ? walkObject(obj, fn) : fn(obj)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export function normalizeStyleObject(styles, context, shorthand) {
|
|
210
|
+
const { utility, conditions } = context
|
|
211
|
+
const { hasShorthand, resolveShorthand } = utility
|
|
212
|
+
shorthand = shorthand !== false
|
|
213
|
+
return walkObject(styles, (value) => {
|
|
214
|
+
if (Array.isArray(value)) return toResponsiveObject(value, conditions.breakpoints.keys)
|
|
215
|
+
return value
|
|
216
|
+
}, {
|
|
217
|
+
stop: Array.isArray,
|
|
218
|
+
getKey: shorthand ? (prop) => hasShorthand ? resolveShorthand(prop) : prop : void 0
|
|
219
|
+
})
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function flatHashOrNull(args) {
|
|
223
|
+
let h = 5381
|
|
224
|
+
for (let a = 0; a < args.length; a++) {
|
|
225
|
+
const obj = args[a]
|
|
226
|
+
if (obj === null || typeof obj !== "object") { h = (h * 33) ^ 1; continue }
|
|
227
|
+
for (const k in obj) {
|
|
228
|
+
const v = obj[k]
|
|
229
|
+
const tv = typeof v
|
|
230
|
+
if (v !== null && tv === "object") return null
|
|
231
|
+
for (let i = 0; i < k.length; i++) h = (h * 33) ^ k.charCodeAt(i)
|
|
232
|
+
if (tv === "string") { for (let i = 0; i < v.length; i++) h = (h * 33) ^ v.charCodeAt(i) }
|
|
233
|
+
else if (tv === "number") h = (h * 33) ^ (v | 0)
|
|
234
|
+
else if (tv === "boolean") h = (h * 33) ^ (v ? 991 : 997)
|
|
235
|
+
else h = (h * 33) ^ 2
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return h >>> 0
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function flatArgsEqual(a, b) {
|
|
242
|
+
if (a.length !== b.length) return false
|
|
243
|
+
for (let i = 0; i < a.length; i++) {
|
|
244
|
+
const oa = a[i]
|
|
245
|
+
const ob = b[i]
|
|
246
|
+
if (oa === ob) continue
|
|
247
|
+
if (oa === null || ob === null || typeof oa !== "object" || typeof ob !== "object") return false
|
|
248
|
+
let n = 0
|
|
249
|
+
for (const k in oa) {
|
|
250
|
+
if (oa[k] !== ob[k]) return false
|
|
251
|
+
n++
|
|
252
|
+
}
|
|
253
|
+
if (n !== Object.keys(ob).length) return false
|
|
254
|
+
}
|
|
255
|
+
return true
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
export function memo(fn) {
|
|
259
|
+
const cache = new Map()
|
|
260
|
+
const stringCache = new Map()
|
|
261
|
+
const seen = new WeakSet()
|
|
262
|
+
const newNode = () => ({ objects: new WeakMap(), prims: new Map(), out: void 0, has: false })
|
|
263
|
+
const root = newNode()
|
|
264
|
+
let lastHash
|
|
265
|
+
let lastKey
|
|
266
|
+
let lastValue
|
|
267
|
+
let hasLast = false
|
|
268
|
+
let misses = 0
|
|
269
|
+
|
|
270
|
+
const step = (node, v) => {
|
|
271
|
+
if (v !== null && typeof v === "object") {
|
|
272
|
+
let next = node.objects.get(v)
|
|
273
|
+
if (next === void 0) { next = newNode(); node.objects.set(v, next) }
|
|
274
|
+
return next
|
|
275
|
+
}
|
|
276
|
+
let next = node.prims.get(v)
|
|
277
|
+
if (next === void 0) {
|
|
278
|
+
if (node.prims.size > 64) node.prims.clear()
|
|
279
|
+
next = newNode()
|
|
280
|
+
node.prims.set(v, next)
|
|
281
|
+
}
|
|
282
|
+
return next
|
|
283
|
+
}
|
|
284
|
+
const walk = (node, v) => {
|
|
285
|
+
if (Array.isArray(v)) {
|
|
286
|
+
node = step(node, "\u0000[")
|
|
287
|
+
for (let i = 0; i < v.length; i++) node = walk(node, v[i])
|
|
288
|
+
return step(node, "\u0000]")
|
|
289
|
+
}
|
|
290
|
+
return step(node, v)
|
|
291
|
+
}
|
|
292
|
+
const readWalk = (node, v) => {
|
|
293
|
+
if (node === void 0) return void 0
|
|
294
|
+
if (Array.isArray(v)) {
|
|
295
|
+
node = node.prims.get("\u0000[")
|
|
296
|
+
for (let i = 0; i < v.length && node !== void 0; i++) node = readWalk(node, v[i])
|
|
297
|
+
return node === void 0 ? void 0 : node.prims.get("\u0000]")
|
|
298
|
+
}
|
|
299
|
+
return v !== null && typeof v === "object" ? node.objects.get(v) : node.prims.get(v)
|
|
300
|
+
}
|
|
301
|
+
const markSeen = (v) => {
|
|
302
|
+
if (Array.isArray(v)) {
|
|
303
|
+
let all = true
|
|
304
|
+
for (let i = 0; i < v.length; i++) if (!markSeen(v[i])) all = false
|
|
305
|
+
return all
|
|
306
|
+
}
|
|
307
|
+
if (v === null || typeof v !== "object") return true
|
|
308
|
+
if (seen.has(v)) return true
|
|
309
|
+
seen.add(v)
|
|
310
|
+
return false
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
return ((...args) => {
|
|
314
|
+
let composed = false
|
|
315
|
+
for (let i = 0; i < args.length; i++) if (Array.isArray(args[i])) { composed = true; break }
|
|
316
|
+
|
|
317
|
+
if (composed) {
|
|
318
|
+
let node = root
|
|
319
|
+
for (let i = 0; i < args.length && node !== void 0; i++) node = readWalk(node, args[i])
|
|
320
|
+
if (node !== void 0 && node.has) return node.out
|
|
321
|
+
|
|
322
|
+
const composedKey = JSON.stringify(args)
|
|
323
|
+
let composedOut =
|
|
324
|
+
hasLast && lastHash === void 0 && composedKey === lastKey ? lastValue : stringCache.get(composedKey)
|
|
325
|
+
if (composedOut === void 0) {
|
|
326
|
+
composedOut = fn(...args)
|
|
327
|
+
stringCache.set(composedKey, composedOut)
|
|
328
|
+
if (stringCache.size > 500) stringCache.delete(stringCache.keys().next().value)
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
let reused = false
|
|
332
|
+
if ((++misses & 3) === 0) {
|
|
333
|
+
reused = true
|
|
334
|
+
for (let i = 0; i < args.length; i++) if (!markSeen(args[i])) reused = false
|
|
335
|
+
}
|
|
336
|
+
if (reused) {
|
|
337
|
+
let insert = root
|
|
338
|
+
for (let i = 0; i < args.length; i++) insert = walk(insert, args[i])
|
|
339
|
+
insert.out = composedOut
|
|
340
|
+
insert.has = true
|
|
341
|
+
}
|
|
342
|
+
lastHash = void 0
|
|
343
|
+
lastKey = composedKey
|
|
344
|
+
lastValue = composedOut
|
|
345
|
+
hasLast = true
|
|
346
|
+
return composedOut
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
const hash = flatHashOrNull(args)
|
|
350
|
+
if (hash !== null) {
|
|
351
|
+
if (hasLast && lastHash === hash && flatArgsEqual(args, lastKey)) return lastValue
|
|
352
|
+
let bucket = cache.get(hash)
|
|
353
|
+
if (bucket) {
|
|
354
|
+
for (let i = 0; i < bucket.length; i++) {
|
|
355
|
+
if (flatArgsEqual(args, bucket[i].args)) {
|
|
356
|
+
lastHash = hash
|
|
357
|
+
lastKey = args
|
|
358
|
+
lastValue = bucket[i].out
|
|
359
|
+
hasLast = true
|
|
360
|
+
return bucket[i].out
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
const out = fn(...args)
|
|
365
|
+
if (!bucket) {
|
|
366
|
+
bucket = []
|
|
367
|
+
cache.set(hash, bucket)
|
|
368
|
+
}
|
|
369
|
+
bucket.push({ args, out })
|
|
370
|
+
if (bucket.length > 8) bucket.shift()
|
|
371
|
+
if (cache.size > 500) cache.delete(cache.keys().next().value)
|
|
372
|
+
lastHash = hash
|
|
373
|
+
lastKey = args
|
|
374
|
+
lastValue = out
|
|
375
|
+
hasLast = true
|
|
376
|
+
return out
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
const key = JSON.stringify(args)
|
|
380
|
+
if (hasLast && lastHash === void 0 && key === lastKey) return lastValue
|
|
381
|
+
const cached = stringCache.get(key)
|
|
382
|
+
if (cached !== void 0) {
|
|
383
|
+
lastHash = void 0
|
|
384
|
+
lastKey = key
|
|
385
|
+
lastValue = cached
|
|
386
|
+
hasLast = true
|
|
387
|
+
return cached
|
|
388
|
+
}
|
|
389
|
+
const out = fn(...args)
|
|
390
|
+
stringCache.set(key, out)
|
|
391
|
+
if (stringCache.size > 500) stringCache.delete(stringCache.keys().next().value)
|
|
392
|
+
lastHash = void 0
|
|
393
|
+
lastKey = key
|
|
394
|
+
lastValue = out
|
|
395
|
+
hasLast = true
|
|
396
|
+
return out
|
|
397
|
+
})
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
export function weakMemo(fn) {
|
|
401
|
+
const cache = new WeakMap()
|
|
402
|
+
return ((arg) => {
|
|
403
|
+
if (!arg || typeof arg !== "object") return fn(arg)
|
|
404
|
+
if (cache.has(arg)) return cache.get(arg)
|
|
405
|
+
const out = fn(arg)
|
|
406
|
+
cache.set(arg, out)
|
|
407
|
+
return out
|
|
408
|
+
})
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
export function mergeProps(...src) {
|
|
412
|
+
const out = {}
|
|
413
|
+
for (const obj of src) {
|
|
414
|
+
if (!obj) continue
|
|
415
|
+
for (const k in obj) {
|
|
416
|
+
if (!HAS_OWN.call(obj, k) || k === "__proto__" || k === "constructor" || k === "prototype") continue
|
|
417
|
+
const prev = out[k]
|
|
418
|
+
const next = obj[k]
|
|
419
|
+
out[k] = isObject(prev) && isObject(next) ? mergeProps(prev, next) : next
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
return out
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
const WHITESPACE_REGEX = /[\n\s]+/g
|
|
426
|
+
const sanitizeStyleValue = (value) => typeof value === "string" ? value.replace(WHITESPACE_REGEX, " ") : value
|
|
427
|
+
|
|
428
|
+
export function resolveStyleArgs(styles, context) {
|
|
429
|
+
const out = []
|
|
430
|
+
const visit = (items) => {
|
|
431
|
+
for (let i = 0; i < items.length; i++) {
|
|
432
|
+
const style = items[i]
|
|
433
|
+
if (Array.isArray(style)) {
|
|
434
|
+
visit(style)
|
|
435
|
+
continue
|
|
436
|
+
}
|
|
437
|
+
if (!isObject(style)) continue
|
|
438
|
+
for (const key in style) {
|
|
439
|
+
if (style[key] !== void 0) {
|
|
440
|
+
out.push(style)
|
|
441
|
+
break
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
visit(styles)
|
|
447
|
+
if (out.length < 2) return out
|
|
448
|
+
for (let i = 0; i < out.length; i++) out[i] = normalizeStyleObject(out[i], context)
|
|
449
|
+
return out
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
export function createSerializeCss(context) {
|
|
453
|
+
const u = context.utility
|
|
454
|
+
const c = context.conditions
|
|
455
|
+
const hash = context.hash
|
|
456
|
+
const fmt = (s) => u.prefix ? u.prefix + "-" + s : s
|
|
457
|
+
const toClass = (paths, name) => {
|
|
458
|
+
const parts = c.finalize(paths)
|
|
459
|
+
parts.push(hash ? name : fmt(name))
|
|
460
|
+
return hash ? fmt(u.toHash(parts, toHash)) : parts.join(":")
|
|
461
|
+
}
|
|
462
|
+
return weakMemo(memo(function serializeCss({ base, ...styles } = {}) {
|
|
463
|
+
const obj = normalizeStyleObject(base ? Object.assign(styles, base) : styles, context)
|
|
464
|
+
const set = new Set()
|
|
465
|
+
walkObject(obj, (value, paths) => {
|
|
466
|
+
if (value == null) return
|
|
467
|
+
const important = isImportant(value)
|
|
468
|
+
const [prop, ...all] = c.shift(paths)
|
|
469
|
+
const cond = filterBaseConditions(all)
|
|
470
|
+
const res = u.transform(prop, withoutSpace(withoutImportant(sanitizeStyleValue(value))))
|
|
471
|
+
let name = toClass(cond, res.className)
|
|
472
|
+
if (important) name += "!"
|
|
473
|
+
set.add(name)
|
|
474
|
+
})
|
|
475
|
+
let out = ""
|
|
476
|
+
for (const name of set) out += out ? " " + name : name
|
|
477
|
+
return out
|
|
478
|
+
}))
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
export function createMergeCss(context) {
|
|
482
|
+
return function mergeCss() {
|
|
483
|
+
return mergeProps(...resolveStyleArgs(arguments, context))
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
export function createSerializeCssArgs(serializeCss, mergeCss) {
|
|
488
|
+
return memo(function serializeCssArgs(...styles) {
|
|
489
|
+
return serializeCss(mergeCss(...styles))
|
|
490
|
+
})
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
export function createAssignCss(context) {
|
|
494
|
+
return function assignCss() {
|
|
495
|
+
const out = {}
|
|
496
|
+
const resolved = resolveStyleArgs(arguments, context)
|
|
497
|
+
for (let i = 0; i < resolved.length; i++) Object.assign(out, resolved[i])
|
|
498
|
+
return out
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
const HYPHENATE_PROPERTY_REGEX = /[A-Z]/g
|
|
503
|
+
const MS_PROPERTY_REGEX = /^ms-/
|
|
504
|
+
|
|
505
|
+
export function hypenateProperty(property) {
|
|
506
|
+
return property.startsWith("--") ? property : property.replace(HYPHENATE_PROPERTY_REGEX, "-$&").replace(MS_PROPERTY_REGEX, "-ms-").toLowerCase()
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
const splitPropsKeyMapCache = new WeakMap()
|
|
510
|
+
|
|
511
|
+
function getSplitPropsKeyMap(keys) {
|
|
512
|
+
let keyMap = splitPropsKeyMapCache.get(keys)
|
|
513
|
+
if (keyMap) return keyMap
|
|
514
|
+
keyMap = Object.create(null)
|
|
515
|
+
for (let i = 0; i < keys.length; i++) keyMap[keys[i]] = true
|
|
516
|
+
splitPropsKeyMapCache.set(keys, keyMap)
|
|
517
|
+
return keyMap
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
function copySplitProp(source, target, key) {
|
|
521
|
+
const desc = Object.getOwnPropertyDescriptor(source, key)
|
|
522
|
+
if (desc?.get || desc?.set) {
|
|
523
|
+
Object.defineProperty(target, key, desc)
|
|
524
|
+
return
|
|
525
|
+
}
|
|
526
|
+
target[key] = source[key]
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
export function splitProps(props, ...keys) {
|
|
530
|
+
const propKeys = Object.keys(props)
|
|
531
|
+
const keyCount = keys.length
|
|
532
|
+
|
|
533
|
+
if (keyCount === 1) {
|
|
534
|
+
const matcher = keys[0]
|
|
535
|
+
const picked = {}
|
|
536
|
+
const rest = {}
|
|
537
|
+
|
|
538
|
+
if (Array.isArray(matcher)) {
|
|
539
|
+
const keyMap = getSplitPropsKeyMap(matcher)
|
|
540
|
+
for (let i = 0; i < propKeys.length; i++) {
|
|
541
|
+
const key = propKeys[i]
|
|
542
|
+
if (keyMap[key] === true) {
|
|
543
|
+
copySplitProp(props, picked, key)
|
|
544
|
+
} else {
|
|
545
|
+
copySplitProp(props, rest, key)
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
return [picked, rest]
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
for (let i = 0; i < propKeys.length; i++) {
|
|
552
|
+
const key = propKeys[i]
|
|
553
|
+
if (matcher(key)) {
|
|
554
|
+
copySplitProp(props, picked, key)
|
|
555
|
+
} else {
|
|
556
|
+
copySplitProp(props, rest, key)
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
return [picked, rest]
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
const matchers = new Array(keyCount)
|
|
563
|
+
for (let i = 0; i < keyCount; i++) {
|
|
564
|
+
const matcher = keys[i]
|
|
565
|
+
matchers[i] = Array.isArray(matcher) ? getSplitPropsKeyMap(matcher) : matcher
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
const out = new Array(keyCount + 1)
|
|
569
|
+
for (let i = 0; i <= keyCount; i++) out[i] = {}
|
|
570
|
+
const rest = out[keyCount]
|
|
571
|
+
|
|
572
|
+
for (let i = 0; i < propKeys.length; i++) {
|
|
573
|
+
const key = propKeys[i]
|
|
574
|
+
let matched = false
|
|
575
|
+
for (let j = 0; j < keyCount; j++) {
|
|
576
|
+
const matcher = matchers[j]
|
|
577
|
+
if (typeof matcher === "function" ? matcher(key) : matcher[key] === true) {
|
|
578
|
+
copySplitProp(props, out[j], key)
|
|
579
|
+
matched = true
|
|
580
|
+
break
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
if (!matched) copySplitProp(props, rest, key)
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
return out
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
const htmlProps = ['htmlSize', 'htmlTranslate', 'htmlWidth', 'htmlHeight']
|
|
590
|
+
|
|
591
|
+
function convertHTMLProp(key) {
|
|
592
|
+
return htmlProps.includes(key) ? key.replace('html', '').toLowerCase() : key
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
// `Object.assign` keeps `.keys` inside a pure expression, so an unused helper tree-shakes away.
|
|
596
|
+
export const normalizeHTMLProps = /* @__PURE__ */ Object.assign(
|
|
597
|
+
function normalizeHTMLProps(props) {
|
|
598
|
+
return Object.fromEntries(Object.entries(props).map(([key, value]) => [convertHTMLProp(key), value]))
|
|
599
|
+
},
|
|
600
|
+
{ keys: htmlProps },
|
|
601
|
+
)
|
|
602
|
+
|
|
603
|
+
export function uniq(...items) {
|
|
604
|
+
const set = new Set()
|
|
605
|
+
for (const values of items) {
|
|
606
|
+
if (!values) continue
|
|
607
|
+
for (let i = 0; i < values.length; i++) set.add(values[i])
|
|
608
|
+
}
|
|
609
|
+
return Array.from(set)
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
export function withoutSpace(str) {
|
|
613
|
+
return (typeof str === "string" && str.indexOf(" ") >= 0 ? str.replaceAll(" ", "_") : str)
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
const IMPORTANT_REGEX = /\s*!(important)?\s*$/i
|
|
617
|
+
|
|
618
|
+
export function isImportant(value) {
|
|
619
|
+
return typeof value === "string" ? IMPORTANT_REGEX.test(value) : false
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
export function withoutImportant(value) {
|
|
623
|
+
return (typeof value === "string" ? value.replace(IMPORTANT_REGEX, "").trim() : value)
|
|
624
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FunctionComponent } from 'react';
|
|
2
|
+
import type { AspectRatioProperties } from '../patterns/aspect-ratio';
|
|
3
|
+
import type { HTMLStyledProps } from '../types/jsx';
|
|
4
|
+
import type { DistributiveOmit } from '../types/system';
|
|
5
|
+
|
|
6
|
+
export interface AspectRatioProps extends AspectRatioProperties, DistributiveOmit<HTMLStyledProps<'div'>, keyof AspectRatioProperties | 'aspectRatio'> {}
|
|
7
|
+
export declare const AspectRatio: FunctionComponent<AspectRatioProps>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createElement, forwardRef } from 'react';
|
|
2
|
+
import { aspectRatio } from '../patterns/aspect-ratio';
|
|
3
|
+
import { splitProps } from '../helpers';
|
|
4
|
+
import { styled } from './factory';
|
|
5
|
+
|
|
6
|
+
export const AspectRatio = /* @__PURE__ */ forwardRef(function AspectRatio(props, ref) {
|
|
7
|
+
const [patternProps, restProps] = splitProps(props, aspectRatio.propKeys)
|
|
8
|
+
const styleProps = aspectRatio.raw(patternProps)
|
|
9
|
+
const mergedProps = { ref, ...restProps, css: styleProps }
|
|
10
|
+
return createElement(styled["div"], mergedProps)
|
|
11
|
+
})
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FunctionComponent } from 'react';
|
|
2
|
+
import type { BleedProperties } from '../patterns/bleed';
|
|
3
|
+
import type { HTMLStyledProps } from '../types/jsx';
|
|
4
|
+
import type { DistributiveOmit } from '../types/system';
|
|
5
|
+
|
|
6
|
+
export interface BleedProps extends BleedProperties, DistributiveOmit<HTMLStyledProps<'div'>, keyof BleedProperties> {}
|
|
7
|
+
export declare const Bleed: FunctionComponent<BleedProps>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createElement, forwardRef } from 'react';
|
|
2
|
+
import { bleed } from '../patterns/bleed';
|
|
3
|
+
import { splitProps } from '../helpers';
|
|
4
|
+
import { styled } from './factory';
|
|
5
|
+
|
|
6
|
+
export const Bleed = /* @__PURE__ */ forwardRef(function Bleed(props, ref) {
|
|
7
|
+
const [patternProps, restProps] = splitProps(props, bleed.propKeys)
|
|
8
|
+
const styleProps = bleed.raw(patternProps)
|
|
9
|
+
const mergedProps = { ref, ...restProps, css: styleProps }
|
|
10
|
+
return createElement(styled["div"], mergedProps)
|
|
11
|
+
})
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FunctionComponent } from 'react';
|
|
2
|
+
import type { BoxProperties } from '../patterns/box';
|
|
3
|
+
import type { HTMLStyledProps } from '../types/jsx';
|
|
4
|
+
import type { DistributiveOmit } from '../types/system';
|
|
5
|
+
|
|
6
|
+
export interface BoxProps extends BoxProperties, DistributiveOmit<HTMLStyledProps<'div'>, keyof BoxProperties> {}
|
|
7
|
+
export declare const Box: FunctionComponent<BoxProps>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createElement, forwardRef } from 'react';
|
|
2
|
+
import { box } from '../patterns/box';
|
|
3
|
+
import { splitProps } from '../helpers';
|
|
4
|
+
import { styled } from './factory';
|
|
5
|
+
|
|
6
|
+
export const Box = /* @__PURE__ */ forwardRef(function Box(props, ref) {
|
|
7
|
+
const [patternProps, restProps] = splitProps(props, box.propKeys)
|
|
8
|
+
const styleProps = box.raw(patternProps)
|
|
9
|
+
const mergedProps = { ref, ...restProps, css: styleProps }
|
|
10
|
+
return createElement(styled["div"], mergedProps)
|
|
11
|
+
})
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FunctionComponent } from 'react';
|
|
2
|
+
import type { CenterProperties } from '../patterns/center';
|
|
3
|
+
import type { HTMLStyledProps } from '../types/jsx';
|
|
4
|
+
import type { DistributiveOmit } from '../types/system';
|
|
5
|
+
|
|
6
|
+
export interface CenterProps extends CenterProperties, DistributiveOmit<HTMLStyledProps<'div'>, keyof CenterProperties> {}
|
|
7
|
+
export declare const Center: FunctionComponent<CenterProps>;
|