@zentauri-ui/zentauri-components 2.2.1 → 2.3.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 (142) hide show
  1. package/README.md +11 -8
  2. package/cli/props.json +437 -0
  3. package/cli/registry.json +9 -0
  4. package/dist/{chunk-NW5BSLR2.js → chunk-AARJLZXP.js} +6 -6
  5. package/dist/{chunk-NW5BSLR2.js.map → chunk-AARJLZXP.js.map} +1 -1
  6. package/dist/chunk-ATE5SCTR.mjs +39 -0
  7. package/dist/chunk-ATE5SCTR.mjs.map +1 -0
  8. package/dist/{chunk-YSQW56JX.mjs → chunk-BFHJF4MV.mjs} +4 -4
  9. package/dist/{chunk-YSQW56JX.mjs.map → chunk-BFHJF4MV.mjs.map} +1 -1
  10. package/dist/chunk-DIAA5VH4.mjs +64 -0
  11. package/dist/chunk-DIAA5VH4.mjs.map +1 -0
  12. package/dist/{chunk-DUH2YLH2.js → chunk-DSX6RUYI.js} +12 -12
  13. package/dist/{chunk-DUH2YLH2.js.map → chunk-DSX6RUYI.js.map} +1 -1
  14. package/dist/chunk-ENKXB2BA.js +19 -0
  15. package/dist/{chunk-YBKNXDZU.js.map → chunk-ENKXB2BA.js.map} +1 -1
  16. package/dist/chunk-EZNR7VLJ.js +65 -0
  17. package/dist/chunk-EZNR7VLJ.js.map +1 -0
  18. package/dist/chunk-H3BJOK22.js +74 -0
  19. package/dist/chunk-H3BJOK22.js.map +1 -0
  20. package/dist/{chunk-45ZHGDT2.mjs → chunk-JKKF5DCF.mjs} +3 -3
  21. package/dist/{chunk-45ZHGDT2.mjs.map → chunk-JKKF5DCF.mjs.map} +1 -1
  22. package/dist/chunk-PQ2XTY3M.js +44 -0
  23. package/dist/chunk-PQ2XTY3M.js.map +1 -0
  24. package/dist/chunk-RDYR4DHG.mjs +62 -0
  25. package/dist/chunk-RDYR4DHG.mjs.map +1 -0
  26. package/dist/chunk-RWF3NVZP.mjs +29 -0
  27. package/dist/chunk-RWF3NVZP.mjs.map +1 -0
  28. package/dist/{chunk-Z4Y5IPR3.mjs → chunk-WZY32L6K.mjs} +3 -3
  29. package/dist/{chunk-Z4Y5IPR3.mjs.map → chunk-WZY32L6K.mjs.map} +1 -1
  30. package/dist/chunk-YRQN3AV4.js +38 -0
  31. package/dist/chunk-YRQN3AV4.js.map +1 -0
  32. package/dist/{chunk-UJZ7JQBQ.js → chunk-YY7G4NV3.js} +25 -6
  33. package/dist/chunk-YY7G4NV3.js.map +1 -0
  34. package/dist/{chunk-5HLEHSPM.mjs → chunk-ZB6C6CJQ.mjs} +25 -6
  35. package/dist/chunk-ZB6C6CJQ.mjs.map +1 -0
  36. package/dist/design-system/facade.js +8 -6
  37. package/dist/design-system/facade.js.map +1 -1
  38. package/dist/design-system/facade.mjs +7 -5
  39. package/dist/design-system/facade.mjs.map +1 -1
  40. package/dist/design-system/hash-generator.d.ts +15 -0
  41. package/dist/design-system/hash-generator.d.ts.map +1 -0
  42. package/dist/design-system/index.d.ts +2 -0
  43. package/dist/design-system/index.d.ts.map +1 -1
  44. package/dist/design-system/secret-reveal.d.ts +57 -0
  45. package/dist/design-system/secret-reveal.d.ts.map +1 -0
  46. package/dist/hooks/index.d.ts +1 -0
  47. package/dist/hooks/index.d.ts.map +1 -1
  48. package/dist/hooks/useHash/index.d.ts +2 -0
  49. package/dist/hooks/useHash/index.d.ts.map +1 -0
  50. package/dist/hooks/useHash/useHash.d.ts +20 -0
  51. package/dist/hooks/useHash/useHash.d.ts.map +1 -0
  52. package/dist/hooks/useHash.js +18 -0
  53. package/dist/hooks/useHash.js.map +1 -0
  54. package/dist/hooks/useHash.mjs +5 -0
  55. package/dist/hooks/useHash.mjs.map +1 -0
  56. package/dist/ui/buttons/animated.js +10 -8
  57. package/dist/ui/buttons/animated.js.map +1 -1
  58. package/dist/ui/buttons/animated.mjs +8 -6
  59. package/dist/ui/buttons/animated.mjs.map +1 -1
  60. package/dist/ui/buttons.js +11 -9
  61. package/dist/ui/buttons.mjs +9 -7
  62. package/dist/ui/data-table.js +21 -19
  63. package/dist/ui/data-table.js.map +1 -1
  64. package/dist/ui/data-table.mjs +11 -9
  65. package/dist/ui/data-table.mjs.map +1 -1
  66. package/dist/ui/dynamic-stepper.js +20 -18
  67. package/dist/ui/dynamic-stepper.js.map +1 -1
  68. package/dist/ui/dynamic-stepper.mjs +9 -7
  69. package/dist/ui/dynamic-stepper.mjs.map +1 -1
  70. package/dist/ui/hash-generator/hash-generator-base.d.ts +6 -0
  71. package/dist/ui/hash-generator/hash-generator-base.d.ts.map +1 -0
  72. package/dist/ui/hash-generator/hash-generator.d.ts +2 -0
  73. package/dist/ui/hash-generator/hash-generator.d.ts.map +1 -0
  74. package/dist/ui/hash-generator/index.d.ts +5 -0
  75. package/dist/ui/hash-generator/index.d.ts.map +1 -0
  76. package/dist/ui/hash-generator/types.d.ts +17 -0
  77. package/dist/ui/hash-generator/types.d.ts.map +1 -0
  78. package/dist/ui/hash-generator/variants.d.ts +10 -0
  79. package/dist/ui/hash-generator/variants.d.ts.map +1 -0
  80. package/dist/ui/hash-generator.js +126 -0
  81. package/dist/ui/hash-generator.js.map +1 -0
  82. package/dist/ui/hash-generator.mjs +117 -0
  83. package/dist/ui/hash-generator.mjs.map +1 -0
  84. package/dist/ui/pagination.js +12 -10
  85. package/dist/ui/pagination.mjs +9 -7
  86. package/dist/ui/secret-reveal/animated/animations.d.ts +8 -0
  87. package/dist/ui/secret-reveal/animated/animations.d.ts.map +1 -0
  88. package/dist/ui/secret-reveal/animated/index.d.ts +4 -0
  89. package/dist/ui/secret-reveal/animated/index.d.ts.map +1 -0
  90. package/dist/ui/secret-reveal/animated/secret-reveal-animated.d.ts +6 -0
  91. package/dist/ui/secret-reveal/animated/secret-reveal-animated.d.ts.map +1 -0
  92. package/dist/ui/secret-reveal/animated/types.d.ts +9 -0
  93. package/dist/ui/secret-reveal/animated/types.d.ts.map +1 -0
  94. package/dist/ui/secret-reveal/animated.js +194 -0
  95. package/dist/ui/secret-reveal/animated.js.map +1 -0
  96. package/dist/ui/secret-reveal/animated.mjs +191 -0
  97. package/dist/ui/secret-reveal/animated.mjs.map +1 -0
  98. package/dist/ui/secret-reveal/index.d.ts +4 -0
  99. package/dist/ui/secret-reveal/index.d.ts.map +1 -0
  100. package/dist/ui/secret-reveal/secret-reveal-base.d.ts +6 -0
  101. package/dist/ui/secret-reveal/secret-reveal-base.d.ts.map +1 -0
  102. package/dist/ui/secret-reveal/secret-reveal.d.ts +2 -0
  103. package/dist/ui/secret-reveal/secret-reveal.d.ts.map +1 -0
  104. package/dist/ui/secret-reveal/types.d.ts +15 -0
  105. package/dist/ui/secret-reveal/types.d.ts.map +1 -0
  106. package/dist/ui/secret-reveal/variants.d.ts +15 -0
  107. package/dist/ui/secret-reveal/variants.d.ts.map +1 -0
  108. package/dist/ui/secret-reveal.js +136 -0
  109. package/dist/ui/secret-reveal.js.map +1 -0
  110. package/dist/ui/secret-reveal.mjs +119 -0
  111. package/dist/ui/secret-reveal.mjs.map +1 -0
  112. package/dist/ui/split-button.js +22 -20
  113. package/dist/ui/split-button.js.map +1 -1
  114. package/dist/ui/split-button.mjs +9 -7
  115. package/dist/ui/split-button.mjs.map +1 -1
  116. package/package.json +1 -1
  117. package/src/design-system/hash-generator.ts +34 -0
  118. package/src/design-system/index.ts +2 -0
  119. package/src/design-system/secret-reveal.ts +75 -0
  120. package/src/hooks/index.ts +6 -0
  121. package/src/hooks/useHash/index.ts +6 -0
  122. package/src/hooks/useHash/useHash.test.ts +77 -0
  123. package/src/hooks/useHash/useHash.ts +89 -0
  124. package/src/ui/hash-generator/hash-generator-base.tsx +106 -0
  125. package/src/ui/hash-generator/hash-generator.test.tsx +73 -0
  126. package/src/ui/hash-generator/hash-generator.tsx +1 -0
  127. package/src/ui/hash-generator/index.ts +18 -0
  128. package/src/ui/hash-generator/types.ts +29 -0
  129. package/src/ui/hash-generator/variants.ts +31 -0
  130. package/src/ui/secret-reveal/animated/animations.ts +74 -0
  131. package/src/ui/secret-reveal/animated/index.ts +5 -0
  132. package/src/ui/secret-reveal/animated/secret-reveal-animated.tsx +132 -0
  133. package/src/ui/secret-reveal/animated/types.ts +11 -0
  134. package/src/ui/secret-reveal/index.ts +14 -0
  135. package/src/ui/secret-reveal/secret-reveal-base.tsx +116 -0
  136. package/src/ui/secret-reveal/secret-reveal.test.tsx +75 -0
  137. package/src/ui/secret-reveal/secret-reveal.tsx +2 -0
  138. package/src/ui/secret-reveal/types.ts +21 -0
  139. package/src/ui/secret-reveal/variants.ts +49 -0
  140. package/dist/chunk-5HLEHSPM.mjs.map +0 -1
  141. package/dist/chunk-UJZ7JQBQ.js.map +0 -1
  142. package/dist/chunk-YBKNXDZU.js +0 -19
package/README.md CHANGED
@@ -15,8 +15,8 @@ Published artifacts live under `dist/`. Imports use **per-entry subpaths**: `@ze
15
15
 
16
16
  | Surface | Count | Import shape |
17
17
  | ------------------- | ----: | ----------------------------------------------------- |
18
- | Static UI entries | 43 | `@zentauri-ui/zentauri-components/ui/<name>` |
19
- | Animated UI entries | 27 | `@zentauri-ui/zentauri-components/ui/<name>/animated` |
18
+ | Static UI entries | 44 | `@zentauri-ui/zentauri-components/ui/<name>` |
19
+ | Animated UI entries | 28 | `@zentauri-ui/zentauri-components/ui/<name>/animated` |
20
20
  | Animation entries | 41 | `@zentauri-ui/zentauri-components/animations/<name>` |
21
21
  | Chart entries | 9 | `@zentauri-ui/zentauri-components/charts/<type>` |
22
22
  | Hook entries | 28 | `@zentauri-ui/zentauri-components/hooks/<entry>` |
@@ -29,14 +29,14 @@ Generated from the component package Vitest JSON report via `pnpm --filter @zent
29
29
 
30
30
  | Metric | Result |
31
31
  | ---------- | ---------------- |
32
- | Test files | 101 passed (101) |
33
- | Tests | 848 passed (848) |
32
+ | Test files | 104 passed (104) |
33
+ | Tests | 873 passed (873) |
34
34
 
35
35
  | Area | Test files | Tests |
36
36
  | ------------------------------ | ---------- | ----- |
37
- | Components and UI utilities | 52 | 543 |
37
+ | Components and UI utilities | 54 | 562 |
38
38
  | Standalone animations | 1 | 45 |
39
- | React hooks | 41 | 174 |
39
+ | React hooks | 42 | 180 |
40
40
  | Design system facade | 1 | 11 |
41
41
  | CLI and import rewriting | 4 | 33 |
42
42
  | Accessibility (axe + keyboard) | 2 | 42 |
@@ -49,7 +49,7 @@ Generated from the component package Vitest JSON report via `pnpm --filter @zent
49
49
  | `src/ui/buttons/button.test.tsx` | 44 |
50
50
  | `src/ui/inputs/input.test.tsx` | 40 |
51
51
  | `src/ui/audio-player/audio-player.test.tsx` | 34 |
52
- | `src/ui/peer-isolation.test.ts` | 31 |
52
+ | `src/ui/peer-isolation.test.ts` | 32 |
53
53
  | `src/accessibility/axe-core.test.tsx` | 24 |
54
54
  | `src/ui/combobox/combobox.test.tsx` | 24 |
55
55
  | `cli/cli.integration.test.ts` | 21 |
@@ -73,6 +73,8 @@ Generated from the component package Vitest JSON report via `pnpm --filter @zent
73
73
  | `src/hooks/useLongPress/useLongPress.test.ts` | 9 |
74
74
  | `src/hooks/useTableFilter/useTableFilter.test.ts` | 9 |
75
75
  | `src/ui/animated-number/animated-number.test.tsx` | 9 |
76
+ | `src/ui/hash-generator/hash-generator.test.tsx` | 9 |
77
+ | `src/ui/secret-reveal/secret-reveal.test.tsx` | 9 |
76
78
  | `src/ui/skeleton/skeleton.test.tsx` | 9 |
77
79
  | `src/ui/slider/slider.test.tsx` | 9 |
78
80
  | `src/ui/typing-indicator/typing-indicator.test.tsx` | 9 |
@@ -96,6 +98,7 @@ Generated from the component package Vitest JSON report via `pnpm --filter @zent
96
98
  | `src/hooks/useClipboard/useClipboard.test.ts` | 6 |
97
99
  | `src/hooks/useCountdown/useCountdown.test.ts` | 6 |
98
100
  | `src/hooks/useGeolocation/useGeolocation.test.ts` | 6 |
101
+ | `src/hooks/useHash/useHash.test.ts` | 6 |
99
102
  | `src/hooks/useIdleTimeout/useIdleTimeout.test.ts` | 6 |
100
103
  | `src/hooks/useKeyPress/useKeyPress.test.ts` | 6 |
101
104
  | `src/hooks/useLocalStorage/useLocalStorage.test.ts` | 6 |
@@ -857,7 +860,7 @@ From this package directory in the monorepo:
857
860
 
858
861
  - `pnpm build` (or `npm run build`) — production bundle via `tsup` (Rollup treeshake + `scripts/prepend-use-client.mjs` via `onSuccess` so each UI entry under `dist/ui/`, animation entry under `dist/animations/`, chart entry under `dist/charts/`, and `dist/ui/<name>/animated.*` starts with `"use client"` where needed)
859
862
  - `pnpm dev` — `tsup` watch mode (same `onSuccess` hook after each rebuild)
860
- - `pnpm test` / `pnpm test:watch` — **Vitest** and **Testing Library** unit tests // currently covered 848 test cases in total
863
+ - `pnpm test` / `pnpm test:watch` — **Vitest** and **Testing Library** unit tests // currently covered 873 test cases in total
861
864
  - `pnpm test:a11y` — focused accessibility coverage for package-level UI primitives and compound components: **axe-core** audits for every interactive component plus **keyboard-interaction** tests (focus order, arrow-key nav, Home/End, Escape/Enter) for the compound components
862
865
  - `pnpm check:tokens` — enforce the `--zui-*` token contract across design-system, variant, and local custom-property usage without generating a large checked-in token catalog
863
866
  - **`pnpm run generate:registry`** — runs `scripts/generate-registry.mjs`, which reads **`uiComponentNames`**, **`uiAnimatedComponentNames`**, **`animationEntryNames`**, **`chartEntryNames`**, and **`hooksEntryNames`** from `tsup.config.ts`, applies fixed **`nameAliases`**, scans each component/chart source to build **`peerHints`**, and writes **`cli/registry.json`** (`components` + `animations` + `hooks` + `peerHints`). Run this after adding or renaming UI, animation, chart, or hook entries so the CLI stays in sync (the script prints counts).
package/cli/props.json CHANGED
@@ -7257,6 +7257,146 @@
7257
7257
  }
7258
7258
  ]
7259
7259
  },
7260
+ "hash-generator": {
7261
+ "slug": "hash-generator",
7262
+ "subcomponents": [
7263
+ {
7264
+ "name": "static:HashGenerator",
7265
+ "displayName": "HashGenerator",
7266
+ "propsType": "HashGeneratorProps",
7267
+ "source": "static",
7268
+ "props": [
7269
+ {
7270
+ "name": "appearance",
7271
+ "type": "enum",
7272
+ "required": false,
7273
+ "default": "default",
7274
+ "group": "variant",
7275
+ "isVariant": true,
7276
+ "options": [
7277
+ "default"
7278
+ ],
7279
+ "variantGroup": "appearance",
7280
+ "deprecated": false
7281
+ },
7282
+ {
7283
+ "name": "size",
7284
+ "type": "enum",
7285
+ "required": false,
7286
+ "default": "md",
7287
+ "group": "variant",
7288
+ "isVariant": true,
7289
+ "options": [
7290
+ "lg",
7291
+ "md",
7292
+ "sm"
7293
+ ],
7294
+ "variantGroup": "size",
7295
+ "deprecated": false
7296
+ },
7297
+ {
7298
+ "name": "onValueChange",
7299
+ "type": "((value: string) => void) | undefined",
7300
+ "required": false,
7301
+ "group": "controlled",
7302
+ "deprecated": false
7303
+ },
7304
+ {
7305
+ "name": "value",
7306
+ "type": "string | undefined",
7307
+ "required": false,
7308
+ "group": "controlled",
7309
+ "deprecated": false
7310
+ },
7311
+ {
7312
+ "name": "algorithm",
7313
+ "type": "HashGeneratorAlgorithm | undefined",
7314
+ "required": false,
7315
+ "group": "behavior",
7316
+ "deprecated": false
7317
+ },
7318
+ {
7319
+ "name": "readOnly",
7320
+ "type": "boolean | undefined",
7321
+ "required": false,
7322
+ "group": "behavior",
7323
+ "deprecated": false
7324
+ },
7325
+ {
7326
+ "name": "showCopyButton",
7327
+ "type": "boolean | undefined",
7328
+ "required": false,
7329
+ "group": "behavior",
7330
+ "deprecated": false
7331
+ },
7332
+ {
7333
+ "name": "children",
7334
+ "type": "ReactNode",
7335
+ "required": false,
7336
+ "group": "dom",
7337
+ "deprecated": false
7338
+ },
7339
+ {
7340
+ "name": "className",
7341
+ "type": "string | undefined",
7342
+ "required": false,
7343
+ "group": "dom",
7344
+ "deprecated": false
7345
+ },
7346
+ {
7347
+ "name": "id",
7348
+ "type": "string | undefined",
7349
+ "required": false,
7350
+ "group": "dom",
7351
+ "deprecated": false
7352
+ },
7353
+ {
7354
+ "name": "onClick",
7355
+ "type": "MouseEventHandler<HTMLDivElement> | undefined",
7356
+ "required": false,
7357
+ "group": "dom",
7358
+ "deprecated": false
7359
+ },
7360
+ {
7361
+ "name": "style",
7362
+ "type": "CSSProperties | undefined",
7363
+ "required": false,
7364
+ "group": "dom",
7365
+ "deprecated": false
7366
+ },
7367
+ {
7368
+ "name": "title",
7369
+ "type": "string | undefined",
7370
+ "required": false,
7371
+ "group": "dom",
7372
+ "deprecated": false
7373
+ }
7374
+ ]
7375
+ },
7376
+ {
7377
+ "name": "static:HashGeneratorVariant",
7378
+ "displayName": "HashGeneratorVariant",
7379
+ "propsType": "HashGeneratorVariantProps",
7380
+ "source": "static",
7381
+ "props": [
7382
+ {
7383
+ "name": "appearance",
7384
+ "type": "'default' | null | undefined",
7385
+ "required": false,
7386
+ "group": "behavior",
7387
+ "deprecated": false
7388
+ },
7389
+ {
7390
+ "name": "size",
7391
+ "type": "'md' | 'sm' | 'lg' | null | undefined",
7392
+ "required": false,
7393
+ "group": "behavior",
7394
+ "deprecated": false
7395
+ }
7396
+ ]
7397
+ }
7398
+ ]
7399
+ },
7260
7400
  "inputs": {
7261
7401
  "slug": "inputs",
7262
7402
  "subcomponents": [
@@ -11244,6 +11384,303 @@
11244
11384
  }
11245
11385
  ]
11246
11386
  },
11387
+ "secret-reveal": {
11388
+ "slug": "secret-reveal",
11389
+ "subcomponents": [
11390
+ {
11391
+ "name": "static:SecretReveal",
11392
+ "displayName": "SecretReveal",
11393
+ "propsType": "SecretRevealProps",
11394
+ "source": "static",
11395
+ "props": [
11396
+ {
11397
+ "name": "appearance",
11398
+ "type": "enum",
11399
+ "required": false,
11400
+ "default": "default",
11401
+ "group": "variant",
11402
+ "isVariant": true,
11403
+ "options": [
11404
+ "blue",
11405
+ "cyan",
11406
+ "default",
11407
+ "emerald",
11408
+ "gradient-blue",
11409
+ "gradient-green",
11410
+ "gradient-indigo",
11411
+ "gradient-orange",
11412
+ "gradient-pink",
11413
+ "gradient-purple",
11414
+ "gradient-red",
11415
+ "gradient-teal",
11416
+ "gradient-yellow",
11417
+ "gray",
11418
+ "green",
11419
+ "indigo",
11420
+ "lime",
11421
+ "muted",
11422
+ "orange",
11423
+ "pink",
11424
+ "primary",
11425
+ "purple",
11426
+ "red",
11427
+ "rose",
11428
+ "sky",
11429
+ "slate",
11430
+ "subtle",
11431
+ "teal",
11432
+ "yellow",
11433
+ "zinc"
11434
+ ],
11435
+ "variantGroup": "appearance",
11436
+ "deprecated": false
11437
+ },
11438
+ {
11439
+ "name": "size",
11440
+ "type": "enum",
11441
+ "required": false,
11442
+ "default": "md",
11443
+ "group": "variant",
11444
+ "isVariant": true,
11445
+ "options": [
11446
+ "lg",
11447
+ "md",
11448
+ "sm"
11449
+ ],
11450
+ "variantGroup": "size",
11451
+ "deprecated": false
11452
+ },
11453
+ {
11454
+ "name": "value",
11455
+ "type": "string | undefined",
11456
+ "required": false,
11457
+ "group": "controlled",
11458
+ "deprecated": false
11459
+ },
11460
+ {
11461
+ "name": "initiallyRevealed",
11462
+ "type": "boolean | undefined",
11463
+ "required": false,
11464
+ "group": "behavior",
11465
+ "deprecated": false
11466
+ },
11467
+ {
11468
+ "name": "label",
11469
+ "type": "ReactNode",
11470
+ "required": false,
11471
+ "group": "behavior",
11472
+ "deprecated": false
11473
+ },
11474
+ {
11475
+ "name": "labelPosition",
11476
+ "type": "'top' | 'side' | undefined",
11477
+ "required": false,
11478
+ "group": "behavior",
11479
+ "deprecated": false
11480
+ },
11481
+ {
11482
+ "name": "muteChar",
11483
+ "type": "string | undefined",
11484
+ "required": false,
11485
+ "group": "behavior",
11486
+ "deprecated": false
11487
+ },
11488
+ {
11489
+ "name": "onVisibilityChange",
11490
+ "type": "((revealed: boolean) => void) | undefined",
11491
+ "required": false,
11492
+ "group": "behavior",
11493
+ "deprecated": false
11494
+ },
11495
+ {
11496
+ "name": "children",
11497
+ "type": "ReactNode",
11498
+ "required": false,
11499
+ "group": "content",
11500
+ "deprecated": false
11501
+ },
11502
+ {
11503
+ "name": "className",
11504
+ "type": "string | undefined",
11505
+ "required": false,
11506
+ "group": "dom",
11507
+ "deprecated": false
11508
+ },
11509
+ {
11510
+ "name": "id",
11511
+ "type": "string | undefined",
11512
+ "required": false,
11513
+ "group": "dom",
11514
+ "deprecated": false
11515
+ },
11516
+ {
11517
+ "name": "onClick",
11518
+ "type": "MouseEventHandler<HTMLDivElement> | undefined",
11519
+ "required": false,
11520
+ "group": "dom",
11521
+ "deprecated": false
11522
+ },
11523
+ {
11524
+ "name": "style",
11525
+ "type": "CSSProperties | undefined",
11526
+ "required": false,
11527
+ "group": "dom",
11528
+ "deprecated": false
11529
+ },
11530
+ {
11531
+ "name": "title",
11532
+ "type": "string | undefined",
11533
+ "required": false,
11534
+ "group": "dom",
11535
+ "deprecated": false
11536
+ }
11537
+ ]
11538
+ },
11539
+ {
11540
+ "name": "static:SecretRevealVariant",
11541
+ "displayName": "SecretRevealVariant",
11542
+ "propsType": "SecretRevealVariantProps",
11543
+ "source": "static",
11544
+ "props": [
11545
+ {
11546
+ "name": "appearance",
11547
+ "type": "'default' | 'blue' | 'cyan' | 'green' | 'lime' | 'red' | 'slate' | 'zinc' | 'sky' | 'rose' | 'purple' | 'pink' | 'orange' | 'yellow' | 'teal' | 'indigo' | 'emerald' | 'gradient-blue' | 'gradient-green' | 'gradient-red' | 'gradient-yellow' | 'gradient-purple' | 'gradient-teal' | 'gradient-indigo' | 'gradient-pink' | 'gradient-orange' | 'gray' | 'muted' | 'subtle' | 'primary' | null | undefined",
11548
+ "required": false,
11549
+ "group": "behavior",
11550
+ "deprecated": false
11551
+ },
11552
+ {
11553
+ "name": "size",
11554
+ "type": "'md' | 'sm' | 'lg' | null | undefined",
11555
+ "required": false,
11556
+ "group": "behavior",
11557
+ "deprecated": false
11558
+ }
11559
+ ]
11560
+ },
11561
+ {
11562
+ "name": "animated:SecretRevealAnimated",
11563
+ "displayName": "SecretRevealAnimated",
11564
+ "propsType": "SecretRevealAnimatedProps",
11565
+ "source": "animated",
11566
+ "props": [
11567
+ {
11568
+ "name": "value",
11569
+ "type": "string | undefined",
11570
+ "required": false,
11571
+ "group": "controlled",
11572
+ "deprecated": false
11573
+ },
11574
+ {
11575
+ "name": "animation",
11576
+ "type": "SecretRevealAnimation | undefined",
11577
+ "required": false,
11578
+ "group": "behavior",
11579
+ "deprecated": false
11580
+ },
11581
+ {
11582
+ "name": "appearance",
11583
+ "type": "'default' | 'blue' | 'cyan' | 'green' | 'lime' | 'red' | 'slate' | 'zinc' | 'sky' | 'rose' | 'purple' | 'pink' | 'orange' | 'yellow' | 'teal' | 'indigo' | 'emerald' | 'gradient-blue' | 'gradient-green' | 'gradient-red' | 'gradient-yellow' | 'gradient-purple' | 'gradient-teal' | 'gradient-indigo' | 'gradient-pink' | 'gradient-orange' | 'gray' | 'muted' | 'subtle' | 'primary' | null | undefined",
11584
+ "required": false,
11585
+ "group": "behavior",
11586
+ "deprecated": false
11587
+ },
11588
+ {
11589
+ "name": "initiallyRevealed",
11590
+ "type": "boolean | undefined",
11591
+ "required": false,
11592
+ "group": "behavior",
11593
+ "deprecated": false
11594
+ },
11595
+ {
11596
+ "name": "label",
11597
+ "type": "ReactNode",
11598
+ "required": false,
11599
+ "group": "behavior",
11600
+ "deprecated": false
11601
+ },
11602
+ {
11603
+ "name": "labelPosition",
11604
+ "type": "'top' | 'side' | undefined",
11605
+ "required": false,
11606
+ "group": "behavior",
11607
+ "deprecated": false
11608
+ },
11609
+ {
11610
+ "name": "muteChar",
11611
+ "type": "string | undefined",
11612
+ "required": false,
11613
+ "group": "behavior",
11614
+ "deprecated": false
11615
+ },
11616
+ {
11617
+ "name": "onVisibilityChange",
11618
+ "type": "((revealed: boolean) => void) | undefined",
11619
+ "required": false,
11620
+ "group": "behavior",
11621
+ "deprecated": false
11622
+ },
11623
+ {
11624
+ "name": "ref",
11625
+ "type": "Ref<HTMLDivElement> | undefined",
11626
+ "required": false,
11627
+ "group": "behavior",
11628
+ "description": "Allows getting a ref to the component instance.\nOnce the component unmounts, React will set `ref.current` to `null`\n(or call the ref with `null` if you passed a callback ref).",
11629
+ "deprecated": false
11630
+ },
11631
+ {
11632
+ "name": "size",
11633
+ "type": "'md' | 'sm' | 'lg' | null | undefined",
11634
+ "required": false,
11635
+ "group": "behavior",
11636
+ "deprecated": false
11637
+ },
11638
+ {
11639
+ "name": "children",
11640
+ "type": "ReactNode",
11641
+ "required": false,
11642
+ "group": "content",
11643
+ "deprecated": false
11644
+ },
11645
+ {
11646
+ "name": "className",
11647
+ "type": "string | undefined",
11648
+ "required": false,
11649
+ "group": "dom",
11650
+ "deprecated": false
11651
+ },
11652
+ {
11653
+ "name": "id",
11654
+ "type": "string | undefined",
11655
+ "required": false,
11656
+ "group": "dom",
11657
+ "deprecated": false
11658
+ },
11659
+ {
11660
+ "name": "onClick",
11661
+ "type": "MouseEventHandler<HTMLDivElement> | undefined",
11662
+ "required": false,
11663
+ "group": "dom",
11664
+ "deprecated": false
11665
+ },
11666
+ {
11667
+ "name": "style",
11668
+ "type": "CSSProperties | undefined",
11669
+ "required": false,
11670
+ "group": "dom",
11671
+ "deprecated": false
11672
+ },
11673
+ {
11674
+ "name": "title",
11675
+ "type": "string | undefined",
11676
+ "required": false,
11677
+ "group": "dom",
11678
+ "deprecated": false
11679
+ }
11680
+ ]
11681
+ }
11682
+ ]
11683
+ },
11247
11684
  "select": {
11248
11685
  "slug": "select",
11249
11686
  "subcomponents": [
package/cli/registry.json CHANGED
@@ -24,6 +24,7 @@
24
24
  "dynamic-stepper",
25
25
  "empty-state",
26
26
  "file-upload",
27
+ "hash-generator",
27
28
  "inputs",
28
29
  "kbd",
29
30
  "marquee",
@@ -37,6 +38,7 @@
37
38
  "rating",
38
39
  "scroll-area",
39
40
  "search",
41
+ "secret-reveal",
40
42
  "select",
41
43
  "skeleton",
42
44
  "slider",
@@ -71,6 +73,7 @@
71
73
  "popover",
72
74
  "progress",
73
75
  "radio-group",
76
+ "secret-reveal",
74
77
  "skeleton",
75
78
  "spinner",
76
79
  "table",
@@ -166,6 +169,7 @@
166
169
  "dynamic-stepper",
167
170
  "empty-state",
168
171
  "file-upload",
172
+ "hash-generator",
169
173
  "inputs",
170
174
  "kbd",
171
175
  "marquee",
@@ -179,6 +183,7 @@
179
183
  "rating",
180
184
  "scroll-area",
181
185
  "search",
186
+ "secret-reveal",
182
187
  "select",
183
188
  "skeleton",
184
189
  "slider",
@@ -251,6 +256,7 @@
251
256
  "useEventListener",
252
257
  "useFocusManagement",
253
258
  "useGeolocation",
259
+ "useHash",
254
260
  "useHotkeys",
255
261
  "useHover",
256
262
  "useIdleTimeout",
@@ -375,6 +381,9 @@
375
381
  "rating": [
376
382
  "react-icons"
377
383
  ],
384
+ "secret-reveal": [
385
+ "framer-motion"
386
+ ],
378
387
  "skeleton": [
379
388
  "framer-motion"
380
389
  ],
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkYBKNXDZU_js = require('./chunk-YBKNXDZU.js');
3
+ var chunkENKXB2BA_js = require('./chunk-ENKXB2BA.js');
4
4
  var chunkZS5756ZC_js = require('./chunk-ZS5756ZC.js');
5
5
  var react = require('react');
6
6
  var jsxRuntime = require('react/jsx-runtime');
@@ -40,7 +40,7 @@ var ButtonBase = (props) => {
40
40
  "data-slot": "button",
41
41
  onClick: handleClick,
42
42
  className: chunkZS5756ZC_js.cn(
43
- chunkYBKNXDZU_js.buttonVariants({ appearance: appearance2, size: size2 }),
43
+ chunkENKXB2BA_js.buttonVariants({ appearance: appearance2, size: size2 }),
44
44
  children2.props.className,
45
45
  className2
46
46
  )
@@ -65,7 +65,7 @@ var ButtonBase = (props) => {
65
65
  target,
66
66
  rel: target === "_blank" ? "noopener noreferrer" : void 0,
67
67
  "data-slot": "button",
68
- className: chunkZS5756ZC_js.cn(chunkYBKNXDZU_js.buttonVariants({ appearance: appearance2, size: size2 }), className2),
68
+ className: chunkZS5756ZC_js.cn(chunkENKXB2BA_js.buttonVariants({ appearance: appearance2, size: size2 }), className2),
69
69
  ...rest2,
70
70
  children: children2
71
71
  }
@@ -86,7 +86,7 @@ var ButtonBase = (props) => {
86
86
  ref,
87
87
  type,
88
88
  "data-slot": "button",
89
- className: chunkZS5756ZC_js.cn(chunkYBKNXDZU_js.buttonVariants({ appearance, size }), className),
89
+ className: chunkZS5756ZC_js.cn(chunkENKXB2BA_js.buttonVariants({ appearance, size }), className),
90
90
  ...rest,
91
91
  children
92
92
  }
@@ -99,5 +99,5 @@ var Button = (props) => {
99
99
  Button.displayName = "Button";
100
100
 
101
101
  exports.Button = Button;
102
- //# sourceMappingURL=chunk-NW5BSLR2.js.map
103
- //# sourceMappingURL=chunk-NW5BSLR2.js.map
102
+ //# sourceMappingURL=chunk-AARJLZXP.js.map
103
+ //# sourceMappingURL=chunk-AARJLZXP.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/buttons/button-base.tsx","../src/ui/buttons/button.tsx"],"names":["className","appearance","size","children","rest","isValidElement","cloneElement","cn","buttonVariants","ref","jsx"],"mappings":"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","file":"chunk-NW5BSLR2.js","sourcesContent":["\"use client\";\n\nimport { cloneElement, isValidElement, type MouseEventHandler } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport type { ButtonProps } from \"./types\";\nimport { buttonVariants } from \"./variants\";\n\nexport const ButtonBase = (props: ButtonProps) => {\n if (\"asChild\" in props && props.asChild) {\n const {\n className,\n appearance,\n size,\n children,\n asChild: _asChild,\n disabled,\n onClick,\n ...rest\n } = props;\n\n if (!isValidElement<{ className?: string }>(children)) {\n return null;\n }\n\n const isNativeButton = children.type === \"button\";\n const childOnClick = children.props.onClick as\n | MouseEventHandler<HTMLElement>\n | undefined;\n const handleClick: MouseEventHandler<HTMLElement> = (event) => {\n if (disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n onClick?.(event);\n if (!event.defaultPrevented) {\n childOnClick?.(event);\n }\n };\n\n return cloneElement(children, {\n ...rest,\n ...children.props,\n ...(disabled\n ? isNativeButton\n ? { disabled: true }\n : { \"aria-disabled\": true, tabIndex: -1 }\n : null),\n \"data-slot\": \"button\",\n onClick: handleClick,\n className: cn(\n buttonVariants({ appearance, size }),\n children.props.className,\n className,\n ),\n });\n }\n\n if (props.as === \"link\") {\n const {\n className,\n appearance,\n size,\n children,\n ref,\n href,\n target,\n ...rest\n } = props;\n\n return (\n <a\n ref={ref}\n href={href}\n target={target}\n rel={target === \"_blank\" ? \"noopener noreferrer\" : undefined}\n data-slot=\"button\"\n className={cn(buttonVariants({ appearance, size }), className)}\n {...rest}\n >\n {children}\n </a>\n );\n }\n\n const {\n className,\n appearance,\n size,\n type = \"button\",\n children,\n ref,\n ...rest\n } = props;\n\n return (\n <button\n ref={ref}\n type={type}\n data-slot=\"button\"\n className={cn(buttonVariants({ appearance, size }), className)}\n {...rest}\n >\n {children}\n </button>\n );\n};\n\nButtonBase.displayName = \"Button\";\n","// button.tsx — default static entry (no framer-motion)\nimport { ButtonBase } from \"./button-base\";\nimport type { ButtonProps } from \"./types\";\n\nexport const Button = (props: ButtonProps) => {\n return <ButtonBase {...props} />;\n};\n\nButton.displayName = \"Button\";\n"]}
1
+ {"version":3,"sources":["../src/ui/buttons/button-base.tsx","../src/ui/buttons/button.tsx"],"names":["className","appearance","size","children","rest","isValidElement","cloneElement","cn","buttonVariants","ref","jsx"],"mappings":"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","file":"chunk-AARJLZXP.js","sourcesContent":["\"use client\";\n\nimport { cloneElement, isValidElement, type MouseEventHandler } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport type { ButtonProps } from \"./types\";\nimport { buttonVariants } from \"./variants\";\n\nexport const ButtonBase = (props: ButtonProps) => {\n if (\"asChild\" in props && props.asChild) {\n const {\n className,\n appearance,\n size,\n children,\n asChild: _asChild,\n disabled,\n onClick,\n ...rest\n } = props;\n\n if (!isValidElement<{ className?: string }>(children)) {\n return null;\n }\n\n const isNativeButton = children.type === \"button\";\n const childOnClick = children.props.onClick as\n | MouseEventHandler<HTMLElement>\n | undefined;\n const handleClick: MouseEventHandler<HTMLElement> = (event) => {\n if (disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n onClick?.(event);\n if (!event.defaultPrevented) {\n childOnClick?.(event);\n }\n };\n\n return cloneElement(children, {\n ...rest,\n ...children.props,\n ...(disabled\n ? isNativeButton\n ? { disabled: true }\n : { \"aria-disabled\": true, tabIndex: -1 }\n : null),\n \"data-slot\": \"button\",\n onClick: handleClick,\n className: cn(\n buttonVariants({ appearance, size }),\n children.props.className,\n className,\n ),\n });\n }\n\n if (props.as === \"link\") {\n const {\n className,\n appearance,\n size,\n children,\n ref,\n href,\n target,\n ...rest\n } = props;\n\n return (\n <a\n ref={ref}\n href={href}\n target={target}\n rel={target === \"_blank\" ? \"noopener noreferrer\" : undefined}\n data-slot=\"button\"\n className={cn(buttonVariants({ appearance, size }), className)}\n {...rest}\n >\n {children}\n </a>\n );\n }\n\n const {\n className,\n appearance,\n size,\n type = \"button\",\n children,\n ref,\n ...rest\n } = props;\n\n return (\n <button\n ref={ref}\n type={type}\n data-slot=\"button\"\n className={cn(buttonVariants({ appearance, size }), className)}\n {...rest}\n >\n {children}\n </button>\n );\n};\n\nButtonBase.displayName = \"Button\";\n","// button.tsx — default static entry (no framer-motion)\nimport { ButtonBase } from \"./button-base\";\nimport type { ButtonProps } from \"./types\";\n\nexport const Button = (props: ButtonProps) => {\n return <ButtonBase {...props} />;\n};\n\nButton.displayName = \"Button\";\n"]}