@pixelated-tech/components 3.9.17 → 3.9.18

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.
@@ -17,8 +17,8 @@
17
17
  .accordion-title {
18
18
  cursor: pointer;
19
19
  padding: 1rem;
20
- font-size: 1rem;
21
- font-weight: 600;
20
+ /* font-size: 1rem;
21
+ font-weight: 600; */
22
22
  color: #1a202c;
23
23
  background: none;
24
24
  border: none;
@@ -62,8 +62,8 @@ details[open] .accordion-title::before {
62
62
 
63
63
  .accordion-title h3 {
64
64
  margin: 0;
65
- font-size: inherit;
66
- font-weight: inherit;
65
+ /* font-size: inherit;
66
+ font-weight: inherit; */
67
67
  color: inherit;
68
68
  flex: 1;
69
69
  }
@@ -10,7 +10,8 @@ const categoryIcons = {
10
10
  'Content & Management': '📝',
11
11
  'Support & Maintenance': '🛠️',
12
12
  'Ownership & Legal': '📋',
13
- 'Services': '💼'
13
+ 'Services': '💼',
14
+ '': ''
14
15
  };
15
16
  FAQAccordion.propTypes = {
16
17
  faqsData: PropTypes.shape({
@@ -55,7 +56,8 @@ export function FAQAccordion({ faqsData }) {
55
56
  const accordionItems = filteredFaqs.map((faq, index) => {
56
57
  const content = Array.isArray(faq.acceptedAnswer.text) ? (_jsx("div", { children: faq.acceptedAnswer.text.map((paragraph, pIndex) => (_jsx("p", { dangerouslySetInnerHTML: { __html: paragraph } }, pIndex))) })) : (_jsx("div", { dangerouslySetInnerHTML: { __html: faq.acceptedAnswer.text } }));
57
58
  return {
58
- title: `${categoryIcons[faq.category] || '❓'} ${faq.name}`,
59
+ /* title: `${categoryIcons[faq.category as CategoryKey] || '❓'} ${faq.name}`, */
60
+ title: `${categoryIcons[faq.category] || ''} ${faq.name}`,
59
61
  content,
60
62
  open: expandedStates[index] || undefined
61
63
  };
@@ -1 +1 @@
1
- pxl:v1:c70cbe09dc837373c6f97231:63d645cc86fe3d8ab9ed584e12567337:de5401e0f619e7bc50e6333ad1dce44aa01813cf21d55ad9a607b7492a46295e65915a988c3809c1cef0048c3a6a08d6ac73e35b951bfd442a4d8a0db29f0e004d244f7a01dfce7e92fc3b099f5d9f16cb1783ce383d9b4e20b4ec1dfe28761ccc1dde660d0e53be13c7adc4421b9ba775be16ad44368d4f45f821e9b03823c41a49434823e33a0b61e2886b85fa68f73bf2f1789e8096796d32438a116051d99e121795aae13365f27a68ea07f4261bb63ba5e3ce52033efc2a64d2681962bbe5ae76e5f0b1c265815ef651557727ec362c9fd0f92eeda070c1468578e0b30c23d764dd9ca0be56ffc28d61834702aa601dfb5df093d25f71e4255c9f34cae0f8a09512220468642249e477d53bfa1cd22b2c5b83fc5f995812bdf5f18056e87551e6f29f72a8c37fe119f3cf895cd88f4eda02c509a1ee469c48043a00f01e69320454262165aeb499c981cf765ecebc40a5a0b99d9dbd991e11fbc1a1c4140e1fa21652edeaaa569e064bfe063e72521b4bb43d6603be1f1ead52536a52beeac985d91ab3b6e20b1d0e0bfefbe1a56340801736cf3a82fe6dc7b663d9cd70d68669894cc79ff0b992809a0910f7f2d42abfb86b64e4cf2e126a4ebab8976308ff61ea414cc33153c5feaf40f68cb7b61952f048761d75878cb57aeaf3a4ef04e754c560e268192749c6dc07b4488caafd5e1dcd09ac94523f7e9a0242a4ae85de3d045d98ba5a96af9d5068a8054728cd99f37cda73ccf8b46a5cb3978444e1e7d2a5b9a2ba90bb855c7e0ab9f13d78e9b234777109061565185775d369037c84505ab5bd224e91eea59ad32b64fd56d5451c9ac490c6cc479f4e6d76a02484a1aa9735979134a3b8b966817cd518e1d930d668f0f7fdfdda39e577bdb9a8332fd9dc1c60de418e51842965ab88d48469e6122c96e46a4302916a59cfae10957c91a7ac45f059fdb9429b993ac1705ab1a6fc43218f46c1b968fd00e41e11e7e2e4b7b69df78156cad91d30e7ab0d332fd99d1a6883d6a83d0cd713fa39cac6483ffef4f8603b8f9522d4f06968dd04eda944b152e056b173bed76609d1a9894bf6e35c1368f17e76ecc794792ed4b4444b924b6867599da45b208fe50ef540f99ac1fbe22b8ac4ceaee2ad069e96726c4740bb15fd12d50b9718cfed9a6eefc5db4bf86c78ab847d00043033f9991dc978ca5c5f1555e77ef04ff00d83da505bc8141ae1539b0e1dd3f42730fee6ba5d6fc02788df8a0489ba4f1b2542f6fd87b76c2bbb93330c165230d7c767bd51387ec8730bae8d435187da55cfb1deb10be60a80be7d29aa27772b2ecbb4340c0901574c8fee44d2c23b4c9d5f012671a260ad62dde2f1f95d6d6892c90a5fd57b20f3c36e10ad28083981685aea41774f828f5b379a0ae5041ea0d29aebf09e62f0ffaa789b3e6616270a3f6e74a5edd7ed18716f157af8af96c959021ba8553be53db638e3663c21a40d4932702163dbfd5834fb4a7f113bdc4d29346b7238e4461324ed2b614ee4a6e434d1207a824864aea955b24090f8e82320b395dc724defa313b3711ca8dedb1ede348367c8879a5c46aaa90bb57581b7643012fa19ca0c6d8956d4c8b8b50b1a077d4c3e3f5ee802084939b5c7a0c9113bcc06d787411d0c3e4a9f8177f0ec89bba4d0d7ff0a30751daadf6e762ac910f0298e4d3ca0d278f27dfaf16ec0d13533aeab259aa3f896f5018b4fd6b7a8b8b4002c3008e4cf8fb7f550e228579cb459c167095da7eb1930a1504325ad30b08de63df8854f7b47becf4e82d19629ba5ee2ae0a43d74f4af216b38db702b4d7325abc47dc9e9ead359f5f892dee204ec12a4dba509c2fe4892d2fe6fcac1911116fd01a5901af1c60b107ae53a588fb2bfadfa88fdcf2b7ddbd14c4d658ad2b580004cf888379c3339a95e93b7e03c41068b6b2c27c8bc29cf8c075f794f33ee5cff0ad08320c06c28b43308015c3ec4084062714aee486db9e0aa492637917f8a68d544515ec38546f9535f24d4fe44190a4cd7b75a8986f789fa083975f031339af222e6ad84da67d633c4afc7bfcc88c01ba16dc3d9f81952ebd4f2e940d427213fbe7628d1fb53c280c14599cfc6fa500e67abd3a989a275c605c0f2993d15a21a887df3e1d508cc4e5089eb3f5ab9f8a0f8e6b04f9f630025adb8986367f14a2523ddd12e46a9baf761a161dd1e28037d701e7f452784ceaf6e804d021ff29ab1043c6d088fc2942c8fa8c66bcc0c76ba52c4ec527d3327f598992a30390d3dcefc64d626b4a60c5320a7e02f10e6d55a685153cf677d519e2c521c36e35a5f64dc3a4bd05fc5a4201e2f04354646b8e539723eaaf112899f0d9b34a1b3370e6e65a41b474503d85f1052064430939732e7b1212df608011d9e220965ab48c7c4925f81437d7d3c93995f0d6f9f92ec74d4faf4ffdf3a25c8eb4df5140e1afa3f5409edf52eb2a2c14e0b65d9d0ccf9f3c435fcd51676d0db022705a517a732634b2869e01ad3a2669aa84c9ced95dbba2203bc0134944b568a0d9dce086b7dfbd11b4066e2572d1d4c00854cd476fcb27a7b8dd262ba9da2de4da1db90f47ad3053967e24de047fde2e7dbd8933176cf47b2cd51297d5aafbbfd801b71df15768d159a69556acf580f012b6230891b6b5fd61c9c80ef7f7a76a12b4018cad6e2d419b072e9622811253cfa73cc780a310cedd439797bf2aceb7d9855c8ad06e6e2b7daacc0c93d89cdc265b27d8d46d1101ba1518bfad0d5dc869b0c1d8879ee8ba85ff41aae3adb7a3a4c85b939b15591b022ffa43b89ec305668f755a230e59362007a035421f4ddd0b1ee4a4d4f18db66d758a9bfb8d26610f0e340153d551dfc11c48ae816de02e2aaae4d4b2b6a2aaa2c5c11d4d2ef5410bd0b230c8e9d0bacce1906fffdb0e28d5ccdfb54682845bbe59906d3e50b896f888a5eb91120c1192046228a27e9e8a13d525c7d1df963d947a71bb95cd07a4526bf61c8b3986e8963871e94bc8e7db723cc9646fed49b5f823c601aa12dc2c61c2f4035e6a2f68793d31285f1d54b195b8a3126677ebcba699ba055beef1adae9c29213faf38a6e7cd889bb7ff37e6cda3e0ce5bc1274dd2b373da6fff9e9cae18e714b9a43698b1e3ebd31b3a2abd8bdcf500834b5aad1ec8220e1375b558cf53459b4f77d1746abfb6311c9b0f12035642bd307ca926622c07ab5b68487a41cb90f503303b33f828c48dabc4076b0a72e4aee69e367e4a8e145ad5955afa4a901ba32acd46f75b7f7cf9f9e8f0557a5687f8097ca8f0af694cee2f2adff0d31683c0526f99c29e6bf54c62f71f61315b566fd9aa15131722e07a27b014632a82b9f6746ab8c9e2826d37056aff5658303f0c6e5d3a08616a3c49be7ddc1f6b7e0f2bed7a9d17b5fdbc9e99aae9e3ccf683da49b5123ea90cc25887751c2bbc3b931b0fa2891cbd2619aad145898a71105e393284311f39a642570540c7d8936e0284c269b178f1aca07a7d378caeabb7273ac2b114120caf05080d27485f11515313561b4b7cc573da43745b623b56ac4facaa6e970f2f191422ba45d12744754d290034694b2f7eb950c225e0b53907ea68985e3b2c27eaba4ecf774a24aba842826d73c2fc5b1e2671c80a392bbe72c45c0bdca3e62d3a87fddf6684187b577e9d3da21833747e6d25d15b06e035d892acf1242e4a739e844c9b1a62592ba83eaacdcef19cbeda4c9f5fa152a8219f735b8c3d43553b799fbedf1013883f9aee7b3069650f53b117790261d2b48e1fe289061aaca736dbaa8118a836b5b1045bfe4e2707829ee2d9fb978814f79fd2be61f36c3d490e149201731fc3c38685de1620306340a5259d62550560c9e36f1b60c0264b5a64e865f5cf21756fdda21270111d02e13947a651b14056296d268c1b9b89edfc983233541797a70c7831a361b94d830c96f02765ed2bd27cb15c4f06228d723db97c61ef679074960db5bcd533d88485589224412cbd02676d63a70588c4d864c9eb20703d8413749d4ec2195a118524ff63097750c68e991b6a53971ced2ad22d22c13300af131a8133b64c68095e4f4a52689a9368d339e0ec0b769f0a83e7002fa02ad4c954499680fd93c42d0e8aa7864eac7bad8aea8c560815ba620e55f6157b20e937db6d02a6abc3f04588c07e1f02445a0c01230316def1f7f4fb7bedecf8d49034dcb27aeabf3a733e8c02160ef1a91909edc20a49266a38eae88e83f66a6809a0a9edefc8feeba2bced621cbba28a3a400df83f152292e3a9ad0074599a90387fbd67bbe9a9c64611176ee81623283839e3959304b5addca8e5875b32f84a0b446bbbe391c323c41f7aeee5a992419da68f5fd47da1b3a227c8532eebe46fd3491f02ea9e11ab4932a74a0770800301c311afb2af8918511fe6d2051a4af053e34629543e23870b064173b0b8bde9ef6745b62b6f6ff9f6a54d138ff3fcc6fd710d3f136a3780269d2d92babd145319aa64e441c516426640dfde81d70a07f24c8956d512a9db47c1d3d928d56bf183206b8f67f2fb91dba8bab52f23e477db35d633e5a63e22daa78b33d28dcceb7820bb43ec99cc8a1a30164c5a0a090bc2065df37f184ab3075618917222cc4f2bbf8680e881507124b5f0b7460a1a590ee142d9fd4097cd9bd375cf4f14b9b7b21243456752f100e07d25818e7e7383637fc6c96ecd60c91ac6bd8ad82b3efcf60ad0f874ae681f896ea249478e1fc1eda90417d7352bad6b06a67cfa70a0b2d6f5063da403c182eebd05896e20e4dd13f409f34a6afc8c378bb42966c0ade4368275feb11b642d5038e8cf01a9738bd09f10a49fb4daf9d84bdcf5703bf575125369b15e59a980511187a9a5365fe5aa43fd68a012d673f6899e919d0e7ef5223bd594c1b0035ed1bed609f2e38e46e8311b58b9706c7dbeec8e0d3887e6f5dfb611df3ee8a67a122cda70d8dbf5dcf299048c85408d32765c0fb9fd2febb8c1d067f6d2fe8d82ce499197943f22d375f8cc4c5546a23136b08bc90b288abea36e22b87e8bd37bf3aa9dbeb1f643da7a42fb01a245a892db4ae375365d3eda2a0ffe83fe953d0cdfbfd46a6869dd13b5953d4343c452f0f66b2825cb6a819e586fd53ea7c3b8dc7a8bf2e09c28747e7e9883be9a50ae
1
+ pxl:v1:e782f45daa51bb928539fac3:115a6b53f654fd4fe26a72c37a21cdea:16c14158f160ce9e53070dd7776d016d98f1355027a0b150c66e85da0f88422dd7770d25f1cd03f90d52d0743d12df1df936ca7266b12da0a5e9e872825985cb3da3985ed65e9d95509b653c5f87632d0847bf417e1b7fb36ec973964d912178f9acb8fa8f63bd9df93196f73521971dfe2c3cbc69f9fcaab1ac29c1c40ba802ff7bfed9a880efb099920eefac4f16bb01de23bf1fe57aff4597eb3bc4fee3e7e0715bf81f653ac06e2d7c7835b775176e61dcca434ae3da1f1983226513ae9e2b4f70704e3387981904ebcab67bb4034b573ac28c331b8adb86025672351c0fde64380b80f16669ff5acf5293623cf87ae06bcefbf65046776c582fc87803b777f0cc4edef5f3eeac96ea41e9daee0ba16e62e581487e899ed8101dd5f0f043b32c128578cd4e2613d690ce6a290842d42221cbb0ea91ded435314b188589329c09ff3602e3bfaa473975b5cf8833de0729cac2129a3b54206ca02de526e28e931d0fefb9fcf006cef8b2ce7ee8b9a558289f95029a92ea918b1f9cde77f163460d65a4c68b96ccd46778acf22075dd0b60840c3a9abc86b5e84f9daef1583388102acf2262ae9ff441ac95c0d49b069e67c5b1d3d700d89c305e6f6e24af2e06e623101515cde459564d2217c4d5b5bfe4b9a0c426306b0c354f51b7556be2d3bf7b7fcc36dc97697aee564bb8c75f9f8a7a279230902512d503309e1f072550cbbdfb40eeaaab2fbde2951ca4b6960fb9b2afae78ef00d03bb5a1e90d11684cb30b0abe79615e263872b88fdfe1f02aaa6bcc4d12e8d3bb0ef68be0f4682c745f838cf2fd5859aaae268d75a21b0bc89b8e63db17aed45bf7fe86c85a1f86ed7b95007821aeac7fcce94e1c4bbeabde111b43edd4a70f6332cd88ac6651ca033bedcab40eb635aa54fb748811ef304c574b1c15db0ebedb8d21fc1a7200a83b5960567c8a65c325a49c8a5ebeab063c95d94ce6e0625a77fe42d98d1afe1bb6c5f98b92d41487f20fcb771c2b9850514f6849c2849f23c4e845795efec2f7502101b1e6870eae0a7b0ee536d5e8589b87e9a1da0c5805c4be9fe3c91697267946bd3540a110da410f1b350b0b29f51ff7f06c2776d519e9a7aa94024324d6fe3ff4b84c8b5a2b7132e9fcd01a0d775d0553ad9b053eac28f98e255d98dfb75c6dbe995f8da1738245d94b5476d2f2933cc214fc1cca3c4246cff28c56843cca16c63bd8b95c161df6b1e2fbad299f9e010e6781d2e003cc472a0c030e07168b23abe475ef081269c56d8e8bd748a82e496ec5e21e3d62301b2956af2f30927f4cf52a3a83a00576e5a81a91b808f547b4c2c7472cf6933873b1941f64782e2447d4807b751777b38b9c84114ce1a29874ec3683dba66c2a9b4498acfd96d361c14b39135e98342834ece9dee616aa774594d8cfc755886fb7c737cab68c5577515866f10f886da7f92f0ac6b6c4c7cf63d74fd6291134e84950dbf1c00b250d5a13e56763b79abfe2b66c01e5fdce64d15fee6cde069bd2cc1570f4201fde7b9bfc53f9b9ca8a64e85a261e23356548150043180fcb8466dea7b9711d89f147fb718d93ed8177b5f59b6510ec747728f580597f36a39a891f25bd35c55aba9d7cb0e9644d1b6c428d8a7110ee330cce1c28ce8cc8cebd638f9f5101a87e060a1fb903a934a4c9d87eb7d47f5d3172c19f05fadb52291a2b54d2861341066217b2976878597caa0f411cc269669127f4c4316b594085ee9422f4124bde8856455b58784ad74d7b2ec8e4ca886ce01fc5c35585245da981e5a3f51a6a640d77fc5fd547b74d1047ae05d91c62f533f7ca8c46f71a4dd9634b9f7a2248a85a0133afeb4eb5170952dcd9c35d5756872e523d84ad6401a0f294239b1327cee4bb0a8b31f40a6ad0a7b7abd3217364ee197b37a4ac8411da33dd0dd9040247517de7ac2c25af805f14bef2856ee0418b2d99a6359b77493dce9c2bfdc1c10c9af103a801a58395b5b4b9f82934bfeda0dfefd5c12f7d946ffaf55d0f556ee3f76dfd0ca3ac7ca3faa5b263cc6c79771353e81a36ce25cc083764f7e2e949f65f7e00d656037c277065d94aa1614f8d3f65b59f004995903d03c8f674d26303704eb98b7f87681a5485a52f0a9ea3d1192bcc57b873b67303793f4a83bae61b166574bb4e85969a50157c031a25d0890fe2df943071db1993d848df88ef98a0102104c61b8d2d6354b8b1c0e87e417aec9b7a3ae01f9130df7c1654517b3d169613c1dbe94b8a75fa1eccb085f0292d312625039947c04cede0591575b1c81ff4d7fbb6183fed8b954af014eb77500ecfef90dd30c366f297a8a5ffa8ec84e24af2d22db51f0b7bc2444e72766401c0565fcf7e6d20274959895c25419faa3d533062f410d6fda5b682a231c3edcd905b05021dcf74c5d667a07a4873f82963c0696b4db4e4867969681278e03044ec5ecd73ee95801fd1965287c0fd78df966a82c9bc62601ab50753b3992d935ee1d76e639b84ffa811fc48535e001130432b758c64842b1ffb9d7b6fe28cfb25a14d6ba086621800cae5613583449e77d036f2b2a2748adb48a3ca1634ae4d9888c984eba30165f7b2653a53173d3166494b20ec74ce98bcb03343d9d2bd70d805a00667987a1f11e64d76f8c41f38f0a1c70514f2455ee11202cf55c31f5abc88690437daf3a761850c5cf91fb91d3c9424e18c3932703326029c03f8c18969b5a59cec8fd755b66ee972dee5c90637b8cadbb1319fdba26e1f783c12eb79d290aebb84b24b274f99f9e7b1a106dd947044d7dd9f5047f45cdeacfea3d419fd3530563bea5969543aed03e2eca3a7186f9ad461601644b475f063f0aa35797709da3dfbd13bf51b4bd47b5dd6701efa7637bda9002ec10a1235c08f8e5b4ca2c63acaff2cdfc4528ca9813117786ac776269f2d590bc3ed0537c547c6083ef306a80b7197bbe514c4f6b672cee07516af002146f6580162463a2591b61cb514c2c299fecc13cd78961a8768283aad580f61107e07caf0742c4c0d7472cd851fd14ee12fbde0e665aa0ab62723b67de7bc3e83a5177b9d47d67504cc2604617a85eeb58c414958483443cf861a326fd7cc6364de17ff220fd9fcf75e9615ae7b4127bbf0af7562c6a2b3603cb81f9e6185b68e830592b1b332828648aa6dfcfb689343ac29941ddc71b36dcfda990bd2ea168f653c3789881de424503a658701acd9eb15fffe9eb9673e7a9fee71553526157bf19b9dc463e0ea599333a4cac639d6479580576fdb2875701461ad663fdc65d4e81fe26c3929d1fd1bbfffe1d8dcc37d801f83fab3f83a047945df7b22d05d393148ffb4a78cf642d0c64d1d2c075905ee8846f7307257c826fd19da00dd1ff2fd1015b831af7bef16baf067532087a83fbf24125085cc066d465cf1a16517575335889e5c676e808491b5c7bcf0428aafa0c1f9ac0f383ca192fe294591a82d839d4ea6106f07510a479ac3927383f9e0322d2c8cfe145a6504f89f541d4868ab4ceeb2c4ed464e481f047399f7d2d2901762abb86c05d4d40abf912606e173df0cb8ec9a95c5af9db8e78d70e40d5f916372fbf1e0237564ea222e126ad54c756641c8e9bd962b5cf7634ea60b80462562b10fdc7ef7f7164084db690ec60c13f02deea52a8d67990a44abc866cd706e8caf11102c1c15a694e7d31ffd7259f174f748c8d58214d52fcddc7cefa5d0d4ed6bd9c0fe0dd9564430b2064b98af41aebec95055bed3806a1c1e5e43b02d9b5d9488520efdee2439795ef3ad515d6cb7c77712c17191d1034f194666495c1fcc041d673db059c61f15ce49b2dab93653f54cb26ba66b60705c464a0ae30d089d1aa6977f7f95e960234a50ca0f879d87ccac777749fcfd282bebc511469485ad5b062fdf8c0d41e8e74ac8c6fcc76ecf0c370bfa5b01eed1d2d84d0d799609b671a0faa2af74c0833de5cff09826a82e3906b2ef0b135d3a19ebfe86c1869d97b36a0e17d9c8a36308486c2f18e2f37d209b93c06b740e8708318a63535e81bbf041a85efc60fa3806d844da736e869cd085ed22e3e39b31948cb360918393bf910b3691c2758b8220dca7b18852bf4b62e957f617a8ef176e5b4d3749ab80bfe9d7ebf6e5079d96ec972a3be7c1e9b81c0aa40fdcc48e59fe281f0d5afef13f981ac48f7e2ec5dd17b598225130998f0ac0740796ca7bdac8aca59bab8d8574c904dfb40b3a7ebca11ed658024992c894b548db90ab0ee64f76e9efaad5965325d38fd69b14d6dcc66a1e14b301e5da5e1bd6ad85e3c3170b22c0d1e723a5c087047e8257fd2315da98eb13116f7ca043c3f81aa67a86bb80cd679191ca557ed700c5fa11ba75e038fb9f44c42b82c73fe3faefb4664419663f9166c3cc729274c89b6bc86888a7ccb9cf7509e8cdb62b5b82c037cd37299bff061a5523da8357c0f0415c6930adadca35f866577e0a00f5bc20ae53eabf8c37d8c95b8e54a905f8e8bfd6b73d601fcde08e72e99abedf123f00570d3790660ae8110abff5d0f14b24da298fc7a42698d89679a62c3321d7b9d437b3a17d2880953a226123c37645d2505fa77433fd475d909c2252f83e32249066c5a902440aaf7397d4995051c72c64c395145259b68cfdefed47a8f8721e4816f6cd03e76b3c55b45028b4e740e5c5f3861dd981344aad041777e46e5d78619b66a64b67be410e57989b2f95dd8cdd9f56533e03bc7257dd243998579263ea00f69a8770d6984b173941f617327835cbfb150c0adf64b4143e23e33d451d0f3aaa5bdaa674fa140a2354672c62f0a27fdaee5f67887c13a1b04afb3d07ff5946fbebd62b62052c27a7c133e406b22f738efaa23af3a8aa7f6b3f6e78c61cb7fe42585395822f3f9a42f57e9ed93700c4679c2538d23e2df32a45918d39c3580c406cba0f3c1e96d08e207c3be5193d3a7a7e865ada35d0b19fab5625ca48f737e205d52afed1c6140c703bb3ad80e73d69da475222efee5f92aa98a6f590da6c666f81e65e6bc94c6122a7c98ca8891f5fc36d240de206a01933291a30e6c6bf34aa769ab9594a54f021b9f84ec46f403c324b50f87cc9540d11bb0a6e2a02d8c1fc3c0f36377d73530a61f5e165af302ea1ea24cd4c69e203cd91d8d63dc08a9804072701
@@ -428,8 +428,8 @@ const requiredFaqRule = {
428
428
  recommended: true,
429
429
  },
430
430
  messages: {
431
- missingFaqPage: 'FAQ page is missing. FAQ pages are strongly recommended for every site (src/app/faq/page.tsx).',
432
- missingFaqSchema: 'FAQSchema is missing from the FAQ page.',
431
+ missingFaqPage: 'FAQ page is missing. FAQ pages are strongly recommended (examples: src/app/faqs/page.tsx, src/app/(pages)/faqs/page.tsx, src/pages/faqs/index.tsx).',
432
+ missingFaqSchema: 'FAQSchema (SchemaFAQ / JSON-LD @type:FAQPage) is missing from the FAQ page.',
433
433
  },
434
434
  },
435
435
  create(context) {
@@ -437,27 +437,76 @@ const requiredFaqRule = {
437
437
  if (!context.getFilename().endsWith('layout.tsx')) return {};
438
438
 
439
439
  const projectRoot = context.cwd;
440
- const faqPath = path.join(projectRoot, 'src/app/faq/page.tsx');
440
+
441
+ function findFaqPath(root) {
442
+ // Walk `src/` and match any path segment or filename named `faq` or `faqs`.
443
+ // Return the first matching `page.*` / `index.*` or a direct faq(s).(ts|tsx|js|jsx) file.
444
+ // Returns `null` when no candidate is found.
445
+ const srcRoot = path.join(root, 'src');
446
+ if (!fs.existsSync(srcRoot)) return null;
447
+
448
+ const stack = [srcRoot];
449
+ const filePattern = /(^|\/)faqs?\.(t|j)sx?$/i; // matches .../faq.tsx, .../faqs.js, etc.
450
+ while (stack.length) {
451
+ const cur = stack.pop();
452
+ try {
453
+ const entries = fs.readdirSync(cur, { withFileTypes: true });
454
+ for (const e of entries) {
455
+ const full = path.join(cur, e.name);
456
+ const rel = path.relative(root, full).replace(/\\/g, '/');
457
+
458
+ if (e.isDirectory()) {
459
+ // directory named faq/faqs -> prefer page/index inside it
460
+ if (/^faqs?$/i.test(e.name)) {
461
+ const candidates = [
462
+ path.join(full, 'page.tsx'),
463
+ path.join(full, 'page.ts'),
464
+ path.join(full, 'index.tsx'),
465
+ path.join(full, 'index.ts'),
466
+ ];
467
+ for (const c of candidates) if (fs.existsSync(c)) return c;
468
+ }
469
+ // continue walking
470
+ stack.push(full);
471
+ continue;
472
+ }
473
+
474
+ // direct file matches like src/pages/faqs.tsx
475
+ if (filePattern.test(rel)) return full;
476
+ }
477
+ } catch (err) {
478
+ /* ignore unreadable dirs */
479
+ }
480
+ }
481
+
482
+ return null;
483
+ }
484
+
485
+ const faqPath = findFaqPath(projectRoot);
441
486
 
442
487
  return {
443
488
  'Program:exit'() {
444
- if (!fs.existsSync(faqPath)) {
489
+ // If finder returned nothing or the candidate does not exist -> missing page
490
+ if (!faqPath || !fs.existsSync(faqPath)) {
445
491
  context.report({
446
492
  loc: { line: 1, column: 0 },
447
493
  messageId: 'missingFaqPage',
448
494
  });
449
- } else {
450
- try {
451
- const content = fs.readFileSync(faqPath, 'utf8');
452
- if (!content.includes('FAQSchema')) {
453
- context.report({
454
- loc: { line: 1, column: 0 },
455
- messageId: 'missingFaqSchema',
456
- });
457
- }
458
- } catch (e) {
459
- // Ignore read errors
495
+ return;
496
+ }
497
+
498
+ // Accept component-based SchemaFAQ, `FAQSchema` identifier, or JSON-LD @type:FAQPage
499
+ try {
500
+ const content = fs.readFileSync(faqPath, 'utf8');
501
+ const hasSchema = /FAQSchema|SchemaFAQ|"@type"\s*:\s*"FAQPage"/i.test(content);
502
+ if (!hasSchema) {
503
+ context.report({
504
+ loc: { line: 1, column: 0 },
505
+ messageId: 'missingFaqSchema',
506
+ });
460
507
  }
508
+ } catch (e) {
509
+ // Ignore read errors
461
510
  }
462
511
  },
463
512
  };
@@ -1 +1 @@
1
- {"version":3,"file":"faq-accordion.d.ts","sourceRoot":"","sources":["../../../../src/components/general/faq-accordion.tsx"],"names":[],"mappings":"AACA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,qBAAqB,CAAC;AA8B7B,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACzE,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAsF1D;yBAtFe,YAAY"}
1
+ {"version":3,"file":"faq-accordion.d.ts","sourceRoot":"","sources":["../../../../src/components/general/faq-accordion.tsx"],"names":[],"mappings":"AACA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,qBAAqB,CAAC;AA+B7B,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACzE,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAuF1D;yBAvFe,YAAY"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=required-faq.rule.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"required-faq.rule.test.d.ts","sourceRoot":"","sources":["../../../src/tests/required-faq.rule.test.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixelated-tech/components",
3
- "version": "3.9.17",
3
+ "version": "3.9.18",
4
4
  "private": false,
5
5
  "author": {
6
6
  "name": "Pixelated Technologies",
@@ -122,15 +122,15 @@
122
122
  "@storybook/preset-scss": "^1.0.3",
123
123
  "@storybook/react-webpack5": "^10.1.11",
124
124
  "@testing-library/dom": "^10.4.1",
125
- "@testing-library/react": "^16.3.1",
125
+ "@testing-library/react": "^16.3.2",
126
126
  "@testing-library/user-event": "^14.6.1",
127
127
  "@types/md5": "^2.3.6",
128
128
  "@types/node": "^25.0.9",
129
129
  "@types/prop-types": "^15.7.15",
130
130
  "@types/react": "^19.2.8",
131
131
  "@types/react-dom": "^19.2.3",
132
- "@typescript-eslint/eslint-plugin": "^8.53.0",
133
- "@typescript-eslint/parser": "^8.53.0",
132
+ "@typescript-eslint/eslint-plugin": "^8.53.1",
133
+ "@typescript-eslint/parser": "^8.53.1",
134
134
  "@vitejs/plugin-react": "^5.1.2",
135
135
  "@vitest/coverage-v8": "^4.0.17",
136
136
  "@vitest/ui": "^4.0.17",