se-design 1.0.75 → 1.0.76-dev1

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 (483) hide show
  1. package/dist/assets/style.css +1 -1
  2. package/dist/components/AccessibleDiv/index.d.ts +24 -0
  3. package/dist/components/Checkbox/index.d.ts +12 -0
  4. package/dist/components/CustomAccordion/index.d.ts +1 -0
  5. package/dist/components/CustomModal/index.d.ts +15 -12
  6. package/dist/components/DatePicker/useDatePickerA11y.d.ts +50 -0
  7. package/dist/components/Dropdown/index.d.ts +13 -0
  8. package/dist/components/Icon/index.d.ts +8 -2
  9. package/dist/components/InputWithIcon/index.d.ts +9 -1
  10. package/dist/components/LabelChip/index.d.ts +1 -0
  11. package/dist/components/Modal/index.d.ts +1 -0
  12. package/dist/components/PhoneInput/index.d.ts +13 -5
  13. package/dist/components/Popover/index.d.ts +2 -0
  14. package/dist/components/SidebarOverlay/index.d.ts +8 -0
  15. package/dist/components/index.d.ts +1 -0
  16. package/dist/index.js +144 -133
  17. package/dist/index.js.map +1 -1
  18. package/dist/index10.js +23 -59
  19. package/dist/index10.js.map +1 -1
  20. package/dist/index100.js +1 -1
  21. package/dist/index100.js.map +1 -1
  22. package/dist/index101.js +1 -1
  23. package/dist/index101.js.map +1 -1
  24. package/dist/index102.js +2 -2
  25. package/dist/index102.js.map +1 -1
  26. package/dist/index103.js +2 -2
  27. package/dist/index103.js.map +1 -1
  28. package/dist/index104.js +1 -1
  29. package/dist/index104.js.map +1 -1
  30. package/dist/index105.js +1 -1
  31. package/dist/index105.js.map +1 -1
  32. package/dist/index106.js +1 -1
  33. package/dist/index106.js.map +1 -1
  34. package/dist/index107.js +2 -2
  35. package/dist/index107.js.map +1 -1
  36. package/dist/index108.js +2 -2
  37. package/dist/index108.js.map +1 -1
  38. package/dist/index109.js +2 -2
  39. package/dist/index109.js.map +1 -1
  40. package/dist/index11.js +70 -63
  41. package/dist/index11.js.map +1 -1
  42. package/dist/index110.js +2 -2
  43. package/dist/index110.js.map +1 -1
  44. package/dist/index111.js +1 -1
  45. package/dist/index111.js.map +1 -1
  46. package/dist/index112.js +1 -1
  47. package/dist/index112.js.map +1 -1
  48. package/dist/index113.js +2 -2
  49. package/dist/index113.js.map +1 -1
  50. package/dist/index114.js +2 -2
  51. package/dist/index114.js.map +1 -1
  52. package/dist/index115.js +1 -1
  53. package/dist/index115.js.map +1 -1
  54. package/dist/index116.js +1 -1
  55. package/dist/index116.js.map +1 -1
  56. package/dist/index117.js +1 -1
  57. package/dist/index117.js.map +1 -1
  58. package/dist/index118.js +2 -2
  59. package/dist/index118.js.map +1 -1
  60. package/dist/index119.js +1 -1
  61. package/dist/index119.js.map +1 -1
  62. package/dist/index12.js +71 -34
  63. package/dist/index12.js.map +1 -1
  64. package/dist/index120.js +2 -2
  65. package/dist/index120.js.map +1 -1
  66. package/dist/index121.js +2 -2
  67. package/dist/index121.js.map +1 -1
  68. package/dist/index122.js +2 -2
  69. package/dist/index122.js.map +1 -1
  70. package/dist/index123.js +2 -2
  71. package/dist/index123.js.map +1 -1
  72. package/dist/index124.js +2 -2
  73. package/dist/index124.js.map +1 -1
  74. package/dist/index125.js +2 -2
  75. package/dist/index125.js.map +1 -1
  76. package/dist/index126.js +1 -1
  77. package/dist/index126.js.map +1 -1
  78. package/dist/index127.js +1 -1
  79. package/dist/index127.js.map +1 -1
  80. package/dist/index128.js +1 -1
  81. package/dist/index128.js.map +1 -1
  82. package/dist/index129.js +1 -1
  83. package/dist/index129.js.map +1 -1
  84. package/dist/index13.js +50 -14
  85. package/dist/index13.js.map +1 -1
  86. package/dist/index130.js +2 -2
  87. package/dist/index130.js.map +1 -1
  88. package/dist/index131.js +2 -2
  89. package/dist/index131.js.map +1 -1
  90. package/dist/index132.js +1 -1
  91. package/dist/index132.js.map +1 -1
  92. package/dist/index133.js +1 -1
  93. package/dist/index133.js.map +1 -1
  94. package/dist/index134.js +2 -2
  95. package/dist/index134.js.map +1 -1
  96. package/dist/index135.js +1 -1
  97. package/dist/index135.js.map +1 -1
  98. package/dist/index136.js +1 -1
  99. package/dist/index136.js.map +1 -1
  100. package/dist/index137.js +1 -1
  101. package/dist/index137.js.map +1 -1
  102. package/dist/index138.js +1 -1
  103. package/dist/index138.js.map +1 -1
  104. package/dist/index139.js +1 -1
  105. package/dist/index139.js.map +1 -1
  106. package/dist/index14.js +15 -9
  107. package/dist/index14.js.map +1 -1
  108. package/dist/index140.js +1 -1
  109. package/dist/index140.js.map +1 -1
  110. package/dist/index141.js +2 -2
  111. package/dist/index141.js.map +1 -1
  112. package/dist/index142.js +1 -1
  113. package/dist/index142.js.map +1 -1
  114. package/dist/index143.js +2 -2
  115. package/dist/index143.js.map +1 -1
  116. package/dist/index144.js +2 -2
  117. package/dist/index144.js.map +1 -1
  118. package/dist/index145.js +1 -1
  119. package/dist/index145.js.map +1 -1
  120. package/dist/index146.js +2 -2
  121. package/dist/index146.js.map +1 -1
  122. package/dist/index147.js +2 -2
  123. package/dist/index147.js.map +1 -1
  124. package/dist/index148.js +1 -1
  125. package/dist/index148.js.map +1 -1
  126. package/dist/index149.js +1 -1
  127. package/dist/index149.js.map +1 -1
  128. package/dist/index15.js +10 -218
  129. package/dist/index15.js.map +1 -1
  130. package/dist/index150.js +2 -2
  131. package/dist/index150.js.map +1 -1
  132. package/dist/index151.js +2 -2
  133. package/dist/index151.js.map +1 -1
  134. package/dist/index152.js +1 -1
  135. package/dist/index152.js.map +1 -1
  136. package/dist/index153.js +2 -2
  137. package/dist/index153.js.map +1 -1
  138. package/dist/index154.js +2 -2
  139. package/dist/index154.js.map +1 -1
  140. package/dist/index155.js +1 -1
  141. package/dist/index155.js.map +1 -1
  142. package/dist/index156.js +1 -1
  143. package/dist/index156.js.map +1 -1
  144. package/dist/index157.js +1 -1
  145. package/dist/index157.js.map +1 -1
  146. package/dist/index158.js +1 -1
  147. package/dist/index158.js.map +1 -1
  148. package/dist/index159.js +1 -1
  149. package/dist/index159.js.map +1 -1
  150. package/dist/index16.js +220 -60
  151. package/dist/index16.js.map +1 -1
  152. package/dist/index160.js +1 -1
  153. package/dist/index160.js.map +1 -1
  154. package/dist/index161.js +1 -1
  155. package/dist/index161.js.map +1 -1
  156. package/dist/index162.js +1 -1
  157. package/dist/index162.js.map +1 -1
  158. package/dist/index163.js +1 -1
  159. package/dist/index163.js.map +1 -1
  160. package/dist/index164.js +1 -1
  161. package/dist/index164.js.map +1 -1
  162. package/dist/index165.js +1 -1
  163. package/dist/index165.js.map +1 -1
  164. package/dist/index166.js +1 -1
  165. package/dist/index166.js.map +1 -1
  166. package/dist/index167.js +1 -1
  167. package/dist/index167.js.map +1 -1
  168. package/dist/index168.js +1 -1
  169. package/dist/index168.js.map +1 -1
  170. package/dist/index169.js +1 -1
  171. package/dist/index169.js.map +1 -1
  172. package/dist/index17.js +60 -99
  173. package/dist/index17.js.map +1 -1
  174. package/dist/index170.js +1 -1
  175. package/dist/index170.js.map +1 -1
  176. package/dist/index171.js +1 -1
  177. package/dist/index171.js.map +1 -1
  178. package/dist/index172.js +1 -1
  179. package/dist/index172.js.map +1 -1
  180. package/dist/index173.js +2 -2
  181. package/dist/index173.js.map +1 -1
  182. package/dist/index174.js +1 -1
  183. package/dist/index174.js.map +1 -1
  184. package/dist/index175.js +1 -1
  185. package/dist/index175.js.map +1 -1
  186. package/dist/index176.js +1 -1
  187. package/dist/index176.js.map +1 -1
  188. package/dist/index177.js +2 -2
  189. package/dist/index177.js.map +1 -1
  190. package/dist/index178.js +1 -1
  191. package/dist/index178.js.map +1 -1
  192. package/dist/index179.js +1 -1
  193. package/dist/index179.js.map +1 -1
  194. package/dist/index18.js +95 -282
  195. package/dist/index18.js.map +1 -1
  196. package/dist/index180.js +2 -2
  197. package/dist/index180.js.map +1 -1
  198. package/dist/index181.js +1 -1
  199. package/dist/index181.js.map +1 -1
  200. package/dist/index182.js +1 -1
  201. package/dist/index182.js.map +1 -1
  202. package/dist/index183.js +1 -1
  203. package/dist/index183.js.map +1 -1
  204. package/dist/index184.js +2 -2
  205. package/dist/index184.js.map +1 -1
  206. package/dist/index185.js +1 -1
  207. package/dist/index185.js.map +1 -1
  208. package/dist/index186.js +1 -1
  209. package/dist/index186.js.map +1 -1
  210. package/dist/index187.js +2 -2
  211. package/dist/index187.js.map +1 -1
  212. package/dist/index188.js +1 -1
  213. package/dist/index188.js.map +1 -1
  214. package/dist/index189.js +2 -2
  215. package/dist/index189.js.map +1 -1
  216. package/dist/index19.js +317 -16
  217. package/dist/index19.js.map +1 -1
  218. package/dist/index190.js +2 -149
  219. package/dist/index190.js.map +1 -1
  220. package/dist/index191.js +2 -9
  221. package/dist/index191.js.map +1 -1
  222. package/dist/index192.js +2 -6
  223. package/dist/index192.js.map +1 -1
  224. package/dist/index193.js +2 -5
  225. package/dist/index193.js.map +1 -1
  226. package/dist/index194.js +2 -40
  227. package/dist/index194.js.map +1 -1
  228. package/dist/index195.js +2 -59
  229. package/dist/index195.js.map +1 -1
  230. package/dist/index196.js +2 -23
  231. package/dist/index196.js.map +1 -1
  232. package/dist/index197.js +152 -0
  233. package/dist/index197.js.map +1 -0
  234. package/dist/index198.js +12 -0
  235. package/dist/index198.js.map +1 -0
  236. package/dist/index199.js +5 -23
  237. package/dist/index199.js.map +1 -1
  238. package/dist/index20.js +15 -31
  239. package/dist/index20.js.map +1 -1
  240. package/dist/index200.js +8 -0
  241. package/dist/index200.js.map +1 -0
  242. package/dist/index201.js +36 -80
  243. package/dist/index201.js.map +1 -1
  244. package/dist/index206.js +26 -0
  245. package/dist/index206.js.map +1 -0
  246. package/dist/index207.js +71 -0
  247. package/dist/index207.js.map +1 -0
  248. package/dist/index21.js +33 -61
  249. package/dist/index21.js.map +1 -1
  250. package/dist/{index210.js → index215.js} +1 -1
  251. package/dist/{index210.js.map → index215.js.map} +1 -1
  252. package/dist/index22.js +57 -76
  253. package/dist/index22.js.map +1 -1
  254. package/dist/{index218.js → index223.js} +1 -1
  255. package/dist/{index218.js.map → index223.js.map} +1 -1
  256. package/dist/{index221.js → index226.js} +2 -2
  257. package/dist/{index221.js.map → index226.js.map} +1 -1
  258. package/dist/index23.js +83 -21
  259. package/dist/index23.js.map +1 -1
  260. package/dist/index235.js +171 -8
  261. package/dist/index235.js.map +1 -1
  262. package/dist/index236.js +3 -9
  263. package/dist/index236.js.map +1 -1
  264. package/dist/index238.js +18 -169
  265. package/dist/index238.js.map +1 -1
  266. package/dist/index239.js +10 -11
  267. package/dist/index239.js.map +1 -1
  268. package/dist/index24.js +20 -222
  269. package/dist/index24.js.map +1 -1
  270. package/dist/index240.js +8 -4
  271. package/dist/index240.js.map +1 -1
  272. package/dist/index241.js +4 -5
  273. package/dist/index241.js.map +1 -1
  274. package/dist/index242.js +168 -36
  275. package/dist/index242.js.map +1 -1
  276. package/dist/index243.js +11 -2
  277. package/dist/index243.js.map +1 -1
  278. package/dist/index244.js +5 -7
  279. package/dist/index244.js.map +1 -1
  280. package/dist/index245.js +5 -326
  281. package/dist/index245.js.map +1 -1
  282. package/dist/index246.js +36 -48
  283. package/dist/index246.js.map +1 -1
  284. package/dist/index247.js +2 -2
  285. package/dist/index248.js +7 -75
  286. package/dist/index248.js.map +1 -1
  287. package/dist/index249.js +308 -74
  288. package/dist/index249.js.map +1 -1
  289. package/dist/index25.js +289 -43
  290. package/dist/index25.js.map +1 -1
  291. package/dist/index250.js +45 -47
  292. package/dist/index250.js.map +1 -1
  293. package/dist/index251.js +2 -8
  294. package/dist/index251.js.map +1 -1
  295. package/dist/index252.js +75 -4
  296. package/dist/index252.js.map +1 -1
  297. package/dist/index253.js +89 -48
  298. package/dist/index253.js.map +1 -1
  299. package/dist/index254.js +52 -2
  300. package/dist/index254.js.map +1 -1
  301. package/dist/index255.js +8 -2
  302. package/dist/index255.js.map +1 -1
  303. package/dist/index256.js +8 -0
  304. package/dist/index256.js.map +1 -0
  305. package/dist/index257.js +55 -0
  306. package/dist/index257.js.map +1 -0
  307. package/dist/index258.js +5 -0
  308. package/dist/index258.js.map +1 -0
  309. package/dist/index259.js +5 -0
  310. package/dist/index259.js.map +1 -0
  311. package/dist/index26.js +48 -23
  312. package/dist/index26.js.map +1 -1
  313. package/dist/index27.js +21 -81
  314. package/dist/index27.js.map +1 -1
  315. package/dist/index28.js +101 -138
  316. package/dist/index28.js.map +1 -1
  317. package/dist/index29.js +139 -128
  318. package/dist/index29.js.map +1 -1
  319. package/dist/index3.js +57 -98
  320. package/dist/index3.js.map +1 -1
  321. package/dist/index30.js +133 -69
  322. package/dist/index30.js.map +1 -1
  323. package/dist/index31.js +67 -96
  324. package/dist/index31.js.map +1 -1
  325. package/dist/index32.js +96 -71
  326. package/dist/index32.js.map +1 -1
  327. package/dist/index33.js +70 -38
  328. package/dist/index33.js.map +1 -1
  329. package/dist/index34.js +40 -71
  330. package/dist/index34.js.map +1 -1
  331. package/dist/index35.js +67 -82
  332. package/dist/index35.js.map +1 -1
  333. package/dist/index36.js +99 -54
  334. package/dist/index36.js.map +1 -1
  335. package/dist/index37.js +53 -280
  336. package/dist/index37.js.map +1 -1
  337. package/dist/index38.js +281 -70
  338. package/dist/index38.js.map +1 -1
  339. package/dist/index39.js +69 -80
  340. package/dist/index39.js.map +1 -1
  341. package/dist/index4.js +102 -42
  342. package/dist/index4.js.map +1 -1
  343. package/dist/index40.js +82 -32
  344. package/dist/index40.js.map +1 -1
  345. package/dist/index41.js +26 -44
  346. package/dist/index41.js.map +1 -1
  347. package/dist/index42.js +45 -67
  348. package/dist/index42.js.map +1 -1
  349. package/dist/index43.js +65 -49
  350. package/dist/index43.js.map +1 -1
  351. package/dist/index44.js +53 -139
  352. package/dist/index44.js.map +1 -1
  353. package/dist/index45.js +132 -179
  354. package/dist/index45.js.map +1 -1
  355. package/dist/index46.js +194 -35
  356. package/dist/index46.js.map +1 -1
  357. package/dist/index47.js +34 -29
  358. package/dist/index47.js.map +1 -1
  359. package/dist/index48.js +31 -145
  360. package/dist/index48.js.map +1 -1
  361. package/dist/index49.js +131 -70
  362. package/dist/index49.js.map +1 -1
  363. package/dist/index5.js +40 -315
  364. package/dist/index5.js.map +1 -1
  365. package/dist/index50.js +80 -371
  366. package/dist/index50.js.map +1 -1
  367. package/dist/index51.js +451 -91
  368. package/dist/index51.js.map +1 -1
  369. package/dist/index52.js +98 -38
  370. package/dist/index52.js.map +1 -1
  371. package/dist/index53.js +35 -35
  372. package/dist/index53.js.map +1 -1
  373. package/dist/index54.js +35 -90
  374. package/dist/index54.js.map +1 -1
  375. package/dist/index55.js +89 -159
  376. package/dist/index55.js.map +1 -1
  377. package/dist/index56.js +157 -143
  378. package/dist/index56.js.map +1 -1
  379. package/dist/index57.js +149 -33
  380. package/dist/index57.js.map +1 -1
  381. package/dist/index58.js +33 -86
  382. package/dist/index58.js.map +1 -1
  383. package/dist/index59.js +80 -113
  384. package/dist/index59.js.map +1 -1
  385. package/dist/index6.js +323 -43
  386. package/dist/index6.js.map +1 -1
  387. package/dist/index60.js +114 -62
  388. package/dist/index60.js.map +1 -1
  389. package/dist/index61.js +62 -147
  390. package/dist/index61.js.map +1 -1
  391. package/dist/index62.js +146 -312
  392. package/dist/index62.js.map +1 -1
  393. package/dist/index63.js +317 -44
  394. package/dist/index63.js.map +1 -1
  395. package/dist/index64.js +44 -143
  396. package/dist/index64.js.map +1 -1
  397. package/dist/index65.js +145 -12
  398. package/dist/index65.js.map +1 -1
  399. package/dist/index66.js +10 -44
  400. package/dist/index66.js.map +1 -1
  401. package/dist/index67.js +42 -15
  402. package/dist/index67.js.map +1 -1
  403. package/dist/index68.js +76 -48
  404. package/dist/index68.js.map +1 -1
  405. package/dist/index69.js +18 -58
  406. package/dist/index69.js.map +1 -1
  407. package/dist/index7.js +44 -51
  408. package/dist/index7.js.map +1 -1
  409. package/dist/index70.js +66 -5
  410. package/dist/index70.js.map +1 -1
  411. package/dist/index71.js +25 -7
  412. package/dist/index71.js.map +1 -1
  413. package/dist/index72.js +105 -0
  414. package/dist/index72.js.map +1 -0
  415. package/dist/index73.js +62 -2
  416. package/dist/index73.js.map +1 -1
  417. package/dist/index74.js +21 -2
  418. package/dist/index74.js.map +1 -1
  419. package/dist/index75.js +5 -2
  420. package/dist/index75.js.map +1 -1
  421. package/dist/index76.js +54 -2
  422. package/dist/index76.js.map +1 -1
  423. package/dist/index77.js +24 -2
  424. package/dist/index77.js.map +1 -1
  425. package/dist/index78.js +9 -2
  426. package/dist/index78.js.map +1 -1
  427. package/dist/index8.js +48 -85
  428. package/dist/index8.js.map +1 -1
  429. package/dist/index80.js +2 -2
  430. package/dist/index80.js.map +1 -1
  431. package/dist/index81.js +2 -2
  432. package/dist/index81.js.map +1 -1
  433. package/dist/index82.js +1 -1
  434. package/dist/index82.js.map +1 -1
  435. package/dist/index83.js +2 -2
  436. package/dist/index83.js.map +1 -1
  437. package/dist/index84.js +1 -1
  438. package/dist/index84.js.map +1 -1
  439. package/dist/index85.js +1 -1
  440. package/dist/index85.js.map +1 -1
  441. package/dist/index86.js +1 -1
  442. package/dist/index86.js.map +1 -1
  443. package/dist/index87.js +1 -1
  444. package/dist/index87.js.map +1 -1
  445. package/dist/index88.js +1 -1
  446. package/dist/index88.js.map +1 -1
  447. package/dist/index89.js +1 -1
  448. package/dist/index89.js.map +1 -1
  449. package/dist/index9.js +91 -27
  450. package/dist/index9.js.map +1 -1
  451. package/dist/index90.js +1 -1
  452. package/dist/index90.js.map +1 -1
  453. package/dist/index91.js +1 -1
  454. package/dist/index91.js.map +1 -1
  455. package/dist/index92.js +1 -1
  456. package/dist/index92.js.map +1 -1
  457. package/dist/index93.js +1 -1
  458. package/dist/index93.js.map +1 -1
  459. package/dist/index94.js +1 -1
  460. package/dist/index94.js.map +1 -1
  461. package/dist/index95.js +1 -1
  462. package/dist/index95.js.map +1 -1
  463. package/dist/index96.js +1 -1
  464. package/dist/index96.js.map +1 -1
  465. package/dist/index97.js +1 -1
  466. package/dist/index97.js.map +1 -1
  467. package/dist/index98.js +1 -1
  468. package/dist/index98.js.map +1 -1
  469. package/dist/index99.js +1 -1
  470. package/dist/index99.js.map +1 -1
  471. package/package.json +1 -1
  472. package/dist/index230.js +0 -7
  473. package/dist/index230.js.map +0 -1
  474. package/dist/index232.js +0 -25
  475. package/dist/index232.js.map +0 -1
  476. package/dist/index233.js +0 -57
  477. package/dist/index233.js.map +0 -1
  478. package/dist/index234.js +0 -22
  479. package/dist/index234.js.map +0 -1
  480. package/dist/index237.js +0 -8
  481. package/dist/index237.js.map +0 -1
  482. package/dist/index79.js +0 -5
  483. package/dist/index79.js.map +0 -1
package/dist/index64.js CHANGED
@@ -1,148 +1,49 @@
1
- import a from "react";
2
- import { Button as E } from "./index3.js";
3
- import { Badge as j } from "./index9.js";
4
- import { Icon as q } from "./index5.js";
5
- import { Link as f } from "./index63.js";
6
- import { CustomModal as G } from "./index12.js";
7
- import { useStableId as J } from "./index192.js";
1
+ import N, { forwardRef as _ } from "react";
2
+ import { getA11yNameAttributes as k } from "./index78.js";
3
+ import "./index72.js";
8
4
  /* empty css */
9
- const K = {
10
- lg: {
11
- width: "768px",
12
- height: "500px"
13
- },
14
- sm: {
15
- width: "656px",
16
- height: "384px"
17
- }
18
- }, ea = ({
19
- isOpen: N,
20
- onClose: n,
21
- trigger: c,
22
- modalWidth: u,
23
- modalHeight: b,
24
- variant: g,
25
- size: t = "lg",
26
- availabilityLabel: x = "Available on ",
27
- availabilityBadgeText: k,
28
- title: C,
29
- description: v,
30
- learnMoreLinkText: r,
31
- learnMoreHref: l,
32
- onLearnMoreClick: o,
33
- featureListDesc: s,
34
- featuresList: I = [],
35
- featureItemIcon: L,
36
- mediaContent: S,
37
- laterButtonText: _,
38
- purchaseButtonText: A,
39
- onLaterClick: F,
40
- onPurchaseClick: P,
41
- className: $ = "",
42
- modalContentClassName: B = "",
43
- automationId: i = "",
44
- id: D
45
- }) => {
46
- const m = J(D, "paywall-title"), z = () => {
47
- F?.(), n();
48
- }, p = K[t], O = u ?? p.width, d = b ?? p.height, y = g === "with-points" && t === "lg", w = I.map((e) => typeof e == "string" ? {
49
- text: e
50
- } : {
51
- text: e.text,
52
- icon: e.icon,
53
- href: e.href,
54
- external: e.external,
55
- onLinkClick: e.onLinkClick
56
- }), R = y && w.length > 0, W = L ?? /* @__PURE__ */ a.createElement(q, {
57
- name: "info",
58
- rotation: "180"
59
- }), Y = /* @__PURE__ */ a.createElement("section", {
60
- className: `paywall paywall-ctn paywall-ctn--${t} ${$}`,
61
- "data-automation-id": i
62
- }, /* @__PURE__ */ a.createElement("div", {
63
- className: "paywall-card"
64
- }, /* @__PURE__ */ a.createElement("div", {
65
- className: "paywall-card-content"
66
- }, /* @__PURE__ */ a.createElement("span", {
67
- className: "paywall-card-availability"
68
- }, /* @__PURE__ */ a.createElement("span", {
69
- className: "paywall-card-availability-label"
70
- }, x), /* @__PURE__ */ a.createElement(j, {
71
- label: k,
72
- className: "paywall-card-badge",
73
- bgColor: "var(--color-yellow-100)",
74
- textColor: "var(--color-yellow-700)"
75
- })), /* @__PURE__ */ a.createElement("h3", {
76
- id: m,
77
- className: "paywall-card-title"
78
- }, C), /* @__PURE__ */ a.createElement("p", {
79
- className: "paywall-card-description"
80
- }, v, r && (l || o) && /* @__PURE__ */ a.createElement(f, {
81
- href: l ?? "#",
82
- label: r,
83
- external: !!l,
84
- className: "paywall-card-learn-more",
85
- onClick: (e) => {
86
- l || e.preventDefault(), o?.(e);
5
+ function a() {
6
+ return a = Object.assign ? Object.assign.bind() : function(r) {
7
+ for (var n = 1; n < arguments.length; n++) {
8
+ var e = arguments[n];
9
+ for (var t in e) ({}).hasOwnProperty.call(e, t) && (r[t] = e[t]);
87
10
  }
88
- })), y && s && /* @__PURE__ */ a.createElement("p", {
89
- className: "paywall-card-features-intro"
90
- }, s), R && /* @__PURE__ */ a.createElement("ul", {
91
- className: "paywall-card-features-list"
92
- }, w.map((e) => /* @__PURE__ */ a.createElement("li", {
93
- key: e.text,
94
- className: "paywall-card-feature-item"
95
- }, /* @__PURE__ */ a.createElement("span", {
96
- className: "paywall-card-feature-icon",
97
- "aria-hidden": !0
98
- }, e.icon ?? W), /* @__PURE__ */ a.createElement("span", null, e.href || e.onLinkClick ? /* @__PURE__ */ a.createElement(f, {
99
- href: e.href ?? "#",
100
- label: e.text,
101
- external: e.external,
102
- onClick: (h) => {
103
- e.href || h.preventDefault(), e.onLinkClick?.(h);
104
- }
105
- }) : e.text)))), /* @__PURE__ */ a.createElement("div", {
106
- className: "paywall-card-actions"
107
- }, /* @__PURE__ */ a.createElement(E, {
108
- type: "ghost",
109
- size: "md",
110
- label: _,
111
- onClick: z,
112
- className: "paywall-card-btn-later"
113
- }), /* @__PURE__ */ a.createElement(E, {
114
- type: "primary",
115
- size: "md",
116
- label: A,
117
- onClick: P,
118
- className: "paywall-card-btn-purchase"
119
- }))), /* @__PURE__ */ a.createElement("div", {
120
- className: "paywall-card-media"
121
- }, S))), Z = /* @__PURE__ */ a.createElement("div", {
122
- role: "dialog",
123
- "aria-modal": "true",
124
- "aria-labelledby": m,
125
- className: `paywall-modal-content ${B}`,
126
- style: {
127
- height: d,
128
- minHeight: d
129
- }
130
- }, Y);
131
- return /* @__PURE__ */ a.createElement(a.Fragment, null, c && /* @__PURE__ */ a.createElement("span", {
132
- className: "paywall-trigger"
133
- }, c), /* @__PURE__ */ a.createElement(G, {
134
- isOpen: N,
135
- onClose: n,
136
- onModalClick: () => {
137
- },
138
- renderModalContent: () => Z,
139
- width: O,
140
- contentClassName: "paywall-modal-content-wrapper",
141
- automationId: i
142
- }));
143
- };
11
+ return r;
12
+ }, a.apply(null, arguments);
13
+ }
14
+ const v = " (opens in a new tab)", y = /* @__PURE__ */ _(({
15
+ href: r,
16
+ label: n,
17
+ external: e = !1,
18
+ className: t = "",
19
+ automationId: c = "",
20
+ ariaLabel: o,
21
+ ariaLabelledBy: l,
22
+ ariaDescribedBy: m,
23
+ onClick: u,
24
+ target: s,
25
+ rel: i,
26
+ ...f
27
+ }, p) => {
28
+ const d = e ? s ?? "_blank" : s, g = e ? i ?? "noopener noreferrer" : i, b = k({
29
+ // External link aria-label enhancement for screen readers:
30
+ // When external={true}, always append "(opens in a new tab)"
31
+ ariaLabel: e ? `${o ?? n}${v}` : o,
32
+ ariaLabelledBy: l,
33
+ ariaDescribedBy: m
34
+ }), A = ["se-design-link", "focus-outline", "focus-visible:underline", t].filter(Boolean).join(" ");
35
+ return /* @__PURE__ */ N.createElement("a", a({
36
+ ref: p,
37
+ href: r,
38
+ target: d,
39
+ rel: g,
40
+ className: A,
41
+ "data-automation-id": c,
42
+ onClick: u
43
+ }, f, b), n);
44
+ });
45
+ y.displayName = "Link";
144
46
  export {
145
- ea as Paywall,
146
- ea as default
47
+ y as Link
147
48
  };
148
49
  //# sourceMappingURL=index64.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index64.js","sources":["../src/components/Paywall/index.tsx"],"sourcesContent":["import React, { FC, ReactNode } from 'react';\nimport { Button } from 'src/components/Button';\nimport { Badge } from 'src/components/Badge';\nimport { Icon } from 'src/components/Icon';\nimport { Link } from 'src/components/Link';\nimport { CustomModal } from 'src/components/CustomModal';\nimport { useStableId } from 'src/utils/useStableId';\nimport './style.scss';\n\n/** Variant: with bullet points list, or description only */\nexport type PaywallVariant = 'with-points' | 'description-only';\n\n/** Size: small (656×384) or large (768×500) – sets modal dimensions and media panel proportion */\nexport type PaywallSize = 'sm' | 'lg';\n\n/** Feature list item: plain string (uses default/list icon) or object with text, optional per-item icon, and optional link/action */\nexport type PaywallFeatureItem =\n | string\n | {\n text: string;\n icon?: ReactNode;\n /** If provided, the feature text becomes a hyperlink navigating to this URL */\n href?: string;\n /** If true, opens the href in a new tab (only applicable when href is set) */\n external?: boolean;\n /** Click handler — use with href for analytics, or alone for SPA actions */\n onLinkClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n };\n\nconst PAYWALL_SIZE_DIMENSIONS: Record<PaywallSize, { width: string; height: string }> = {\n lg: { width: '768px', height: '500px' },\n sm: { width: '656px', height: '384px' },\n};\n\nexport interface PaywallProps {\n isOpen: boolean;\n onClose: () => void;\n trigger?: ReactNode;\n modalWidth?: string;\n modalHeight?: string;\n variant: PaywallVariant;\n size?: PaywallSize;\n availabilityLabel?: string;\n availabilityBadgeText: string;\n title: string;\n description: string;\n learnMoreLinkText?: string;\n learnMoreHref?: string;\n onLearnMoreClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n featureListDesc?: string;\n featuresList?: PaywallFeatureItem[];\n featureItemIcon?: ReactNode;\n mediaContent?: ReactNode;\n laterButtonText: string;\n purchaseButtonText: string;\n onLaterClick?: () => void;\n onPurchaseClick?: () => void;\n className?: string;\n modalContentClassName?: string;\n automationId?: string;\n id?: string;\n}\n\n/** Paywall – always shown in a modal. Pass isOpen/onClose and optionally a trigger. */\nexport const Paywall: FC<PaywallProps> = ({\n isOpen,\n onClose,\n trigger,\n modalWidth,\n modalHeight,\n variant,\n size = 'lg',\n availabilityLabel = 'Available on ',\n availabilityBadgeText,\n title,\n description,\n learnMoreLinkText,\n learnMoreHref,\n onLearnMoreClick,\n featureListDesc,\n featuresList = [],\n featureItemIcon,\n mediaContent,\n laterButtonText,\n purchaseButtonText,\n onLaterClick,\n onPurchaseClick,\n className = '',\n modalContentClassName = '',\n automationId = '',\n id: providedId,\n}) => {\n const titleId = useStableId(providedId, 'paywall-title');\n\n const handleLaterClick = () => {\n onLaterClick?.();\n onClose();\n };\n\n const dimensions = PAYWALL_SIZE_DIMENSIONS[size];\n const width = modalWidth ?? dimensions.width;\n const height = modalHeight ?? dimensions.height;\n\n const withPoints = variant === 'with-points' && size === 'lg';\n const normalizedFeatures = featuresList.map((item): { text: string; icon?: ReactNode; href?: string; external?: boolean; onLinkClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void } =>\n typeof item === 'string'\n ? { text: item }\n : { text: item.text, icon: item.icon, href: item.href, external: item.external, onLinkClick: item.onLinkClick }\n );\n const showFeatures = withPoints && normalizedFeatures.length > 0;\n const defaultIcon = featureItemIcon ?? <Icon name=\"info\" rotation='180'/>;\n\n const content = (\n <section\n className={`paywall paywall-ctn paywall-ctn--${size} ${className}`}\n data-automation-id={automationId}\n >\n <div className=\"paywall-card\">\n <div className=\"paywall-card-content\">\n <span className=\"paywall-card-availability\">\n <span className=\"paywall-card-availability-label\">{availabilityLabel}</span>\n <Badge\n label={availabilityBadgeText}\n className=\"paywall-card-badge\"\n bgColor=\"var(--color-yellow-100)\"\n textColor=\"var(--color-yellow-700)\"\n />\n </span>\n <h3 id={titleId} className=\"paywall-card-title\">{title}</h3>\n <p className=\"paywall-card-description\">\n {description}\n {learnMoreLinkText && (learnMoreHref || onLearnMoreClick) && (\n <Link\n href={learnMoreHref ?? '#'}\n label={learnMoreLinkText}\n external={!!learnMoreHref}\n className=\"paywall-card-learn-more\"\n onClick={(e) => { if (!learnMoreHref) { e.preventDefault(); } onLearnMoreClick?.(e); }}\n />\n )}\n </p>\n {withPoints && featureListDesc && (\n <p className=\"paywall-card-features-intro\">{featureListDesc}</p>\n )}\n {showFeatures && (\n <ul className=\"paywall-card-features-list\">\n {normalizedFeatures.map((item) => (\n <li key={item.text} className=\"paywall-card-feature-item\">\n <span className=\"paywall-card-feature-icon\" aria-hidden>\n {item.icon ?? defaultIcon}\n </span>\n <span>\n {item.href || item.onLinkClick ? (\n <Link\n href={item.href ?? '#'}\n label={item.text}\n external={item.external}\n onClick={(e) => { if (!item.href) { e.preventDefault(); } item.onLinkClick?.(e); }}\n />\n ) : (\n item.text\n )}\n </span>\n </li>\n ))}\n </ul>\n )}\n <div className=\"paywall-card-actions\">\n <Button\n type=\"ghost\"\n size=\"md\"\n label={laterButtonText}\n onClick={handleLaterClick}\n className=\"paywall-card-btn-later\"\n />\n <Button\n type=\"primary\"\n size=\"md\"\n label={purchaseButtonText}\n onClick={onPurchaseClick}\n className=\"paywall-card-btn-purchase\"\n />\n </div>\n </div>\n <div className=\"paywall-card-media\">\n {mediaContent}\n </div>\n </div>\n </section>\n );\n\n const modalContent = (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n className={`paywall-modal-content ${modalContentClassName}`}\n style={{ height, minHeight: height }}\n >\n {content}\n </div>\n );\n\n return (\n <>\n {trigger && <span className=\"paywall-trigger\">{trigger}</span>}\n <CustomModal\n isOpen={isOpen}\n onClose={onClose}\n onModalClick={() => {}}\n renderModalContent={() => modalContent}\n width={width}\n contentClassName=\"paywall-modal-content-wrapper\"\n automationId={automationId}\n />\n </>\n );\n};\n\nexport default Paywall;\n"],"names":["React__default","Button","Badge","Icon","Link","CustomModal","useStableId","PAYWALL_SIZE_DIMENSIONS","lg","width","height","sm","Paywall","isOpen","onClose","trigger","modalWidth","modalHeight","variant","size","availabilityLabel","availabilityBadgeText","title","description","learnMoreLinkText","learnMoreHref","onLearnMoreClick","featureListDesc","featuresList","featureItemIcon","mediaContent","laterButtonText","purchaseButtonText","onLaterClick","onPurchaseClick","className","modalContentClassName","automationId","id","providedId","titleId","handleLaterClick","dimensions","withPoints","normalizedFeatures","map","item","text","icon","href","external","onLinkClick","showFeatures","length","defaultIcon","createElement","name","rotation","content","React","label","bgColor","textColor","onClick","e","preventDefault","key","type","modalContent","role","style","minHeight","Fragment","onModalClick","renderModalContent","contentClassName"],"mappings":"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"}
1
+ {"version":3,"file":"index64.js","sources":["../src/components/Link/index.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { getA11yNameAttributes } from '../../utils/a11y';\nimport './style.scss';\n\n/**\n * Allows native anchor attributes (aria-*, data-*, etc.) to be passed through,\n * but keeps our own href/onClick/aria-label/aria-labelledby/aria-describedby typing.\n */\ntype NativeAnchorProps = Omit<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n 'href' | 'onClick' | 'target' | 'rel' | 'aria-label' | 'aria-labelledby' | 'aria-describedby'\n>;\n\nexport interface LinkProps extends NativeAnchorProps {\n /**\n * URL to navigate to (required for actual links)\n */\n href: string;\n /**\n * Link text content (string only)\n */\n label: string;\n /**\n * If true, automatically adds target=\"_blank\" and rel=\"noopener noreferrer\"\n * Also appends \" (opens in a new tab)\" to aria-label for screen readers\n */\n external?: boolean;\n /**\n * Accessible name for the link. Use when link text is generic or unclear.\n * Prefer ariaLabelledBy when a visible label exists.\n */\n ariaLabel?: string;\n /**\n * ID(s) of element(s) that label this link.\n * Preferred over ariaLabel when a visible label exists (keeps SR and visual text in sync).\n */\n ariaLabelledBy?: string;\n /**\n * ID(s) of element(s) that describe this link.\n * Provides additional context announced after the accessible name.\n */\n ariaDescribedBy?: string;\n /**\n * Click handler (e.g., for analytics tracking)\n */\n onClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n /**\n * Custom class name\n */\n className?: string;\n /**\n * Automation ID for testing\n */\n automationId?: string;\n /**\n * Override target (if you need something other than \"_blank\" for external links).\n * Note: If external={true} and target is provided, the provided target will be used.\n */\n target?: string;\n /**\n * Override rel (if you need something other than \"noopener noreferrer\" for external links).\n * Note: If external={true} and rel is provided, the provided rel will be used.\n */\n rel?: string;\n}\n\nconst EXTERNAL_LINK_ARIA_SUFFIX = ' (opens in a new tab)';\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n href,\n label,\n external = false,\n className = '',\n automationId = '',\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n onClick,\n target,\n rel,\n ...props\n },\n ref\n ) => {\n // Handle external link attributes\n // If external={true}, default to target=\"_blank\" and rel=\"noopener noreferrer\"\n // Explicit target/rel props can override these defaults\n const targetAttr = external ? (target ?? '_blank') : target;\n const relAttr = external ? (rel ?? 'noopener noreferrer') : rel;\n\n // Compute accessible name/description props with correct precedence\n // Precedence: ariaLabelledBy > ariaLabel > visible text content\n const accessibleNameProps = getA11yNameAttributes({\n // External link aria-label enhancement for screen readers:\n // When external={true}, always append \"(opens in a new tab)\"\n ariaLabel:\n external ? `${ariaLabel ?? label}${EXTERNAL_LINK_ARIA_SUFFIX}` : ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy\n });\n\n const linkClassName = ['se-design-link', 'focus-outline', 'focus-visible:underline', className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <a\n ref={ref}\n href={href}\n target={targetAttr}\n rel={relAttr}\n className={linkClassName}\n data-automation-id={automationId}\n onClick={onClick}\n {...props}\n {...accessibleNameProps}\n >\n {label}\n </a>\n );\n }\n);\n\nLink.displayName = 'Link';\n"],"names":["EXTERNAL_LINK_ARIA_SUFFIX","Link","href","label","external","className","automationId","ariaLabel","ariaLabelledBy","ariaDescribedBy","onClick","target","rel","props","ref","targetAttr","relAttr","accessibleNameProps","getA11yNameAttributes","linkClassName","filter","Boolean","join","React","createElement","_extends","displayName"],"mappings":";;;;;;;;;;;;;AAkEA,MAAMA,IAA4B,yBAErBC,sBACX,CACE;AAAA,EACEC,MAAAA;AAAAA,EACAC,OAAAA;AAAAA,EACAC,UAAAA,IAAW;AAAA,EACXC,WAAAA,IAAY;AAAA,EACZC,cAAAA,IAAe;AAAA,EACfC,WAAAA;AAAAA,EACAC,gBAAAA;AAAAA,EACAC,iBAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,QAAAA;AAAAA,EACAC,KAAAA;AAAAA,EACA,GAAGC;AACL,GACAC,MACG;AAIH,QAAMC,IAAaX,IAAYO,KAAU,WAAYA,GAC/CK,IAAUZ,IAAYQ,KAAO,wBAAyBA,GAItDK,IAAsBC,EAAsB;AAAA;AAAA;AAAA,IAGhDX,WACEH,IAAW,GAAGG,KAAaJ,CAAK,GAAGH,CAAyB,KAAKO;AAAAA,IACnEC,gBAAAA;AAAAA,IACAC,iBAAAA;AAAAA,EAAAA,CACD,GAEKU,IAAgB,CAAC,kBAAkB,iBAAiB,2BAA2Bd,CAAS,EAC3Fe,OAAOC,OAAO,EACdC,KAAK,GAAG;AAEX,SACEC,gBAAAA,EAAAC,cAAA,KAAAC,EAAA;AAAA,IACEX,KAAAA;AAAAA,IACAZ,MAAAA;AAAAA,IACAS,QAAQI;AAAAA,IACRH,KAAKI;AAAAA,IACLX,WAAWc;AAAAA,IACX,sBAAoBb;AAAAA,IACpBI,SAAAA;AAAAA,EAAAA,GACIG,GACAI,CAAmB,GAEtBd,CACA;AAEP,CACF;AAEAF,EAAKyB,cAAc;"}
package/dist/index65.js CHANGED
@@ -1,15 +1,148 @@
1
- function i({
2
- titleId: r,
3
- descriptionId: t,
4
- isFocusable: a = !1
5
- }) {
6
- const e = {
7
- role: "region",
8
- "aria-labelledby": r
9
- };
10
- return t && (e["aria-describedby"] = t), a && (e.tabIndex = -1), e;
11
- }
1
+ import a from "react";
2
+ import { Button as E } from "./index4.js";
3
+ import { Badge as j } from "./index10.js";
4
+ import { Icon as q } from "./index6.js";
5
+ import { Link as f } from "./index64.js";
6
+ import { CustomModal as G } from "./index13.js";
7
+ import { useStableId as J } from "./index199.js";
8
+ /* empty css */
9
+ const K = {
10
+ lg: {
11
+ width: "768px",
12
+ height: "500px"
13
+ },
14
+ sm: {
15
+ width: "656px",
16
+ height: "384px"
17
+ }
18
+ }, ea = ({
19
+ isOpen: N,
20
+ onClose: n,
21
+ trigger: c,
22
+ modalWidth: u,
23
+ modalHeight: b,
24
+ variant: g,
25
+ size: t = "lg",
26
+ availabilityLabel: x = "Available on ",
27
+ availabilityBadgeText: k,
28
+ title: C,
29
+ description: v,
30
+ learnMoreLinkText: r,
31
+ learnMoreHref: l,
32
+ onLearnMoreClick: o,
33
+ featureListDesc: s,
34
+ featuresList: I = [],
35
+ featureItemIcon: L,
36
+ mediaContent: S,
37
+ laterButtonText: _,
38
+ purchaseButtonText: A,
39
+ onLaterClick: F,
40
+ onPurchaseClick: P,
41
+ className: $ = "",
42
+ modalContentClassName: B = "",
43
+ automationId: i = "",
44
+ id: D
45
+ }) => {
46
+ const m = J(D, "paywall-title"), z = () => {
47
+ F?.(), n();
48
+ }, p = K[t], O = u ?? p.width, d = b ?? p.height, y = g === "with-points" && t === "lg", w = I.map((e) => typeof e == "string" ? {
49
+ text: e
50
+ } : {
51
+ text: e.text,
52
+ icon: e.icon,
53
+ href: e.href,
54
+ external: e.external,
55
+ onLinkClick: e.onLinkClick
56
+ }), R = y && w.length > 0, W = L ?? /* @__PURE__ */ a.createElement(q, {
57
+ name: "info",
58
+ rotation: "180"
59
+ }), Y = /* @__PURE__ */ a.createElement("section", {
60
+ className: `paywall paywall-ctn paywall-ctn--${t} ${$}`,
61
+ "data-automation-id": i
62
+ }, /* @__PURE__ */ a.createElement("div", {
63
+ className: "paywall-card"
64
+ }, /* @__PURE__ */ a.createElement("div", {
65
+ className: "paywall-card-content"
66
+ }, /* @__PURE__ */ a.createElement("span", {
67
+ className: "paywall-card-availability"
68
+ }, /* @__PURE__ */ a.createElement("span", {
69
+ className: "paywall-card-availability-label"
70
+ }, x), /* @__PURE__ */ a.createElement(j, {
71
+ label: k,
72
+ className: "paywall-card-badge",
73
+ bgColor: "var(--color-yellow-100)",
74
+ textColor: "var(--color-yellow-700)"
75
+ })), /* @__PURE__ */ a.createElement("h3", {
76
+ id: m,
77
+ className: "paywall-card-title"
78
+ }, C), /* @__PURE__ */ a.createElement("p", {
79
+ className: "paywall-card-description"
80
+ }, v, r && (l || o) && /* @__PURE__ */ a.createElement(f, {
81
+ href: l ?? "#",
82
+ label: r,
83
+ external: !!l,
84
+ className: "paywall-card-learn-more",
85
+ onClick: (e) => {
86
+ l || e.preventDefault(), o?.(e);
87
+ }
88
+ })), y && s && /* @__PURE__ */ a.createElement("p", {
89
+ className: "paywall-card-features-intro"
90
+ }, s), R && /* @__PURE__ */ a.createElement("ul", {
91
+ className: "paywall-card-features-list"
92
+ }, w.map((e) => /* @__PURE__ */ a.createElement("li", {
93
+ key: e.text,
94
+ className: "paywall-card-feature-item"
95
+ }, /* @__PURE__ */ a.createElement("span", {
96
+ className: "paywall-card-feature-icon",
97
+ "aria-hidden": !0
98
+ }, e.icon ?? W), /* @__PURE__ */ a.createElement("span", null, e.href || e.onLinkClick ? /* @__PURE__ */ a.createElement(f, {
99
+ href: e.href ?? "#",
100
+ label: e.text,
101
+ external: e.external,
102
+ onClick: (h) => {
103
+ e.href || h.preventDefault(), e.onLinkClick?.(h);
104
+ }
105
+ }) : e.text)))), /* @__PURE__ */ a.createElement("div", {
106
+ className: "paywall-card-actions"
107
+ }, /* @__PURE__ */ a.createElement(E, {
108
+ type: "ghost",
109
+ size: "md",
110
+ label: _,
111
+ onClick: z,
112
+ className: "paywall-card-btn-later"
113
+ }), /* @__PURE__ */ a.createElement(E, {
114
+ type: "primary",
115
+ size: "md",
116
+ label: A,
117
+ onClick: P,
118
+ className: "paywall-card-btn-purchase"
119
+ }))), /* @__PURE__ */ a.createElement("div", {
120
+ className: "paywall-card-media"
121
+ }, S))), Z = /* @__PURE__ */ a.createElement("div", {
122
+ role: "dialog",
123
+ "aria-modal": "true",
124
+ "aria-labelledby": m,
125
+ className: `paywall-modal-content ${B}`,
126
+ style: {
127
+ height: d,
128
+ minHeight: d
129
+ }
130
+ }, Y);
131
+ return /* @__PURE__ */ a.createElement(a.Fragment, null, c && /* @__PURE__ */ a.createElement("span", {
132
+ className: "paywall-trigger"
133
+ }, c), /* @__PURE__ */ a.createElement(G, {
134
+ isOpen: N,
135
+ onClose: n,
136
+ onModalClick: () => {
137
+ },
138
+ renderModalContent: () => Z,
139
+ width: O,
140
+ contentClassName: "paywall-modal-content-wrapper",
141
+ automationId: i
142
+ }));
143
+ };
12
144
  export {
13
- i as getRegionAttributes
145
+ ea as Paywall,
146
+ ea as default
14
147
  };
15
148
  //# sourceMappingURL=index65.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index65.js","sources":["../src/utils/a11y/regionAttributes.ts"],"sourcesContent":["/**\n * Returns ARIA attributes for a region container element.\n * Used for semantic containers that need role=\"region\" with proper labeling.\n * \n * @param options - Configuration options\n * @param options.titleId - Required. ID of the heading element that labels this region\n * @param options.descriptionId - Optional. ID of the description element\n * @param options.isFocusable - Optional. Whether to make the region focusable (adds tabIndex={-1})\n * @returns Object with region ARIA attributes\n */\nexport function getRegionAttributes({\n titleId,\n descriptionId,\n isFocusable = false\n}: {\n titleId: string;\n descriptionId?: string;\n isFocusable?: boolean;\n}): {\n role: 'region';\n 'aria-labelledby': string;\n 'aria-describedby'?: string;\n tabIndex?: number;\n} {\n const attributes: {\n role: 'region';\n 'aria-labelledby': string;\n 'aria-describedby'?: string;\n tabIndex?: number;\n } = {\n role: 'region',\n 'aria-labelledby': titleId\n };\n\n if (descriptionId) {\n attributes['aria-describedby'] = descriptionId;\n }\n\n if (isFocusable) {\n attributes.tabIndex = -1;\n }\n\n return attributes;\n}\n"],"names":["getRegionAttributes","titleId","descriptionId","isFocusable","attributes","role","tabIndex"],"mappings":"AAUO,SAASA,EAAoB;AAAA,EAClCC,SAAAA;AAAAA,EACAC,eAAAA;AAAAA,EACAC,aAAAA,IAAc;AAKhB,GAKE;AACA,QAAMC,IAKF;AAAA,IACFC,MAAM;AAAA,IACN,mBAAmBJ;AAAAA,EAAAA;AAGrB,SAAIC,MACFE,EAAW,kBAAkB,IAAIF,IAG/BC,MACFC,EAAWE,WAAW,KAGjBF;AACT;"}
1
+ {"version":3,"file":"index65.js","sources":["../src/components/Paywall/index.tsx"],"sourcesContent":["import React, { FC, ReactNode } from 'react';\nimport { Button } from 'src/components/Button';\nimport { Badge } from 'src/components/Badge';\nimport { Icon } from 'src/components/Icon';\nimport { Link } from 'src/components/Link';\nimport { CustomModal } from 'src/components/CustomModal';\nimport { useStableId } from 'src/utils/useStableId';\nimport './style.scss';\n\n/** Variant: with bullet points list, or description only */\nexport type PaywallVariant = 'with-points' | 'description-only';\n\n/** Size: small (656×384) or large (768×500) – sets modal dimensions and media panel proportion */\nexport type PaywallSize = 'sm' | 'lg';\n\n/** Feature list item: plain string (uses default/list icon) or object with text, optional per-item icon, and optional link/action */\nexport type PaywallFeatureItem =\n | string\n | {\n text: string;\n icon?: ReactNode;\n /** If provided, the feature text becomes a hyperlink navigating to this URL */\n href?: string;\n /** If true, opens the href in a new tab (only applicable when href is set) */\n external?: boolean;\n /** Click handler — use with href for analytics, or alone for SPA actions */\n onLinkClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n };\n\nconst PAYWALL_SIZE_DIMENSIONS: Record<PaywallSize, { width: string; height: string }> = {\n lg: { width: '768px', height: '500px' },\n sm: { width: '656px', height: '384px' },\n};\n\nexport interface PaywallProps {\n isOpen: boolean;\n onClose: () => void;\n trigger?: ReactNode;\n modalWidth?: string;\n modalHeight?: string;\n variant: PaywallVariant;\n size?: PaywallSize;\n availabilityLabel?: string;\n availabilityBadgeText: string;\n title: string;\n description: string;\n learnMoreLinkText?: string;\n learnMoreHref?: string;\n onLearnMoreClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n featureListDesc?: string;\n featuresList?: PaywallFeatureItem[];\n featureItemIcon?: ReactNode;\n mediaContent?: ReactNode;\n laterButtonText: string;\n purchaseButtonText: string;\n onLaterClick?: () => void;\n onPurchaseClick?: () => void;\n className?: string;\n modalContentClassName?: string;\n automationId?: string;\n id?: string;\n}\n\n/** Paywall – always shown in a modal. Pass isOpen/onClose and optionally a trigger. */\nexport const Paywall: FC<PaywallProps> = ({\n isOpen,\n onClose,\n trigger,\n modalWidth,\n modalHeight,\n variant,\n size = 'lg',\n availabilityLabel = 'Available on ',\n availabilityBadgeText,\n title,\n description,\n learnMoreLinkText,\n learnMoreHref,\n onLearnMoreClick,\n featureListDesc,\n featuresList = [],\n featureItemIcon,\n mediaContent,\n laterButtonText,\n purchaseButtonText,\n onLaterClick,\n onPurchaseClick,\n className = '',\n modalContentClassName = '',\n automationId = '',\n id: providedId,\n}) => {\n const titleId = useStableId(providedId, 'paywall-title');\n\n const handleLaterClick = () => {\n onLaterClick?.();\n onClose();\n };\n\n const dimensions = PAYWALL_SIZE_DIMENSIONS[size];\n const width = modalWidth ?? dimensions.width;\n const height = modalHeight ?? dimensions.height;\n\n const withPoints = variant === 'with-points' && size === 'lg';\n const normalizedFeatures = featuresList.map((item): { text: string; icon?: ReactNode; href?: string; external?: boolean; onLinkClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void } =>\n typeof item === 'string'\n ? { text: item }\n : { text: item.text, icon: item.icon, href: item.href, external: item.external, onLinkClick: item.onLinkClick }\n );\n const showFeatures = withPoints && normalizedFeatures.length > 0;\n const defaultIcon = featureItemIcon ?? <Icon name=\"info\" rotation='180'/>;\n\n const content = (\n <section\n className={`paywall paywall-ctn paywall-ctn--${size} ${className}`}\n data-automation-id={automationId}\n >\n <div className=\"paywall-card\">\n <div className=\"paywall-card-content\">\n <span className=\"paywall-card-availability\">\n <span className=\"paywall-card-availability-label\">{availabilityLabel}</span>\n <Badge\n label={availabilityBadgeText}\n className=\"paywall-card-badge\"\n bgColor=\"var(--color-yellow-100)\"\n textColor=\"var(--color-yellow-700)\"\n />\n </span>\n <h3 id={titleId} className=\"paywall-card-title\">{title}</h3>\n <p className=\"paywall-card-description\">\n {description}\n {learnMoreLinkText && (learnMoreHref || onLearnMoreClick) && (\n <Link\n href={learnMoreHref ?? '#'}\n label={learnMoreLinkText}\n external={!!learnMoreHref}\n className=\"paywall-card-learn-more\"\n onClick={(e) => { if (!learnMoreHref) { e.preventDefault(); } onLearnMoreClick?.(e); }}\n />\n )}\n </p>\n {withPoints && featureListDesc && (\n <p className=\"paywall-card-features-intro\">{featureListDesc}</p>\n )}\n {showFeatures && (\n <ul className=\"paywall-card-features-list\">\n {normalizedFeatures.map((item) => (\n <li key={item.text} className=\"paywall-card-feature-item\">\n <span className=\"paywall-card-feature-icon\" aria-hidden>\n {item.icon ?? defaultIcon}\n </span>\n <span>\n {item.href || item.onLinkClick ? (\n <Link\n href={item.href ?? '#'}\n label={item.text}\n external={item.external}\n onClick={(e) => { if (!item.href) { e.preventDefault(); } item.onLinkClick?.(e); }}\n />\n ) : (\n item.text\n )}\n </span>\n </li>\n ))}\n </ul>\n )}\n <div className=\"paywall-card-actions\">\n <Button\n type=\"ghost\"\n size=\"md\"\n label={laterButtonText}\n onClick={handleLaterClick}\n className=\"paywall-card-btn-later\"\n />\n <Button\n type=\"primary\"\n size=\"md\"\n label={purchaseButtonText}\n onClick={onPurchaseClick}\n className=\"paywall-card-btn-purchase\"\n />\n </div>\n </div>\n <div className=\"paywall-card-media\">\n {mediaContent}\n </div>\n </div>\n </section>\n );\n\n const modalContent = (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n className={`paywall-modal-content ${modalContentClassName}`}\n style={{ height, minHeight: height }}\n >\n {content}\n </div>\n );\n\n return (\n <>\n {trigger && <span className=\"paywall-trigger\">{trigger}</span>}\n <CustomModal\n isOpen={isOpen}\n onClose={onClose}\n onModalClick={() => {}}\n renderModalContent={() => modalContent}\n width={width}\n contentClassName=\"paywall-modal-content-wrapper\"\n automationId={automationId}\n />\n </>\n );\n};\n\nexport default Paywall;\n"],"names":["React__default","Button","Badge","Icon","Link","CustomModal","useStableId","PAYWALL_SIZE_DIMENSIONS","lg","width","height","sm","Paywall","isOpen","onClose","trigger","modalWidth","modalHeight","variant","size","availabilityLabel","availabilityBadgeText","title","description","learnMoreLinkText","learnMoreHref","onLearnMoreClick","featureListDesc","featuresList","featureItemIcon","mediaContent","laterButtonText","purchaseButtonText","onLaterClick","onPurchaseClick","className","modalContentClassName","automationId","id","providedId","titleId","handleLaterClick","dimensions","withPoints","normalizedFeatures","map","item","text","icon","href","external","onLinkClick","showFeatures","length","defaultIcon","React","createElement","name","rotation","content","label","bgColor","textColor","onClick","e","preventDefault","key","type","modalContent","role","style","minHeight","Fragment","onModalClick","renderModalContent","contentClassName"],"mappings":"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"}
package/dist/index66.js CHANGED
@@ -1,49 +1,15 @@
1
- import * as t from "react";
2
- import { isVirtualClick as w } from "./index70.js";
3
- function R({
4
- disabled: p = !1,
5
- loading: i = !1,
6
- onClick: u,
7
- onKeyboardActivate: s,
8
- isNative: l = !0,
9
- role: d = "button",
10
- tabIndex: D = 0,
11
- stopPropagation: c = !1,
12
- preventDefault: f = !1,
13
- pressed: P
14
- } = {}) {
15
- const e = p || i, n = t.useRef(!1), o = t.useCallback(() => {
16
- n.current = !0;
17
- }, []), m = t.useCallback((r) => {
18
- if (e) return;
19
- c && r.stopPropagation(), f && r.preventDefault();
20
- const y = w(r.nativeEvent), C = n.current;
21
- n.current = !1;
22
- const b = y ? "virtual" : C ? "pointer" : "keyboard";
23
- if ((b === "keyboard" || b === "virtual") && s) {
24
- s(r);
25
- return;
26
- }
27
- u?.(r);
28
- }, [e, u, s, c, f]), v = t.useCallback((r) => {
29
- e || (r.key === "Enter" || r.key === " ") && (r.preventDefault(), r.currentTarget.click());
30
- }, [e]), k = {
31
- onPointerDown: o,
32
- onMouseDown: o,
33
- onTouchStart: o,
34
- onClick: m,
35
- "aria-disabled": e ? "true" : void 0,
36
- "aria-busy": i ? "true" : void 0,
37
- "aria-pressed": P
1
+ function i({
2
+ titleId: r,
3
+ descriptionId: t,
4
+ isFocusable: a = !1
5
+ }) {
6
+ const e = {
7
+ role: "region",
8
+ "aria-labelledby": r
38
9
  };
39
- l || (k.onKeyDown = v);
40
- const a = {
41
- pressProps: k,
42
- isDisabled: e
43
- };
44
- return l || (a.role = d, a.tabIndex = e ? -1 : D), a;
10
+ return t && (e["aria-describedby"] = t), a && (e.tabIndex = -1), e;
45
11
  }
46
12
  export {
47
- R as useAccessiblePress
13
+ i as getRegionAttributes
48
14
  };
49
15
  //# sourceMappingURL=index66.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index66.js","sources":["../src/utils/a11y/useAccessiblePress.ts"],"sourcesContent":["import * as React from 'react';\nimport { isVirtualClick } from '../virtualClick';\n\n/**\n * Hook for accessible press interactions (pointer vs keyboard vs virtual click).\n *\n * Handles:\n * - Pointer intent tracking (mouse/touch)\n * - Virtual click detection (NVDA browse mode, etc.)\n * - Routing to appropriate handler (onClick vs onKeyboardActivate)\n * - For non-native elements: Enter/Space activation\n * - Optional stopPropagation and preventDefault\n *\n * @example\n * // Native button (isNative=true, the default)\n * const { pressProps } = useAccessiblePress({ onClick, disabled });\n * <button {...pressProps}>Click me</button>\n *\n * @example\n * // Non-native element (div acting as button)\n * const { pressProps, role, tabIndex } = useAccessiblePress({ onClick, isNative: false });\n * <div role={role} tabIndex={tabIndex} {...pressProps}>Click me</div>\n *\n * @example\n * // Element nested inside clickable parent (prevent event bubbling)\n * const { pressProps, tabIndex } = useAccessiblePress({ \n * onClick, \n * isNative: false, \n * stopPropagation: true \n * });\n * <div role=\"button\" tabIndex={tabIndex} {...pressProps}>Click me</div>\n */\n\ntype InputKind = 'pointer' | 'keyboard' | 'virtual';\n\nexport type UseAccessiblePressOptions = {\n /**\n * Whether the element is disabled\n */\n disabled?: boolean;\n\n /**\n * Whether the element is in a loading state (will also disable)\n */\n loading?: boolean;\n\n /**\n * Handler for pointer/touch activations (or all activations if onKeyboardActivate is not provided)\n */\n onClick?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /**\n * Handler for keyboard + assistive tech virtual activation.\n * If omitted, onClick is used for all activations.\n */\n onKeyboardActivate?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /**\n * If true, this is a native <button> (or other native pressable) and we MUST NOT add Enter/Space handling.\n * Default: true\n */\n isNative?: boolean;\n\n /**\n * Only for non-native elements (div/span). Defaults to 'button'.\n */\n role?: string;\n\n /**\n * Only for non-native elements. Defaults to 0.\n */\n tabIndex?: number;\n\n /**\n * If true, calls e.stopPropagation() before invoking onClick handler.\n * Useful when element is nested inside another clickable element.\n * Default: false\n */\n stopPropagation?: boolean;\n\n /**\n * If true, calls e.preventDefault() before invoking onClick handler.\n * Note: For non-native elements, preventDefault is already called on Space/Enter keys.\n * Default: false\n */\n preventDefault?: boolean;\n\n /**\n * Toggle/pressed state. When true or false, sets aria-pressed on the element (e.g. selected color swatch).\n * Omit for non-toggle buttons.\n */\n pressed?: boolean;\n};\n\nexport type UseAccessiblePressReturn = {\n /**\n * Props to spread onto the element. Includes event handlers and ARIA attributes.\n * Does NOT include role/tabIndex — apply those separately.\n */\n pressProps: React.HTMLAttributes<HTMLElement> & {\n 'aria-disabled'?: 'true';\n 'aria-busy'?: 'true';\n 'aria-pressed'?: boolean;\n };\n\n /**\n * Combined disabled state (disabled || loading)\n */\n isDisabled: boolean;\n\n /**\n * Role for non-native elements (e.g., 'button', 'menuitem').\n * Only returned when isNative=false.\n */\n role?: string;\n\n /**\n * TabIndex for non-native elements.\n * Returns -1 when disabled, otherwise the provided tabIndex (default 0).\n * Only returned when isNative=false.\n */\n tabIndex?: number;\n};\n\nexport function useAccessiblePress({\n disabled = false,\n loading = false,\n onClick,\n onKeyboardActivate,\n isNative = true,\n role = 'button',\n tabIndex = 0,\n stopPropagation = false,\n preventDefault = false,\n pressed\n}: UseAccessiblePressOptions = {}): UseAccessiblePressReturn {\n const isDisabled = disabled || loading;\n const lastWasPointerRef = React.useRef(false);\n\n const markPointer = React.useCallback(() => {\n lastWasPointerRef.current = true;\n }, []);\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n if (isDisabled) return;\n\n // Handle event control flags\n if (stopPropagation) e.stopPropagation();\n if (preventDefault) e.preventDefault();\n\n const virtual = isVirtualClick(e.nativeEvent as any);\n const isPointer = lastWasPointerRef.current;\n lastWasPointerRef.current = false;\n\n const input: InputKind = virtual ? 'virtual' : isPointer ? 'pointer' : 'keyboard';\n\n // If we have a keyboard handler, route keyboard + virtual clicks there.\n if ((input === 'keyboard' || input === 'virtual') && onKeyboardActivate) {\n onKeyboardActivate(e);\n return;\n }\n\n onClick?.(e);\n },\n [isDisabled, onClick, onKeyboardActivate, stopPropagation, preventDefault]\n );\n\n // Only used for non-native elements: Enter/Space should trigger click(), reusing the same click routing.\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (isDisabled) return;\n\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n // Trigger native click event so all routing goes through handleClick\n (e.currentTarget as HTMLElement).click();\n }\n },\n [isDisabled]\n );\n\n const pressProps: UseAccessiblePressReturn['pressProps'] = {\n onPointerDown: markPointer,\n onMouseDown: markPointer,\n onTouchStart: markPointer,\n onClick: handleClick,\n 'aria-disabled': isDisabled ? 'true' : undefined,\n 'aria-busy': loading ? 'true' : undefined,\n 'aria-pressed': pressed\n };\n\n // For non-native elements, add Enter/Space handling\n if (!isNative) {\n pressProps.onKeyDown = handleKeyDown;\n }\n\n // Return role/tabIndex separately (only for non-native elements)\n const result: UseAccessiblePressReturn = { pressProps, isDisabled };\n\n if (!isNative) {\n result.role = role;\n result.tabIndex = isDisabled ? -1 : tabIndex;\n }\n\n return result;\n}\n\n"],"names":["React","isVirtualClick","useAccessiblePress","disabled","loading","onClick","onKeyboardActivate","isNative","role","tabIndex","stopPropagation","preventDefault","pressed","isDisabled","lastWasPointerRef","useRef","markPointer","useCallback","current","handleClick","e","virtual","nativeEvent","isPointer","input","handleKeyDown","key","currentTarget","click","pressProps","onPointerDown","onMouseDown","onTouchStart","undefined","onKeyDown","result"],"mappings":"AA4HO,YAAAA,OAAA;AAAA,SAAA,kBAAAC,SAAA;AAAA,SAASC,EAAmB;AAAA,EACjCC,UAAAA,IAAW;AAAA,EACXC,SAAAA,IAAU;AAAA,EACVC,SAAAA;AAAAA,EACAC,oBAAAA;AAAAA,EACAC,UAAAA,IAAW;AAAA,EACXC,MAAAA,IAAO;AAAA,EACPC,UAAAA,IAAW;AAAA,EACXC,iBAAAA,IAAkB;AAAA,EAClBC,gBAAAA,IAAiB;AAAA,EACjBC,SAAAA;AACyB,IAAI,IAA8B;AAC3D,QAAMC,IAAaV,KAAYC,GACzBU,IAAoBd,EAAMe,OAAO,EAAK,GAEtCC,IAAchB,EAAMiB,YAAY,MAAM;AAC1CH,IAAAA,EAAkBI,UAAU;AAAA,EAC9B,GAAG,CAAE,CAAA,GAECC,IAAcnB,EAAMiB,YACxB,CAACG,MAAqC;AACpC,QAAIP,EAAY;AAGZH,IAAAA,OAAmBA,mBACnBC,OAAkBA;AAEhBU,UAAAA,IAAUpB,EAAemB,EAAEE,WAAkB,GAC7CC,IAAYT,EAAkBI;AACpCJ,IAAAA,EAAkBI,UAAU;AAE5B,UAAMM,IAAmBH,IAAU,YAAYE,IAAY,YAAY;AAGvE,SAAKC,MAAU,cAAcA,MAAU,cAAclB,GAAoB;AACvEA,MAAAA,EAAmBc,CAAC;AACpB;AAAA,IACF;AAEAf,IAAAA,IAAUe,CAAC;AAAA,EAAA,GAEb,CAACP,GAAYR,GAASC,GAAoBI,GAAiBC,CAAc,CAC3E,GAGMc,IAAgBzB,EAAMiB,YAC1B,CAACG,MAAwC;AACvC,IAAIP,MAEAO,EAAEM,QAAQ,WAAWN,EAAEM,QAAQ,SACjCN,EAAET,eAAe,GAEhBS,EAAEO,cAA8BC;EACnC,GAEF,CAACf,CAAU,CACb,GAEMgB,IAAqD;AAAA,IACzDC,eAAed;AAAAA,IACfe,aAAaf;AAAAA,IACbgB,cAAchB;AAAAA,IACdX,SAASc;AAAAA,IACT,iBAAiBN,IAAa,SAASoB;AAAAA,IACvC,aAAa7B,IAAU,SAAS6B;AAAAA,IAChC,gBAAgBrB;AAAAA,EAAAA;AAIlB,EAAKL,MACHsB,EAAWK,YAAYT;AAIzB,QAAMU,IAAmC;AAAA,IAAEN,YAAAA;AAAAA,IAAYhB,YAAAA;AAAAA,EAAAA;AAEvD,SAAKN,MACH4B,EAAO3B,OAAOA,GACPC,EAAAA,WAAWI,IAAa,KAAKJ,IAG/B0B;AACT;"}
1
+ {"version":3,"file":"index66.js","sources":["../src/utils/a11y/regionAttributes.ts"],"sourcesContent":["/**\n * Returns ARIA attributes for a region container element.\n * Used for semantic containers that need role=\"region\" with proper labeling.\n * \n * @param options - Configuration options\n * @param options.titleId - Required. ID of the heading element that labels this region\n * @param options.descriptionId - Optional. ID of the description element\n * @param options.isFocusable - Optional. Whether to make the region focusable (adds tabIndex={-1})\n * @returns Object with region ARIA attributes\n */\nexport function getRegionAttributes({\n titleId,\n descriptionId,\n isFocusable = false\n}: {\n titleId: string;\n descriptionId?: string;\n isFocusable?: boolean;\n}): {\n role: 'region';\n 'aria-labelledby': string;\n 'aria-describedby'?: string;\n tabIndex?: number;\n} {\n const attributes: {\n role: 'region';\n 'aria-labelledby': string;\n 'aria-describedby'?: string;\n tabIndex?: number;\n } = {\n role: 'region',\n 'aria-labelledby': titleId\n };\n\n if (descriptionId) {\n attributes['aria-describedby'] = descriptionId;\n }\n\n if (isFocusable) {\n attributes.tabIndex = -1;\n }\n\n return attributes;\n}\n"],"names":["getRegionAttributes","titleId","descriptionId","isFocusable","attributes","role","tabIndex"],"mappings":"AAUO,SAASA,EAAoB;AAAA,EAClCC,SAAAA;AAAAA,EACAC,eAAAA;AAAAA,EACAC,aAAAA,IAAc;AAKhB,GAKE;AACA,QAAMC,IAKF;AAAA,IACFC,MAAM;AAAA,IACN,mBAAmBJ;AAAAA,EAAAA;AAGrB,SAAIC,MACFE,EAAW,kBAAkB,IAAIF,IAG/BC,MACFC,EAAWE,WAAW,KAGjBF;AACT;"}
package/dist/index67.js CHANGED
@@ -1,22 +1,49 @@
1
- import { useRef as u, useEffect as i } from "react";
2
- function f(n, {
3
- targetSelector: r = "#main-content h1",
4
- fallbackId: c = "main-content"
1
+ import * as t from "react";
2
+ import { isVirtualClick as w } from "./index75.js";
3
+ function R({
4
+ disabled: p = !1,
5
+ loading: i = !1,
6
+ onClick: u,
7
+ onKeyboardActivate: s,
8
+ isNative: l = !0,
9
+ role: d = "button",
10
+ tabIndex: D = 0,
11
+ stopPropagation: c = !1,
12
+ preventDefault: f = !1,
13
+ pressed: P
5
14
  } = {}) {
6
- const t = u(!0);
7
- i(() => {
8
- if (t.current) {
9
- t.current = !1;
15
+ const e = p || i, n = t.useRef(!1), o = t.useCallback(() => {
16
+ n.current = !0;
17
+ }, []), m = t.useCallback((r) => {
18
+ if (e) return;
19
+ c && r.stopPropagation(), f && r.preventDefault();
20
+ const y = w(r.nativeEvent), C = n.current;
21
+ n.current = !1;
22
+ const b = y ? "virtual" : C ? "pointer" : "keyboard";
23
+ if ((b === "keyboard" || b === "virtual") && s) {
24
+ s(r);
10
25
  return;
11
26
  }
12
- const o = requestAnimationFrame(() => {
13
- const e = document.querySelector(r) || document.getElementById(c);
14
- e && (e.hasAttribute("tabindex") || e.setAttribute("tabindex", "-1"), e.focus());
15
- });
16
- return () => cancelAnimationFrame(o);
17
- }, n);
27
+ u?.(r);
28
+ }, [e, u, s, c, f]), v = t.useCallback((r) => {
29
+ e || (r.key === "Enter" || r.key === " ") && (r.preventDefault(), r.currentTarget.click());
30
+ }, [e]), k = {
31
+ onPointerDown: o,
32
+ onMouseDown: o,
33
+ onTouchStart: o,
34
+ onClick: m,
35
+ "aria-disabled": e ? "true" : void 0,
36
+ "aria-busy": i ? "true" : void 0,
37
+ "aria-pressed": P
38
+ };
39
+ l || (k.onKeyDown = v);
40
+ const a = {
41
+ pressProps: k,
42
+ isDisabled: e
43
+ };
44
+ return l || (a.role = d, a.tabIndex = e ? -1 : D), a;
18
45
  }
19
46
  export {
20
- f as useFocusManagement
47
+ R as useAccessiblePress
21
48
  };
22
49
  //# sourceMappingURL=index67.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index67.js","sources":["../src/utils/a11y/useFocusManagement.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport type { DependencyList } from 'react';\n\nexport interface UseFocusManagementOptions {\n /**\n * CSS selector to query the primary focus target.\n * Default: 'h1'\n */\n targetSelector?: string;\n /**\n * Fallback element id if selector target is not found.\n * Default: 'main-content'\n */\n fallbackId?: string;\n}\n\n/**\n * Generic focus management hook for route/state driven UI transitions.\n * Useful for both route changes and in-page multi-step wizards.\n * \n * Always skips first render and uses animation frame for safe DOM timing.\n */\nexport function useFocusManagement(\n dependencies: DependencyList,\n {\n targetSelector = '#main-content h1',\n fallbackId = 'main-content'\n }: UseFocusManagementOptions = {}\n): void {\n const isFirstRender = useRef(true);\n\n useEffect(() => {\n // Always skip first render\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n\n const focusTarget = () => {\n const el = (document.querySelector(targetSelector) || document.getElementById(fallbackId)) as HTMLElement;\n if (el) {\n if (!el.hasAttribute('tabindex')) el.setAttribute('tabindex', '-1');\n el.focus();\n }\n };\n\n // Always use animation frame for safe DOM timing\n const rafId = requestAnimationFrame(focusTarget);\n return () => cancelAnimationFrame(rafId);\n }, dependencies);\n}\n"],"names":["useFocusManagement","dependencies","targetSelector","fallbackId","isFirstRender","useRef","useEffect","current","rafId","requestAnimationFrame","focusTarget","el","document","querySelector","getElementById","hasAttribute","setAttribute","focus","cancelAnimationFrame"],"mappings":";AAsBO,SAASA,EACdC,GACA;AAAA,EACEC,gBAAAA,IAAiB;AAAA,EACjBC,YAAAA,IAAa;AACY,IAAI,IACzB;AACAC,QAAAA,IAAgBC,EAAO,EAAI;AAEjCC,EAAAA,EAAU,MAAM;AAEd,QAAIF,EAAcG,SAAS;AACzBH,MAAAA,EAAcG,UAAU;AACxB;AAAA,IACF;AAWMC,UAAAA,IAAQC,sBATMC,MAAM;AACxB,YAAMC,IAAMC,SAASC,cAAcX,CAAc,KAAKU,SAASE,eAAeX,CAAU;AACxF,MAAIQ,MACGA,EAAGI,aAAa,UAAU,KAAMC,EAAAA,aAAa,YAAY,IAAI,GAClEL,EAAGM,MAAM;AAAA,IACX,CAI6C;AACxC,WAAA,MAAMC,qBAAqBV,CAAK;AAAA,KACtCP,CAAY;AACjB;"}
1
+ {"version":3,"file":"index67.js","sources":["../src/utils/a11y/useAccessiblePress.ts"],"sourcesContent":["import * as React from 'react';\nimport { isVirtualClick } from '../virtualClick';\n\n/**\n * Hook for accessible press interactions (pointer vs keyboard vs virtual click).\n *\n * Handles:\n * - Pointer intent tracking (mouse/touch)\n * - Virtual click detection (NVDA browse mode, etc.)\n * - Routing to appropriate handler (onClick vs onKeyboardActivate)\n * - For non-native elements: Enter/Space → activation\n * - Optional stopPropagation and preventDefault\n *\n * @example\n * // Native button (isNative=true, the default)\n * const { pressProps } = useAccessiblePress({ onClick, disabled });\n * <button {...pressProps}>Click me</button>\n *\n * @example\n * // Non-native element (div acting as button)\n * const { pressProps, role, tabIndex } = useAccessiblePress({ onClick, isNative: false });\n * <div role={role} tabIndex={tabIndex} {...pressProps}>Click me</div>\n *\n * @example\n * // Element nested inside clickable parent (prevent event bubbling)\n * const { pressProps, tabIndex } = useAccessiblePress({ \n * onClick, \n * isNative: false, \n * stopPropagation: true \n * });\n * <div role=\"button\" tabIndex={tabIndex} {...pressProps}>Click me</div>\n */\n\ntype InputKind = 'pointer' | 'keyboard' | 'virtual';\n\nexport type UseAccessiblePressOptions = {\n /**\n * Whether the element is disabled\n */\n disabled?: boolean;\n\n /**\n * Whether the element is in a loading state (will also disable)\n */\n loading?: boolean;\n\n /**\n * Handler for pointer/touch activations (or all activations if onKeyboardActivate is not provided)\n */\n onClick?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /**\n * Handler for keyboard + assistive tech virtual activation.\n * If omitted, onClick is used for all activations.\n */\n onKeyboardActivate?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /**\n * If true, this is a native <button> (or other native pressable) and we MUST NOT add Enter/Space handling.\n * Default: true\n */\n isNative?: boolean;\n\n /**\n * Only for non-native elements (div/span). Defaults to 'button'.\n */\n role?: string;\n\n /**\n * Only for non-native elements. Defaults to 0.\n */\n tabIndex?: number;\n\n /**\n * If true, calls e.stopPropagation() before invoking onClick handler.\n * Useful when element is nested inside another clickable element.\n * Default: false\n */\n stopPropagation?: boolean;\n\n /**\n * If true, calls e.preventDefault() before invoking onClick handler.\n * Note: For non-native elements, preventDefault is already called on Space/Enter keys.\n * Default: false\n */\n preventDefault?: boolean;\n\n /**\n * Toggle/pressed state. When true or false, sets aria-pressed on the element (e.g. selected color swatch).\n * Omit for non-toggle buttons.\n */\n pressed?: boolean;\n};\n\nexport type UseAccessiblePressReturn = {\n /**\n * Props to spread onto the element. Includes event handlers and ARIA attributes.\n * Does NOT include role/tabIndex — apply those separately.\n */\n pressProps: React.HTMLAttributes<HTMLElement> & {\n 'aria-disabled'?: 'true';\n 'aria-busy'?: 'true';\n 'aria-pressed'?: boolean;\n };\n\n /**\n * Combined disabled state (disabled || loading)\n */\n isDisabled: boolean;\n\n /**\n * Role for non-native elements (e.g., 'button', 'menuitem').\n * Only returned when isNative=false.\n */\n role?: string;\n\n /**\n * TabIndex for non-native elements.\n * Returns -1 when disabled, otherwise the provided tabIndex (default 0).\n * Only returned when isNative=false.\n */\n tabIndex?: number;\n};\n\nexport function useAccessiblePress({\n disabled = false,\n loading = false,\n onClick,\n onKeyboardActivate,\n isNative = true,\n role = 'button',\n tabIndex = 0,\n stopPropagation = false,\n preventDefault = false,\n pressed\n}: UseAccessiblePressOptions = {}): UseAccessiblePressReturn {\n const isDisabled = disabled || loading;\n const lastWasPointerRef = React.useRef(false);\n\n const markPointer = React.useCallback(() => {\n lastWasPointerRef.current = true;\n }, []);\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n if (isDisabled) return;\n\n // Handle event control flags\n if (stopPropagation) e.stopPropagation();\n if (preventDefault) e.preventDefault();\n\n const virtual = isVirtualClick(e.nativeEvent as any);\n const isPointer = lastWasPointerRef.current;\n lastWasPointerRef.current = false;\n\n const input: InputKind = virtual ? 'virtual' : isPointer ? 'pointer' : 'keyboard';\n\n // If we have a keyboard handler, route keyboard + virtual clicks there.\n if ((input === 'keyboard' || input === 'virtual') && onKeyboardActivate) {\n onKeyboardActivate(e);\n return;\n }\n\n onClick?.(e);\n },\n [isDisabled, onClick, onKeyboardActivate, stopPropagation, preventDefault]\n );\n\n // Only used for non-native elements: Enter/Space should trigger click(), reusing the same click routing.\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (isDisabled) return;\n\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n // Trigger native click event so all routing goes through handleClick\n (e.currentTarget as HTMLElement).click();\n }\n },\n [isDisabled]\n );\n\n const pressProps: UseAccessiblePressReturn['pressProps'] = {\n onPointerDown: markPointer,\n onMouseDown: markPointer,\n onTouchStart: markPointer,\n onClick: handleClick,\n 'aria-disabled': isDisabled ? 'true' : undefined,\n 'aria-busy': loading ? 'true' : undefined,\n 'aria-pressed': pressed\n };\n\n // For non-native elements, add Enter/Space handling\n if (!isNative) {\n pressProps.onKeyDown = handleKeyDown;\n }\n\n // Return role/tabIndex separately (only for non-native elements)\n const result: UseAccessiblePressReturn = { pressProps, isDisabled };\n\n if (!isNative) {\n result.role = role;\n result.tabIndex = isDisabled ? -1 : tabIndex;\n }\n\n return result;\n}\n\n"],"names":["React","isVirtualClick","useAccessiblePress","disabled","loading","onClick","onKeyboardActivate","isNative","role","tabIndex","stopPropagation","preventDefault","pressed","isDisabled","lastWasPointerRef","useRef","markPointer","useCallback","current","handleClick","e","virtual","nativeEvent","isPointer","input","handleKeyDown","key","currentTarget","click","pressProps","onPointerDown","onMouseDown","onTouchStart","undefined","onKeyDown","result"],"mappings":"AA4HO,YAAAA,OAAA;AAAA,SAAA,kBAAAC,SAAA;AAAA,SAASC,EAAmB;AAAA,EACjCC,UAAAA,IAAW;AAAA,EACXC,SAAAA,IAAU;AAAA,EACVC,SAAAA;AAAAA,EACAC,oBAAAA;AAAAA,EACAC,UAAAA,IAAW;AAAA,EACXC,MAAAA,IAAO;AAAA,EACPC,UAAAA,IAAW;AAAA,EACXC,iBAAAA,IAAkB;AAAA,EAClBC,gBAAAA,IAAiB;AAAA,EACjBC,SAAAA;AACyB,IAAI,IAA8B;AAC3D,QAAMC,IAAaV,KAAYC,GACzBU,IAAoBd,EAAMe,OAAO,EAAK,GAEtCC,IAAchB,EAAMiB,YAAY,MAAM;AAC1CH,IAAAA,EAAkBI,UAAU;AAAA,EAC9B,GAAG,CAAA,CAAE,GAECC,IAAcnB,EAAMiB,YACxB,CAACG,MAAqC;AACpC,QAAIP,EAAY;AAGhB,IAAIH,OAAmBA,gBAAAA,GACnBC,OAAkBA,eAAAA;AAEtB,UAAMU,IAAUpB,EAAemB,EAAEE,WAAkB,GAC7CC,IAAYT,EAAkBI;AACpCJ,IAAAA,EAAkBI,UAAU;AAE5B,UAAMM,IAAmBH,IAAU,YAAYE,IAAY,YAAY;AAGvE,SAAKC,MAAU,cAAcA,MAAU,cAAclB,GAAoB;AACvEA,MAAAA,EAAmBc,CAAC;AACpB;AAAA,IACF;AAEAf,IAAAA,IAAUe,CAAC;AAAA,EACb,GACA,CAACP,GAAYR,GAASC,GAAoBI,GAAiBC,CAAc,CAC3E,GAGMc,IAAgBzB,EAAMiB,YAC1B,CAACG,MAAwC;AACvC,IAAIP,MAEAO,EAAEM,QAAQ,WAAWN,EAAEM,QAAQ,SACjCN,EAAET,eAAAA,GAEDS,EAAEO,cAA8BC,MAAAA;AAAAA,EAErC,GACA,CAACf,CAAU,CACb,GAEMgB,IAAqD;AAAA,IACzDC,eAAed;AAAAA,IACfe,aAAaf;AAAAA,IACbgB,cAAchB;AAAAA,IACdX,SAASc;AAAAA,IACT,iBAAiBN,IAAa,SAASoB;AAAAA,IACvC,aAAa7B,IAAU,SAAS6B;AAAAA,IAChC,gBAAgBrB;AAAAA,EAAAA;AAIlB,EAAKL,MACHsB,EAAWK,YAAYT;AAIzB,QAAMU,IAAmC;AAAA,IAAEN,YAAAA;AAAAA,IAAYhB,YAAAA;AAAAA,EAAAA;AAEvD,SAAKN,MACH4B,EAAO3B,OAAOA,GACd2B,EAAO1B,WAAWI,IAAa,KAAKJ,IAG/B0B;AACT;"}