@hkdigital/lib-sveltekit 0.1.62 → 0.1.65
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/README.md +135 -135
- package/dist/assets/autospuiten/car-paint-picker.js +41 -41
- package/dist/assets/autospuiten/labels.js +7 -7
- package/dist/classes/data/IterableTree.js +243 -243
- package/dist/classes/data/Selector.js +190 -190
- package/dist/classes/data/index.js +2 -2
- package/dist/classes/index.js +4 -4
- package/dist/classes/promise/HkPromise.js +377 -377
- package/dist/classes/promise/index.js +1 -1
- package/dist/classes/stores/SubscribersCount.js +107 -107
- package/dist/classes/stores/index.js +1 -1
- package/dist/classes/streams/LogTransformStream.js +19 -19
- package/dist/classes/streams/ServerEventsStore.js +110 -110
- package/dist/classes/streams/TimeStampSource.js +26 -26
- package/dist/classes/streams/index.js +3 -3
- package/dist/classes/svelte/audio/AudioLoader.svelte.js +58 -58
- package/dist/classes/svelte/audio/AudioScene.svelte.js +295 -295
- package/dist/classes/svelte/audio/mocks.js +35 -35
- package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
- package/dist/classes/svelte/finite-state-machine/index.js +1 -1
- package/dist/classes/svelte/image/ImageLoader.svelte.js +47 -47
- package/dist/classes/svelte/image/ImageScene.svelte.js +253 -253
- package/dist/classes/svelte/image/ImageVariantsLoader.svelte.js +152 -152
- package/dist/classes/svelte/image/index.js +4 -4
- package/dist/classes/svelte/image/mocks.js +35 -35
- package/dist/classes/svelte/image/typedef.js +8 -8
- package/dist/classes/svelte/index.js +14 -14
- package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
- package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
- package/dist/classes/svelte/loading-state-machine/index.js +3 -3
- package/dist/classes/svelte/network-loader/NetworkLoader.svelte.js +331 -331
- package/dist/classes/svelte/network-loader/constants.js +3 -3
- package/dist/classes/svelte/network-loader/index.js +3 -3
- package/dist/classes/svelte/network-loader/mocks.js +30 -30
- package/dist/classes/svelte/network-loader/typedef.js +8 -8
- package/dist/components/area/HkArea.svelte +49 -49
- package/dist/components/area/HkGridArea.svelte +77 -77
- package/dist/components/area/index.js +2 -2
- package/dist/components/buttons/button/Button.svelte +82 -82
- package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
- package/dist/components/buttons/button-text/TextButton.svelte +21 -21
- package/dist/components/buttons/index.js +3 -3
- package/dist/components/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
- package/dist/components/debug/index.js +1 -1
- package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
- package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
- package/dist/components/icons/HkIcon.svelte +86 -86
- package/dist/components/icons/HkTabIcon.svelte +116 -116
- package/dist/components/icons/SteezeIcon.svelte +97 -97
- package/dist/components/icons/index.js +6 -6
- package/dist/components/icons/typedef.js +16 -16
- package/dist/components/index.js +2 -2
- package/dist/components/inputs/index.js +1 -1
- package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
- package/dist/components/inputs/text-input/TextInput.svelte +223 -223
- package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
- package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
- package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
- package/dist/components/layout/grid-layers/GridLayers.svelte +167 -167
- package/dist/components/layout/index.js +1 -1
- package/dist/components/panels/index.js +1 -1
- package/dist/components/panels/panel/Panel.svelte +43 -43
- package/dist/components/rows/index.js +3 -3
- package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
- package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
- package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
- package/dist/components/tab-bar/HkTabBar.svelte +74 -74
- package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
- package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
- package/dist/components/tab-bar/index.js +17 -17
- package/dist/components/tab-bar/typedef.js +8 -8
- package/dist/config/imagetools-config.js +189 -189
- package/dist/config/imagetools.d.ts +71 -71
- package/dist/config/typedef.js +8 -8
- package/dist/constants/bases.js +13 -13
- package/dist/constants/errors/api.js +9 -9
- package/dist/constants/errors/generic.js +5 -5
- package/dist/constants/errors/index.js +3 -3
- package/dist/constants/errors/jwt.js +5 -5
- package/dist/constants/http/headers.js +6 -6
- package/dist/constants/http/index.js +2 -2
- package/dist/constants/http/methods.js +2 -2
- package/dist/constants/index.js +3 -3
- package/dist/constants/mime/application.js +5 -5
- package/dist/constants/mime/audio.js +13 -13
- package/dist/constants/mime/image.js +3 -3
- package/dist/constants/mime/index.js +4 -4
- package/dist/constants/mime/text.js +2 -2
- package/dist/constants/regexp/index.js +31 -31
- package/dist/constants/regexp/inspiratie.js__ +95 -95
- package/dist/constants/regexp/text.js +49 -49
- package/dist/constants/regexp/user.js +32 -32
- package/dist/constants/regexp/web.js +3 -3
- package/dist/constants/state-labels/input-states.js +11 -11
- package/dist/constants/state-labels/submit-states.js +4 -4
- package/dist/constants/time.js +28 -28
- package/dist/css/utilities.css +43 -43
- package/dist/design/design-config.js +73 -73
- package/dist/design/tailwind-theme-extend.js +158 -158
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/validate-url.js +180 -180
- package/dist/server/index.js +1 -1
- package/dist/server/logger.js +94 -94
- package/dist/states/index.js +1 -1
- package/dist/states/navigation.svelte.js +55 -55
- package/dist/stores/index.js +1 -1
- package/dist/stores/theme.js +80 -80
- package/dist/themes/hkdev/components/blocks/text-block.css +41 -41
- package/dist/themes/hkdev/components/boxes/game-box.css +12 -12
- package/dist/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
- package/dist/themes/hkdev/components/buttons/button-text.css +32 -32
- package/dist/themes/hkdev/components/buttons/button.css +142 -142
- package/dist/themes/hkdev/components/buttons/skip-button.css +6 -6
- package/dist/themes/hkdev/components/icons/icon-steeze.css +22 -22
- package/dist/themes/hkdev/components/inputs/text-input.css +104 -104
- package/dist/themes/hkdev/components/panels/panel.css +27 -27
- package/dist/themes/hkdev/components/rows/panel-grid-row.css +6 -6
- package/dist/themes/hkdev/components/rows/panel-row-2.css +7 -7
- package/dist/themes/hkdev/components.css +47 -47
- package/dist/themes/hkdev/debug.css +1 -1
- package/dist/themes/hkdev/global/layout.css +39 -39
- package/dist/themes/hkdev/global/on-colors.css +53 -53
- package/dist/themes/hkdev/globals.css +11 -11
- package/dist/themes/hkdev/responsive.css +12 -12
- package/dist/themes/hkdev/theme-ext.js +15 -15
- package/dist/themes/hkdev/theme.js +235 -235
- package/dist/themes/index.js +1 -1
- package/dist/util/array/index.js +455 -455
- package/dist/util/bases/base58.js +262 -262
- package/dist/util/bases/index.js +1 -1
- package/dist/util/compare/index.js +247 -247
- package/dist/util/css/css-vars.js +83 -83
- package/dist/util/css/index.js +1 -1
- package/dist/util/design-system/components/states.js +22 -22
- package/dist/util/design-system/css/clamp.js +66 -66
- package/dist/util/design-system/css/root-design-vars.js +100 -100
- package/dist/util/design-system/index.js +5 -5
- package/dist/util/design-system/layout/scaling.js +228 -228
- package/dist/util/design-system/skeleton.js +208 -208
- package/dist/util/design-system/tailwind.js +288 -288
- package/dist/util/expect/arrays.js +47 -47
- package/dist/util/expect/index.js +259 -259
- package/dist/util/expect/primitives.js +55 -55
- package/dist/util/expect/url.js +60 -60
- package/dist/util/function/index.js +218 -218
- package/dist/util/http/errors.js +97 -97
- package/dist/util/http/headers.js +45 -45
- package/dist/util/http/http-request.js +294 -294
- package/dist/util/http/index.js +22 -22
- package/dist/util/http/json-request.js +143 -143
- package/dist/util/http/mocks.js +65 -65
- package/dist/util/http/response.js +241 -241
- package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
- package/dist/util/http/url.js +52 -52
- package/dist/util/image/index.js +86 -86
- package/dist/util/index.js +2 -2
- package/dist/util/is/index.js +140 -140
- package/dist/util/iterate/index.js +234 -234
- package/dist/util/object/index.js +1361 -1361
- package/dist/util/singleton/index.js +97 -97
- package/dist/util/string/array-path.js +75 -75
- package/dist/util/string/convert.js +54 -54
- package/dist/util/string/fs.js +226 -226
- package/dist/util/string/index.js +5 -5
- package/dist/util/string/interpolate.js +61 -61
- package/dist/util/string/pad.js +10 -10
- package/dist/util/svelte/index.js +4 -4
- package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
- package/dist/util/svelte/observe/index.js +49 -49
- package/dist/util/svelte/state-context/index.js +83 -83
- package/dist/util/svelte/wait/index.js +38 -38
- package/dist/util/sveltekit/index.js +1 -1
- package/dist/util/sveltekit/route-folders/index.js +101 -101
- package/dist/util/time/index.js +323 -323
- package/dist/util/unique/index.js +249 -249
- package/dist/valibot/date.js__ +10 -10
- package/dist/valibot/index.js +9 -9
- package/dist/valibot/url.js +95 -95
- package/dist/valibot/user.js +23 -23
- package/dist/widgets/button-group/ButtonGroup.svelte +82 -94
- package/dist/widgets/button-group/ButtonGroup.svelte.d.ts +0 -2
- package/dist/widgets/button-group/typedef.js +10 -10
- package/dist/widgets/compare-left-right/CompareLeftRight.svelte +179 -179
- package/dist/widgets/compare-left-right/index.js +1 -1
- package/dist/widgets/game-box/GameBox.svelte +579 -186
- package/dist/widgets/game-box/GameBox.svelte.d.ts +64 -4
- package/dist/widgets/game-box/gamebox.util.js +83 -83
- package/dist/widgets/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
- package/dist/widgets/hk-app-layout/HkAppLayout.svelte +251 -251
- package/dist/widgets/image-box/ImageBox.svelte +212 -212
- package/dist/widgets/image-box/index.js +5 -5
- package/dist/widgets/image-box/typedef.js +32 -32
- package/dist/widgets/index.js +23 -23
- package/dist/widgets/presenter/(broken) Presenter.state.svelte.js__ +613 -0
- package/dist/widgets/presenter/ImageSlide.svelte +64 -64
- package/dist/widgets/presenter/Presenter.state.svelte.js +636 -636
- package/dist/widgets/presenter/Presenter.svelte +140 -140
- package/dist/widgets/presenter/Presenter.svelte__ +125 -0
- package/dist/widgets/presenter/constants.js +7 -7
- package/dist/widgets/presenter/index.js +10 -10
- package/dist/widgets/presenter/typedef.js +106 -106
- package/dist/widgets/presenter/util.js +210 -210
- package/dist/widgets/virtual-viewport/VirtualViewport.svelte +196 -196
- package/dist/zod/all.js +33 -33
- package/dist/zod/generic.js +11 -11
- package/dist/zod/javascript.js +32 -32
- package/dist/zod/user.js +16 -16
- package/dist/zod/web.js +52 -52
- package/package.json +102 -102
@@ -1,208 +1,208 @@
|
|
1
|
-
/**
|
2
|
-
* Creates utility classes for UI font styling that work with Skeleton themes
|
3
|
-
*
|
4
|
-
* This plugin adds utility classes for UI typography that reference CSS
|
5
|
-
* variables defined in your Skeleton theme, allowing consistent styling of UI
|
6
|
-
* elements across your application.
|
7
|
-
*
|
8
|
-
* @note Important Configuration Requirements:
|
9
|
-
* 1. Add UI font variables to your theme file:
|
10
|
-
* - `--ui-font-family`: Font family for UI elements
|
11
|
-
* (falls back to `--base-font-family`)
|
12
|
-
* - `--ui-font-color`: Text color for UI elements
|
13
|
-
* (falls back to `--base-font-color`)
|
14
|
-
* - `--ui-font-color-dark`: Dark mode text color
|
15
|
-
* (falls back to `--base-font-color-dark`)
|
16
|
-
*
|
17
|
-
* 2. This plugin generates the following utility classes:
|
18
|
-
* - `font-ui`: Applies UI font family
|
19
|
-
* - `text-ui`: Applies UI text color
|
20
|
-
* - `text-ui-dark`: Applies UI dark mode text color (with .dark selector)
|
21
|
-
*
|
22
|
-
* @example
|
23
|
-
* // tailwind.config.js
|
24
|
-
* import { customUtilitiesPlugin }
|
25
|
-
* from './src/lib/util/design-system/skeleton.js';
|
26
|
-
*
|
27
|
-
* export default {
|
28
|
-
* plugins: [
|
29
|
-
* customUtilitiesPlugin,
|
30
|
-
* skeleton({
|
31
|
-
* themes: [defaultThemes.cerberus, customThemes.yourTheme]
|
32
|
-
* })
|
33
|
-
* ]
|
34
|
-
* };
|
35
|
-
*
|
36
|
-
* @param {Object} api - Tailwind plugin API
|
37
|
-
* @param {Function} api.addUtilities - Function to add utilities
|
38
|
-
*/
|
39
|
-
export function customUtilitiesPlugin({ addUtilities, theme }) {
|
40
|
-
const fontFamilyUtilities = {
|
41
|
-
'.font-heading': {
|
42
|
-
'font-family': 'var(--heading-font-family)'
|
43
|
-
},
|
44
|
-
'.font-base': {
|
45
|
-
'font-family': 'var(--base-font-family)'
|
46
|
-
},
|
47
|
-
'.font-ui': {
|
48
|
-
'font-family': 'var(--ui-font-family, var(--base-font-family))'
|
49
|
-
}
|
50
|
-
};
|
51
|
-
|
52
|
-
const textColorUtilities = {
|
53
|
-
'.text-base-color': {
|
54
|
-
color: 'rgb( var(--base-font-color) )'
|
55
|
-
},
|
56
|
-
'.text-base-color-dark': {
|
57
|
-
color: 'rgb( var(--base-font-color-dark) )'
|
58
|
-
},
|
59
|
-
'.text-heading-color': {
|
60
|
-
color: 'rgb( var(--heading-font-color) )'
|
61
|
-
},
|
62
|
-
'.text-heading-color-dark': {
|
63
|
-
color: 'rgb( var(--heading-font-color-dark) )'
|
64
|
-
},
|
65
|
-
'.text-ui-color': {
|
66
|
-
color: 'rgb( var(--ui-font-color, var(--base-font-color)) )'
|
67
|
-
},
|
68
|
-
'.text-ui-color-dark': {
|
69
|
-
color: 'rgb( var(--ui-font-color-dark, var(--base-font-color-dark)) )'
|
70
|
-
}
|
71
|
-
};
|
72
|
-
|
73
|
-
const typographyUtilities = generateTypographyUtilities(theme);
|
74
|
-
|
75
|
-
addUtilities({
|
76
|
-
...typographyUtilities,
|
77
|
-
...fontFamilyUtilities,
|
78
|
-
...textColorUtilities
|
79
|
-
});
|
80
|
-
}
|
81
|
-
|
82
|
-
/**
|
83
|
-
* Generates typography utility classes based on fontSize entries in the
|
84
|
-
* Tailwind theme
|
85
|
-
*
|
86
|
-
* This function creates typography utility classes for entries in the
|
87
|
-
* theme's fontSize configuration that start with 'heading-', 'base-', or
|
88
|
-
* 'ui-' prefixes. Each class includes font size, line height, font weight,
|
89
|
-
* font family, and color properties.
|
90
|
-
*
|
91
|
-
* @param {Function} theme - Tailwind's theme function to access configuration
|
92
|
-
* @returns {Object} An object containing the generated typography utility classes
|
93
|
-
*
|
94
|
-
* @example
|
95
|
-
* // In your Tailwind plugin:
|
96
|
-
* const typographyUtils = generateTypographyUtilities(theme);
|
97
|
-
* addUtilities(typographyUtils);
|
98
|
-
*
|
99
|
-
* @example
|
100
|
-
* // Example output format:
|
101
|
-
* // {
|
102
|
-
* // '.type-heading-h1': {
|
103
|
-
* // fontSize: 'calc(32px * var(--scale-text-heading))',
|
104
|
-
* // lineHeight: '1.25',
|
105
|
-
* // fontWeight: '700',
|
106
|
-
* // fontFamily: 'var(--heading-font-family)',
|
107
|
-
* // fontStyle: 'var(--heading-font-style)',
|
108
|
-
* // letterSpacing: 'var(--heading-letter-spacing)',
|
109
|
-
* // color: 'rgb(var(--heading-font-color))'
|
110
|
-
* // }
|
111
|
-
* // }
|
112
|
-
*/
|
113
|
-
function generateTypographyUtilities(theme) {
|
114
|
-
// Get font sizes from theme
|
115
|
-
const fontSizes = theme('fontSize');
|
116
|
-
|
117
|
-
// Create typography utilities
|
118
|
-
const typographyUtilities = {};
|
119
|
-
|
120
|
-
// Process all fontSize entries and create type- classes for them
|
121
|
-
Object.entries(fontSizes).forEach(([key, value]) => {
|
122
|
-
// Skip entries that don't match our prefixes
|
123
|
-
if (
|
124
|
-
!key.startsWith('heading-') &&
|
125
|
-
!key.startsWith('base-') &&
|
126
|
-
!key.startsWith('ui-')
|
127
|
-
) {
|
128
|
-
return;
|
129
|
-
}
|
130
|
-
|
131
|
-
const [size, options] = Array.isArray(value) ? value : [value, {}];
|
132
|
-
|
133
|
-
// Determine properties based on the prefix
|
134
|
-
let properties = {};
|
135
|
-
|
136
|
-
let propertiesDark;
|
137
|
-
|
138
|
-
if (key.startsWith('heading-')) {
|
139
|
-
properties = {
|
140
|
-
lineHeight: options.lineHeight || 'normal',
|
141
|
-
fontFamily: 'var(--heading-font-family)',
|
142
|
-
fontStyle: 'var(--heading-font-style)',
|
143
|
-
fontWeight: 'var(--heading-font-weight)',
|
144
|
-
letterSpacing: 'var(--heading-letter-spacing)',
|
145
|
-
color: 'rgb(var(--heading-font-color))'
|
146
|
-
};
|
147
|
-
|
148
|
-
propertiesDark = {
|
149
|
-
...properties,
|
150
|
-
color: 'rgb(var(--heading-font-color-dark))'
|
151
|
-
};
|
152
|
-
} else if (key.startsWith('base-')) {
|
153
|
-
properties = {
|
154
|
-
lineHeight: options.lineHeight || 'normal',
|
155
|
-
fontFamily: 'var(--base-font-family)',
|
156
|
-
fontWeight: 'var(--base-font-weight)',
|
157
|
-
letterSpacing: 'var(--base-letter-spacing)',
|
158
|
-
color: 'rgb(var(--base-font-color))'
|
159
|
-
};
|
160
|
-
|
161
|
-
propertiesDark = {
|
162
|
-
...properties,
|
163
|
-
color: 'rgb(var(--base-font-color-dark))'
|
164
|
-
};
|
165
|
-
} else if (key.startsWith('ui-')) {
|
166
|
-
properties = {
|
167
|
-
lineHeight: options.lineHeight || 'normal',
|
168
|
-
fontFamily: 'var(--ui-font-family, var(--base-font-family))',
|
169
|
-
fontWeight: 'var(--ui-font-weight)',
|
170
|
-
letterSpacing: 'var(--ui-letter-spacing, var(--base-letter-spacing))',
|
171
|
-
color: 'rgb(var(--ui-font-color, var(--base-font-color)))'
|
172
|
-
};
|
173
|
-
|
174
|
-
propertiesDark = {
|
175
|
-
...properties,
|
176
|
-
color: 'rgb(var(--ui-font-color-dark, var(--base-font-color-dark)))'
|
177
|
-
};
|
178
|
-
}
|
179
|
-
|
180
|
-
// Create the utility class using the original key
|
181
|
-
typographyUtilities[`.type-${key}`] = {
|
182
|
-
fontSize: size,
|
183
|
-
...properties,
|
184
|
-
// Include any other properties defined in the fontSize options
|
185
|
-
...Object.fromEntries(
|
186
|
-
Object.entries(options).filter(
|
187
|
-
([k]) => !['lineHeight'].includes(k)
|
188
|
-
)
|
189
|
-
)
|
190
|
-
};
|
191
|
-
|
192
|
-
// Create the utility class using the original key for dark
|
193
|
-
typographyUtilities[`.type-${key}-dark`] = {
|
194
|
-
fontSize: size,
|
195
|
-
...propertiesDark,
|
196
|
-
// Include any other properties defined in the fontSize options
|
197
|
-
...Object.fromEntries(
|
198
|
-
Object.entries(options).filter(
|
199
|
-
([k]) => !['lineHeight'].includes(k)
|
200
|
-
)
|
201
|
-
)
|
202
|
-
};
|
203
|
-
});
|
204
|
-
|
205
|
-
// console.debug(typographyUtilities);
|
206
|
-
|
207
|
-
return typographyUtilities;
|
208
|
-
}
|
1
|
+
/**
|
2
|
+
* Creates utility classes for UI font styling that work with Skeleton themes
|
3
|
+
*
|
4
|
+
* This plugin adds utility classes for UI typography that reference CSS
|
5
|
+
* variables defined in your Skeleton theme, allowing consistent styling of UI
|
6
|
+
* elements across your application.
|
7
|
+
*
|
8
|
+
* @note Important Configuration Requirements:
|
9
|
+
* 1. Add UI font variables to your theme file:
|
10
|
+
* - `--ui-font-family`: Font family for UI elements
|
11
|
+
* (falls back to `--base-font-family`)
|
12
|
+
* - `--ui-font-color`: Text color for UI elements
|
13
|
+
* (falls back to `--base-font-color`)
|
14
|
+
* - `--ui-font-color-dark`: Dark mode text color
|
15
|
+
* (falls back to `--base-font-color-dark`)
|
16
|
+
*
|
17
|
+
* 2. This plugin generates the following utility classes:
|
18
|
+
* - `font-ui`: Applies UI font family
|
19
|
+
* - `text-ui`: Applies UI text color
|
20
|
+
* - `text-ui-dark`: Applies UI dark mode text color (with .dark selector)
|
21
|
+
*
|
22
|
+
* @example
|
23
|
+
* // tailwind.config.js
|
24
|
+
* import { customUtilitiesPlugin }
|
25
|
+
* from './src/lib/util/design-system/skeleton.js';
|
26
|
+
*
|
27
|
+
* export default {
|
28
|
+
* plugins: [
|
29
|
+
* customUtilitiesPlugin,
|
30
|
+
* skeleton({
|
31
|
+
* themes: [defaultThemes.cerberus, customThemes.yourTheme]
|
32
|
+
* })
|
33
|
+
* ]
|
34
|
+
* };
|
35
|
+
*
|
36
|
+
* @param {Object} api - Tailwind plugin API
|
37
|
+
* @param {Function} api.addUtilities - Function to add utilities
|
38
|
+
*/
|
39
|
+
export function customUtilitiesPlugin({ addUtilities, theme }) {
|
40
|
+
const fontFamilyUtilities = {
|
41
|
+
'.font-heading': {
|
42
|
+
'font-family': 'var(--heading-font-family)'
|
43
|
+
},
|
44
|
+
'.font-base': {
|
45
|
+
'font-family': 'var(--base-font-family)'
|
46
|
+
},
|
47
|
+
'.font-ui': {
|
48
|
+
'font-family': 'var(--ui-font-family, var(--base-font-family))'
|
49
|
+
}
|
50
|
+
};
|
51
|
+
|
52
|
+
const textColorUtilities = {
|
53
|
+
'.text-base-color': {
|
54
|
+
color: 'rgb( var(--base-font-color) )'
|
55
|
+
},
|
56
|
+
'.text-base-color-dark': {
|
57
|
+
color: 'rgb( var(--base-font-color-dark) )'
|
58
|
+
},
|
59
|
+
'.text-heading-color': {
|
60
|
+
color: 'rgb( var(--heading-font-color) )'
|
61
|
+
},
|
62
|
+
'.text-heading-color-dark': {
|
63
|
+
color: 'rgb( var(--heading-font-color-dark) )'
|
64
|
+
},
|
65
|
+
'.text-ui-color': {
|
66
|
+
color: 'rgb( var(--ui-font-color, var(--base-font-color)) )'
|
67
|
+
},
|
68
|
+
'.text-ui-color-dark': {
|
69
|
+
color: 'rgb( var(--ui-font-color-dark, var(--base-font-color-dark)) )'
|
70
|
+
}
|
71
|
+
};
|
72
|
+
|
73
|
+
const typographyUtilities = generateTypographyUtilities(theme);
|
74
|
+
|
75
|
+
addUtilities({
|
76
|
+
...typographyUtilities,
|
77
|
+
...fontFamilyUtilities,
|
78
|
+
...textColorUtilities
|
79
|
+
});
|
80
|
+
}
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Generates typography utility classes based on fontSize entries in the
|
84
|
+
* Tailwind theme
|
85
|
+
*
|
86
|
+
* This function creates typography utility classes for entries in the
|
87
|
+
* theme's fontSize configuration that start with 'heading-', 'base-', or
|
88
|
+
* 'ui-' prefixes. Each class includes font size, line height, font weight,
|
89
|
+
* font family, and color properties.
|
90
|
+
*
|
91
|
+
* @param {Function} theme - Tailwind's theme function to access configuration
|
92
|
+
* @returns {Object} An object containing the generated typography utility classes
|
93
|
+
*
|
94
|
+
* @example
|
95
|
+
* // In your Tailwind plugin:
|
96
|
+
* const typographyUtils = generateTypographyUtilities(theme);
|
97
|
+
* addUtilities(typographyUtils);
|
98
|
+
*
|
99
|
+
* @example
|
100
|
+
* // Example output format:
|
101
|
+
* // {
|
102
|
+
* // '.type-heading-h1': {
|
103
|
+
* // fontSize: 'calc(32px * var(--scale-text-heading))',
|
104
|
+
* // lineHeight: '1.25',
|
105
|
+
* // fontWeight: '700',
|
106
|
+
* // fontFamily: 'var(--heading-font-family)',
|
107
|
+
* // fontStyle: 'var(--heading-font-style)',
|
108
|
+
* // letterSpacing: 'var(--heading-letter-spacing)',
|
109
|
+
* // color: 'rgb(var(--heading-font-color))'
|
110
|
+
* // }
|
111
|
+
* // }
|
112
|
+
*/
|
113
|
+
function generateTypographyUtilities(theme) {
|
114
|
+
// Get font sizes from theme
|
115
|
+
const fontSizes = theme('fontSize');
|
116
|
+
|
117
|
+
// Create typography utilities
|
118
|
+
const typographyUtilities = {};
|
119
|
+
|
120
|
+
// Process all fontSize entries and create type- classes for them
|
121
|
+
Object.entries(fontSizes).forEach(([key, value]) => {
|
122
|
+
// Skip entries that don't match our prefixes
|
123
|
+
if (
|
124
|
+
!key.startsWith('heading-') &&
|
125
|
+
!key.startsWith('base-') &&
|
126
|
+
!key.startsWith('ui-')
|
127
|
+
) {
|
128
|
+
return;
|
129
|
+
}
|
130
|
+
|
131
|
+
const [size, options] = Array.isArray(value) ? value : [value, {}];
|
132
|
+
|
133
|
+
// Determine properties based on the prefix
|
134
|
+
let properties = {};
|
135
|
+
|
136
|
+
let propertiesDark;
|
137
|
+
|
138
|
+
if (key.startsWith('heading-')) {
|
139
|
+
properties = {
|
140
|
+
lineHeight: options.lineHeight || 'normal',
|
141
|
+
fontFamily: 'var(--heading-font-family)',
|
142
|
+
fontStyle: 'var(--heading-font-style)',
|
143
|
+
fontWeight: 'var(--heading-font-weight)',
|
144
|
+
letterSpacing: 'var(--heading-letter-spacing)',
|
145
|
+
color: 'rgb(var(--heading-font-color))'
|
146
|
+
};
|
147
|
+
|
148
|
+
propertiesDark = {
|
149
|
+
...properties,
|
150
|
+
color: 'rgb(var(--heading-font-color-dark))'
|
151
|
+
};
|
152
|
+
} else if (key.startsWith('base-')) {
|
153
|
+
properties = {
|
154
|
+
lineHeight: options.lineHeight || 'normal',
|
155
|
+
fontFamily: 'var(--base-font-family)',
|
156
|
+
fontWeight: 'var(--base-font-weight)',
|
157
|
+
letterSpacing: 'var(--base-letter-spacing)',
|
158
|
+
color: 'rgb(var(--base-font-color))'
|
159
|
+
};
|
160
|
+
|
161
|
+
propertiesDark = {
|
162
|
+
...properties,
|
163
|
+
color: 'rgb(var(--base-font-color-dark))'
|
164
|
+
};
|
165
|
+
} else if (key.startsWith('ui-')) {
|
166
|
+
properties = {
|
167
|
+
lineHeight: options.lineHeight || 'normal',
|
168
|
+
fontFamily: 'var(--ui-font-family, var(--base-font-family))',
|
169
|
+
fontWeight: 'var(--ui-font-weight)',
|
170
|
+
letterSpacing: 'var(--ui-letter-spacing, var(--base-letter-spacing))',
|
171
|
+
color: 'rgb(var(--ui-font-color, var(--base-font-color)))'
|
172
|
+
};
|
173
|
+
|
174
|
+
propertiesDark = {
|
175
|
+
...properties,
|
176
|
+
color: 'rgb(var(--ui-font-color-dark, var(--base-font-color-dark)))'
|
177
|
+
};
|
178
|
+
}
|
179
|
+
|
180
|
+
// Create the utility class using the original key
|
181
|
+
typographyUtilities[`.type-${key}`] = {
|
182
|
+
fontSize: size,
|
183
|
+
...properties,
|
184
|
+
// Include any other properties defined in the fontSize options
|
185
|
+
...Object.fromEntries(
|
186
|
+
Object.entries(options).filter(
|
187
|
+
([k]) => !['lineHeight'].includes(k)
|
188
|
+
)
|
189
|
+
)
|
190
|
+
};
|
191
|
+
|
192
|
+
// Create the utility class using the original key for dark
|
193
|
+
typographyUtilities[`.type-${key}-dark`] = {
|
194
|
+
fontSize: size,
|
195
|
+
...propertiesDark,
|
196
|
+
// Include any other properties defined in the fontSize options
|
197
|
+
...Object.fromEntries(
|
198
|
+
Object.entries(options).filter(
|
199
|
+
([k]) => !['lineHeight'].includes(k)
|
200
|
+
)
|
201
|
+
)
|
202
|
+
};
|
203
|
+
});
|
204
|
+
|
205
|
+
// console.debug(typographyUtilities);
|
206
|
+
|
207
|
+
return typographyUtilities;
|
208
|
+
}
|