@vaneui/ui 0.0.17 → 0.0.19

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/dist/index.js CHANGED
@@ -2990,25 +2990,25 @@ const positionClasses = {
2990
2990
  static: "static"
2991
2991
  };
2992
2992
  const shadowClasses = {
2993
- xs: "shadow-xs",
2994
- sm: "shadow-sm",
2995
- md: "shadow-md",
2996
- lg: "shadow-lg",
2997
- xl: "shadow-xl"
2993
+ xs: "shadow-2xs",
2994
+ sm: "shadow-xs",
2995
+ md: "shadow-sm",
2996
+ lg: "shadow-md",
2997
+ xl: "shadow-lg"
2998
2998
  };
2999
2999
  const hoverShadowClasses = {
3000
- xs: "hover:shadow-sm",
3001
- sm: "hover:shadow-md",
3002
- md: "hover:shadow-lg",
3003
- lg: "hover:shadow-xl",
3004
- xl: "hover:shadow-2xl"
3000
+ xs: "hover:shadow-xs",
3001
+ sm: "hover:shadow-sm",
3002
+ md: "hover:shadow-md",
3003
+ lg: "hover:shadow-lg",
3004
+ xl: "hover:shadow-xl"
3005
3005
  };
3006
3006
  const activeShadowClasses = {
3007
- xs: "active:shadow-sm",
3008
- sm: "active:shadow-md",
3009
- md: "active:shadow-lg",
3010
- lg: "active:shadow-xl",
3011
- xl: "active:shadow-2xl"
3007
+ xs: "active:shadow-xs",
3008
+ sm: "active:shadow-sm",
3009
+ md: "active:shadow-md",
3010
+ lg: "active:shadow-lg",
3011
+ xl: "active:shadow-xl"
3012
3012
  };
3013
3013
  const noRingModeClasses = {
3014
3014
  base: "ring-0",
@@ -3026,27 +3026,26 @@ const noShadowModeClasses = {
3026
3026
  active: "active:shadow-none",
3027
3027
  };
3028
3028
 
3029
- function pickFirstKeyOptional(props, keys, fallback = undefined) {
3029
+ function pickFirstTruthyKeyOptional(collection, keys) {
3030
3030
  for (const k of keys) {
3031
- if (props[k])
3031
+ if (collection[k] === true)
3032
3032
  return k;
3033
3033
  }
3034
- return fallback;
3034
+ return undefined;
3035
3035
  }
3036
3036
  /**
3037
3037
  * Pick the first truthy key from props, then from defaults, then fallback.
3038
3038
  */
3039
- function pickKey(props, defaults, keys, fallback) {
3040
- // 1) explicit user prop
3041
- const explicit = pickFirstKeyOptional(props, keys);
3039
+ function pickFirstTruthyKey(props, defaults, keys) {
3040
+ // first check explicit usage in props
3041
+ const explicit = pickFirstTruthyKeyOptional(props, keys);
3042
3042
  if (explicit)
3043
3043
  return explicit;
3044
- // 2) component‐level default
3045
- const def = pickFirstKeyOptional(defaults, keys);
3044
+ // then check component‐level defaults
3045
+ const def = pickFirstTruthyKeyOptional(defaults, keys);
3046
3046
  if (def)
3047
3047
  return def;
3048
- // 3) built‐in fallback
3049
- return fallback;
3048
+ return undefined;
3050
3049
  }
3051
3050
 
3052
3051
  class HideTheme extends BaseTheme {
@@ -3058,81 +3057,12 @@ class HideTheme extends BaseTheme {
3058
3057
  });
3059
3058
  }
3060
3059
  getClasses(props, defaults) {
3061
- const key = pickKey(props, defaults, HIDE_KEYS);
3060
+ const key = pickFirstTruthyKey(props, defaults, HIDE_KEYS);
3062
3061
  return [key ? this[key] : ''];
3063
3062
  }
3064
3063
  }
3065
3064
  HideTheme.defaultClasses = hideClasses;
3066
3065
 
3067
- const isObject = (item) => {
3068
- return item !== null && typeof item === 'object' && !Array.isArray(item);
3069
- };
3070
- const deepMerge = (target, source) => {
3071
- const output = Object.assign(Object.create(Object.getPrototypeOf(target)), target);
3072
- for (const key in source) {
3073
- if (Object.prototype.hasOwnProperty.call(source, key)) {
3074
- const sourceValue = source[key];
3075
- const targetValue = output[key];
3076
- if (sourceValue === undefined) {
3077
- continue;
3078
- }
3079
- // Special case: If the key is 'defaults', use the contextual mergeDefaults function.
3080
- if (key === 'defaults' &&
3081
- isObject(targetValue) &&
3082
- isObject(sourceValue)) {
3083
- output[key] = mergeDefaults(targetValue, sourceValue);
3084
- }
3085
- // For all other objects, use the standard recursive deep merge.
3086
- else if (isObject(targetValue) && isObject(sourceValue)) {
3087
- output[key] = deepMerge(targetValue, sourceValue);
3088
- }
3089
- // For non-object values, just assign the value from the source.
3090
- else {
3091
- output[key] = sourceValue;
3092
- }
3093
- }
3094
- }
3095
- return output;
3096
- };
3097
- const deepClone = (source) => {
3098
- if (!isObject(source)) {
3099
- return source;
3100
- }
3101
- const output = Object.assign(Object.create(Object.getPrototypeOf(source)), source);
3102
- for (const key in output) {
3103
- if (Object.prototype.hasOwnProperty.call(output, key)) {
3104
- output[key] = deepClone(output[key]);
3105
- }
3106
- }
3107
- return output;
3108
- };
3109
- const findGroup = (key) => EXCLUSIVE_KEY_GROUPS.find(group => group.includes(key));
3110
- const mergeDefaults = (baseDefaults, overrideDefaults) => {
3111
- const finalDefaults = { ...baseDefaults };
3112
- // Iterate over the override keys to apply them.
3113
- for (const key in overrideDefaults) {
3114
- if (Object.prototype.hasOwnProperty.call(overrideDefaults, key)) {
3115
- const overrideValue = overrideDefaults[key];
3116
- // If the override is setting a key to true...
3117
- if (overrideValue) {
3118
- // Find the exclusive group this key belongs to (e.g., SIZE_KEYS).
3119
- const group = findGroup(key);
3120
- // If the key is part of an exclusive group...
3121
- if (group) {
3122
- // ...set all other keys in that group to false.
3123
- group.forEach(groupKey => {
3124
- if (groupKey !== key) {
3125
- finalDefaults[groupKey] = false;
3126
- }
3127
- });
3128
- }
3129
- }
3130
- finalDefaults[key] = overrideValue;
3131
- }
3132
- }
3133
- return finalDefaults;
3134
- };
3135
-
3136
3066
  class ItemsTheme extends BaseTheme {
3137
3067
  constructor(initialConfig) {
3138
3068
  super();
@@ -3142,7 +3072,7 @@ class ItemsTheme extends BaseTheme {
3142
3072
  });
3143
3073
  }
3144
3074
  getClasses(props, defaults) {
3145
- const pickedKey = pickKey(props, defaults, ITEMS_KEYS);
3075
+ const pickedKey = pickFirstTruthyKey(props, defaults, ITEMS_KEYS);
3146
3076
  return [pickedKey && this[pickedKey] ? this[pickedKey] : ''];
3147
3077
  }
3148
3078
  }
@@ -3163,7 +3093,7 @@ class JustifyTheme extends BaseTheme {
3163
3093
  });
3164
3094
  }
3165
3095
  getClasses(props, defaults) {
3166
- const key = pickKey(props, defaults, JUSTIFY_KEYS);
3096
+ const key = pickFirstTruthyKey(props, defaults, JUSTIFY_KEYS);
3167
3097
  return [key ? this[key] : ''];
3168
3098
  }
3169
3099
  }
@@ -3178,7 +3108,7 @@ class PositionTheme extends BaseTheme {
3178
3108
  });
3179
3109
  }
3180
3110
  getClasses(props, defaults) {
3181
- const key = pickKey(props, defaults, POSITION_KEYS);
3111
+ const key = pickFirstTruthyKey(props, defaults, POSITION_KEYS);
3182
3112
  return [key ? this[key] : ''];
3183
3113
  }
3184
3114
  }
@@ -3261,6 +3191,21 @@ const textSizeClasses = {
3261
3191
  xl: "text-xl",
3262
3192
  };
3263
3193
 
3194
+ class FontStyleTheme extends BaseTheme {
3195
+ constructor(initial) {
3196
+ super();
3197
+ FONT_STYLE_KEYS.forEach((key) => {
3198
+ var _a;
3199
+ this[key] = (_a = initial === null || initial === void 0 ? void 0 : initial[key]) !== null && _a !== void 0 ? _a : FontStyleTheme.defaultClasses[key];
3200
+ });
3201
+ }
3202
+ getClasses(props, defaults) {
3203
+ const key = pickFirstTruthyKey(props, defaults, FONT_STYLE_KEYS);
3204
+ return [key ? this[key] : '']; // No default for font style
3205
+ }
3206
+ }
3207
+ FontStyleTheme.defaultClasses = fontStyleClasses;
3208
+
3264
3209
  class FontFamilyTheme extends BaseTheme {
3265
3210
  constructor(initial) {
3266
3211
  super();
@@ -3270,7 +3215,7 @@ class FontFamilyTheme extends BaseTheme {
3270
3215
  });
3271
3216
  }
3272
3217
  getClasses(props, defaults) {
3273
- const key = pickKey(props, defaults, FONT_FAMILY_KEYS);
3218
+ const key = pickFirstTruthyKey(props, defaults, FONT_FAMILY_KEYS);
3274
3219
  return [this[key !== null && key !== void 0 ? key : 'sans'] || ''];
3275
3220
  }
3276
3221
  }
@@ -3285,27 +3230,12 @@ class FontWeightTheme extends BaseTheme {
3285
3230
  });
3286
3231
  }
3287
3232
  getClasses(props, defaults) {
3288
- const key = pickKey(props, defaults, FONT_WEIGHT_KEYS);
3233
+ const key = pickFirstTruthyKey(props, defaults, FONT_WEIGHT_KEYS);
3289
3234
  return [this[key !== null && key !== void 0 ? key : 'normal'] || '']; // Default to 'normal' if no key is provided
3290
3235
  }
3291
3236
  }
3292
3237
  FontWeightTheme.defaultClasses = fontWeightClasses;
3293
3238
 
3294
- class FontStyleTheme extends BaseTheme {
3295
- constructor(initial) {
3296
- super();
3297
- FONT_STYLE_KEYS.forEach((key) => {
3298
- var _a;
3299
- this[key] = (_a = initial === null || initial === void 0 ? void 0 : initial[key]) !== null && _a !== void 0 ? _a : FontStyleTheme.defaultClasses[key];
3300
- });
3301
- }
3302
- getClasses(props, defaults) {
3303
- const key = pickKey(props, defaults, FONT_STYLE_KEYS);
3304
- return [key ? this[key] : '']; // No default for font style
3305
- }
3306
- }
3307
- FontStyleTheme.defaultClasses = fontStyleClasses;
3308
-
3309
3239
  class TextDecorationTheme extends BaseTheme {
3310
3240
  constructor(initial) {
3311
3241
  super();
@@ -3315,7 +3245,7 @@ class TextDecorationTheme extends BaseTheme {
3315
3245
  });
3316
3246
  }
3317
3247
  getClasses(props, defaults) {
3318
- const key = pickKey(props, defaults, TEXT_DECORATION_KEYS);
3248
+ const key = pickFirstTruthyKey(props, defaults, TEXT_DECORATION_KEYS);
3319
3249
  return [key ? this[key] : '']; // No default for text decoration
3320
3250
  }
3321
3251
  }
@@ -3330,7 +3260,7 @@ class TextTransformTheme extends BaseTheme {
3330
3260
  });
3331
3261
  }
3332
3262
  getClasses(props, defaults) {
3333
- const key = pickKey(props, defaults, TEXT_TRANSFORM_KEYS);
3263
+ const key = pickFirstTruthyKey(props, defaults, TEXT_TRANSFORM_KEYS);
3334
3264
  return [key ? this[key] : '']; // No default for text transform
3335
3265
  }
3336
3266
  }
@@ -3345,12 +3275,81 @@ class TextAlignTheme extends BaseTheme {
3345
3275
  });
3346
3276
  }
3347
3277
  getClasses(props, defaults) {
3348
- const key = pickKey(props, defaults, TEXT_ALIGN_KEYS);
3278
+ const key = pickFirstTruthyKey(props, defaults, TEXT_ALIGN_KEYS);
3349
3279
  return [key ? this[key] : '']; // No default for text align
3350
3280
  }
3351
3281
  }
3352
3282
  TextAlignTheme.defaultClasses = textAlignClasses;
3353
3283
 
3284
+ const isObject = (item) => {
3285
+ return item !== null && typeof item === 'object' && !Array.isArray(item);
3286
+ };
3287
+ const deepMerge = (target, source) => {
3288
+ const output = Object.assign(Object.create(Object.getPrototypeOf(target)), target);
3289
+ for (const key in source) {
3290
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
3291
+ const sourceValue = source[key];
3292
+ const targetValue = output[key];
3293
+ if (sourceValue === undefined) {
3294
+ continue;
3295
+ }
3296
+ // Special case: If the key is 'defaults', use the contextual mergeDefaults function.
3297
+ if (key === 'defaults' &&
3298
+ isObject(targetValue) &&
3299
+ isObject(sourceValue)) {
3300
+ output[key] = mergeDefaults(targetValue, sourceValue);
3301
+ }
3302
+ // For all other objects, use the standard recursive deep merge.
3303
+ else if (isObject(targetValue) && isObject(sourceValue)) {
3304
+ output[key] = deepMerge(targetValue, sourceValue);
3305
+ }
3306
+ // For non-object values, just assign the value from the source.
3307
+ else {
3308
+ output[key] = sourceValue;
3309
+ }
3310
+ }
3311
+ }
3312
+ return output;
3313
+ };
3314
+ const deepClone = (source) => {
3315
+ if (!isObject(source)) {
3316
+ return source;
3317
+ }
3318
+ const output = Object.assign(Object.create(Object.getPrototypeOf(source)), source);
3319
+ for (const key in output) {
3320
+ if (Object.prototype.hasOwnProperty.call(output, key)) {
3321
+ output[key] = deepClone(output[key]);
3322
+ }
3323
+ }
3324
+ return output;
3325
+ };
3326
+ const findGroup = (key) => EXCLUSIVE_KEY_GROUPS.find(group => group.includes(key));
3327
+ const mergeDefaults = (baseDefaults, overrideDefaults) => {
3328
+ const finalDefaults = { ...baseDefaults };
3329
+ // Iterate over the override keys to apply them.
3330
+ for (const key in overrideDefaults) {
3331
+ if (Object.prototype.hasOwnProperty.call(overrideDefaults, key)) {
3332
+ const overrideValue = overrideDefaults[key];
3333
+ // If the override is setting a key to true...
3334
+ if (overrideValue) {
3335
+ // Find the exclusive group this key belongs to (e.g., SIZE_KEYS).
3336
+ const group = findGroup(key);
3337
+ // If the key is part of an exclusive group...
3338
+ if (group) {
3339
+ // ...set all other keys in that group to false.
3340
+ group.forEach(groupKey => {
3341
+ if (groupKey !== key) {
3342
+ finalDefaults[groupKey] = false;
3343
+ }
3344
+ });
3345
+ }
3346
+ }
3347
+ finalDefaults[key] = overrideValue;
3348
+ }
3349
+ }
3350
+ return finalDefaults;
3351
+ };
3352
+
3354
3353
  class ComponentTheme {
3355
3354
  constructor(tag, base, subThemes, defaults = {}) {
3356
3355
  this.tag = tag;
@@ -3406,7 +3405,7 @@ class SizeTheme extends BaseTheme {
3406
3405
  });
3407
3406
  }
3408
3407
  getClasses(props, defaults) {
3409
- const size = pickKey(props, defaults, SIZE_KEYS);
3408
+ const size = pickFirstTruthyKey(props, defaults, SIZE_KEYS);
3410
3409
  return [this[size !== null && size !== void 0 ? size : 'md'] || ''];
3411
3410
  }
3412
3411
  }
@@ -3427,8 +3426,8 @@ class GapTheme extends BaseTheme {
3427
3426
  });
3428
3427
  }
3429
3428
  getClasses(props, defaults) {
3430
- const size = pickKey(props, defaults, SIZE_KEYS) || 'md';
3431
- const key = pickKey(props, defaults, GAP_KEYS) || 'noGap';
3429
+ const size = pickFirstTruthyKey(props, defaults, SIZE_KEYS) || 'md';
3430
+ const key = pickFirstTruthyKey(props, defaults, GAP_KEYS) || 'noGap';
3432
3431
  return [typeof this[key] === 'string' ? this[key] : this[key][size]];
3433
3432
  }
3434
3433
  }
@@ -3452,8 +3451,8 @@ class RadiusTheme extends BaseTheme {
3452
3451
  });
3453
3452
  }
3454
3453
  getClasses(props, defaults) {
3455
- const size = pickKey(props, defaults, SIZE_KEYS) || 'md';
3456
- const shape = pickKey(props, defaults, SHAPE_KEYS) || 'rounded';
3454
+ const size = pickFirstTruthyKey(props, defaults, SIZE_KEYS) || 'md';
3455
+ const shape = pickFirstTruthyKey(props, defaults, SHAPE_KEYS) || 'rounded';
3457
3456
  return [typeof this[shape] === 'string' ? this[shape] : this[shape][size]];
3458
3457
  }
3459
3458
  }
@@ -3472,8 +3471,8 @@ class ShadowTheme extends BaseTheme {
3472
3471
  });
3473
3472
  }
3474
3473
  getClasses(props, defaults) {
3475
- const size = pickKey(props, defaults, SIZE_KEYS) || 'md';
3476
- const key = pickKey(props, defaults, SHADOW_KEYS);
3474
+ const size = pickFirstTruthyKey(props, defaults, SIZE_KEYS) || 'md';
3475
+ const key = pickFirstTruthyKey(props, defaults, SHADOW_KEYS);
3477
3476
  if (key === undefined) {
3478
3477
  return [];
3479
3478
  }
@@ -3503,7 +3502,7 @@ class BorderTheme extends BaseTheme {
3503
3502
  });
3504
3503
  }
3505
3504
  getClasses(props, defaults) {
3506
- const key = pickKey(props, defaults, BORDER_KEYS);
3505
+ const key = pickFirstTruthyKey(props, defaults, BORDER_KEYS);
3507
3506
  if (!key || !this[key]) {
3508
3507
  return MODE_KEYS.map(() => '');
3509
3508
  }
@@ -3517,10 +3516,15 @@ BorderTheme.defaultClasses = {
3517
3516
  active: "active:border",
3518
3517
  },
3519
3518
  noBorder: {
3520
- base: "border-none",
3521
- hover: "hover:border-none",
3522
- active: "active:border-none",
3519
+ base: "",
3520
+ hover: "",
3521
+ active: "",
3523
3522
  },
3523
+ //noBorder: {
3524
+ // base: "border-none",
3525
+ // hover: "hover:border-none",
3526
+ // active: "active:border-none",
3527
+ //},
3524
3528
  };
3525
3529
 
3526
3530
  class RingTheme extends BaseTheme {
@@ -3534,7 +3538,7 @@ class RingTheme extends BaseTheme {
3534
3538
  });
3535
3539
  }
3536
3540
  getClasses(props, defaults) {
3537
- const key = pickKey(props, defaults, RING_KEYS);
3541
+ const key = pickFirstTruthyKey(props, defaults, RING_KEYS);
3538
3542
  if (!key || !this[key]) {
3539
3543
  return MODE_KEYS.map(() => '');
3540
3544
  }
@@ -3555,8 +3559,8 @@ class PxTheme extends BaseTheme {
3555
3559
  });
3556
3560
  }
3557
3561
  getClasses(props, defaults) {
3558
- const size = pickKey(props, defaults, SIZE_KEYS) || 'md';
3559
- const key = pickKey(props, defaults, PADDING_KEYS) || 'noPadding';
3562
+ const size = pickFirstTruthyKey(props, defaults, SIZE_KEYS) || 'md';
3563
+ const key = pickFirstTruthyKey(props, defaults, PADDING_KEYS) || 'noPadding';
3560
3564
  return [typeof this[key] === 'string' ? this[key] : this[key][size]];
3561
3565
  }
3562
3566
  }
@@ -3580,8 +3584,8 @@ class PyTheme extends BaseTheme {
3580
3584
  });
3581
3585
  }
3582
3586
  getClasses(props, defaults) {
3583
- const size = pickKey(props, defaults, SIZE_KEYS) || 'md';
3584
- const key = pickKey(props, defaults, PADDING_KEYS) || 'noPadding';
3587
+ const size = pickFirstTruthyKey(props, defaults, SIZE_KEYS) || 'md';
3588
+ const key = pickFirstTruthyKey(props, defaults, PADDING_KEYS) || 'noPadding';
3585
3589
  return [typeof this[key] === 'string' ? this[key] : this[key][size]];
3586
3590
  }
3587
3591
  }
@@ -3609,7 +3613,7 @@ class TextAppearanceTheme extends BaseTheme {
3609
3613
  });
3610
3614
  }
3611
3615
  getClasses(props, defaults) {
3612
- const pickedAppearanceKey = pickKey(props, defaults, TEXT_APPEARANCE_KEYS, 'default');
3616
+ const pickedAppearanceKey = pickFirstTruthyKey(props, defaults, TEXT_APPEARANCE_KEYS) || 'default';
3613
3617
  const modesForAppearance = this[pickedAppearanceKey];
3614
3618
  if (!modesForAppearance) {
3615
3619
  return MODE_KEYS.map(() => '');
@@ -3831,7 +3835,7 @@ class VariantTheme extends BaseTheme {
3831
3835
  });
3832
3836
  }
3833
3837
  getClasses(props, defaults) {
3834
- const activeVariantKey = pickKey(props, defaults, VARIANT_KEYS, 'outline');
3838
+ const activeVariantKey = pickFirstTruthyKey(props, defaults, VARIANT_KEYS) || 'outline';
3835
3839
  const activeTextAppearanceTheme = this[activeVariantKey];
3836
3840
  if (!activeTextAppearanceTheme) {
3837
3841
  return [];
@@ -3888,8 +3892,8 @@ const defaultButtonTheme = new ComponentTheme("button", "w-fit h-fit cursor-poin
3888
3892
  px: new PxTheme({
3889
3893
  padding: {
3890
3894
  xs: 'px-2',
3891
- sm: 'px-2.5',
3892
- md: 'px-3.5',
3895
+ sm: 'px-3',
3896
+ md: 'px-4',
3893
3897
  lg: 'px-5',
3894
3898
  xl: 'px-6',
3895
3899
  }
@@ -3899,25 +3903,25 @@ const defaultButtonTheme = new ComponentTheme("button", "w-fit h-fit cursor-poin
3899
3903
  xs: 'py-1',
3900
3904
  sm: 'py-1.5',
3901
3905
  md: 'py-2',
3902
- lg: 'py-3',
3903
- xl: 'py-4',
3906
+ lg: 'py-2.5',
3907
+ xl: 'py-3',
3904
3908
  }
3905
3909
  }),
3906
3910
  gap: new GapTheme({
3907
3911
  gap: {
3908
- xs: 'gap-1.5',
3909
- sm: 'gap-2',
3910
- md: 'gap-3',
3911
- lg: 'gap-4',
3912
- xl: 'gap-5',
3912
+ xs: 'gap-1',
3913
+ sm: 'gap-1.5',
3914
+ md: 'gap-2',
3915
+ lg: 'gap-2.5',
3916
+ xl: 'gap-3',
3913
3917
  }
3914
3918
  }),
3915
3919
  text: new SizeTheme({
3916
- xs: 'text-xs/5',
3917
- sm: 'text-sm/5',
3920
+ xs: 'text-xs',
3921
+ sm: 'text-sm',
3918
3922
  md: 'text-base',
3919
- lg: 'text-lg/6',
3920
- xl: 'text-xl/6',
3923
+ lg: 'text-lg',
3924
+ xl: 'text-xl',
3921
3925
  }),
3922
3926
  shadow: new ShadowTheme(),
3923
3927
  },
@@ -3960,36 +3964,36 @@ const defaultBadgeTheme = new ComponentTheme("span", "w-fit h-fit inline-flex tr
3960
3964
  px: new PxTheme({
3961
3965
  padding: {
3962
3966
  xs: "px-2",
3963
- sm: "px-2.5",
3964
- md: "px-3.5",
3967
+ sm: "px-3",
3968
+ md: "px-4",
3965
3969
  lg: "px-5",
3966
3970
  xl: "px-6"
3967
3971
  }
3968
3972
  }),
3969
3973
  py: new PyTheme({
3970
3974
  padding: {
3971
- xs: "py-1",
3972
- sm: "py-1.5",
3973
- md: "py-2",
3974
- lg: "py-3",
3975
- xl: "py-4"
3975
+ xs: 'py-1',
3976
+ sm: 'py-1.5',
3977
+ md: 'py-2',
3978
+ lg: 'py-2.5',
3979
+ xl: 'py-3',
3976
3980
  }
3977
3981
  }),
3978
3982
  gap: new GapTheme({
3979
3983
  gap: {
3980
- xs: "gap-1",
3981
- sm: "gap-1.5",
3982
- md: "gap-2",
3983
- lg: "gap-2.5",
3984
- xl: "gap-3"
3984
+ xs: 'gap-1',
3985
+ sm: 'gap-1.5',
3986
+ md: 'gap-2',
3987
+ lg: 'gap-2.5',
3988
+ xl: 'gap-3',
3985
3989
  }
3986
3990
  }),
3987
3991
  text: new SizeTheme({
3988
- xs: 'text-xs/5',
3989
- sm: 'text-sm/5',
3992
+ xs: 'text-xs',
3993
+ sm: 'text-sm',
3990
3994
  md: 'text-base',
3991
- lg: 'text-lg/6',
3992
- xl: 'text-xl/6',
3995
+ lg: 'text-lg',
3996
+ xl: 'text-xl',
3993
3997
  }),
3994
3998
  shadow: new ShadowTheme(),
3995
3999
  },
@@ -4039,26 +4043,26 @@ const defaultChipTheme = new ComponentTheme("span", "w-fit h-fit inline-flex gap
4039
4043
  padding: {
4040
4044
  xs: 'px-2',
4041
4045
  sm: 'px-2.5',
4042
- md: 'px-3.5',
4043
- lg: 'px-5',
4044
- xl: 'px-6',
4046
+ md: 'px-3',
4047
+ lg: 'px-3.5',
4048
+ xl: 'px-4',
4045
4049
  }
4046
4050
  }),
4047
4051
  py: new PyTheme({
4048
4052
  padding: {
4049
- xs: 'py-1',
4050
- sm: 'py-1.5',
4051
- md: 'py-2',
4052
- lg: 'py-3',
4053
- xl: 'py-4',
4053
+ xs: 'py-0.5',
4054
+ sm: 'py-1',
4055
+ md: 'py-1.5',
4056
+ lg: 'py-2',
4057
+ xl: 'py-2.5',
4054
4058
  }
4055
4059
  }),
4056
4060
  text: new SizeTheme({
4057
4061
  xs: 'text-xs',
4058
4062
  sm: 'text-sm',
4059
- md: 'text-sm',
4060
- lg: 'text-base',
4061
- xl: 'text-base',
4063
+ md: 'text-base',
4064
+ lg: 'text-lg',
4065
+ xl: 'text-xl',
4062
4066
  }),
4063
4067
  gap: new GapTheme({
4064
4068
  gap: {
@@ -4167,9 +4171,8 @@ class DirectionTheme extends BaseTheme {
4167
4171
  });
4168
4172
  }
4169
4173
  getClasses(props, defaults) {
4170
- var _a;
4171
- let direction = (_a = pickKey(props, defaults, FLEX_DIRECTION_KEYS)) !== null && _a !== void 0 ? _a : 'column';
4172
- const reverse = pickKey(props, defaults, DIRECTION_REVERSE_KEYS);
4174
+ let direction = pickFirstTruthyKey(props, defaults, FLEX_DIRECTION_KEYS) || 'column';
4175
+ const reverse = pickFirstTruthyKey(props, defaults, DIRECTION_REVERSE_KEYS);
4173
4176
  if (reverse) {
4174
4177
  switch (direction) {
4175
4178
  case "column":
@@ -4199,7 +4202,7 @@ class WrapTheme extends BaseTheme {
4199
4202
  });
4200
4203
  }
4201
4204
  getClasses(props, defaults) {
4202
- const key = pickKey(props, defaults, WRAP_KEYS);
4205
+ const key = pickFirstTruthyKey(props, defaults, WRAP_KEYS);
4203
4206
  return key ? [this[key]] : [];
4204
4207
  }
4205
4208
  }
@@ -4226,7 +4229,7 @@ class LayoutAppearanceTheme extends BaseTheme {
4226
4229
  });
4227
4230
  }
4228
4231
  getClasses(props, defaults) {
4229
- const pickedAppearanceKey = pickKey(props, defaults, APPEARANCE_KEYS, 'default');
4232
+ const pickedAppearanceKey = pickFirstTruthyKey(props, defaults, APPEARANCE_KEYS) || 'default';
4230
4233
  const modesForAppearance = this[pickedAppearanceKey];
4231
4234
  if (!modesForAppearance) {
4232
4235
  return MODE_KEYS.map(() => '');
@@ -4274,7 +4277,7 @@ class BreakpointTheme extends BaseTheme {
4274
4277
  });
4275
4278
  }
4276
4279
  getClasses(props, defaults) {
4277
- const key = pickKey(props, defaults, BREAKPOINT_KEYS);
4280
+ const key = pickFirstTruthyKey(props, defaults, BREAKPOINT_KEYS);
4278
4281
  if (!key)
4279
4282
  return [];
4280
4283
  return [this[key] || ''];
@@ -4470,18 +4473,18 @@ const defaultSectionTheme = new ComponentTheme("div", "w-full flex flex-col", {
4470
4473
  }),
4471
4474
  py: new PyTheme({
4472
4475
  padding: {
4473
- xs: 'py-3',
4474
- sm: 'py-5',
4475
- md: 'py-8 max-md:py-5',
4476
+ xs: 'py-4 max-md:py-3',
4477
+ sm: 'py-8 max-md:py-6',
4478
+ md: 'py-12 max-md:py-6',
4476
4479
  lg: 'py-16 max-lg:py-14 max-md:py-12',
4477
4480
  xl: 'py-20 max-lg:py-16 max-md:py-12',
4478
4481
  }
4479
4482
  }),
4480
4483
  gap: new GapTheme({
4481
4484
  gap: {
4482
- xs: 'gap-2',
4483
- sm: 'gap-4',
4484
- md: 'gap-6',
4485
+ xs: 'gap-4',
4486
+ sm: 'gap-6',
4487
+ md: 'gap-8',
4485
4488
  lg: 'gap-12',
4486
4489
  xl: 'gap-16',
4487
4490
  }
@@ -4543,6 +4546,8 @@ const gridSubThemes = {
4543
4546
  const defaultGrid3Theme = new ComponentTheme("div", "grid grid-cols-1 md:grid-cols-3", gridSubThemes, gridDefaults);
4544
4547
  const defaultGrid4Theme = new ComponentTheme("div", "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4", gridSubThemes, gridDefaults);
4545
4548
 
4549
+ const COMPONENT_KEYS = ['button', 'badge', 'chip', 'card', 'divider', 'row', 'col', 'stack', 'section',
4550
+ 'grid3', 'grid4', 'pageTitle', 'sectionTitle', 'title', 'text', 'link', 'list', 'listItem'];
4546
4551
  const defaultTheme = {
4547
4552
  button: defaultButtonTheme,
4548
4553
  badge: defaultBadgeTheme,
@@ -4565,16 +4570,27 @@ const defaultTheme = {
4565
4570
  list: listTheme,
4566
4571
  };
4567
4572
  const ThemeContext = react.createContext(defaultTheme);
4568
- function ThemeProvider({ children, theme: themeObject = {}, themeOverride }) {
4573
+ function ThemeProvider({ children, theme: themeObject = {}, themeDefaults, themeOverride }) {
4569
4574
  const mergedTheme = react.useMemo(() => {
4570
- let baseTheme = themeObject
4575
+ let finalTheme = themeObject
4571
4576
  ? deepMerge(defaultTheme, themeObject)
4572
4577
  : defaultTheme;
4573
4578
  if (typeof themeOverride === 'function') {
4574
- const themeToModify = deepClone(baseTheme);
4575
- return themeOverride(themeToModify);
4579
+ const themeToModify = deepClone(finalTheme);
4580
+ finalTheme = themeOverride(themeToModify);
4581
+ }
4582
+ if (themeDefaults !== undefined) {
4583
+ for (const key in themeDefaults) {
4584
+ const componentKey = key;
4585
+ const componentTheme = finalTheme[componentKey];
4586
+ const themeDefault = themeDefaults[componentKey];
4587
+ if (themeDefault !== undefined) {
4588
+ finalTheme[componentKey].defaults =
4589
+ mergeDefaults(componentTheme.defaults, themeDefaults[componentKey]);
4590
+ }
4591
+ }
4576
4592
  }
4577
- return baseTheme;
4593
+ return finalTheme;
4578
4594
  }, [themeObject, themeOverride]);
4579
4595
  return (jsxRuntime.jsx(ThemeContext.Provider, { value: mergedTheme, children: children }));
4580
4596
  }
@@ -4691,6 +4707,7 @@ const List = (props) => {
4691
4707
 
4692
4708
  exports.Badge = Badge;
4693
4709
  exports.Button = Button;
4710
+ exports.COMPONENT_KEYS = COMPONENT_KEYS;
4694
4711
  exports.Card = Card;
4695
4712
  exports.Chip = Chip;
4696
4713
  exports.Col = Col;
@@ -4709,5 +4726,6 @@ exports.Stack = Stack;
4709
4726
  exports.Text = Text;
4710
4727
  exports.ThemeProvider = ThemeProvider;
4711
4728
  exports.Title = Title;
4729
+ exports.defaultTheme = defaultTheme;
4712
4730
  exports.useTheme = useTheme;
4713
4731
  //# sourceMappingURL=index.js.map