@contember/utilities 1.2.0-beta.2 → 1.2.0-rc.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.
Files changed (114) hide show
  1. package/dist/development/assert-types/Predicates.js +20 -4
  2. package/dist/development/assert-types/Predicates.js.map +1 -1
  3. package/dist/development/assert-types/assert.js.map +1 -1
  4. package/dist/development/class-name/stateClassName.js +3 -6
  5. package/dist/development/class-name/stateClassName.js.map +1 -1
  6. package/dist/development/dom/stateDataAttributes.js +11 -0
  7. package/dist/development/dom/stateDataAttributes.js.map +1 -0
  8. package/dist/development/dom/svgSizeProps.js.map +1 -1
  9. package/dist/development/functional/omit.js +15 -0
  10. package/dist/development/functional/omit.js.map +1 -0
  11. package/dist/development/functional/pick.js.map +1 -1
  12. package/dist/development/index.js +10 -1
  13. package/dist/development/index.js.map +1 -1
  14. package/dist/development/string-utilities/kebabCase.js +8 -0
  15. package/dist/development/string-utilities/kebabCase.js.map +1 -0
  16. package/dist/production/assert-types/Predicates.js +20 -4
  17. package/dist/production/assert-types/Predicates.js.map +1 -1
  18. package/dist/production/assert-types/assert.js.map +1 -1
  19. package/dist/production/class-name/stateClassName.js +3 -6
  20. package/dist/production/class-name/stateClassName.js.map +1 -1
  21. package/dist/production/dom/stateDataAttributes.js +11 -0
  22. package/dist/production/dom/stateDataAttributes.js.map +1 -0
  23. package/dist/production/dom/svgSizeProps.js.map +1 -1
  24. package/dist/production/functional/omit.js +15 -0
  25. package/dist/production/functional/omit.js.map +1 -0
  26. package/dist/production/functional/pick.js.map +1 -1
  27. package/dist/production/index.js +10 -1
  28. package/dist/production/index.js.map +1 -1
  29. package/dist/production/string-utilities/kebabCase.js +8 -0
  30. package/dist/production/string-utilities/kebabCase.js.map +1 -0
  31. package/dist/types/assert-types/Predicates.d.ts +5 -1
  32. package/dist/types/assert-types/Predicates.d.ts.map +1 -1
  33. package/dist/types/assert-types/assert.d.ts +2 -1
  34. package/dist/types/assert-types/assert.d.ts.map +1 -1
  35. package/dist/types/assert-types/index.d.ts +1 -0
  36. package/dist/types/assert-types/index.d.ts.map +1 -1
  37. package/dist/types/assert-types/types.d.ts +5 -0
  38. package/dist/types/assert-types/types.d.ts.map +1 -0
  39. package/dist/types/class-name/Types.d.ts +5 -0
  40. package/dist/types/class-name/Types.d.ts.map +1 -1
  41. package/dist/types/class-name/stateClassName.d.ts +8 -2
  42. package/dist/types/class-name/stateClassName.d.ts.map +1 -1
  43. package/dist/types/dom/index.d.ts +1 -0
  44. package/dist/types/dom/index.d.ts.map +1 -1
  45. package/dist/types/dom/stateDataAttributes.d.ts +4 -0
  46. package/dist/types/dom/stateDataAttributes.d.ts.map +1 -0
  47. package/dist/types/dom/svgSizeProps.d.ts.map +1 -1
  48. package/dist/types/functional/index.d.ts +1 -0
  49. package/dist/types/functional/index.d.ts.map +1 -1
  50. package/dist/types/functional/omit.d.ts +2 -0
  51. package/dist/types/functional/omit.d.ts.map +1 -0
  52. package/dist/types/functional/pick.d.ts +1 -1
  53. package/dist/types/functional/pick.d.ts.map +1 -1
  54. package/dist/types/index.d.ts +1 -1
  55. package/dist/types/index.d.ts.map +1 -1
  56. package/dist/types/string-utilities/index.d.ts +1 -0
  57. package/dist/types/string-utilities/index.d.ts.map +1 -1
  58. package/dist/types/string-utilities/kebabCase.d.ts +2 -0
  59. package/dist/types/string-utilities/kebabCase.d.ts.map +1 -0
  60. package/dist/types/tsconfig.tsbuildinfo +1 -1
  61. package/dist/types/types/DeepPartial.d.ts.map +1 -0
  62. package/dist/types/types/NonNullableRequired.d.ts.map +1 -0
  63. package/dist/types/types/NonOptional.d.ts +8 -0
  64. package/dist/types/types/NonOptional.d.ts.map +1 -0
  65. package/dist/types/types/ObjectKeyValue.d.ts.map +1 -0
  66. package/dist/types/types/PolymorphicRefs.d.ts.map +1 -0
  67. package/dist/types/types/Primitive.d.ts +2 -0
  68. package/dist/types/types/Primitive.d.ts.map +1 -0
  69. package/dist/types/types/RequiredDeepPlainObject.d.ts +4 -0
  70. package/dist/types/types/RequiredDeepPlainObject.d.ts.map +1 -0
  71. package/dist/types/types/Try.d.ts.map +1 -0
  72. package/dist/types/types/TypeofStringLiteral.d.ts +2 -0
  73. package/dist/types/types/TypeofStringLiteral.d.ts.map +1 -0
  74. package/dist/types/types/index.d.ts +11 -0
  75. package/dist/types/types/index.d.ts.map +1 -0
  76. package/package.json +4 -1
  77. package/src/assert-types/Predicates.ts +25 -4
  78. package/src/assert-types/assert.ts +2 -1
  79. package/src/assert-types/index.ts +1 -0
  80. package/src/assert-types/types.ts +5 -0
  81. package/src/class-name/Types.ts +7 -0
  82. package/src/class-name/stateClassName.ts +12 -7
  83. package/src/dom/index.ts +1 -0
  84. package/src/dom/stateDataAttributes.ts +8 -0
  85. package/src/dom/svgSizeProps.ts +0 -2
  86. package/src/functional/index.ts +1 -0
  87. package/src/functional/omit.ts +13 -0
  88. package/src/functional/pick.ts +1 -1
  89. package/src/index.ts +1 -1
  90. package/src/string-utilities/index.ts +1 -0
  91. package/src/string-utilities/kebabCase.ts +5 -0
  92. package/src/types/NonOptional.ts +7 -0
  93. package/src/types/Primitive.ts +1 -0
  94. package/src/types/RequiredDeepPlainObject.ts +3 -0
  95. package/src/types/TypeofStringLiteral.ts +1 -0
  96. package/src/types/index.ts +18 -0
  97. package/dist/types/typescript-utilities/DeepPartial.d.ts.map +0 -1
  98. package/dist/types/typescript-utilities/NonNullableRequired.d.ts.map +0 -1
  99. package/dist/types/typescript-utilities/ObjectKeyValue.d.ts.map +0 -1
  100. package/dist/types/typescript-utilities/PolymorphicRefs.d.ts.map +0 -1
  101. package/dist/types/typescript-utilities/Try.d.ts.map +0 -1
  102. package/dist/types/typescript-utilities/index.d.ts +0 -6
  103. package/dist/types/typescript-utilities/index.d.ts.map +0 -1
  104. package/src/typescript-utilities/index.ts +0 -5
  105. /package/dist/types/{typescript-utilities → types}/DeepPartial.d.ts +0 -0
  106. /package/dist/types/{typescript-utilities → types}/NonNullableRequired.d.ts +0 -0
  107. /package/dist/types/{typescript-utilities → types}/ObjectKeyValue.d.ts +0 -0
  108. /package/dist/types/{typescript-utilities → types}/PolymorphicRefs.d.ts +0 -0
  109. /package/dist/types/{typescript-utilities → types}/Try.d.ts +0 -0
  110. /package/src/{typescript-utilities → types}/DeepPartial.ts +0 -0
  111. /package/src/{typescript-utilities → types}/NonNullableRequired.ts +0 -0
  112. /package/src/{typescript-utilities → types}/ObjectKeyValue.ts +0 -0
  113. /package/src/{typescript-utilities → types}/PolymorphicRefs.ts +0 -0
  114. /package/src/{typescript-utilities → types}/Try.ts +0 -0
@@ -25,6 +25,9 @@ function isFalse(value) {
25
25
  function isString(value) {
26
26
  return typeof value === "string";
27
27
  }
28
+ function isSlugString(value) {
29
+ return isNonEmptyString(value) && /^[a-z0-9_-]+$/.test(value);
30
+ }
28
31
  function isNonEmptyString(value) {
29
32
  return isString(value) && value.length > 0;
30
33
  }
@@ -45,9 +48,19 @@ function isNonNegativeNumber(value) {
45
48
  function isNumericString(value) {
46
49
  return isString(value) && !isNaN(parseFloat(value));
47
50
  }
48
- function isOneOfFactory(options) {
49
- return function isOneOfProduct(value) {
50
- return options.includes(value);
51
+ function isOneOfFactory(members) {
52
+ return function isOneOfFactoryProduct(value) {
53
+ return members.includes(value);
54
+ };
55
+ }
56
+ function satisfiesOneOfFactory(...predicates) {
57
+ return (value) => {
58
+ return predicates.some((predicate) => predicate(value));
59
+ };
60
+ }
61
+ function isArrayOfMembersSatisfyingFactory(predicate) {
62
+ return function isArrayOfMembersSatisfyingProduct(value) {
63
+ return Array.isArray(value) && value.every(predicate);
51
64
  };
52
65
  }
53
66
  function isHTMLElement(value) {
@@ -60,6 +73,7 @@ function isPlainObject(value) {
60
73
  return isObject(value) && value.constructor === Object;
61
74
  }
62
75
  export {
76
+ isArrayOfMembersSatisfyingFactory,
63
77
  isBoolean,
64
78
  isDefined,
65
79
  isFalse,
@@ -77,8 +91,10 @@ export {
77
91
  isObject,
78
92
  isOneOfFactory,
79
93
  isPlainObject,
94
+ isSlugString,
80
95
  isString,
81
96
  isTrue,
82
- isUndefined
97
+ isUndefined,
98
+ satisfiesOneOfFactory
83
99
  };
84
100
  //# sourceMappingURL=Predicates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Predicates.js","sources":["../../../src/assert-types/Predicates.ts"],"sourcesContent":["export function isNull(value: unknown): value is null {\n return value === null\n}\nexport function isNotNull<T>(value: unknown): value is T {\n return value !== null\n}\nexport function isUndefined(value: unknown): value is undefined {\n return value === undefined\n}\nexport function isDefined<T>(value: unknown): value is T {\n return value !== undefined\n}\nexport function isNotNullish<T>(value: T): value is Exclude<T, null | undefined> {\n return value != null\n}\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean'\n}\nexport function isTrue(value: unknown): value is true {\n return value === true\n}\nexport function isFalse(value: unknown): value is false {\n return value === false\n}\nexport function isString(value: unknown): value is string {\n return typeof value === 'string'\n}\nexport function isNonEmptyString(value: unknown): value is string {\n return isString(value) && value.length > 0\n}\nfunction isNonEmptyTrimmedStringFactory(trim: 'trim' | 'trimStart' | 'trimEnd' = 'trim') {\n return function isNonEmptyString(value: unknown): value is string {\n return isString(value) && value[trim]().length > 0\n }\n}\nexport const isNonEmptyTrimmedString = isNonEmptyTrimmedStringFactory()\nexport const isNonEmptyTrimmedStartString = isNonEmptyTrimmedStringFactory('trimStart')\nexport const isNonEmptyTrimmedEndString = isNonEmptyTrimmedStringFactory('trimEnd')\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number' && value === value\n}\nexport function isNonNegativeNumber(value: unknown): value is number {\n return isNumber(value) && value >= 0\n}\nexport function isNumericString(value: string): value is string {\n return isString(value) && !isNaN(parseFloat(value))\n}\nexport function isOneOfFactory<U, T = any>(options: T extends Array<U> | ReadonlyArray<U> ? T : never): (value: unknown) => value is U {\n return function isOneOfProduct(value: unknown): value is U {\n return options.includes(value as U)\n }\n}\nexport function isHTMLElement(value: unknown): value is HTMLElement {\n return value instanceof HTMLElement\n}\nexport function isObject(value: unknown): value is Object {\n return typeof value === 'object' && value !== null\n}\nexport function isPlainObject<T extends Record<string, unknown>>(value: unknown): value is T {\n return isObject(value) && value.constructor === Object\n}\n"],"names":["isNonEmptyString"],"mappings":"AAAO,SAAS,OAAO,OAA+B;AACpD,SAAO,UAAU;AACnB;AACO,SAAS,UAAa,OAA4B;AACvD,SAAO,UAAU;AACnB;AACO,SAAS,YAAY,OAAoC;AAC9D,SAAO,UAAU;AACnB;AACO,SAAS,UAAa,OAA4B;AACvD,SAAO,UAAU;AACnB;AACO,SAAS,aAAgB,OAAiD;AAC/E,SAAO,SAAS;AAClB;AACO,SAAS,UAAU,OAAkC;AAC1D,SAAO,OAAO,UAAU;AAC1B;AACO,SAAS,OAAO,OAA+B;AACpD,SAAO,UAAU;AACnB;AACO,SAAS,QAAQ,OAAgC;AACtD,SAAO,UAAU;AACnB;AACO,SAAS,SAAS,OAAiC;AACxD,SAAO,OAAO,UAAU;AAC1B;AACO,SAAS,iBAAiB,OAAiC;AAChE,SAAO,SAAS,KAAK,KAAK,MAAM,SAAS;AAC3C;AACA,SAAS,+BAA+B,OAAyC,QAAQ;AAChF,SAAA,SAASA,kBAAiB,OAAiC;AAChE,WAAO,SAAS,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,EAAA;AAErD;AACO,MAAM,0BAA0B,+BAA+B;AACzD,MAAA,+BAA+B,+BAA+B,WAAW;AACzE,MAAA,6BAA6B,+BAA+B,SAAS;AAC3E,SAAS,SAAS,OAAiC;AACjD,SAAA,OAAO,UAAU,YAAY,UAAU;AAChD;AACO,SAAS,oBAAoB,OAAiC;AAC5D,SAAA,SAAS,KAAK,KAAK,SAAS;AACrC;AACO,SAAS,gBAAgB,OAAgC;AAC9D,SAAO,SAAS,KAAK,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC;AACpD;AACO,SAAS,eAA2B,SAA4F;AAC9H,SAAA,SAAS,eAAe,OAA4B;AAClD,WAAA,QAAQ,SAAS,KAAU;AAAA,EAAA;AAEtC;AACO,SAAS,cAAc,OAAsC;AAClE,SAAO,iBAAiB;AAC1B;AACO,SAAS,SAAS,OAAiC;AACjD,SAAA,OAAO,UAAU,YAAY,UAAU;AAChD;AACO,SAAS,cAAiD,OAA4B;AAC3F,SAAO,SAAS,KAAK,KAAK,MAAM,gBAAgB;AAClD;"}
1
+ {"version":3,"file":"Predicates.js","sources":["../../../src/assert-types/Predicates.ts"],"sourcesContent":["import { Predicate, SlugString, UnionOfPredicateTypes } from './types'\n\nexport function isNull(value: unknown): value is null {\n return value === null\n}\nexport function isNotNull<T>(value: unknown): value is T {\n return value !== null\n}\nexport function isUndefined(value: unknown): value is undefined {\n return value === undefined\n}\nexport function isDefined<T>(value: unknown): value is T {\n return value !== undefined\n}\nexport function isNotNullish<T>(value: T): value is Exclude<T, null | undefined> {\n return value != null\n}\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean'\n}\nexport function isTrue(value: unknown): value is true {\n return value === true\n}\nexport function isFalse(value: unknown): value is false {\n return value === false\n}\nexport function isString(value: unknown): value is string {\n return typeof value === 'string'\n}\nexport function isSlugString(value: unknown): value is SlugString {\n\treturn isNonEmptyString(value) && /^[a-z0-9_-]+$/.test(value)\n}\nexport function isNonEmptyString(value: unknown): value is string {\n return isString(value) && value.length > 0\n}\nfunction isNonEmptyTrimmedStringFactory(trim: 'trim' | 'trimStart' | 'trimEnd' = 'trim') {\n return function isNonEmptyString(value: unknown): value is string {\n return isString(value) && value[trim]().length > 0\n }\n}\nexport const isNonEmptyTrimmedString = isNonEmptyTrimmedStringFactory()\nexport const isNonEmptyTrimmedStartString = isNonEmptyTrimmedStringFactory('trimStart')\nexport const isNonEmptyTrimmedEndString = isNonEmptyTrimmedStringFactory('trimEnd')\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number' && value === value\n}\nexport function isNonNegativeNumber(value: unknown): value is number {\n return isNumber(value) && value >= 0\n}\nexport function isNumericString(value: string): value is string {\n return isString(value) && !isNaN(parseFloat(value))\n}\nexport function isOneOfFactory<U, T = any>(\n\tmembers: T extends Array<U> | ReadonlyArray<U> ? T : never,\n): (value: unknown) => value is U {\n\treturn function isOneOfFactoryProduct(value: unknown): value is U {\n\t\treturn members.includes(value as U)\n\t}\n}\nexport function satisfiesOneOfFactory<T extends Array<Predicate<any, any>>>(\n\t...predicates: T\n): Predicate<unknown, UnionOfPredicateTypes<T>> {\n\treturn (value: any): value is UnionOfPredicateTypes<T> => {\n\t\treturn predicates.some(predicate => predicate(value))\n\t}\n}\nexport function isArrayOfMembersSatisfyingFactory<T>(\n\tpredicate: (value: unknown) => value is T,\n): (value: unknown) => value is Array<T> {\n\treturn function isArrayOfMembersSatisfyingProduct(value: unknown): value is Array<T> {\n\t\treturn Array.isArray(value) && value.every(predicate)\n\t}\n}\nexport function isHTMLElement(value: unknown): value is HTMLElement {\n return value instanceof HTMLElement\n}\nexport function isObject(value: unknown): value is Object {\n return typeof value === 'object' && value !== null\n}\nexport function isPlainObject<T extends Record<string, unknown>>(value: unknown): value is T {\n return isObject(value) && value.constructor === Object\n}\n"],"names":["isNonEmptyString"],"mappings":"AAEO,SAAS,OAAO,OAA+B;AACpD,SAAO,UAAU;AACnB;AACO,SAAS,UAAa,OAA4B;AACvD,SAAO,UAAU;AACnB;AACO,SAAS,YAAY,OAAoC;AAC9D,SAAO,UAAU;AACnB;AACO,SAAS,UAAa,OAA4B;AACvD,SAAO,UAAU;AACnB;AACO,SAAS,aAAgB,OAAiD;AAC/E,SAAO,SAAS;AAClB;AACO,SAAS,UAAU,OAAkC;AAC1D,SAAO,OAAO,UAAU;AAC1B;AACO,SAAS,OAAO,OAA+B;AACpD,SAAO,UAAU;AACnB;AACO,SAAS,QAAQ,OAAgC;AACtD,SAAO,UAAU;AACnB;AACO,SAAS,SAAS,OAAiC;AACxD,SAAO,OAAO,UAAU;AAC1B;AACO,SAAS,aAAa,OAAqC;AACjE,SAAO,iBAAiB,KAAK,KAAK,gBAAgB,KAAK,KAAK;AAC7D;AACO,SAAS,iBAAiB,OAAiC;AAChE,SAAO,SAAS,KAAK,KAAK,MAAM,SAAS;AAC3C;AACA,SAAS,+BAA+B,OAAyC,QAAQ;AAChF,SAAA,SAASA,kBAAiB,OAAiC;AAChE,WAAO,SAAS,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,EAAA;AAErD;AACO,MAAM,0BAA0B,+BAA+B;AACzD,MAAA,+BAA+B,+BAA+B,WAAW;AACzE,MAAA,6BAA6B,+BAA+B,SAAS;AAC3E,SAAS,SAAS,OAAiC;AACjD,SAAA,OAAO,UAAU,YAAY,UAAU;AAChD;AACO,SAAS,oBAAoB,OAAiC;AAC5D,SAAA,SAAS,KAAK,KAAK,SAAS;AACrC;AACO,SAAS,gBAAgB,OAAgC;AAC9D,SAAO,SAAS,KAAK,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC;AACpD;AACO,SAAS,eACf,SACiC;AAC1B,SAAA,SAAS,sBAAsB,OAA4B;AAC1D,WAAA,QAAQ,SAAS,KAAU;AAAA,EAAA;AAEpC;AACO,SAAS,yBACZ,YAC4C;AAC/C,SAAO,CAAC,UAAkD;AACzD,WAAO,WAAW,KAAK,CAAa,cAAA,UAAU,KAAK,CAAC;AAAA,EAAA;AAEtD;AACO,SAAS,kCACf,WACwC;AACjC,SAAA,SAAS,kCAAkC,OAAmC;AACpF,WAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,SAAS;AAAA,EAAA;AAEtD;AACO,SAAS,cAAc,OAAsC;AAClE,SAAO,iBAAiB;AAC1B;AACO,SAAS,SAAS,OAAiC;AACjD,SAAA,OAAO,UAAU,YAAY,UAAU;AAChD;AACO,SAAS,cAAiD,OAA4B;AAC3F,SAAO,SAAS,KAAK,KAAK,MAAM,gBAAgB;AAClD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"assert.js","sources":["../../../src/assert-types/assert.ts"],"sourcesContent":["import { AssertionError } from './AssertionError'\n\nexport function assert<\n\tIn,\n\tOut extends In\n>(\n\tthat: string | undefined = undefined,\n\tvalue: In,\n\tpredicate: (value: In) => value is Out,\n): asserts value is Out {\n\tif (!predicate(value)) {\n\t\tthrow new AssertionError(value, that)\n\t}\n}\n"],"names":[],"mappings":";AAEO,SAAS,OAIf,OAA2B,QAC3B,OACA,WACuB;AACnB,MAAA,CAAC,UAAU,KAAK,GAAG;AAChB,UAAA,IAAI,eAAe,OAAO,IAAI;AAAA,EACrC;AACD;"}
1
+ {"version":3,"file":"assert.js","sources":["../../../src/assert-types/assert.ts"],"sourcesContent":["import { AssertionError } from './AssertionError'\nimport { Predicate } from './types'\n\nexport function assert<\n\tIn,\n\tOut extends In\n>(\n\tthat: string | undefined = undefined,\n\tvalue: In,\n\tpredicate: Predicate<In, Out>, // (value: In) => value is Out,\n): asserts value is Out {\n\tif (!predicate(value)) {\n\t\tthrow new AssertionError(value, that)\n\t}\n}\n"],"names":[],"mappings":";AAGO,SAAS,OAIf,OAA2B,QAC3B,OACA,WACuB;AACnB,MAAA,CAAC,UAAU,KAAK,GAAG;AAChB,UAAA,IAAI,eAAe,OAAO,IAAI;AAAA,EACrC;AACD;"}
@@ -1,10 +1,7 @@
1
- const UPPER_CASE_REG_EXP = /([A-Z])/g;
2
- function toKebabCase(value) {
3
- return value.replace(UPPER_CASE_REG_EXP, "-$1").toLowerCase();
4
- }
5
- function stateClassName(state = null, glue = "-") {
1
+ import { toKebabCase } from "../string-utilities/kebabCase.js";
2
+ function stateClassName(state = null, { glue = "-", removeFalsy = true } = {}) {
6
3
  const entries = Object.entries(state ?? []).map(
7
- ([className, value]) => value || value === 0 ? value === true ? toKebabCase(className) : `${toKebabCase(className)}${glue}${value}` : ""
4
+ ([className, value]) => value || value === 0 || !removeFalsy ? value === true ? toKebabCase(className) : `${toKebabCase(className)}${glue}${value}` : ""
8
5
  ).filter(Boolean);
9
6
  return entries;
10
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stateClassName.js","sources":["../../../src/class-name/stateClassName.ts"],"sourcesContent":["import { ClassNameStateMap } from './Types'\n\nconst UPPER_CASE_REG_EXP = /([A-Z])/g\n\nfunction toKebabCase(value: string) {\n\treturn value.replace(UPPER_CASE_REG_EXP, '-$1').toLowerCase()\n}\n\n/**\n * Combines a state map of class names into a single string\n *\n * @example\n * stateClassName({ foo: true, bar: false, baz: 1 }) // => 'foo baz-1'\n *\n * @param state - State map object with class names as keys and literals as values.\n * @param glue - Glue to use between the class name and the value, default is '-'. Set to '' to disable.\n * @returns Combined class names as string\n */\nexport function stateClassName(state: ClassNameStateMap | null = null, glue = '-'): string[] {\n\tconst entries = Object.entries(state ?? []).map(\n\t\t([className, value]) => value || value === 0\n\t\t\t? (value === true ? toKebabCase(className) : `${toKebabCase(className)}${glue}${value}`)\n\t\t\t: '',\n\t).filter(Boolean)\n\n\treturn entries\n}\n"],"names":[],"mappings":"AAEA,MAAM,qBAAqB;AAE3B,SAAS,YAAY,OAAe;AACnC,SAAO,MAAM,QAAQ,oBAAoB,KAAK,EAAE,YAAY;AAC7D;AAYO,SAAS,eAAe,QAAkC,MAAM,OAAO,KAAe;AAC5F,QAAM,UAAU,OAAO,QAAQ,SAAS,CAAA,CAAE,EAAE;AAAA,IAC3C,CAAC,CAAC,WAAW,KAAK,MAAM,SAAS,UAAU,IACvC,UAAU,OAAO,YAAY,SAAS,IAAI,GAAG,YAAY,SAAS,IAAI,OAAO,UAC9E;AAAA,EAAA,EACF,OAAO,OAAO;AAET,SAAA;AACR;"}
1
+ {"version":3,"file":"stateClassName.js","sources":["../../../src/class-name/stateClassName.ts"],"sourcesContent":["import { toKebabCase } from '../string-utilities'\nimport { ClassNameStateMap } from './Types'\n\nexport interface StateClassNameOptions {\n\tglue?: string;\n\tremoveFalsy?: boolean;\n}\n\n/**\n * Combines a state map of class names into a single string\n *\n * @example\n * stateClassName({ foo: true, bar: false, baz: 1 }) // => 'foo baz-1'\n *\n * @param state - State map object with class names as keys and literals as values.\n * @param options - Options object\n * @param options.glue - Glue to use between the class name and the value, default is '-'. Set to '' to disable.\n * @param options.removeFalsy - Whether to remove falsy class names, default is true.\n * @returns Combined class names as string\n */\nexport function stateClassName(\n\tstate: ClassNameStateMap | null = null,\n\t{ glue = '-', removeFalsy = true }: StateClassNameOptions = {},\n): string[] {\n\tconst entries = Object.entries(state ?? []).map(\n\t\t([className, value]) => value || value === 0 || !removeFalsy\n\t\t\t? (value === true ? toKebabCase(className) : `${toKebabCase(className)}${glue}${value}`)\n\t\t\t: '',\n\t).filter(Boolean)\n\n\treturn entries\n}\n"],"names":[],"mappings":";AAoBgB,SAAA,eACf,QAAkC,MAClC,EAAE,OAAO,KAAK,cAAc,KAAgC,IAAA,IACjD;AACX,QAAM,UAAU,OAAO,QAAQ,SAAS,CAAA,CAAE,EAAE;AAAA,IAC3C,CAAC,CAAC,WAAW,KAAK,MAAM,SAAS,UAAU,KAAK,CAAC,cAC7C,UAAU,OAAO,YAAY,SAAS,IAAI,GAAG,YAAY,SAAS,IAAI,OAAO,UAC9E;AAAA,EAAA,EACF,OAAO,OAAO;AAET,SAAA;AACR;"}
@@ -0,0 +1,11 @@
1
+ import { dataAttribute } from "./dataAttribute.js";
2
+ import { toKebabCase } from "../string-utilities/kebabCase.js";
3
+ function stateDataAttributes(state) {
4
+ return Object.fromEntries(Object.entries(state).map(
5
+ ([key, value]) => [`data-${toKebabCase(key).toLowerCase()}`, dataAttribute(value)]
6
+ ));
7
+ }
8
+ export {
9
+ stateDataAttributes
10
+ };
11
+ //# sourceMappingURL=stateDataAttributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stateDataAttributes.js","sources":["../../../src/dom/stateDataAttributes.ts"],"sourcesContent":["import { toKebabCase } from '../string-utilities'\nimport { dataAttribute } from './dataAttribute'\n\nexport function stateDataAttributes(state: Record<string, unknown>) {\n\treturn Object.fromEntries(Object.entries(state).map(\n\t\t([key, value]) => [`data-${toKebabCase(key).toLowerCase()}`, dataAttribute(value)],\n\t))\n}\n"],"names":[],"mappings":";;AAGO,SAAS,oBAAoB,OAAgC;AACnE,SAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE;AAAA,IAC/C,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ,YAAY,GAAG,EAAE,YAAiB,KAAA,cAAc,KAAK,CAAC;AAAA,EAAA,CACjF;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"svgSizeProps.js","sources":["../../../src/dom/svgSizeProps.ts"],"sourcesContent":["import { SVGProps } from 'react'\n\nexport interface SvgSizeProps {\n\twidth: number;\n\theight: number;\n\tviewBox: string;\n}\n\nexport function svgSizeProps(\n\twidth: number,\n\theight?: number,\n\tcrop: number = 0,\n): SvgSizeProps {\n\tconst viewBoxWidth = width - crop * 2\n\tconst viewBoxHeight = (height ?? width) - crop * 2\n\tconst viewBoxX = crop\n\tconst viewBoxY = crop\n\treturn {\n\t\twidth: viewBoxWidth,\n\t\theight: viewBoxHeight,\n\t\tviewBox: `${viewBoxX} ${viewBoxY} ${viewBoxWidth} ${viewBoxHeight}`,\n\t}\n}\n"],"names":[],"mappings":"AAQO,SAAS,aACf,OACA,QACA,OAAe,GACA;AACT,QAAA,eAAe,QAAQ,OAAO;AAC9B,QAAA,iBAAiB,UAAU,SAAS,OAAO;AACjD,QAAM,WAAW;AACjB,QAAM,WAAW;AACV,SAAA;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS,GAAG,YAAY,YAAY,gBAAgB;AAAA,EAAA;AAEtD;"}
1
+ {"version":3,"file":"svgSizeProps.js","sources":["../../../src/dom/svgSizeProps.ts"],"sourcesContent":["export interface SvgSizeProps {\n\twidth: number;\n\theight: number;\n\tviewBox: string;\n}\n\nexport function svgSizeProps(\n\twidth: number,\n\theight?: number,\n\tcrop: number = 0,\n): SvgSizeProps {\n\tconst viewBoxWidth = width - crop * 2\n\tconst viewBoxHeight = (height ?? width) - crop * 2\n\tconst viewBoxX = crop\n\tconst viewBoxY = crop\n\treturn {\n\t\twidth: viewBoxWidth,\n\t\theight: viewBoxHeight,\n\t\tviewBox: `${viewBoxX} ${viewBoxY} ${viewBoxWidth} ${viewBoxHeight}`,\n\t}\n}\n"],"names":[],"mappings":"AAMO,SAAS,aACf,OACA,QACA,OAAe,GACA;AACT,QAAA,eAAe,QAAQ,OAAO;AAC9B,QAAA,iBAAiB,UAAU,SAAS,OAAO;AACjD,QAAM,WAAW;AACjB,QAAM,WAAW;AACV,SAAA;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS,GAAG,YAAY,YAAY,gBAAgB;AAAA,EAAA;AAEtD;"}
@@ -0,0 +1,15 @@
1
+ function omit(object, properties, strict = false) {
2
+ const next = { ...object };
3
+ for (let key of properties) {
4
+ if (key in object) {
5
+ delete next[key];
6
+ } else if (strict) {
7
+ throw new Error(`Key "${String(key)}" does not exist in object ${JSON.stringify(object)}`);
8
+ }
9
+ }
10
+ return next;
11
+ }
12
+ export {
13
+ omit
14
+ };
15
+ //# sourceMappingURL=omit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omit.js","sources":["../../../src/functional/omit.ts"],"sourcesContent":["export function omit<T extends Object, K extends keyof T>(object: T, properties: ReadonlyArray<K>, strict: boolean = false): Omit<T, K> {\n const next: Partial<T> = { ...object }\n\n for (let key of properties) {\n if (key in object) {\n delete next[key]\n } else if (strict) {\n throw new Error(`Key \"${String(key)}\" does not exist in object ${JSON.stringify(object)}`)\n }\n }\n\n return next as Omit<T, K>\n}\n"],"names":[],"mappings":"AAAO,SAAS,KAA0C,QAAW,YAA8B,SAAkB,OAAmB;AAChI,QAAA,OAAmB,EAAE,GAAG;AAE9B,WAAS,OAAO,YAAY;AAC1B,QAAI,OAAO,QAAQ;AACjB,aAAO,KAAK,GAAG;AAAA,eACN,QAAQ;AACX,YAAA,IAAI,MAAM,QAAQ,OAAO,GAAG,+BAA+B,KAAK,UAAU,MAAM,GAAG;AAAA,IAC3F;AAAA,EACF;AAEO,SAAA;AACT;"}
@@ -1 +1 @@
1
- {"version":3,"file":"pick.js","sources":["../../../src/functional/pick.ts"],"sourcesContent":["export function pick<T extends Object, K extends keyof T>(object: T, properties: K[]): Pick<T, K> {\n\tconst next: Partial<Pick<T, K>> = {}\n\n\tfor (let key of properties) {\n\t\tif (key in object) {\n\t\t\tnext[key] = object[key]\n\t\t} else {\n\t\t\tthrow new Error(`Key \"${String(key)}\" does not exist in object ${JSON.stringify(object)}`)\n\t\t}\n\t}\n\n\treturn next as Pick<T, K>\n}\n"],"names":[],"mappings":"AAAgB,SAAA,KAA0C,QAAW,YAA6B;AACjG,QAAM,OAA4B,CAAA;AAElC,WAAS,OAAO,YAAY;AAC3B,QAAI,OAAO,QAAQ;AACb,WAAA,GAAG,IAAI,OAAO,GAAG;AAAA,IAAA,OAChB;AACA,YAAA,IAAI,MAAM,QAAQ,OAAO,GAAG,+BAA+B,KAAK,UAAU,MAAM,GAAG;AAAA,IAC1F;AAAA,EACD;AAEO,SAAA;AACR;"}
1
+ {"version":3,"file":"pick.js","sources":["../../../src/functional/pick.ts"],"sourcesContent":["export function pick<T extends Object, K extends keyof T>(object: T, properties: ReadonlyArray<K>): Pick<T, K> {\n\tconst next: Partial<Pick<T, K>> = {}\n\n\tfor (let key of properties) {\n\t\tif (key in object) {\n\t\t\tnext[key] = object[key]\n\t\t} else {\n\t\t\tthrow new Error(`Key \"${String(key)}\" does not exist in object ${JSON.stringify(object)}`)\n\t\t}\n\t}\n\n\treturn next as Pick<T, K>\n}\n"],"names":[],"mappings":"AAAgB,SAAA,KAA0C,QAAW,YAA0C;AAC9G,QAAM,OAA4B,CAAA;AAElC,WAAS,OAAO,YAAY;AAC3B,QAAI,OAAO,QAAQ;AACb,WAAA,GAAG,IAAI,OAAO,GAAG;AAAA,IAAA,OAChB;AACA,YAAA,IAAI,MAAM,QAAQ,OAAO,GAAG,+BAA+B,KAAK,UAAU,MAAM,GAAG;AAAA,IAC1F;AAAA,EACD;AAEO,SAAA;AACR;"}
@@ -1,5 +1,5 @@
1
1
  import { AssertionError } from "./assert-types/AssertionError.js";
2
- import { isBoolean, isDefined, isFalse, isHTMLElement, isNonEmptyString, isNonEmptyTrimmedEndString, isNonEmptyTrimmedStartString, isNonEmptyTrimmedString, isNonNegativeNumber, isNotNull, isNotNullish, isNull, isNumber, isNumericString, isObject, isOneOfFactory, isPlainObject, isString, isTrue, isUndefined } from "./assert-types/Predicates.js";
2
+ import { isArrayOfMembersSatisfyingFactory, isBoolean, isDefined, isFalse, isHTMLElement, isNonEmptyString, isNonEmptyTrimmedEndString, isNonEmptyTrimmedStartString, isNonEmptyTrimmedString, isNonNegativeNumber, isNotNull, isNotNullish, isNull, isNumber, isNumericString, isObject, isOneOfFactory, isPlainObject, isSlugString, isString, isTrue, isUndefined, satisfiesOneOfFactory } from "./assert-types/Predicates.js";
3
3
  import { assert } from "./assert-types/assert.js";
4
4
  import { assertNever } from "./assert-types/assertNever.js";
5
5
  import { GlobalClassNamePrefixContext } from "./class-name/GlobalClassNamePrefixContext.js";
@@ -13,10 +13,13 @@ import { getMatchingParentElement } from "./dom/getMatchingParentElement.js";
13
13
  import { getSizeFromResizeObserverEntryFactory } from "./dom/getSizeFromResizeObserverEntry.js";
14
14
  import { isScrollable } from "./dom/isScrollable.js";
15
15
  import { parseTransformMatrix } from "./dom/parseTransformMatrix.js";
16
+ import { stateDataAttributes } from "./dom/stateDataAttributes.js";
16
17
  import { svgSizeProps } from "./dom/svgSizeProps.js";
18
+ import { omit } from "./functional/omit.js";
17
19
  import { pick } from "./functional/pick.js";
18
20
  import { setHasOneOf } from "./functional/setHasOneOf.js";
19
21
  import { capitalize } from "./string-utilities/capitalize.js";
22
+ import { toKebabCase } from "./string-utilities/kebabCase.js";
20
23
  import { trimString } from "./string-utilities/trimString.js";
21
24
  export {
22
25
  AssertionError,
@@ -27,6 +30,7 @@ export {
27
30
  dataAttribute,
28
31
  getMatchingParentElement,
29
32
  getSizeFromResizeObserverEntryFactory,
33
+ isArrayOfMembersSatisfyingFactory,
30
34
  isBoolean,
31
35
  isDefined,
32
36
  isFalse,
@@ -45,16 +49,21 @@ export {
45
49
  isOneOfFactory,
46
50
  isPlainObject,
47
51
  isScrollable,
52
+ isSlugString,
48
53
  isString,
49
54
  isTrue,
50
55
  isUndefined,
51
56
  listClassName,
57
+ omit,
52
58
  parseTransformMatrix,
53
59
  pick,
54
60
  px,
61
+ satisfiesOneOfFactory,
55
62
  setHasOneOf,
56
63
  stateClassName,
64
+ stateDataAttributes,
57
65
  svgSizeProps,
66
+ toKebabCase,
58
67
  trimString,
59
68
  useClassName,
60
69
  useClassNameFactory
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,8 @@
1
+ const UPPER_CASE_REG_EXP = /([A-Z])/g;
2
+ function toKebabCase(value) {
3
+ return value.replace(UPPER_CASE_REG_EXP, "-$1").toLowerCase();
4
+ }
5
+ export {
6
+ toKebabCase
7
+ };
8
+ //# sourceMappingURL=kebabCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kebabCase.js","sources":["../../../src/string-utilities/kebabCase.ts"],"sourcesContent":["const UPPER_CASE_REG_EXP = /([A-Z])/g\n\nexport function toKebabCase(value: string) {\n\treturn value.replace(UPPER_CASE_REG_EXP, '-$1').toLowerCase()\n}\n"],"names":[],"mappings":"AAAA,MAAM,qBAAqB;AAEpB,SAAS,YAAY,OAAe;AAC1C,SAAO,MAAM,QAAQ,oBAAoB,KAAK,EAAE,YAAY;AAC7D;"}
@@ -25,6 +25,9 @@ function isFalse(value) {
25
25
  function isString(value) {
26
26
  return typeof value === "string";
27
27
  }
28
+ function isSlugString(value) {
29
+ return isNonEmptyString(value) && /^[a-z0-9_-]+$/.test(value);
30
+ }
28
31
  function isNonEmptyString(value) {
29
32
  return isString(value) && value.length > 0;
30
33
  }
@@ -45,9 +48,19 @@ function isNonNegativeNumber(value) {
45
48
  function isNumericString(value) {
46
49
  return isString(value) && !isNaN(parseFloat(value));
47
50
  }
48
- function isOneOfFactory(options) {
49
- return function isOneOfProduct(value) {
50
- return options.includes(value);
51
+ function isOneOfFactory(members) {
52
+ return function isOneOfFactoryProduct(value) {
53
+ return members.includes(value);
54
+ };
55
+ }
56
+ function satisfiesOneOfFactory(...predicates) {
57
+ return (value) => {
58
+ return predicates.some((predicate) => predicate(value));
59
+ };
60
+ }
61
+ function isArrayOfMembersSatisfyingFactory(predicate) {
62
+ return function isArrayOfMembersSatisfyingProduct(value) {
63
+ return Array.isArray(value) && value.every(predicate);
51
64
  };
52
65
  }
53
66
  function isHTMLElement(value) {
@@ -60,6 +73,7 @@ function isPlainObject(value) {
60
73
  return isObject(value) && value.constructor === Object;
61
74
  }
62
75
  export {
76
+ isArrayOfMembersSatisfyingFactory,
63
77
  isBoolean,
64
78
  isDefined,
65
79
  isFalse,
@@ -77,8 +91,10 @@ export {
77
91
  isObject,
78
92
  isOneOfFactory,
79
93
  isPlainObject,
94
+ isSlugString,
80
95
  isString,
81
96
  isTrue,
82
- isUndefined
97
+ isUndefined,
98
+ satisfiesOneOfFactory
83
99
  };
84
100
  //# sourceMappingURL=Predicates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Predicates.js","sources":["../../../src/assert-types/Predicates.ts"],"sourcesContent":["export function isNull(value: unknown): value is null {\n return value === null\n}\nexport function isNotNull<T>(value: unknown): value is T {\n return value !== null\n}\nexport function isUndefined(value: unknown): value is undefined {\n return value === undefined\n}\nexport function isDefined<T>(value: unknown): value is T {\n return value !== undefined\n}\nexport function isNotNullish<T>(value: T): value is Exclude<T, null | undefined> {\n return value != null\n}\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean'\n}\nexport function isTrue(value: unknown): value is true {\n return value === true\n}\nexport function isFalse(value: unknown): value is false {\n return value === false\n}\nexport function isString(value: unknown): value is string {\n return typeof value === 'string'\n}\nexport function isNonEmptyString(value: unknown): value is string {\n return isString(value) && value.length > 0\n}\nfunction isNonEmptyTrimmedStringFactory(trim: 'trim' | 'trimStart' | 'trimEnd' = 'trim') {\n return function isNonEmptyString(value: unknown): value is string {\n return isString(value) && value[trim]().length > 0\n }\n}\nexport const isNonEmptyTrimmedString = isNonEmptyTrimmedStringFactory()\nexport const isNonEmptyTrimmedStartString = isNonEmptyTrimmedStringFactory('trimStart')\nexport const isNonEmptyTrimmedEndString = isNonEmptyTrimmedStringFactory('trimEnd')\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number' && value === value\n}\nexport function isNonNegativeNumber(value: unknown): value is number {\n return isNumber(value) && value >= 0\n}\nexport function isNumericString(value: string): value is string {\n return isString(value) && !isNaN(parseFloat(value))\n}\nexport function isOneOfFactory<U, T = any>(options: T extends Array<U> | ReadonlyArray<U> ? T : never): (value: unknown) => value is U {\n return function isOneOfProduct(value: unknown): value is U {\n return options.includes(value as U)\n }\n}\nexport function isHTMLElement(value: unknown): value is HTMLElement {\n return value instanceof HTMLElement\n}\nexport function isObject(value: unknown): value is Object {\n return typeof value === 'object' && value !== null\n}\nexport function isPlainObject<T extends Record<string, unknown>>(value: unknown): value is T {\n return isObject(value) && value.constructor === Object\n}\n"],"names":["isNonEmptyString"],"mappings":"AAAO,SAAS,OAAO,OAA+B;AACpD,SAAO,UAAU;AACnB;AACO,SAAS,UAAa,OAA4B;AACvD,SAAO,UAAU;AACnB;AACO,SAAS,YAAY,OAAoC;AAC9D,SAAO,UAAU;AACnB;AACO,SAAS,UAAa,OAA4B;AACvD,SAAO,UAAU;AACnB;AACO,SAAS,aAAgB,OAAiD;AAC/E,SAAO,SAAS;AAClB;AACO,SAAS,UAAU,OAAkC;AAC1D,SAAO,OAAO,UAAU;AAC1B;AACO,SAAS,OAAO,OAA+B;AACpD,SAAO,UAAU;AACnB;AACO,SAAS,QAAQ,OAAgC;AACtD,SAAO,UAAU;AACnB;AACO,SAAS,SAAS,OAAiC;AACxD,SAAO,OAAO,UAAU;AAC1B;AACO,SAAS,iBAAiB,OAAiC;AAChE,SAAO,SAAS,KAAK,KAAK,MAAM,SAAS;AAC3C;AACA,SAAS,+BAA+B,OAAyC,QAAQ;AAChF,SAAA,SAASA,kBAAiB,OAAiC;AAChE,WAAO,SAAS,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,EAAA;AAErD;AACO,MAAM,0BAA0B,+BAA+B;AACzD,MAAA,+BAA+B,+BAA+B,WAAW;AACzE,MAAA,6BAA6B,+BAA+B,SAAS;AAC3E,SAAS,SAAS,OAAiC;AACjD,SAAA,OAAO,UAAU,YAAY,UAAU;AAChD;AACO,SAAS,oBAAoB,OAAiC;AAC5D,SAAA,SAAS,KAAK,KAAK,SAAS;AACrC;AACO,SAAS,gBAAgB,OAAgC;AAC9D,SAAO,SAAS,KAAK,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC;AACpD;AACO,SAAS,eAA2B,SAA4F;AAC9H,SAAA,SAAS,eAAe,OAA4B;AAClD,WAAA,QAAQ,SAAS,KAAU;AAAA,EAAA;AAEtC;AACO,SAAS,cAAc,OAAsC;AAClE,SAAO,iBAAiB;AAC1B;AACO,SAAS,SAAS,OAAiC;AACjD,SAAA,OAAO,UAAU,YAAY,UAAU;AAChD;AACO,SAAS,cAAiD,OAA4B;AAC3F,SAAO,SAAS,KAAK,KAAK,MAAM,gBAAgB;AAClD;"}
1
+ {"version":3,"file":"Predicates.js","sources":["../../../src/assert-types/Predicates.ts"],"sourcesContent":["import { Predicate, SlugString, UnionOfPredicateTypes } from './types'\n\nexport function isNull(value: unknown): value is null {\n return value === null\n}\nexport function isNotNull<T>(value: unknown): value is T {\n return value !== null\n}\nexport function isUndefined(value: unknown): value is undefined {\n return value === undefined\n}\nexport function isDefined<T>(value: unknown): value is T {\n return value !== undefined\n}\nexport function isNotNullish<T>(value: T): value is Exclude<T, null | undefined> {\n return value != null\n}\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean'\n}\nexport function isTrue(value: unknown): value is true {\n return value === true\n}\nexport function isFalse(value: unknown): value is false {\n return value === false\n}\nexport function isString(value: unknown): value is string {\n return typeof value === 'string'\n}\nexport function isSlugString(value: unknown): value is SlugString {\n\treturn isNonEmptyString(value) && /^[a-z0-9_-]+$/.test(value)\n}\nexport function isNonEmptyString(value: unknown): value is string {\n return isString(value) && value.length > 0\n}\nfunction isNonEmptyTrimmedStringFactory(trim: 'trim' | 'trimStart' | 'trimEnd' = 'trim') {\n return function isNonEmptyString(value: unknown): value is string {\n return isString(value) && value[trim]().length > 0\n }\n}\nexport const isNonEmptyTrimmedString = isNonEmptyTrimmedStringFactory()\nexport const isNonEmptyTrimmedStartString = isNonEmptyTrimmedStringFactory('trimStart')\nexport const isNonEmptyTrimmedEndString = isNonEmptyTrimmedStringFactory('trimEnd')\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number' && value === value\n}\nexport function isNonNegativeNumber(value: unknown): value is number {\n return isNumber(value) && value >= 0\n}\nexport function isNumericString(value: string): value is string {\n return isString(value) && !isNaN(parseFloat(value))\n}\nexport function isOneOfFactory<U, T = any>(\n\tmembers: T extends Array<U> | ReadonlyArray<U> ? T : never,\n): (value: unknown) => value is U {\n\treturn function isOneOfFactoryProduct(value: unknown): value is U {\n\t\treturn members.includes(value as U)\n\t}\n}\nexport function satisfiesOneOfFactory<T extends Array<Predicate<any, any>>>(\n\t...predicates: T\n): Predicate<unknown, UnionOfPredicateTypes<T>> {\n\treturn (value: any): value is UnionOfPredicateTypes<T> => {\n\t\treturn predicates.some(predicate => predicate(value))\n\t}\n}\nexport function isArrayOfMembersSatisfyingFactory<T>(\n\tpredicate: (value: unknown) => value is T,\n): (value: unknown) => value is Array<T> {\n\treturn function isArrayOfMembersSatisfyingProduct(value: unknown): value is Array<T> {\n\t\treturn Array.isArray(value) && value.every(predicate)\n\t}\n}\nexport function isHTMLElement(value: unknown): value is HTMLElement {\n return value instanceof HTMLElement\n}\nexport function isObject(value: unknown): value is Object {\n return typeof value === 'object' && value !== null\n}\nexport function isPlainObject<T extends Record<string, unknown>>(value: unknown): value is T {\n return isObject(value) && value.constructor === Object\n}\n"],"names":["isNonEmptyString"],"mappings":"AAEO,SAAS,OAAO,OAA+B;AACpD,SAAO,UAAU;AACnB;AACO,SAAS,UAAa,OAA4B;AACvD,SAAO,UAAU;AACnB;AACO,SAAS,YAAY,OAAoC;AAC9D,SAAO,UAAU;AACnB;AACO,SAAS,UAAa,OAA4B;AACvD,SAAO,UAAU;AACnB;AACO,SAAS,aAAgB,OAAiD;AAC/E,SAAO,SAAS;AAClB;AACO,SAAS,UAAU,OAAkC;AAC1D,SAAO,OAAO,UAAU;AAC1B;AACO,SAAS,OAAO,OAA+B;AACpD,SAAO,UAAU;AACnB;AACO,SAAS,QAAQ,OAAgC;AACtD,SAAO,UAAU;AACnB;AACO,SAAS,SAAS,OAAiC;AACxD,SAAO,OAAO,UAAU;AAC1B;AACO,SAAS,aAAa,OAAqC;AACjE,SAAO,iBAAiB,KAAK,KAAK,gBAAgB,KAAK,KAAK;AAC7D;AACO,SAAS,iBAAiB,OAAiC;AAChE,SAAO,SAAS,KAAK,KAAK,MAAM,SAAS;AAC3C;AACA,SAAS,+BAA+B,OAAyC,QAAQ;AAChF,SAAA,SAASA,kBAAiB,OAAiC;AAChE,WAAO,SAAS,KAAK,KAAK,MAAM,IAAI,IAAI,SAAS;AAAA,EAAA;AAErD;AACO,MAAM,0BAA0B,+BAA+B;AACzD,MAAA,+BAA+B,+BAA+B,WAAW;AACzE,MAAA,6BAA6B,+BAA+B,SAAS;AAC3E,SAAS,SAAS,OAAiC;AACjD,SAAA,OAAO,UAAU,YAAY,UAAU;AAChD;AACO,SAAS,oBAAoB,OAAiC;AAC5D,SAAA,SAAS,KAAK,KAAK,SAAS;AACrC;AACO,SAAS,gBAAgB,OAAgC;AAC9D,SAAO,SAAS,KAAK,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC;AACpD;AACO,SAAS,eACf,SACiC;AAC1B,SAAA,SAAS,sBAAsB,OAA4B;AAC1D,WAAA,QAAQ,SAAS,KAAU;AAAA,EAAA;AAEpC;AACO,SAAS,yBACZ,YAC4C;AAC/C,SAAO,CAAC,UAAkD;AACzD,WAAO,WAAW,KAAK,CAAa,cAAA,UAAU,KAAK,CAAC;AAAA,EAAA;AAEtD;AACO,SAAS,kCACf,WACwC;AACjC,SAAA,SAAS,kCAAkC,OAAmC;AACpF,WAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,SAAS;AAAA,EAAA;AAEtD;AACO,SAAS,cAAc,OAAsC;AAClE,SAAO,iBAAiB;AAC1B;AACO,SAAS,SAAS,OAAiC;AACjD,SAAA,OAAO,UAAU,YAAY,UAAU;AAChD;AACO,SAAS,cAAiD,OAA4B;AAC3F,SAAO,SAAS,KAAK,KAAK,MAAM,gBAAgB;AAClD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"assert.js","sources":["../../../src/assert-types/assert.ts"],"sourcesContent":["import { AssertionError } from './AssertionError'\n\nexport function assert<\n\tIn,\n\tOut extends In\n>(\n\tthat: string | undefined = undefined,\n\tvalue: In,\n\tpredicate: (value: In) => value is Out,\n): asserts value is Out {\n\tif (!predicate(value)) {\n\t\tthrow new AssertionError(value, that)\n\t}\n}\n"],"names":[],"mappings":";AAEO,SAAS,OAIf,OAA2B,QAC3B,OACA,WACuB;AACnB,MAAA,CAAC,UAAU,KAAK,GAAG;AAChB,UAAA,IAAI,eAAe,OAAO,IAAI;AAAA,EACrC;AACD;"}
1
+ {"version":3,"file":"assert.js","sources":["../../../src/assert-types/assert.ts"],"sourcesContent":["import { AssertionError } from './AssertionError'\nimport { Predicate } from './types'\n\nexport function assert<\n\tIn,\n\tOut extends In\n>(\n\tthat: string | undefined = undefined,\n\tvalue: In,\n\tpredicate: Predicate<In, Out>, // (value: In) => value is Out,\n): asserts value is Out {\n\tif (!predicate(value)) {\n\t\tthrow new AssertionError(value, that)\n\t}\n}\n"],"names":[],"mappings":";AAGO,SAAS,OAIf,OAA2B,QAC3B,OACA,WACuB;AACnB,MAAA,CAAC,UAAU,KAAK,GAAG;AAChB,UAAA,IAAI,eAAe,OAAO,IAAI;AAAA,EACrC;AACD;"}
@@ -1,10 +1,7 @@
1
- const UPPER_CASE_REG_EXP = /([A-Z])/g;
2
- function toKebabCase(value) {
3
- return value.replace(UPPER_CASE_REG_EXP, "-$1").toLowerCase();
4
- }
5
- function stateClassName(state = null, glue = "-") {
1
+ import { toKebabCase } from "../string-utilities/kebabCase.js";
2
+ function stateClassName(state = null, { glue = "-", removeFalsy = true } = {}) {
6
3
  const entries = Object.entries(state ?? []).map(
7
- ([className, value]) => value || value === 0 ? value === true ? toKebabCase(className) : `${toKebabCase(className)}${glue}${value}` : ""
4
+ ([className, value]) => value || value === 0 || !removeFalsy ? value === true ? toKebabCase(className) : `${toKebabCase(className)}${glue}${value}` : ""
8
5
  ).filter(Boolean);
9
6
  return entries;
10
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stateClassName.js","sources":["../../../src/class-name/stateClassName.ts"],"sourcesContent":["import { ClassNameStateMap } from './Types'\n\nconst UPPER_CASE_REG_EXP = /([A-Z])/g\n\nfunction toKebabCase(value: string) {\n\treturn value.replace(UPPER_CASE_REG_EXP, '-$1').toLowerCase()\n}\n\n/**\n * Combines a state map of class names into a single string\n *\n * @example\n * stateClassName({ foo: true, bar: false, baz: 1 }) // => 'foo baz-1'\n *\n * @param state - State map object with class names as keys and literals as values.\n * @param glue - Glue to use between the class name and the value, default is '-'. Set to '' to disable.\n * @returns Combined class names as string\n */\nexport function stateClassName(state: ClassNameStateMap | null = null, glue = '-'): string[] {\n\tconst entries = Object.entries(state ?? []).map(\n\t\t([className, value]) => value || value === 0\n\t\t\t? (value === true ? toKebabCase(className) : `${toKebabCase(className)}${glue}${value}`)\n\t\t\t: '',\n\t).filter(Boolean)\n\n\treturn entries\n}\n"],"names":[],"mappings":"AAEA,MAAM,qBAAqB;AAE3B,SAAS,YAAY,OAAe;AACnC,SAAO,MAAM,QAAQ,oBAAoB,KAAK,EAAE,YAAY;AAC7D;AAYO,SAAS,eAAe,QAAkC,MAAM,OAAO,KAAe;AAC5F,QAAM,UAAU,OAAO,QAAQ,SAAS,CAAA,CAAE,EAAE;AAAA,IAC3C,CAAC,CAAC,WAAW,KAAK,MAAM,SAAS,UAAU,IACvC,UAAU,OAAO,YAAY,SAAS,IAAI,GAAG,YAAY,SAAS,IAAI,OAAO,UAC9E;AAAA,EAAA,EACF,OAAO,OAAO;AAET,SAAA;AACR;"}
1
+ {"version":3,"file":"stateClassName.js","sources":["../../../src/class-name/stateClassName.ts"],"sourcesContent":["import { toKebabCase } from '../string-utilities'\nimport { ClassNameStateMap } from './Types'\n\nexport interface StateClassNameOptions {\n\tglue?: string;\n\tremoveFalsy?: boolean;\n}\n\n/**\n * Combines a state map of class names into a single string\n *\n * @example\n * stateClassName({ foo: true, bar: false, baz: 1 }) // => 'foo baz-1'\n *\n * @param state - State map object with class names as keys and literals as values.\n * @param options - Options object\n * @param options.glue - Glue to use between the class name and the value, default is '-'. Set to '' to disable.\n * @param options.removeFalsy - Whether to remove falsy class names, default is true.\n * @returns Combined class names as string\n */\nexport function stateClassName(\n\tstate: ClassNameStateMap | null = null,\n\t{ glue = '-', removeFalsy = true }: StateClassNameOptions = {},\n): string[] {\n\tconst entries = Object.entries(state ?? []).map(\n\t\t([className, value]) => value || value === 0 || !removeFalsy\n\t\t\t? (value === true ? toKebabCase(className) : `${toKebabCase(className)}${glue}${value}`)\n\t\t\t: '',\n\t).filter(Boolean)\n\n\treturn entries\n}\n"],"names":[],"mappings":";AAoBgB,SAAA,eACf,QAAkC,MAClC,EAAE,OAAO,KAAK,cAAc,KAAgC,IAAA,IACjD;AACX,QAAM,UAAU,OAAO,QAAQ,SAAS,CAAA,CAAE,EAAE;AAAA,IAC3C,CAAC,CAAC,WAAW,KAAK,MAAM,SAAS,UAAU,KAAK,CAAC,cAC7C,UAAU,OAAO,YAAY,SAAS,IAAI,GAAG,YAAY,SAAS,IAAI,OAAO,UAC9E;AAAA,EAAA,EACF,OAAO,OAAO;AAET,SAAA;AACR;"}
@@ -0,0 +1,11 @@
1
+ import { dataAttribute } from "./dataAttribute.js";
2
+ import { toKebabCase } from "../string-utilities/kebabCase.js";
3
+ function stateDataAttributes(state) {
4
+ return Object.fromEntries(Object.entries(state).map(
5
+ ([key, value]) => [`data-${toKebabCase(key).toLowerCase()}`, dataAttribute(value)]
6
+ ));
7
+ }
8
+ export {
9
+ stateDataAttributes
10
+ };
11
+ //# sourceMappingURL=stateDataAttributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stateDataAttributes.js","sources":["../../../src/dom/stateDataAttributes.ts"],"sourcesContent":["import { toKebabCase } from '../string-utilities'\nimport { dataAttribute } from './dataAttribute'\n\nexport function stateDataAttributes(state: Record<string, unknown>) {\n\treturn Object.fromEntries(Object.entries(state).map(\n\t\t([key, value]) => [`data-${toKebabCase(key).toLowerCase()}`, dataAttribute(value)],\n\t))\n}\n"],"names":[],"mappings":";;AAGO,SAAS,oBAAoB,OAAgC;AACnE,SAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE;AAAA,IAC/C,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ,YAAY,GAAG,EAAE,YAAiB,KAAA,cAAc,KAAK,CAAC;AAAA,EAAA,CACjF;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"svgSizeProps.js","sources":["../../../src/dom/svgSizeProps.ts"],"sourcesContent":["import { SVGProps } from 'react'\n\nexport interface SvgSizeProps {\n\twidth: number;\n\theight: number;\n\tviewBox: string;\n}\n\nexport function svgSizeProps(\n\twidth: number,\n\theight?: number,\n\tcrop: number = 0,\n): SvgSizeProps {\n\tconst viewBoxWidth = width - crop * 2\n\tconst viewBoxHeight = (height ?? width) - crop * 2\n\tconst viewBoxX = crop\n\tconst viewBoxY = crop\n\treturn {\n\t\twidth: viewBoxWidth,\n\t\theight: viewBoxHeight,\n\t\tviewBox: `${viewBoxX} ${viewBoxY} ${viewBoxWidth} ${viewBoxHeight}`,\n\t}\n}\n"],"names":[],"mappings":"AAQO,SAAS,aACf,OACA,QACA,OAAe,GACA;AACT,QAAA,eAAe,QAAQ,OAAO;AAC9B,QAAA,iBAAiB,UAAU,SAAS,OAAO;AACjD,QAAM,WAAW;AACjB,QAAM,WAAW;AACV,SAAA;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS,GAAG,YAAY,YAAY,gBAAgB;AAAA,EAAA;AAEtD;"}
1
+ {"version":3,"file":"svgSizeProps.js","sources":["../../../src/dom/svgSizeProps.ts"],"sourcesContent":["export interface SvgSizeProps {\n\twidth: number;\n\theight: number;\n\tviewBox: string;\n}\n\nexport function svgSizeProps(\n\twidth: number,\n\theight?: number,\n\tcrop: number = 0,\n): SvgSizeProps {\n\tconst viewBoxWidth = width - crop * 2\n\tconst viewBoxHeight = (height ?? width) - crop * 2\n\tconst viewBoxX = crop\n\tconst viewBoxY = crop\n\treturn {\n\t\twidth: viewBoxWidth,\n\t\theight: viewBoxHeight,\n\t\tviewBox: `${viewBoxX} ${viewBoxY} ${viewBoxWidth} ${viewBoxHeight}`,\n\t}\n}\n"],"names":[],"mappings":"AAMO,SAAS,aACf,OACA,QACA,OAAe,GACA;AACT,QAAA,eAAe,QAAQ,OAAO;AAC9B,QAAA,iBAAiB,UAAU,SAAS,OAAO;AACjD,QAAM,WAAW;AACjB,QAAM,WAAW;AACV,SAAA;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS,GAAG,YAAY,YAAY,gBAAgB;AAAA,EAAA;AAEtD;"}
@@ -0,0 +1,15 @@
1
+ function omit(object, properties, strict = false) {
2
+ const next = { ...object };
3
+ for (let key of properties) {
4
+ if (key in object) {
5
+ delete next[key];
6
+ } else if (strict) {
7
+ throw new Error(`Key "${String(key)}" does not exist in object ${JSON.stringify(object)}`);
8
+ }
9
+ }
10
+ return next;
11
+ }
12
+ export {
13
+ omit
14
+ };
15
+ //# sourceMappingURL=omit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omit.js","sources":["../../../src/functional/omit.ts"],"sourcesContent":["export function omit<T extends Object, K extends keyof T>(object: T, properties: ReadonlyArray<K>, strict: boolean = false): Omit<T, K> {\n const next: Partial<T> = { ...object }\n\n for (let key of properties) {\n if (key in object) {\n delete next[key]\n } else if (strict) {\n throw new Error(`Key \"${String(key)}\" does not exist in object ${JSON.stringify(object)}`)\n }\n }\n\n return next as Omit<T, K>\n}\n"],"names":[],"mappings":"AAAO,SAAS,KAA0C,QAAW,YAA8B,SAAkB,OAAmB;AAChI,QAAA,OAAmB,EAAE,GAAG;AAE9B,WAAS,OAAO,YAAY;AAC1B,QAAI,OAAO,QAAQ;AACjB,aAAO,KAAK,GAAG;AAAA,eACN,QAAQ;AACX,YAAA,IAAI,MAAM,QAAQ,OAAO,GAAG,+BAA+B,KAAK,UAAU,MAAM,GAAG;AAAA,IAC3F;AAAA,EACF;AAEO,SAAA;AACT;"}
@@ -1 +1 @@
1
- {"version":3,"file":"pick.js","sources":["../../../src/functional/pick.ts"],"sourcesContent":["export function pick<T extends Object, K extends keyof T>(object: T, properties: K[]): Pick<T, K> {\n\tconst next: Partial<Pick<T, K>> = {}\n\n\tfor (let key of properties) {\n\t\tif (key in object) {\n\t\t\tnext[key] = object[key]\n\t\t} else {\n\t\t\tthrow new Error(`Key \"${String(key)}\" does not exist in object ${JSON.stringify(object)}`)\n\t\t}\n\t}\n\n\treturn next as Pick<T, K>\n}\n"],"names":[],"mappings":"AAAgB,SAAA,KAA0C,QAAW,YAA6B;AACjG,QAAM,OAA4B,CAAA;AAElC,WAAS,OAAO,YAAY;AAC3B,QAAI,OAAO,QAAQ;AACb,WAAA,GAAG,IAAI,OAAO,GAAG;AAAA,IAAA,OAChB;AACA,YAAA,IAAI,MAAM,QAAQ,OAAO,GAAG,+BAA+B,KAAK,UAAU,MAAM,GAAG;AAAA,IAC1F;AAAA,EACD;AAEO,SAAA;AACR;"}
1
+ {"version":3,"file":"pick.js","sources":["../../../src/functional/pick.ts"],"sourcesContent":["export function pick<T extends Object, K extends keyof T>(object: T, properties: ReadonlyArray<K>): Pick<T, K> {\n\tconst next: Partial<Pick<T, K>> = {}\n\n\tfor (let key of properties) {\n\t\tif (key in object) {\n\t\t\tnext[key] = object[key]\n\t\t} else {\n\t\t\tthrow new Error(`Key \"${String(key)}\" does not exist in object ${JSON.stringify(object)}`)\n\t\t}\n\t}\n\n\treturn next as Pick<T, K>\n}\n"],"names":[],"mappings":"AAAgB,SAAA,KAA0C,QAAW,YAA0C;AAC9G,QAAM,OAA4B,CAAA;AAElC,WAAS,OAAO,YAAY;AAC3B,QAAI,OAAO,QAAQ;AACb,WAAA,GAAG,IAAI,OAAO,GAAG;AAAA,IAAA,OAChB;AACA,YAAA,IAAI,MAAM,QAAQ,OAAO,GAAG,+BAA+B,KAAK,UAAU,MAAM,GAAG;AAAA,IAC1F;AAAA,EACD;AAEO,SAAA;AACR;"}
@@ -1,5 +1,5 @@
1
1
  import { AssertionError } from "./assert-types/AssertionError.js";
2
- import { isBoolean, isDefined, isFalse, isHTMLElement, isNonEmptyString, isNonEmptyTrimmedEndString, isNonEmptyTrimmedStartString, isNonEmptyTrimmedString, isNonNegativeNumber, isNotNull, isNotNullish, isNull, isNumber, isNumericString, isObject, isOneOfFactory, isPlainObject, isString, isTrue, isUndefined } from "./assert-types/Predicates.js";
2
+ import { isArrayOfMembersSatisfyingFactory, isBoolean, isDefined, isFalse, isHTMLElement, isNonEmptyString, isNonEmptyTrimmedEndString, isNonEmptyTrimmedStartString, isNonEmptyTrimmedString, isNonNegativeNumber, isNotNull, isNotNullish, isNull, isNumber, isNumericString, isObject, isOneOfFactory, isPlainObject, isSlugString, isString, isTrue, isUndefined, satisfiesOneOfFactory } from "./assert-types/Predicates.js";
3
3
  import { assert } from "./assert-types/assert.js";
4
4
  import { assertNever } from "./assert-types/assertNever.js";
5
5
  import { GlobalClassNamePrefixContext } from "./class-name/GlobalClassNamePrefixContext.js";
@@ -13,10 +13,13 @@ import { getMatchingParentElement } from "./dom/getMatchingParentElement.js";
13
13
  import { getSizeFromResizeObserverEntryFactory } from "./dom/getSizeFromResizeObserverEntry.js";
14
14
  import { isScrollable } from "./dom/isScrollable.js";
15
15
  import { parseTransformMatrix } from "./dom/parseTransformMatrix.js";
16
+ import { stateDataAttributes } from "./dom/stateDataAttributes.js";
16
17
  import { svgSizeProps } from "./dom/svgSizeProps.js";
18
+ import { omit } from "./functional/omit.js";
17
19
  import { pick } from "./functional/pick.js";
18
20
  import { setHasOneOf } from "./functional/setHasOneOf.js";
19
21
  import { capitalize } from "./string-utilities/capitalize.js";
22
+ import { toKebabCase } from "./string-utilities/kebabCase.js";
20
23
  import { trimString } from "./string-utilities/trimString.js";
21
24
  export {
22
25
  AssertionError,
@@ -27,6 +30,7 @@ export {
27
30
  dataAttribute,
28
31
  getMatchingParentElement,
29
32
  getSizeFromResizeObserverEntryFactory,
33
+ isArrayOfMembersSatisfyingFactory,
30
34
  isBoolean,
31
35
  isDefined,
32
36
  isFalse,
@@ -45,16 +49,21 @@ export {
45
49
  isOneOfFactory,
46
50
  isPlainObject,
47
51
  isScrollable,
52
+ isSlugString,
48
53
  isString,
49
54
  isTrue,
50
55
  isUndefined,
51
56
  listClassName,
57
+ omit,
52
58
  parseTransformMatrix,
53
59
  pick,
54
60
  px,
61
+ satisfiesOneOfFactory,
55
62
  setHasOneOf,
56
63
  stateClassName,
64
+ stateDataAttributes,
57
65
  svgSizeProps,
66
+ toKebabCase,
58
67
  trimString,
59
68
  useClassName,
60
69
  useClassNameFactory
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,8 @@
1
+ const UPPER_CASE_REG_EXP = /([A-Z])/g;
2
+ function toKebabCase(value) {
3
+ return value.replace(UPPER_CASE_REG_EXP, "-$1").toLowerCase();
4
+ }
5
+ export {
6
+ toKebabCase
7
+ };
8
+ //# sourceMappingURL=kebabCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kebabCase.js","sources":["../../../src/string-utilities/kebabCase.ts"],"sourcesContent":["const UPPER_CASE_REG_EXP = /([A-Z])/g\n\nexport function toKebabCase(value: string) {\n\treturn value.replace(UPPER_CASE_REG_EXP, '-$1').toLowerCase()\n}\n"],"names":[],"mappings":"AAAA,MAAM,qBAAqB;AAEpB,SAAS,YAAY,OAAe;AAC1C,SAAO,MAAM,QAAQ,oBAAoB,KAAK,EAAE,YAAY;AAC7D;"}
@@ -1,3 +1,4 @@
1
+ import { Predicate, SlugString, UnionOfPredicateTypes } from './types';
1
2
  export declare function isNull(value: unknown): value is null;
2
3
  export declare function isNotNull<T>(value: unknown): value is T;
3
4
  export declare function isUndefined(value: unknown): value is undefined;
@@ -7,6 +8,7 @@ export declare function isBoolean(value: unknown): value is boolean;
7
8
  export declare function isTrue(value: unknown): value is true;
8
9
  export declare function isFalse(value: unknown): value is false;
9
10
  export declare function isString(value: unknown): value is string;
11
+ export declare function isSlugString(value: unknown): value is SlugString;
10
12
  export declare function isNonEmptyString(value: unknown): value is string;
11
13
  export declare const isNonEmptyTrimmedString: (value: unknown) => value is string;
12
14
  export declare const isNonEmptyTrimmedStartString: (value: unknown) => value is string;
@@ -14,7 +16,9 @@ export declare const isNonEmptyTrimmedEndString: (value: unknown) => value is st
14
16
  export declare function isNumber(value: unknown): value is number;
15
17
  export declare function isNonNegativeNumber(value: unknown): value is number;
16
18
  export declare function isNumericString(value: string): value is string;
17
- export declare function isOneOfFactory<U, T = any>(options: T extends Array<U> | ReadonlyArray<U> ? T : never): (value: unknown) => value is U;
19
+ export declare function isOneOfFactory<U, T = any>(members: T extends Array<U> | ReadonlyArray<U> ? T : never): (value: unknown) => value is U;
20
+ export declare function satisfiesOneOfFactory<T extends Array<Predicate<any, any>>>(...predicates: T): Predicate<unknown, UnionOfPredicateTypes<T>>;
21
+ export declare function isArrayOfMembersSatisfyingFactory<T>(predicate: (value: unknown) => value is T): (value: unknown) => value is Array<T>;
18
22
  export declare function isHTMLElement(value: unknown): value is HTMLElement;
19
23
  export declare function isObject(value: unknown): value is Object;
20
24
  export declare function isPlainObject<T extends Record<string, unknown>>(value: unknown): value is T;
@@ -1 +1 @@
1
- {"version":3,"file":"Predicates.d.ts","sourceRoot":"","sources":["../../../src/assert-types/Predicates.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEpD;AACD,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,CAAC,CAEvD;AACD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AACD,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,CAAC,CAEvD;AACD,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC,CAE/E;AACD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAE1D;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEpD;AACD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAEtD;AACD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AACD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEhE;AAMD,eAAO,MAAM,uBAAuB,UAJM,OAAO,oBAIsB,CAAA;AACvE,eAAO,MAAM,4BAA4B,UALC,OAAO,oBAKsC,CAAA;AACvF,eAAO,MAAM,0BAA0B,UANG,OAAO,oBAMkC,CAAA;AACnF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AACD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEnE;AACD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAE9D;AACD,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,CAIrI;AACD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AACD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AACD,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,CAAC,CAE3F"}
1
+ {"version":3,"file":"Predicates.d.ts","sourceRoot":"","sources":["../../../src/assert-types/Predicates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEtE,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEpD;AACD,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,CAAC,CAEvD;AACD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AACD,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,CAAC,CAEvD;AACD,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC,CAE/E;AACD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAE1D;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEpD;AACD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAEtD;AACD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AACD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE;AACD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEhE;AAMD,eAAO,MAAM,uBAAuB,UAJM,OAAO,oBAIsB,CAAA;AACvE,eAAO,MAAM,4BAA4B,UALC,OAAO,oBAKsC,CAAA;AACvF,eAAO,MAAM,0BAA0B,UANG,OAAO,oBAMkC,CAAA;AACnF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AACD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEnE;AACD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAE9D;AACD,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EACxC,OAAO,EAAE,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GACxD,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,CAIhC;AACD,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EACzE,GAAG,UAAU,EAAE,CAAC,GACd,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAI9C;AACD,wBAAgB,iCAAiC,CAAC,CAAC,EAClD,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GACvC,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAIvC;AACD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AACD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AACD,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,CAAC,CAE3F"}
@@ -1,2 +1,3 @@
1
- export declare function assert<In, Out extends In>(that: string | undefined, value: In, predicate: (value: In) => value is Out): asserts value is Out;
1
+ import { Predicate } from './types';
2
+ export declare function assert<In, Out extends In>(that: string | undefined, value: In, predicate: Predicate<In, Out>): asserts value is Out;
2
3
  //# sourceMappingURL=assert.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../src/assert-types/assert.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM,CACrB,EAAE,EACF,GAAG,SAAS,EAAE,EAEd,IAAI,oBAAgC,EACpC,KAAK,EAAE,EAAE,EACT,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,KAAK,IAAI,GAAG,GACpC,OAAO,CAAC,KAAK,IAAI,GAAG,CAItB"}
1
+ {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../src/assert-types/assert.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC,wBAAgB,MAAM,CACrB,EAAE,EACF,GAAG,SAAS,EAAE,EAEd,IAAI,oBAAgC,EACpC,KAAK,EAAE,EAAE,EACT,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,GAC3B,OAAO,CAAC,KAAK,IAAI,GAAG,CAItB"}
@@ -2,4 +2,5 @@ export * from './AssertionError';
2
2
  export * from './Predicates';
3
3
  export * from './assert';
4
4
  export * from './assertNever';
5
+ export * from './types';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/assert-types/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/assert-types/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { Opaque } from 'type-fest';
2
+ export type Predicate<T, U extends T> = (value: T) => value is U;
3
+ export type UnionOfPredicateTypes<T> = T extends Array<(value: any) => value is infer U> ? U : never;
4
+ export type SlugString = Opaque<string, 'SlugString'>;
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/assert-types/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAElC,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAA;AAChE,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,KAAK,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AACpG,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA"}
@@ -1,5 +1,10 @@
1
+ import { PropsWithChildren } from 'react';
1
2
  export type NestedClassName = string | false | null | undefined | (string | false | null | undefined)[] | NestedClassName[];
2
3
  export type ClassNameStateMap = {
3
4
  [key: string]: string | number | boolean | null | undefined;
4
5
  };
6
+ export type ComponentClassNameProps = PropsWithChildren<{
7
+ className?: NestedClassName;
8
+ componentClassName?: string | string[];
9
+ }>;
5
10
  //# sourceMappingURL=Types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Types.d.ts","sourceRoot":"","sources":["../../../src/class-name/Types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,eAAe,EAAE,CAAA;AAC3H,MAAM,MAAM,iBAAiB,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,CAAA"}
1
+ {"version":3,"file":"Types.d.ts","sourceRoot":"","sources":["../../../src/class-name/Types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAEzC,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,eAAe,EAAE,CAAA;AAC3H,MAAM,MAAM,iBAAiB,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,CAAA;AAE/F,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;IACvD,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACvC,CAAC,CAAA"}
@@ -1,4 +1,8 @@
1
1
  import { ClassNameStateMap } from './Types';
2
+ export interface StateClassNameOptions {
3
+ glue?: string;
4
+ removeFalsy?: boolean;
5
+ }
2
6
  /**
3
7
  * Combines a state map of class names into a single string
4
8
  *
@@ -6,8 +10,10 @@ import { ClassNameStateMap } from './Types';
6
10
  * stateClassName({ foo: true, bar: false, baz: 1 }) // => 'foo baz-1'
7
11
  *
8
12
  * @param state - State map object with class names as keys and literals as values.
9
- * @param glue - Glue to use between the class name and the value, default is '-'. Set to '' to disable.
13
+ * @param options - Options object
14
+ * @param options.glue - Glue to use between the class name and the value, default is '-'. Set to '' to disable.
15
+ * @param options.removeFalsy - Whether to remove falsy class names, default is true.
10
16
  * @returns Combined class names as string
11
17
  */
12
- export declare function stateClassName(state?: ClassNameStateMap | null, glue?: string): string[];
18
+ export declare function stateClassName(state?: ClassNameStateMap | null, { glue, removeFalsy }?: StateClassNameOptions): string[];
13
19
  //# sourceMappingURL=stateClassName.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stateClassName.d.ts","sourceRoot":"","sources":["../../../src/class-name/stateClassName.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAQ3C;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,GAAE,iBAAiB,GAAG,IAAW,EAAE,IAAI,SAAM,GAAG,MAAM,EAAE,CAQ3F"}
1
+ {"version":3,"file":"stateClassName.d.ts","sourceRoot":"","sources":["../../../src/class-name/stateClassName.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAE3C,MAAM,WAAW,qBAAqB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC7B,KAAK,GAAE,iBAAiB,GAAG,IAAW,EACtC,EAAE,IAAU,EAAE,WAAkB,EAAE,GAAE,qBAA0B,GAC5D,MAAM,EAAE,CAQV"}
@@ -3,5 +3,6 @@ export * from './getMatchingParentElement';
3
3
  export * from './getSizeFromResizeObserverEntry';
4
4
  export * from './isScrollable';
5
5
  export * from './parseTransformMatrix';
6
+ export * from './stateDataAttributes';
6
7
  export * from './svgSizeProps';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dom/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kCAAkC,CAAA;AAChD,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dom/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kCAAkC,CAAA;AAChD,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare function stateDataAttributes(state: Record<string, unknown>): {
2
+ [k: string]: string | true | undefined;
3
+ };
4
+ //# sourceMappingURL=stateDataAttributes.d.ts.map