backpack 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (599) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +18 -0
  3. data/.gitlab-ci.yml +152 -0
  4. data/.rubocop.yml +2 -0
  5. data/.ruby-version +1 -0
  6. data/LICENSE +21 -0
  7. data/README.md +29 -0
  8. data/Rakefile +4 -0
  9. data/demo/.gitignore +47 -0
  10. data/demo/.overmind.env +2 -0
  11. data/demo/.yarn/cache/@babel-code-frame-npm-7.27.1-4dbcabb137-5874edc5d3.zip +0 -0
  12. data/demo/.yarn/cache/@babel-helper-validator-identifier-npm-7.28.5-1953d49d2b-5a251a6848.zip +0 -0
  13. data/demo/.yarn/cache/@csstools-css-parser-algorithms-npm-2.7.1-8dc62b9586-304e6f92e5.zip +0 -0
  14. data/demo/.yarn/cache/@csstools-css-tokenizer-npm-2.4.1-51184be252-395c51f872.zip +0 -0
  15. data/demo/.yarn/cache/@csstools-media-query-list-parser-npm-2.1.13-cb3cb9a768-7754b4b9fc.zip +0 -0
  16. data/demo/.yarn/cache/@csstools-postcss-cascade-layers-npm-1.1.1-4382e19cf0-8ecd6a929e.zip +0 -0
  17. data/demo/.yarn/cache/@csstools-postcss-color-function-npm-1.1.1-7c5a0199ae-087595985e.zip +0 -0
  18. data/demo/.yarn/cache/@csstools-postcss-font-format-keywords-npm-1.0.1-ef1db49912-ed8d9eab97.zip +0 -0
  19. data/demo/.yarn/cache/@csstools-postcss-hwb-function-npm-1.0.2-f3f621e351-352ead754a.zip +0 -0
  20. data/demo/.yarn/cache/@csstools-postcss-ic-unit-npm-1.0.1-111638e451-09c414c9b7.zip +0 -0
  21. data/demo/.yarn/cache/@csstools-postcss-is-pseudo-class-npm-2.0.7-c85939401b-a4494bb8e9.zip +0 -0
  22. data/demo/.yarn/cache/@csstools-postcss-nested-calc-npm-1.0.0-8028506411-53bb783dd6.zip +0 -0
  23. data/demo/.yarn/cache/@csstools-postcss-normalize-display-values-npm-1.0.1-53721ce3eb-75901daec3.zip +0 -0
  24. data/demo/.yarn/cache/@csstools-postcss-oklab-function-npm-1.1.1-2907029cf1-d66b789060.zip +0 -0
  25. data/demo/.yarn/cache/@csstools-postcss-progressive-custom-properties-npm-1.3.0-1e56504855-e281845fde.zip +0 -0
  26. data/demo/.yarn/cache/@csstools-postcss-stepped-value-functions-npm-1.0.1-01aa1138bd-2fc88713a0.zip +0 -0
  27. data/demo/.yarn/cache/@csstools-postcss-text-decoration-shorthand-npm-1.0.0-96f61ef9fe-d27aaf9787.zip +0 -0
  28. data/demo/.yarn/cache/@csstools-postcss-trigonometric-functions-npm-1.0.2-4553514702-f7f5b5f249.zip +0 -0
  29. data/demo/.yarn/cache/@csstools-postcss-unset-value-npm-1.0.2-f57c79bfc4-3facdae154.zip +0 -0
  30. data/demo/.yarn/cache/@csstools-selector-specificity-npm-2.2.0-9e6097918b-97c89f23b3.zip +0 -0
  31. data/demo/.yarn/cache/@csstools-selector-specificity-npm-3.1.1-85fd5757fc-3786a6afea.zip +0 -0
  32. data/demo/.yarn/cache/@eslint-community-eslint-utils-npm-4.9.0-fe45a08548-ae9b98eea0.zip +0 -0
  33. data/demo/.yarn/cache/@eslint-community-regexpp-npm-4.12.2-3d54624470-1770bc81f6.zip +0 -0
  34. data/demo/.yarn/cache/@eslint-eslintrc-npm-2.1.4-1ff4b5f908-10957c7592.zip +0 -0
  35. data/demo/.yarn/cache/@eslint-js-npm-8.57.1-dec269f278-2afb77454c.zip +0 -0
  36. data/demo/.yarn/cache/@hotwired-stimulus-npm-3.2.2-e1e064f1fe-e0c13469df.zip +0 -0
  37. data/demo/.yarn/cache/@humanwhocodes-config-array-npm-0.13.0-843095a032-eae69ff913.zip +0 -0
  38. data/demo/.yarn/cache/@humanwhocodes-module-importer-npm-1.0.1-9d07ed2e4a-0fd22007db.zip +0 -0
  39. data/demo/.yarn/cache/@humanwhocodes-object-schema-npm-2.0.3-4f0e508cd9-d3b78f6c58.zip +0 -0
  40. data/demo/.yarn/cache/@isaacs-balanced-match-npm-4.0.1-8965afafe6-102fbc6d2c.zip +0 -0
  41. data/demo/.yarn/cache/@isaacs-brace-expansion-npm-5.0.0-754d3cb3f5-d7a3b8b0dd.zip +0 -0
  42. data/demo/.yarn/cache/@isaacs-cliui-npm-8.0.2-f4364666d5-4a473b9b32.zip +0 -0
  43. data/demo/.yarn/cache/@isaacs-fs-minipass-npm-4.0.1-677026e841-5d36d28996.zip +0 -0
  44. data/demo/.yarn/cache/@nodelib-fs.scandir-npm-2.1.5-89c67370dd-a970d595bd.zip +0 -0
  45. data/demo/.yarn/cache/@nodelib-fs.stat-npm-2.0.5-01f4dd3030-012480b5ca.zip +0 -0
  46. data/demo/.yarn/cache/@nodelib-fs.walk-npm-1.2.8-b4a89da548-190c643f15.zip +0 -0
  47. data/demo/.yarn/cache/@npmcli-agent-npm-4.0.0-502e5ae4f0-89ae20b448.zip +0 -0
  48. data/demo/.yarn/cache/@npmcli-fs-npm-4.0.0-1d9cc8a27b-68951c589e.zip +0 -0
  49. data/demo/.yarn/cache/@pkgjs-parseargs-npm-0.11.0-cd2a3fe948-6ad6a00fc4.zip +0 -0
  50. data/demo/.yarn/cache/@radix-ui-colors-npm-3.0.0-a7484539fd-5ac1b69df7.zip +0 -0
  51. data/demo/.yarn/cache/@types-less-npm-3.0.8-5556bee38f-8e04acca20.zip +0 -0
  52. data/demo/.yarn/cache/@types-minimist-npm-1.2.5-c85664a9d8-477047b606.zip +0 -0
  53. data/demo/.yarn/cache/@types-node-npm-24.10.1-d514f50dfd-c2f370ae7a.zip +0 -0
  54. data/demo/.yarn/cache/@types-normalize-package-data-npm-2.4.4-676a8ba353-65dff72b54.zip +0 -0
  55. data/demo/.yarn/cache/@types-sass-npm-1.43.1-6770eea7c0-19eb71acc4.zip +0 -0
  56. data/demo/.yarn/cache/@types-stylus-npm-0.48.43-0d92990605-bd780fc7e8.zip +0 -0
  57. data/demo/.yarn/cache/@ungap-structured-clone-npm-1.3.0-aea1bdf957-64ed518f49.zip +0 -0
  58. data/demo/.yarn/cache/abbrev-npm-4.0.0-7d848a1ef0-d0344b63d2.zip +0 -0
  59. data/demo/.yarn/cache/acorn-jsx-npm-5.3.2-d7594599ea-c3d3b2a89c.zip +0 -0
  60. data/demo/.yarn/cache/acorn-npm-8.15.0-0764cf600e-309c6b49ae.zip +0 -0
  61. data/demo/.yarn/cache/agent-base-npm-7.1.4-cb8b4604d5-86a7f542af.zip +0 -0
  62. data/demo/.yarn/cache/ajv-npm-6.12.6-4b5105e2b2-874972efe5.zip +0 -0
  63. data/demo/.yarn/cache/ajv-npm-8.17.1-12ade7edc6-1797bf242c.zip +0 -0
  64. data/demo/.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip +0 -0
  65. data/demo/.yarn/cache/ansi-regex-npm-6.2.2-f2d6691eb1-9b17ce2c6d.zip +0 -0
  66. data/demo/.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-513b44c3b2.zip +0 -0
  67. data/demo/.yarn/cache/ansi-styles-npm-6.2.3-6fc7ca2bf5-f1b0829cf0.zip +0 -0
  68. data/demo/.yarn/cache/anymatch-npm-3.1.3-bc81d103b1-3e044fd6d1.zip +0 -0
  69. data/demo/.yarn/cache/argparse-npm-2.0.1-faff7999e6-83644b5649.zip +0 -0
  70. data/demo/.yarn/cache/array-union-npm-2.1.0-4e4852b221-5bee12395c.zip +0 -0
  71. data/demo/.yarn/cache/arrify-npm-1.0.1-affafba9fe-745075dd4a.zip +0 -0
  72. data/demo/.yarn/cache/astral-regex-npm-2.0.0-f30d866aab-876231688c.zip +0 -0
  73. data/demo/.yarn/cache/autoprefixer-npm-10.4.22-7e7e3bc20e-7aa0c668bc.zip +0 -0
  74. data/demo/.yarn/cache/balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip +0 -0
  75. data/demo/.yarn/cache/balanced-match-npm-2.0.0-d9722af241-9a5caad6a2.zip +0 -0
  76. data/demo/.yarn/cache/baseline-browser-mapping-npm-2.8.28-9d8c2e2d8e-d9b54c55ed.zip +0 -0
  77. data/demo/.yarn/cache/binary-extensions-npm-2.3.0-bd3f20d865-bcad01494e.zip +0 -0
  78. data/demo/.yarn/cache/boolbase-npm-1.0.0-965fe9af6d-3e25c80ef6.zip +0 -0
  79. data/demo/.yarn/cache/brace-expansion-npm-1.1.12-329e9ad7a1-12cb6d6310.zip +0 -0
  80. data/demo/.yarn/cache/brace-expansion-npm-2.0.2-bc7f134bbc-01dff195e3.zip +0 -0
  81. data/demo/.yarn/cache/braces-npm-3.0.3-582c14023c-b95aa0b3bd.zip +0 -0
  82. data/demo/.yarn/cache/browserslist-npm-4.28.0-c16ea3c47c-c19fe2c6f1.zip +0 -0
  83. data/demo/.yarn/cache/cacache-npm-20.0.1-9350b3f826-33d1514f5c.zip +0 -0
  84. data/demo/.yarn/cache/callsites-npm-3.1.0-268f989910-072d17b6ab.zip +0 -0
  85. data/demo/.yarn/cache/camelcase-keys-npm-7.0.2-36fbc5a8f7-b5821cc48d.zip +0 -0
  86. data/demo/.yarn/cache/camelcase-npm-6.3.0-e5e42a0d15-8c96818a90.zip +0 -0
  87. data/demo/.yarn/cache/caniuse-lite-npm-1.0.30001754-112f366158-f5a956d820.zip +0 -0
  88. data/demo/.yarn/cache/chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip +0 -0
  89. data/demo/.yarn/cache/chokidar-npm-3.6.0-3c413a828f-d2f29f4997.zip +0 -0
  90. data/demo/.yarn/cache/chownr-npm-3.0.0-5275e85d25-fd73a4bab4.zip +0 -0
  91. data/demo/.yarn/cache/cliui-npm-8.0.1-3b029092cf-79648b3b00.zip +0 -0
  92. data/demo/.yarn/cache/color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip +0 -0
  93. data/demo/.yarn/cache/color-name-npm-1.1.4-025792b0ea-b044585952.zip +0 -0
  94. data/demo/.yarn/cache/colord-npm-2.9.3-5c35c27898-95d909bfbc.zip +0 -0
  95. data/demo/.yarn/cache/concat-map-npm-0.0.1-85a921b7ee-902a9f5d89.zip +0 -0
  96. data/demo/.yarn/cache/cosmiconfig-npm-8.3.6-a5566e2779-dc339ebea4.zip +0 -0
  97. data/demo/.yarn/cache/cross-spawn-npm-7.0.6-264bddf921-8d306efaca.zip +0 -0
  98. data/demo/.yarn/cache/css-blank-pseudo-npm-3.0.3-af86e84805-9be0a13885.zip +0 -0
  99. data/demo/.yarn/cache/css-functions-list-npm-3.2.3-c87dc5954d-25f12fb0ef.zip +0 -0
  100. data/demo/.yarn/cache/css-has-pseudo-npm-3.0.4-e97bb61896-8f165d68f6.zip +0 -0
  101. data/demo/.yarn/cache/css-prefers-color-scheme-npm-6.0.3-e1c91bc5cd-3a2b02f045.zip +0 -0
  102. data/demo/.yarn/cache/css-select-npm-3.1.2-ee1a42b802-a54b73ee89.zip +0 -0
  103. data/demo/.yarn/cache/css-tree-npm-2.3.1-6540d78e26-493cc24b5c.zip +0 -0
  104. data/demo/.yarn/cache/css-what-npm-4.0.0-5d0d0ff02b-69b5574912.zip +0 -0
  105. data/demo/.yarn/cache/cssdb-npm-7.11.2-d799f85811-79b2c3b6de.zip +0 -0
  106. data/demo/.yarn/cache/cssesc-npm-3.0.0-15ec56f86f-f8c4ababff.zip +0 -0
  107. data/demo/.yarn/cache/cuint-npm-0.2.2-3990651cc6-b8127a93a7.zip +0 -0
  108. data/demo/.yarn/cache/debug-npm-4.4.3-0105c6123a-4805abd570.zip +0 -0
  109. data/demo/.yarn/cache/decamelize-keys-npm-1.1.1-4cfa36ed4b-fc645fe20b.zip +0 -0
  110. data/demo/.yarn/cache/decamelize-npm-1.2.0-c5a2fdc622-ad8c51a7e7.zip +0 -0
  111. data/demo/.yarn/cache/decamelize-npm-5.0.1-2fde8c926c-7c3b1ed4b3.zip +0 -0
  112. data/demo/.yarn/cache/deep-is-npm-0.1.4-88938b5a67-edb65dd0d7.zip +0 -0
  113. data/demo/.yarn/cache/dependency-graph-npm-0.11.0-658e382681-477204beaa.zip +0 -0
  114. data/demo/.yarn/cache/dir-glob-npm-3.0.1-1aea628b1b-fa05e18324.zip +0 -0
  115. data/demo/.yarn/cache/doctrine-npm-3.0.0-c6f1615f04-fd7673ca77.zip +0 -0
  116. data/demo/.yarn/cache/dom-serializer-npm-1.4.1-ebb24349c1-fbb0b01f87.zip +0 -0
  117. data/demo/.yarn/cache/domelementtype-npm-2.3.0-02de7cbfba-ee837a318f.zip +0 -0
  118. data/demo/.yarn/cache/domhandler-npm-3.3.0-6417f7e17e-850e5e9fee.zip +0 -0
  119. data/demo/.yarn/cache/domhandler-npm-4.3.1-493539c1ca-4c665ceed0.zip +0 -0
  120. data/demo/.yarn/cache/domutils-npm-2.8.0-0325139e5c-abf7434315.zip +0 -0
  121. data/demo/.yarn/cache/eastasianwidth-npm-0.2.0-c37eb16bd1-7d00d7cd8e.zip +0 -0
  122. data/demo/.yarn/cache/electron-to-chromium-npm-1.5.250-3e6f742b0b-4f32d0e176.zip +0 -0
  123. data/demo/.yarn/cache/emoji-regex-npm-8.0.0-213764015c-d4c5c39d5a.zip +0 -0
  124. data/demo/.yarn/cache/emoji-regex-npm-9.2.2-e6fac8d058-8487182da7.zip +0 -0
  125. data/demo/.yarn/cache/encoding-npm-0.1.13-82a1837d30-bb98632f8f.zip +0 -0
  126. data/demo/.yarn/cache/entities-npm-2.2.0-0fc8d5b2f7-19010dacaf.zip +0 -0
  127. data/demo/.yarn/cache/env-paths-npm-2.2.1-7c7577428c-65b5df55a8.zip +0 -0
  128. data/demo/.yarn/cache/err-code-npm-2.0.3-082e0ff9a7-8b7b1be20d.zip +0 -0
  129. data/demo/.yarn/cache/error-ex-npm-1.3.4-c7248e4040-25136c0984.zip +0 -0
  130. data/demo/.yarn/cache/esbuild-darwin-arm64-npm-0.15.18-37bdbfa731-8.zip +0 -0
  131. data/demo/.yarn/cache/esbuild-npm-0.15.18-61e07796c8-ec12682b2c.zip +0 -0
  132. data/demo/.yarn/cache/esbuild-plugin-import-glob-npm-0.1.1-b0534ed204-d6a350e13e.zip +0 -0
  133. data/demo/.yarn/cache/esbuild-rails-npm-1.0.7-a0e5a3f51e-55efdcd04b.zip +0 -0
  134. data/demo/.yarn/cache/esbuild-style-plugin-npm-1.6.3-ee685c408e-05fa06f2e7.zip +0 -0
  135. data/demo/.yarn/cache/escalade-npm-3.2.0-19b50dd48f-47b029c83d.zip +0 -0
  136. data/demo/.yarn/cache/escape-string-regexp-npm-4.0.0-4b531d8d59-98b48897d9.zip +0 -0
  137. data/demo/.yarn/cache/eslint-config-prettier-npm-8.10.2-2e293fd4f2-a92b7e8a99.zip +0 -0
  138. data/demo/.yarn/cache/eslint-npm-8.57.1-dd20287a5a-e2489bb7f8.zip +0 -0
  139. data/demo/.yarn/cache/eslint-scope-npm-7.2.2-53cb0df8e8-ec97dbf5fb.zip +0 -0
  140. data/demo/.yarn/cache/eslint-visitor-keys-npm-3.4.3-a356ac7e46-36e9ef87fc.zip +0 -0
  141. data/demo/.yarn/cache/espree-npm-9.6.1-a50722a5a9-eb8c149c7a.zip +0 -0
  142. data/demo/.yarn/cache/esquery-npm-1.6.0-16fee31531-08ec4fe446.zip +0 -0
  143. data/demo/.yarn/cache/esrecurse-npm-4.3.0-10b86a887a-ebc17b1a33.zip +0 -0
  144. data/demo/.yarn/cache/estraverse-npm-5.3.0-03284f8f63-072780882d.zip +0 -0
  145. data/demo/.yarn/cache/esutils-npm-2.0.3-f865beafd5-22b5b08f74.zip +0 -0
  146. data/demo/.yarn/cache/exponential-backoff-npm-3.1.3-28be78d98e-471fdb70fd.zip +0 -0
  147. data/demo/.yarn/cache/fast-deep-equal-npm-3.1.3-790edcfcf5-e21a9d8d84.zip +0 -0
  148. data/demo/.yarn/cache/fast-glob-npm-3.3.3-2a653be532-0704d7b85c.zip +0 -0
  149. data/demo/.yarn/cache/fast-json-stable-stringify-npm-2.1.0-02e8905fda-b191531e36.zip +0 -0
  150. data/demo/.yarn/cache/fast-levenshtein-npm-2.0.6-fcd74b8df5-92cfec0a8d.zip +0 -0
  151. data/demo/.yarn/cache/fast-uri-npm-3.1.0-57fa0b3f3c-daab0efd35.zip +0 -0
  152. data/demo/.yarn/cache/fastest-levenshtein-npm-1.0.16-192d328856-a78d44285c.zip +0 -0
  153. data/demo/.yarn/cache/fastq-npm-1.19.1-ca0a13ec3f-7691d1794f.zip +0 -0
  154. data/demo/.yarn/cache/fdir-npm-6.5.0-8814a0dec7-bd537daa9d.zip +0 -0
  155. data/demo/.yarn/cache/file-entry-cache-npm-6.0.1-31965cf0af-f49701feaa.zip +0 -0
  156. data/demo/.yarn/cache/file-entry-cache-npm-7.0.2-9ddf8eaba9-283c674fc2.zip +0 -0
  157. data/demo/.yarn/cache/fill-range-npm-7.1.1-bf491486db-b4abfbca38.zip +0 -0
  158. data/demo/.yarn/cache/find-up-npm-5.0.0-e03e9b796d-07955e3573.zip +0 -0
  159. data/demo/.yarn/cache/flat-cache-npm-3.2.0-9a887f084e-e7e0f59801.zip +0 -0
  160. data/demo/.yarn/cache/flatted-npm-3.3.3-ca455563b2-8c96c02fbe.zip +0 -0
  161. data/demo/.yarn/cache/foreground-child-npm-3.3.1-b7775fda04-b2c1a6fc0b.zip +0 -0
  162. data/demo/.yarn/cache/fraction.js-npm-5.3.4-52b06f74c0-6ac88ecfdb.zip +0 -0
  163. data/demo/.yarn/cache/fs-extra-npm-11.3.2-490a8d09c5-24a7a6e096.zip +0 -0
  164. data/demo/.yarn/cache/fs-minipass-npm-3.0.3-d148d6ac19-8722a41109.zip +0 -0
  165. data/demo/.yarn/cache/fs.realpath-npm-1.0.0-c8f05d8126-99ddea01a7.zip +0 -0
  166. data/demo/.yarn/cache/fsevents-npm-2.3.3-ce9fb0ffae-11e6ea6fea.zip +0 -0
  167. data/demo/.yarn/cache/fsevents-patch-21ad2b1333-8.zip +0 -0
  168. data/demo/.yarn/cache/function-bind-npm-1.1.2-7a55be9b03-2b0ff4ce70.zip +0 -0
  169. data/demo/.yarn/cache/generic-names-npm-4.0.0-c188ad8a22-8dabd25051.zip +0 -0
  170. data/demo/.yarn/cache/get-caller-file-npm-2.0.5-80e8a86305-b9769a836d.zip +0 -0
  171. data/demo/.yarn/cache/get-stdin-npm-9.0.0-4221477153-5972bc34d0.zip +0 -0
  172. data/demo/.yarn/cache/glob-npm-10.4.5-8c63175f05-0bc725de5e.zip +0 -0
  173. data/demo/.yarn/cache/glob-npm-11.0.3-f68382b3cc-65ddc1e3c9.zip +0 -0
  174. data/demo/.yarn/cache/glob-npm-7.2.3-2d866d17a5-29452e97b3.zip +0 -0
  175. data/demo/.yarn/cache/glob-parent-npm-5.1.2-021ab32634-f4f2bfe242.zip +0 -0
  176. data/demo/.yarn/cache/glob-parent-npm-6.0.2-2cbef12738-c13ee97978.zip +0 -0
  177. data/demo/.yarn/cache/global-modules-npm-2.0.0-f71d340362-d6197f2585.zip +0 -0
  178. data/demo/.yarn/cache/global-prefix-npm-3.0.0-68cf01e67d-8a82fc1d6f.zip +0 -0
  179. data/demo/.yarn/cache/globals-npm-13.24.0-cc7713139c-56066ef058.zip +0 -0
  180. data/demo/.yarn/cache/globby-npm-11.1.0-bdcdf20c71-b4be8885e0.zip +0 -0
  181. data/demo/.yarn/cache/globby-npm-13.2.2-47efcd4a86-f3d84ced58.zip +0 -0
  182. data/demo/.yarn/cache/globjoin-npm-0.1.4-a1beb812bf-0a47d88d56.zip +0 -0
  183. data/demo/.yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-ac85f94da9.zip +0 -0
  184. data/demo/.yarn/cache/graphemer-npm-1.4.0-0627732d35-bab8f0be9b.zip +0 -0
  185. data/demo/.yarn/cache/hard-rejection-npm-2.1.0-a80f2a977d-7baaf80a0c.zip +0 -0
  186. data/demo/.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip +0 -0
  187. data/demo/.yarn/cache/hasown-npm-2.0.2-80fe6c9901-e8516f776a.zip +0 -0
  188. data/demo/.yarn/cache/hosted-git-info-npm-4.1.0-4efcdf8fd3-c3f87b3c2f.zip +0 -0
  189. data/demo/.yarn/cache/html-tags-npm-3.3.1-c8f411791b-b4ef1d5a76.zip +0 -0
  190. data/demo/.yarn/cache/htmlparser2-npm-5.0.1-d50ebd0fbb-b67ac02e44.zip +0 -0
  191. data/demo/.yarn/cache/http-cache-semantics-npm-4.2.0-fadacfb3ad-7a7246ddfc.zip +0 -0
  192. data/demo/.yarn/cache/http-proxy-agent-npm-7.0.2-643ed7cc33-670858c8f8.zip +0 -0
  193. data/demo/.yarn/cache/https-proxy-agent-npm-7.0.6-27a95c2690-b882377a12.zip +0 -0
  194. data/demo/.yarn/cache/iconv-lite-npm-0.6.3-24b8aae27e-3f60d47a5c.zip +0 -0
  195. data/demo/.yarn/cache/icss-replace-symbols-npm-1.1.0-bc11c612de-24575b2c2f.zip +0 -0
  196. data/demo/.yarn/cache/icss-utils-npm-5.1.0-8d8c062d07-5c324d2835.zip +0 -0
  197. data/demo/.yarn/cache/ignore-npm-5.3.2-346d3ba017-2acfd32a57.zip +0 -0
  198. data/demo/.yarn/cache/import-fresh-npm-3.3.1-1916794950-a06b19461b.zip +0 -0
  199. data/demo/.yarn/cache/import-lazy-npm-4.0.0-3215653869-22f5e51702.zip +0 -0
  200. data/demo/.yarn/cache/imurmurhash-npm-0.1.4-610c5068a0-7cae75c8cd.zip +0 -0
  201. data/demo/.yarn/cache/indent-string-npm-5.0.0-35eaa3b052-e466c27b63.zip +0 -0
  202. data/demo/.yarn/cache/inflight-npm-1.0.6-ccedb4b908-f4f76aa072.zip +0 -0
  203. data/demo/.yarn/cache/inherits-npm-2.0.4-c66b3957a0-4a48a73384.zip +0 -0
  204. data/demo/.yarn/cache/ini-npm-1.3.8-fb5040b4c0-dfd98b0ca3.zip +0 -0
  205. data/demo/.yarn/cache/ip-address-npm-10.1.0-d5d5693401-76b1abcdf5.zip +0 -0
  206. data/demo/.yarn/cache/is-arrayish-npm-0.2.1-23927dfb15-eef4417e3c.zip +0 -0
  207. data/demo/.yarn/cache/is-binary-path-npm-2.1.0-e61d46f557-84192eb88c.zip +0 -0
  208. data/demo/.yarn/cache/is-core-module-npm-2.16.1-a54837229e-6ec5b3c42d.zip +0 -0
  209. data/demo/.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip +0 -0
  210. data/demo/.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip +0 -0
  211. data/demo/.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-d381c1319f.zip +0 -0
  212. data/demo/.yarn/cache/is-number-npm-7.0.0-060086935c-456ac6f8e0.zip +0 -0
  213. data/demo/.yarn/cache/is-path-inside-npm-3.0.3-2ea0ef44fd-abd50f0618.zip +0 -0
  214. data/demo/.yarn/cache/is-plain-obj-npm-1.1.0-1046f64c0b-0ee0480779.zip +0 -0
  215. data/demo/.yarn/cache/is-plain-object-npm-5.0.0-285b70faa3-e32d27061e.zip +0 -0
  216. data/demo/.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip +0 -0
  217. data/demo/.yarn/cache/isexe-npm-3.1.1-9c0061eead-7fe1931ee4.zip +0 -0
  218. data/demo/.yarn/cache/jackspeak-npm-3.4.3-546bfad080-be31027fc7.zip +0 -0
  219. data/demo/.yarn/cache/jackspeak-npm-4.1.1-582e5d1ed7-daca714c5a.zip +0 -0
  220. data/demo/.yarn/cache/js-tokens-npm-4.0.0-0ac852e9e2-8a95213a5a.zip +0 -0
  221. data/demo/.yarn/cache/js-yaml-npm-4.1.1-86ec786790-ea2339c693.zip +0 -0
  222. data/demo/.yarn/cache/json-buffer-npm-3.0.1-f8f6d20603-9026b03edc.zip +0 -0
  223. data/demo/.yarn/cache/json-parse-even-better-errors-npm-2.3.1-144d62256e-798ed4cf33.zip +0 -0
  224. data/demo/.yarn/cache/json-schema-traverse-npm-0.4.1-4759091693-7486074d3b.zip +0 -0
  225. data/demo/.yarn/cache/json-schema-traverse-npm-1.0.0-fb3684f4f0-02f2f466cd.zip +0 -0
  226. data/demo/.yarn/cache/json-stable-stringify-without-jsonify-npm-1.0.1-b65772b28b-cff44156dd.zip +0 -0
  227. data/demo/.yarn/cache/jsonfile-npm-6.2.0-aefb9ffd45-c3028ec5c7.zip +0 -0
  228. data/demo/.yarn/cache/keyv-npm-4.5.4-4c8e2cf7f7-74a24395b1.zip +0 -0
  229. data/demo/.yarn/cache/kind-of-npm-6.0.3-ab15f36220-3ab01e7b1d.zip +0 -0
  230. data/demo/.yarn/cache/known-css-properties-npm-0.29.0-6bc491faeb-daa6562e90.zip +0 -0
  231. data/demo/.yarn/cache/lefthook-darwin-arm64-npm-1.13.6-b8f333b5db-8.zip +0 -0
  232. data/demo/.yarn/cache/lefthook-npm-1.13.6-54219a35e6-3f84a08528.zip +0 -0
  233. data/demo/.yarn/cache/levn-npm-0.4.1-d183b2d7bb-12c5021c85.zip +0 -0
  234. data/demo/.yarn/cache/lilconfig-npm-3.1.3-74a77377bb-644eb10830.zip +0 -0
  235. data/demo/.yarn/cache/lines-and-columns-npm-1.2.4-d6c7cc5799-0c37f9f7fa.zip +0 -0
  236. data/demo/.yarn/cache/loader-utils-npm-3.3.1-eed38ce75b-d35808e081.zip +0 -0
  237. data/demo/.yarn/cache/locate-path-npm-6.0.0-06a1e4c528-72eb661788.zip +0 -0
  238. data/demo/.yarn/cache/lodash.camelcase-npm-4.3.0-bf268e3bf0-cb9227612f.zip +0 -0
  239. data/demo/.yarn/cache/lodash.merge-npm-4.6.2-77cb4416bf-ad580b4bdb.zip +0 -0
  240. data/demo/.yarn/cache/lodash.truncate-npm-4.4.2-bc50fe1663-b463d8a382.zip +0 -0
  241. data/demo/.yarn/cache/lru-cache-npm-10.4.3-30c10b861a-6476138d21.zip +0 -0
  242. data/demo/.yarn/cache/lru-cache-npm-11.2.2-685f5506dc-052b3d0b81.zip +0 -0
  243. data/demo/.yarn/cache/lru-cache-npm-6.0.0-b4c8668fe1-f97f499f89.zip +0 -0
  244. data/demo/.yarn/cache/lucide-static-npm-0.554.0-7aee65ee52-c357b6fbc4.zip +0 -0
  245. data/demo/.yarn/cache/make-dir-npm-3.1.0-d1d7505142-484200020a.zip +0 -0
  246. data/demo/.yarn/cache/make-fetch-happen-npm-15.0.2-53d5a83906-27413f3d69.zip +0 -0
  247. data/demo/.yarn/cache/map-obj-npm-1.0.1-fa55100fac-9949e7baec.zip +0 -0
  248. data/demo/.yarn/cache/map-obj-npm-4.3.0-d53e32935d-fbc554934d.zip +0 -0
  249. data/demo/.yarn/cache/mathml-tag-names-npm-2.1.3-875bd2d6e7-1201a25a13.zip +0 -0
  250. data/demo/.yarn/cache/mdn-data-npm-2.0.30-bf7b39c09a-d6ac5ac743.zip +0 -0
  251. data/demo/.yarn/cache/meow-npm-10.1.5-a1bab640d1-dd5f0caa4a.zip +0 -0
  252. data/demo/.yarn/cache/merge2-npm-1.4.1-a2507bd06c-7268db63ed.zip +0 -0
  253. data/demo/.yarn/cache/micromatch-npm-4.0.8-c9570e4aca-79920eb634.zip +0 -0
  254. data/demo/.yarn/cache/mime-npm-2.5.2-d3335c8166-dd3c93d433.zip +0 -0
  255. data/demo/.yarn/cache/minimatch-npm-10.1.1-453db4ee1a-8820c0be92.zip +0 -0
  256. data/demo/.yarn/cache/minimatch-npm-3.0.8-f3deb724b2-850cca179c.zip +0 -0
  257. data/demo/.yarn/cache/minimatch-npm-3.1.2-9405269906-c154e56640.zip +0 -0
  258. data/demo/.yarn/cache/minimatch-npm-9.0.5-9aa93d97fa-2c035575ed.zip +0 -0
  259. data/demo/.yarn/cache/minimist-options-npm-4.1.0-64ca250fc1-8c040b3068.zip +0 -0
  260. data/demo/.yarn/cache/minipass-collect-npm-2.0.1-73d3907e40-b251bceea6.zip +0 -0
  261. data/demo/.yarn/cache/minipass-fetch-npm-4.0.1-ce1d15e957-3dfca705ce.zip +0 -0
  262. data/demo/.yarn/cache/minipass-flush-npm-1.0.5-efe79d9826-56269a0b22.zip +0 -0
  263. data/demo/.yarn/cache/minipass-npm-3.3.6-b8d93a945b-a30d083c80.zip +0 -0
  264. data/demo/.yarn/cache/minipass-npm-7.1.2-3a5327d36d-2bfd325b95.zip +0 -0
  265. data/demo/.yarn/cache/minipass-pipeline-npm-1.2.4-5924cb077f-b14240dac0.zip +0 -0
  266. data/demo/.yarn/cache/minipass-sized-npm-1.0.3-306d86f432-79076749fc.zip +0 -0
  267. data/demo/.yarn/cache/minizlib-npm-3.1.0-6680befdba-a15e6f0128.zip +0 -0
  268. data/demo/.yarn/cache/ms-npm-2.1.3-81ff3cfac1-aa92de6080.zip +0 -0
  269. data/demo/.yarn/cache/nanoid-npm-3.3.11-f98c1f9ef6-3be20d8866.zip +0 -0
  270. data/demo/.yarn/cache/natural-compare-npm-1.4.0-97b75b362d-23ad088b08.zip +0 -0
  271. data/demo/.yarn/cache/negotiator-npm-1.0.0-47d727e27e-20ebfe79b2.zip +0 -0
  272. data/demo/.yarn/cache/node-gyp-npm-12.1.0-0690767ce9-198d91c535.zip +0 -0
  273. data/demo/.yarn/cache/node-releases-npm-2.0.27-b2d1b8de4a-a9a54079d8.zip +0 -0
  274. data/demo/.yarn/cache/nopt-npm-9.0.0-81316ec15c-7a5d9ab062.zip +0 -0
  275. data/demo/.yarn/cache/normalize-package-data-npm-3.0.3-1a49056685-bbcee00339.zip +0 -0
  276. data/demo/.yarn/cache/normalize-path-npm-3.0.0-658ba7d77f-88eeb4da89.zip +0 -0
  277. data/demo/.yarn/cache/normalize-range-npm-0.1.2-bec5e259e2-9b2f14f093.zip +0 -0
  278. data/demo/.yarn/cache/nth-check-npm-2.1.1-f97afc8169-5afc3dafcd.zip +0 -0
  279. data/demo/.yarn/cache/once-npm-1.4.0-ccf03ef07a-cd0a885013.zip +0 -0
  280. data/demo/.yarn/cache/optionator-npm-0.9.4-1f114b00e8-ecbd010e3d.zip +0 -0
  281. data/demo/.yarn/cache/p-limit-npm-3.1.0-05d2ede37f-7c3690c4db.zip +0 -0
  282. data/demo/.yarn/cache/p-locate-npm-5.0.0-92cc7c7a3e-1623088f36.zip +0 -0
  283. data/demo/.yarn/cache/p-map-npm-7.0.4-39386109d0-4be2097e94.zip +0 -0
  284. data/demo/.yarn/cache/package-json-from-dist-npm-1.0.1-4631a88465-58ee9538f2.zip +0 -0
  285. data/demo/.yarn/cache/parent-module-npm-1.0.1-1fae11b095-6ba8b25514.zip +0 -0
  286. data/demo/.yarn/cache/parse-json-npm-5.2.0-00a63b1199-62085b17d6.zip +0 -0
  287. data/demo/.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip +0 -0
  288. data/demo/.yarn/cache/path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip +0 -0
  289. data/demo/.yarn/cache/path-key-npm-3.1.1-0e66ea8321-55cd7a9dd4.zip +0 -0
  290. data/demo/.yarn/cache/path-parse-npm-1.0.7-09564527b7-49abf3d811.zip +0 -0
  291. data/demo/.yarn/cache/path-scurry-npm-1.11.1-aaf8c339af-890d5abcd5.zip +0 -0
  292. data/demo/.yarn/cache/path-scurry-npm-2.0.1-7744619e5d-a022c6c38f.zip +0 -0
  293. data/demo/.yarn/cache/path-type-npm-4.0.0-10d47fc86a-5b1e2daa24.zip +0 -0
  294. data/demo/.yarn/cache/picocolors-npm-1.1.1-4fede47cf1-e1cf46bf84.zip +0 -0
  295. data/demo/.yarn/cache/picomatch-npm-2.3.1-c782cfd986-050c865ce8.zip +0 -0
  296. data/demo/.yarn/cache/picomatch-npm-4.0.3-0a647b87cc-6817fb74eb.zip +0 -0
  297. data/demo/.yarn/cache/pify-npm-2.3.0-8b63310934-9503aaeaf4.zip +0 -0
  298. data/demo/.yarn/cache/postcss-attribute-case-insensitive-npm-5.0.2-6aa24bfafa-c0b8139f37.zip +0 -0
  299. data/demo/.yarn/cache/postcss-clamp-npm-4.1.0-32ba814068-118eec936b.zip +0 -0
  300. data/demo/.yarn/cache/postcss-cli-npm-10.1.0-a45841d3d2-c900cc48cb.zip +0 -0
  301. data/demo/.yarn/cache/postcss-color-functional-notation-npm-4.2.4-8f3a9400c3-b763e164fe.zip +0 -0
  302. data/demo/.yarn/cache/postcss-color-hex-alpha-npm-8.0.4-88605e8cec-a2f3173a60.zip +0 -0
  303. data/demo/.yarn/cache/postcss-color-rebeccapurple-npm-7.1.1-b7828c0a0c-03482f9b81.zip +0 -0
  304. data/demo/.yarn/cache/postcss-custom-media-npm-8.0.2-5ad89ea0fe-887bbbacf6.zip +0 -0
  305. data/demo/.yarn/cache/postcss-custom-properties-npm-12.1.11-78be1c709e-421f9d8d6b.zip +0 -0
  306. data/demo/.yarn/cache/postcss-custom-selectors-npm-6.0.3-0a63667536-18080d60a8.zip +0 -0
  307. data/demo/.yarn/cache/postcss-dir-pseudo-class-npm-6.0.5-2555aeb05f-7810c439d8.zip +0 -0
  308. data/demo/.yarn/cache/postcss-double-position-gradients-npm-3.1.2-278f758391-ca09bf2aef.zip +0 -0
  309. data/demo/.yarn/cache/postcss-env-function-npm-4.0.6-2282fa7c63-645b2363cf.zip +0 -0
  310. data/demo/.yarn/cache/postcss-flexbugs-fixes-npm-5.0.2-8c28e40a5b-022ddbcca8.zip +0 -0
  311. data/demo/.yarn/cache/postcss-focus-visible-npm-6.0.4-2eb1d7ff31-acd010b9dd.zip +0 -0
  312. data/demo/.yarn/cache/postcss-focus-within-npm-5.0.4-d70f73ac5d-f23d8ab757.zip +0 -0
  313. data/demo/.yarn/cache/postcss-font-variant-npm-5.0.0-0a5e349320-a192865892.zip +0 -0
  314. data/demo/.yarn/cache/postcss-gap-properties-npm-3.0.5-78f268ad64-aed559d6d3.zip +0 -0
  315. data/demo/.yarn/cache/postcss-image-set-function-npm-4.0.7-46769dca3e-7e50933098.zip +0 -0
  316. data/demo/.yarn/cache/postcss-import-npm-15.1.0-8b9e86f900-7bd04bd8f0.zip +0 -0
  317. data/demo/.yarn/cache/postcss-initial-npm-4.0.1-80cde7a815-6956953853.zip +0 -0
  318. data/demo/.yarn/cache/postcss-inline-svg-npm-5.0.0-bc19ff7916-96c5701c2c.zip +0 -0
  319. data/demo/.yarn/cache/postcss-lab-function-npm-4.2.1-1ebd916151-26ac74b430.zip +0 -0
  320. data/demo/.yarn/cache/postcss-load-config-npm-4.0.2-319bcff9ca-7c27dd3801.zip +0 -0
  321. data/demo/.yarn/cache/postcss-logical-npm-5.0.4-cf11b97479-17c71291ed.zip +0 -0
  322. data/demo/.yarn/cache/postcss-media-minmax-npm-5.0.0-ba7d6b2179-2cd7283e07.zip +0 -0
  323. data/demo/.yarn/cache/postcss-modules-extract-imports-npm-3.1.0-501aab09e8-b9192e0f4f.zip +0 -0
  324. data/demo/.yarn/cache/postcss-modules-local-by-default-npm-4.2.0-3f37e3939f-720d145453.zip +0 -0
  325. data/demo/.yarn/cache/postcss-modules-npm-5.0.0-eee2fcb829-60b34035b2.zip +0 -0
  326. data/demo/.yarn/cache/postcss-modules-npm-6.0.1-41d5592a7a-bdbf1e2bab.zip +0 -0
  327. data/demo/.yarn/cache/postcss-modules-scope-npm-3.2.1-eb0a0538a7-085f65863b.zip +0 -0
  328. data/demo/.yarn/cache/postcss-modules-values-npm-4.0.0-63d7ec543a-f7f2cdf14a.zip +0 -0
  329. data/demo/.yarn/cache/postcss-nesting-npm-10.2.0-eec5f664e8-25e6e66186.zip +0 -0
  330. data/demo/.yarn/cache/postcss-npm-8.5.6-e7f126c6f3-20f3b5d673.zip +0 -0
  331. data/demo/.yarn/cache/postcss-opacity-percentage-npm-1.1.3-552e884ed7-54d1b8ca68.zip +0 -0
  332. data/demo/.yarn/cache/postcss-overflow-shorthand-npm-3.0.4-b5a0785c77-7400902249.zip +0 -0
  333. data/demo/.yarn/cache/postcss-page-break-npm-3.0.4-6892987dc4-a7d08c945f.zip +0 -0
  334. data/demo/.yarn/cache/postcss-place-npm-7.0.5-895593f8b4-903fec0c31.zip +0 -0
  335. data/demo/.yarn/cache/postcss-preset-env-npm-7.8.3-242e470fd9-71bfb697ff.zip +0 -0
  336. data/demo/.yarn/cache/postcss-pseudo-class-any-link-npm-7.1.6-1a34600b0e-43aa18ea1e.zip +0 -0
  337. data/demo/.yarn/cache/postcss-replace-overflow-wrap-npm-4.0.0-e27e12bbc3-3ffe20b300.zip +0 -0
  338. data/demo/.yarn/cache/postcss-reporter-npm-7.1.0-af4f73892f-765d1d3bca.zip +0 -0
  339. data/demo/.yarn/cache/postcss-resolve-nested-selector-npm-0.1.6-c30614d887-85453901af.zip +0 -0
  340. data/demo/.yarn/cache/postcss-safe-parser-npm-6.0.0-dd01bffb52-06c733eaad.zip +0 -0
  341. data/demo/.yarn/cache/postcss-selector-not-npm-6.0.1-135f19a20c-fe523a0219.zip +0 -0
  342. data/demo/.yarn/cache/postcss-selector-parser-npm-6.1.2-46a8e03b00-ce9440fc42.zip +0 -0
  343. data/demo/.yarn/cache/postcss-selector-parser-npm-7.1.0-141ba29b54-1300e7871d.zip +0 -0
  344. data/demo/.yarn/cache/postcss-sorting-npm-8.0.2-d9f7d43c59-ebb5cc6a29.zip +0 -0
  345. data/demo/.yarn/cache/postcss-url-npm-10.1.3-1c99e6b8ad-5983dbd20e.zip +0 -0
  346. data/demo/.yarn/cache/postcss-value-parser-npm-4.2.0-3cef602a6a-819ffab0c9.zip +0 -0
  347. data/demo/.yarn/cache/prelude-ls-npm-1.2.1-3e4d272a55-cd192ec0d0.zip +0 -0
  348. data/demo/.yarn/cache/prettier-npm-2.8.8-430828a36c-b49e409431.zip +0 -0
  349. data/demo/.yarn/cache/pretty-hrtime-npm-1.0.3-32fd75fcbd-bae0e6832f.zip +0 -0
  350. data/demo/.yarn/cache/proc-log-npm-5.0.0-405173f9b4-c78b26ecef.zip +0 -0
  351. data/demo/.yarn/cache/proc-log-npm-6.0.0-455d6f01a6-005a2aa24b.zip +0 -0
  352. data/demo/.yarn/cache/promise-retry-npm-2.0.1-871f0b01b7-f96a3f6d90.zip +0 -0
  353. data/demo/.yarn/cache/punycode-npm-2.3.1-97543c420d-bb0a0ceedc.zip +0 -0
  354. data/demo/.yarn/cache/queue-microtask-npm-1.2.3-fcc98e4e2d-b676f8c040.zip +0 -0
  355. data/demo/.yarn/cache/quick-lru-npm-5.1.1-e38e0edce3-a516faa255.zip +0 -0
  356. data/demo/.yarn/cache/read-cache-npm-1.0.0-00fa89ed05-cffc728b9e.zip +0 -0
  357. data/demo/.yarn/cache/read-pkg-npm-6.0.0-d89ce14684-0cebdff381.zip +0 -0
  358. data/demo/.yarn/cache/read-pkg-up-npm-8.0.0-6f39941cc9-fe4c804016.zip +0 -0
  359. data/demo/.yarn/cache/readdirp-npm-3.6.0-f950cc74ab-1ced032e6e.zip +0 -0
  360. data/demo/.yarn/cache/redent-npm-4.0.0-67da39f156-6944e7b1d8.zip +0 -0
  361. data/demo/.yarn/cache/require-directory-npm-2.1.1-8608aee50b-fb47e70bf0.zip +0 -0
  362. data/demo/.yarn/cache/require-from-string-npm-2.0.2-8557e0db12-a03ef68954.zip +0 -0
  363. data/demo/.yarn/cache/resolve-from-npm-4.0.0-f758ec21bf-f4ba0b8494.zip +0 -0
  364. data/demo/.yarn/cache/resolve-from-npm-5.0.0-15c9db4d33-4ceeb9113e.zip +0 -0
  365. data/demo/.yarn/cache/resolve-npm-1.22.11-2b5ca6ec84-6d5baa2156.zip +0 -0
  366. data/demo/.yarn/cache/resolve-patch-4e481dbf2b-1462da84ac.zip +0 -0
  367. data/demo/.yarn/cache/retry-npm-0.12.0-72ac7fb4cc-623bd7d2e5.zip +0 -0
  368. data/demo/.yarn/cache/reusify-npm-1.1.0-96242be57f-64cb3142ac.zip +0 -0
  369. data/demo/.yarn/cache/rimraf-npm-3.0.2-2cb7dac69a-87f4164e39.zip +0 -0
  370. data/demo/.yarn/cache/run-parallel-npm-1.2.0-3f47ff2034-cb4f97ad25.zip +0 -0
  371. data/demo/.yarn/cache/safer-buffer-npm-2.1.2-8d5c0b705e-cab8f25ae6.zip +0 -0
  372. data/demo/.yarn/cache/semver-npm-6.3.1-bcba31fdbe-ae47d06de2.zip +0 -0
  373. data/demo/.yarn/cache/semver-npm-7.7.3-9cf7b3b46c-f013a3ee46.zip +0 -0
  374. data/demo/.yarn/cache/shebang-command-npm-2.0.0-eb2b01921d-6b52fe8727.zip +0 -0
  375. data/demo/.yarn/cache/shebang-regex-npm-3.0.0-899a0cd65e-1a2bcae50d.zip +0 -0
  376. data/demo/.yarn/cache/signal-exit-npm-4.1.0-61fb957687-64c757b498.zip +0 -0
  377. data/demo/.yarn/cache/slash-npm-3.0.0-b87de2279a-94a93fff61.zip +0 -0
  378. data/demo/.yarn/cache/slash-npm-4.0.0-ce4bbc4a80-da8e4af737.zip +0 -0
  379. data/demo/.yarn/cache/slash-npm-5.1.0-718a84282e-70434b34c5.zip +0 -0
  380. data/demo/.yarn/cache/slice-ansi-npm-4.0.0-6eeca1d10e-4a82d7f085.zip +0 -0
  381. data/demo/.yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-b5167a7142.zip +0 -0
  382. data/demo/.yarn/cache/socks-npm-2.8.7-d1d20aae19-4bbe2c88cf.zip +0 -0
  383. data/demo/.yarn/cache/socks-proxy-agent-npm-8.0.5-24d77a90dc-b4fbcdb7ad.zip +0 -0
  384. data/demo/.yarn/cache/source-map-js-npm-1.2.1-b9a47d7e1a-4eb0cd997c.zip +0 -0
  385. data/demo/.yarn/cache/spdx-correct-npm-3.2.0-ffae008484-e9ae98d22f.zip +0 -0
  386. data/demo/.yarn/cache/spdx-exceptions-npm-2.5.0-718ed4b7d6-bb127d6e25.zip +0 -0
  387. data/demo/.yarn/cache/spdx-expression-parse-npm-3.0.1-b718cbb35a-a1c6e104a2.zip +0 -0
  388. data/demo/.yarn/cache/spdx-license-ids-npm-3.0.22-2b47dea449-3810ce1ddd.zip +0 -0
  389. data/demo/.yarn/cache/ssri-npm-12.0.0-97c0e53d2e-ef4b6b0ae4.zip +0 -0
  390. data/demo/.yarn/cache/string-hash-npm-1.1.3-3cb8892e7c-104b8667a5.zip +0 -0
  391. data/demo/.yarn/cache/string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip +0 -0
  392. data/demo/.yarn/cache/string-width-npm-5.1.2-bf60531341-7369deaa29.zip +0 -0
  393. data/demo/.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-f3cd25890a.zip +0 -0
  394. data/demo/.yarn/cache/strip-ansi-npm-7.1.2-aa4fadccd9-db0e3f9654.zip +0 -0
  395. data/demo/.yarn/cache/strip-indent-npm-4.1.1-e5fb519bd9-d322bfdc59.zip +0 -0
  396. data/demo/.yarn/cache/strip-json-comments-npm-3.1.1-dcb2324823-492f73e272.zip +0 -0
  397. data/demo/.yarn/cache/style-search-npm-0.1.0-e3177d3642-3cfefe3350.zip +0 -0
  398. data/demo/.yarn/cache/stylelint-config-recommended-npm-11.0.0-22dbca58e6-f6bed59952.zip +0 -0
  399. data/demo/.yarn/cache/stylelint-config-standard-npm-31.0.0-fc3caa478e-8e5769252c.zip +0 -0
  400. data/demo/.yarn/cache/stylelint-npm-15.11.0-6dc193bb48-9835f8a3e3.zip +0 -0
  401. data/demo/.yarn/cache/stylelint-order-npm-6.0.4-fa909cac07-66ed8a80b3.zip +0 -0
  402. data/demo/.yarn/cache/supports-color-npm-7.2.0-606bfcf7da-3dda818de0.zip +0 -0
  403. data/demo/.yarn/cache/supports-hyperlinks-npm-3.2.0-f5a5cbe606-460594ec00.zip +0 -0
  404. data/demo/.yarn/cache/supports-preserve-symlinks-flag-npm-1.0.0-f17c4d0028-53b1e247e6.zip +0 -0
  405. data/demo/.yarn/cache/svg-tags-npm-1.0.0-68a35c11fa-407e5ef87c.zip +0 -0
  406. data/demo/.yarn/cache/table-npm-6.9.0-5955281f93-f54a7d1c11.zip +0 -0
  407. data/demo/.yarn/cache/tar-npm-7.5.2-6d8cfb7a13-192559b0e7.zip +0 -0
  408. data/demo/.yarn/cache/text-table-npm-0.2.0-d92a778b59-b6937a38c8.zip +0 -0
  409. data/demo/.yarn/cache/thenby-npm-1.3.4-766aefdf7d-2d2ef3d67f.zip +0 -0
  410. data/demo/.yarn/cache/tinyglobby-npm-0.2.15-0e783aadbd-0e33b8babf.zip +0 -0
  411. data/demo/.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-f76fa01b3d.zip +0 -0
  412. data/demo/.yarn/cache/trim-newlines-npm-4.1.1-d247eb0d1e-5b09f8e329.zip +0 -0
  413. data/demo/.yarn/cache/type-check-npm-0.4.0-60565800ce-ec688ebfc9.zip +0 -0
  414. data/demo/.yarn/cache/type-fest-npm-0.20.2-b36432617f-4fb3272df2.zip +0 -0
  415. data/demo/.yarn/cache/type-fest-npm-1.4.0-7dd848962a-b011c33886.zip +0 -0
  416. data/demo/.yarn/cache/undici-types-npm-7.16.0-0e23b08124-1ef68fc6c5.zip +0 -0
  417. data/demo/.yarn/cache/unique-filename-npm-4.0.0-bfc100c4e3-6a62094fca.zip +0 -0
  418. data/demo/.yarn/cache/unique-slug-npm-5.0.0-11508c0469-222d0322bc.zip +0 -0
  419. data/demo/.yarn/cache/universalify-npm-2.0.1-040ba5a21e-ecd8469fe0.zip +0 -0
  420. data/demo/.yarn/cache/update-browserslist-db-npm-1.1.4-55ef7b4ab9-b757805a63.zip +0 -0
  421. data/demo/.yarn/cache/uri-js-npm-4.4.1-66d11cbcaf-7167432de6.zip +0 -0
  422. data/demo/.yarn/cache/util-deprecate-npm-1.0.2-e3fe1a219c-474acf1146.zip +0 -0
  423. data/demo/.yarn/cache/validate-npm-package-license-npm-3.0.4-7af8adc7a8-35703ac889.zip +0 -0
  424. data/demo/.yarn/cache/which-npm-1.3.1-f0ebb8bdd8-f2e185c624.zip +0 -0
  425. data/demo/.yarn/cache/which-npm-2.0.2-320ddf72f7-1a5c563d3c.zip +0 -0
  426. data/demo/.yarn/cache/which-npm-6.0.0-48f25f0ec8-df19b2cd8a.zip +0 -0
  427. data/demo/.yarn/cache/word-wrap-npm-1.2.5-42d00c4b09-f93ba3586f.zip +0 -0
  428. data/demo/.yarn/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-a790b846fd.zip +0 -0
  429. data/demo/.yarn/cache/wrap-ansi-npm-8.1.0-26a4e6ae28-371733296d.zip +0 -0
  430. data/demo/.yarn/cache/wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip +0 -0
  431. data/demo/.yarn/cache/write-file-atomic-npm-5.0.1-52283db6ee-8dbb0e2512.zip +0 -0
  432. data/demo/.yarn/cache/xxhashjs-npm-0.2.2-70e0154c76-cf6baf05ba.zip +0 -0
  433. data/demo/.yarn/cache/y18n-npm-5.0.8-5f3a0a7e62-54f0fb9562.zip +0 -0
  434. data/demo/.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip +0 -0
  435. data/demo/.yarn/cache/yallist-npm-5.0.0-8732dd9f1c-eba5118240.zip +0 -0
  436. data/demo/.yarn/cache/yaml-npm-2.8.1-b364b3bec4-35b46150d4.zip +0 -0
  437. data/demo/.yarn/cache/yargs-npm-17.7.2-80b62638e1-73b572e863.zip +0 -0
  438. data/demo/.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-8bb69015f2.zip +0 -0
  439. data/demo/.yarn/cache/yargs-parser-npm-21.1.1-8fdc003314-ed2d96a616.zip +0 -0
  440. data/demo/.yarn/cache/yocto-queue-npm-0.1.0-c6c9a7db29-f77b3d8d00.zip +0 -0
  441. data/demo/.yarnrc.yml +1 -0
  442. data/demo/Gemfile +24 -0
  443. data/demo/Gemfile.lock +294 -0
  444. data/demo/Makefile +8 -0
  445. data/demo/Procfile.dev +2 -0
  446. data/demo/Rakefile +6 -0
  447. data/demo/app/assets/images/.keep +0 -0
  448. data/demo/app/assets/stylesheets/application.css +23 -0
  449. data/demo/app/components/index.js +20 -0
  450. data/demo/app/controllers/application_controller.rb +2 -0
  451. data/demo/app/javascript/application.js +3 -0
  452. data/demo/app/javascript/controllers/application.js +9 -0
  453. data/demo/app/javascript/controllers/index.js +5 -0
  454. data/demo/app/models/current.rb +3 -0
  455. data/demo/app/views/layouts/application.html.erb +19 -0
  456. data/demo/app/views/layouts/backpack.html.erb +42 -0
  457. data/demo/bin/dev +2 -0
  458. data/demo/bin/rails +4 -0
  459. data/demo/bin/rake +4 -0
  460. data/demo/bin/setup +26 -0
  461. data/demo/bin/thrust +5 -0
  462. data/demo/config/application.rb +57 -0
  463. data/demo/config/boot.rb +3 -0
  464. data/demo/config/cable.yml +10 -0
  465. data/demo/config/ci.rb +14 -0
  466. data/demo/config/database.yml +41 -0
  467. data/demo/config/environment.rb +5 -0
  468. data/demo/config/environments/development.rb +48 -0
  469. data/demo/config/environments/production.rb +61 -0
  470. data/demo/config/environments/test.rb +42 -0
  471. data/demo/config/initializers/assets.rb +7 -0
  472. data/demo/config/initializers/content_security_policy.rb +29 -0
  473. data/demo/config/initializers/filter_parameter_logging.rb +8 -0
  474. data/demo/config/initializers/inflections.rb +16 -0
  475. data/demo/config/locales/en.yml +31 -0
  476. data/demo/config/puma.rb +39 -0
  477. data/demo/config/routes.rb +9 -0
  478. data/demo/config.ru +6 -0
  479. data/demo/db/seeds.rb +9 -0
  480. data/demo/esbuild.config.js +36 -0
  481. data/demo/log/.keep +0 -0
  482. data/demo/package.json +36 -0
  483. data/demo/postcss.config.js +56 -0
  484. data/demo/public/404.html +135 -0
  485. data/demo/public/500.html +135 -0
  486. data/demo/public/icon.png +0 -0
  487. data/demo/public/icon.svg +3 -0
  488. data/demo/public/robots.txt +1 -0
  489. data/demo/test/fixtures/files/.keep +0 -0
  490. data/demo/test/test_helper.rb +15 -0
  491. data/demo/tmp/.keep +0 -0
  492. data/demo/tmp/pids/.keep +0 -0
  493. data/demo/tmp/storage/.keep +0 -0
  494. data/demo/yarn.lock +4434 -0
  495. data/docs/getting_started.md.erb +10 -0
  496. data/docs/tokens-and-utilities.md.erb +199 -0
  497. data/figma/Backpack.json +1 -0
  498. data/lib/backpack/components/badge/badge.css +51 -0
  499. data/lib/backpack/components/badge/badge.js +1 -0
  500. data/lib/backpack/components/badge.rb +25 -0
  501. data/lib/backpack/components/base.rb +15 -0
  502. data/lib/backpack/components/breadcrumb/breadcrumb.css +51 -0
  503. data/lib/backpack/components/breadcrumb/breadcrumb.js +1 -0
  504. data/lib/backpack/components/breadcrumb.rb +49 -0
  505. data/lib/backpack/components/button/button.css +215 -0
  506. data/lib/backpack/components/button/button.js +1 -0
  507. data/lib/backpack/components/button.rb +29 -0
  508. data/lib/backpack/components/concerns/attributes.rb +43 -0
  509. data/lib/backpack/components/concerns/classes.rb +38 -0
  510. data/lib/backpack/components/concerns/identifier.rb +13 -0
  511. data/lib/backpack/components/favicon.rb +16 -0
  512. data/lib/backpack/components/heading/heading.css +27 -0
  513. data/lib/backpack/components/heading/heading.js +1 -0
  514. data/lib/backpack/components/heading.rb +16 -0
  515. data/lib/backpack/components/icon/icon.css +10 -0
  516. data/lib/backpack/components/icon/icon.js +1 -0
  517. data/lib/backpack/components/icon.rb +41 -0
  518. data/lib/backpack/components/icon_sprite.rb +60 -0
  519. data/lib/backpack/components/quotation/quotation.css +39 -0
  520. data/lib/backpack/components/quotation/quotation.js +1 -0
  521. data/lib/backpack/components/quotation.rb +30 -0
  522. data/lib/backpack/components/rich_text/rich_text.css +0 -0
  523. data/lib/backpack/components/rich_text/rich_text.js +1 -0
  524. data/lib/backpack/components/rich_text.rb +9 -0
  525. data/lib/backpack/components/skip_links/skip_links.css +35 -0
  526. data/lib/backpack/components/skip_links/skip_links.js +1 -0
  527. data/lib/backpack/components/skip_links.rb +18 -0
  528. data/lib/backpack/components.rb +5 -0
  529. data/lib/backpack/spec_helpers.rb +15 -0
  530. data/lib/backpack/stylesheets/application.css +12 -0
  531. data/lib/backpack/stylesheets/base/_base.css +59 -0
  532. data/lib/backpack/stylesheets/tokens/_colors.css +179 -0
  533. data/lib/backpack/stylesheets/tokens/_focus.css +4 -0
  534. data/lib/backpack/stylesheets/tokens/_layout.css +12 -0
  535. data/lib/backpack/stylesheets/tokens/_radius.css +11 -0
  536. data/lib/backpack/stylesheets/tokens/_spacing.css +14 -0
  537. data/lib/backpack/stylesheets/tokens/_typography.css +37 -0
  538. data/lib/backpack/stylesheets/utilities/_focus.css +14 -0
  539. data/lib/backpack/stylesheets/utilities/_sr-only.css +50 -0
  540. data/lib/backpack/tokens.rb +11 -0
  541. data/lib/backpack/version.rb +5 -0
  542. data/lib/backpack.rb +16 -101
  543. data/spec/components/badge_spec.rb +31 -0
  544. data/spec/components/breadcrumb_spec.rb +55 -0
  545. data/spec/components/button_spec.rb +95 -0
  546. data/spec/components/favicon_spec.rb +28 -0
  547. data/spec/components/heading_spec.rb +39 -0
  548. data/spec/components/icon_spec.rb +139 -0
  549. data/spec/components/icon_sprite_spec.rb +46 -0
  550. data/spec/components/previews/backpack/preview.rb +3 -0
  551. data/spec/components/previews/badge_preview/overview.html.erb +33 -0
  552. data/spec/components/previews/badge_preview.rb +10 -0
  553. data/spec/components/previews/breadcrumb_preview.rb +10 -0
  554. data/spec/components/previews/button_preview/overview.html.erb +42 -0
  555. data/spec/components/previews/button_preview.rb +21 -0
  556. data/spec/components/previews/heading_preview.rb +19 -0
  557. data/spec/components/previews/icon_preview.rb +11 -0
  558. data/spec/components/previews/quotation_preview/overview.html.erb +23 -0
  559. data/spec/components/previews/quotation_preview.rb +12 -0
  560. data/spec/components/previews/rich_text_preview.rb +99 -0
  561. data/spec/components/previews/skip_links_preview.rb +5 -0
  562. data/spec/components/quotation_spec.rb +58 -0
  563. data/spec/components/rich_text_spec.rb +39 -0
  564. data/spec/components/skip_links_spec.rb +31 -0
  565. data/spec/fixtures/icons/arrow-right.svg +1 -0
  566. data/spec/fixtures/icons/close.svg +1 -0
  567. data/spec/fixtures/icons/user.svg +1 -0
  568. data/spec/spec_helper.rb +20 -0
  569. data/spec/support/matchers/eq_html.rb +47 -0
  570. data/spec/support/matchers/include_html.rb +47 -0
  571. data/vendor/normalize.css +351 -0
  572. metadata +670 -98
  573. data/AUTHORS +0 -1
  574. data/COPYING +0 -340
  575. data/README +0 -60
  576. data/bin/backpack +0 -55
  577. data/doc/rdoc/created.rid +0 -1
  578. data/doc/rdoc/files/AUTHORS.html +0 -95
  579. data/doc/rdoc/files/COPYING.html +0 -519
  580. data/doc/rdoc/files/README.html +0 -166
  581. data/doc/rdoc/index.html +0 -10
  582. data/doc/rdoc/permalink.gif +0 -0
  583. data/doc/rdoc/rdoc-style.css +0 -106
  584. data/doc/rdoc/rubyfr.png +0 -0
  585. data/lib/template/INSTALL.rb +0 -5
  586. data/lib/template/LICENCE.rb +0 -21
  587. data/lib/template/README.rb +0 -26
  588. data/lib/template/generators/plugin_begin.rb +0 -8
  589. data/lib/template/generators/plugin_end.rb +0 -2
  590. data/lib/template/generators/plugin_generator.rb +0 -32
  591. data/lib/template/generators/template/template_controller.rb +0 -17
  592. data/lib/template/generators/template/template_view.rb +0 -12
  593. data/lib/template/init.rb +0 -2
  594. data/lib/template/init_controller.rb +0 -3
  595. data/lib/template/init_view.rb +0 -3
  596. data/lib/template/lib/plugin/controller_helpers.rb +0 -5
  597. data/lib/template/lib/plugin/view_helpers.rb +0 -5
  598. data/lib/template/tasks/tasks.rb +0 -27
  599. data/setup.rb +0 -1585
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe Backpack::Components::Heading, type: :component do
4
+ let(:component) { described_class.new(**params) { text } }
5
+ let(:params) { {} }
6
+ let(:text) { "Heading" }
7
+
8
+ subject(:output) { render_fragment(component) }
9
+
10
+ it "renders a level 1 heading by default" do
11
+ expect(output).to have_css("h1.Heading.Heading-1", text:)
12
+ end
13
+
14
+ context "with a different level" do
15
+ let(:params) { { level: 3 } }
16
+
17
+ it "uses the corresponding heading tag and classes" do
18
+ expect(output).to have_css("h3.Heading.Heading-3", text:)
19
+ end
20
+ end
21
+
22
+ context "with a custom tag" do
23
+ let(:params) { { tag: :h2 } }
24
+
25
+ it "renders the provided tag while keeping the computed classes" do
26
+ expect(output).to have_css("h2.Heading.Heading-1", text:)
27
+ end
28
+ end
29
+
30
+ context "with HTML attributes" do
31
+ let(:params) do
32
+ { class: "custom", data: { foo: "bar" } }
33
+ end
34
+
35
+ it "merges user attributes with the component defaults" do
36
+ expect(output).to have_css("h1.Heading.Heading-1.custom[data-foo='bar']", text:)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,139 @@
1
+ require 'spec_helper'
2
+
3
+ describe Backpack::Components::Icon, type: :component do
4
+ let(:component) { described_class.new(key, **params) }
5
+ let(:key) { nil }
6
+ let(:params) { {} }
7
+
8
+ subject(:output) { render_fragment(component) }
9
+
10
+ context "with symbol key" do
11
+ let(:key) { :user }
12
+
13
+ it "renders the svg with the key" do
14
+ expect(output).to eq_html <<~HTML
15
+ <svg class="Icon" data-icon-key="user" role="img"><use xlink:href="#IconSprite-user"></use></svg>
16
+ HTML
17
+ end
18
+ end
19
+
20
+ context "with string key" do
21
+ let(:key) { "user" }
22
+
23
+ it "renders the svg with the key" do
24
+ expect(output).to eq_html <<~HTML
25
+ <svg class="Icon" data-icon-key="user" role="img"><use xlink:href="#IconSprite-user"></use></svg>
26
+ HTML
27
+ end
28
+ end
29
+
30
+ context "with key that needs formatting" do
31
+ let(:key) { "left Arrow" }
32
+
33
+ it "correctly formats the key" do
34
+ expect(output).to eq_html <<~HTML
35
+ <svg class="Icon" data-icon-key="left-arrow" role="img"><use xlink:href="#IconSprite-left-arrow"></use></svg>
36
+ HTML
37
+ end
38
+ end
39
+
40
+ context "with key that contains a slash" do
41
+ let(:key) { "social/discord" }
42
+
43
+ it "replaces the slash with a dash" do
44
+ expect(output).to eq_html <<~HTML
45
+ <svg class="Icon" data-icon-key="social-discord" role="img"><use xlink:href="#IconSprite-social-discord"></use></svg>
46
+ HTML
47
+ end
48
+ end
49
+
50
+ context "without role" do
51
+ let(:key) { :user }
52
+ let(:params) { { role: nil } }
53
+
54
+ it "has no role attribute" do
55
+ expect(output).to eq_html <<~HTML
56
+ <svg class="Icon" data-icon-key="user"><use xlink:href="#IconSprite-user"></use></svg>
57
+ HTML
58
+ end
59
+ end
60
+
61
+ describe "when the icon conveys information" do
62
+ let(:key) { :user }
63
+
64
+ context "with label" do
65
+ let(:params) { { label: "User" } }
66
+
67
+ it "has the role and aria-label attributes, and a title element" do
68
+ expect(output).to eq_html <<~HTML
69
+ <svg class="Icon" data-icon-key="user" role="img" aria-label="User"><title>User</title><use xlink:href="#IconSprite-user"></use></svg>
70
+ HTML
71
+ end
72
+ end
73
+ end
74
+
75
+ describe "when the icon does not convey information" do
76
+ let(:key) { :user }
77
+ let(:params) { { aria_hidden: true, role: nil } }
78
+
79
+ context "with aria_hidden as a boolean" do
80
+ let(:params) { { aria_hidden: true, role: nil } }
81
+
82
+ it "has the aria-hidden attribute and no role attribute" do
83
+ expect(output).to eq_html <<~HTML
84
+ <svg class="Icon" data-icon-key="user" aria-hidden="true"><use xlink:href="#IconSprite-user"></use></svg>
85
+ HTML
86
+ end
87
+ end
88
+
89
+ context "with aria_hidden as a string" do
90
+ let(:params) { { aria_hidden: "true", role: nil } }
91
+
92
+ it "has the aria-hidden attribute and no role attribute" do
93
+ expect(output).to eq_html <<~HTML
94
+ <svg class="Icon" data-icon-key="user" aria-hidden="true"><use xlink:href="#IconSprite-user"></use></svg>
95
+ HTML
96
+ end
97
+ end
98
+
99
+ context "with label" do
100
+ let(:params) { { aria_hidden: true, role: nil, label: "User" } }
101
+
102
+ it "has the aria-hidden attribute, no role attribute and no label" do
103
+ expect(output).to eq_html <<~HTML
104
+ <svg class="Icon" data-icon-key="user" aria-hidden="true"><use xlink:href="#IconSprite-user"></use></svg>
105
+ HTML
106
+ end
107
+ end
108
+ end
109
+
110
+ context "with Current" do
111
+ let(:current_class) do
112
+ Class.new(ActiveSupport::CurrentAttributes) do
113
+ attribute :icons
114
+ end
115
+ end
116
+
117
+ before do
118
+ stub_const('Current', current_class)
119
+ end
120
+
121
+ after do
122
+ Current.reset
123
+ end
124
+
125
+ describe "adds the icon key to Current.icons" do
126
+ let(:key) { :user }
127
+
128
+ it "adds the icon key to Current.icons" do
129
+ output
130
+ expect(Current.icons).to eq(["user"])
131
+ end
132
+
133
+ it "doesn't add the icon key twice" do
134
+ 2.times { output }
135
+ expect(Current.icons).to eq(["user"])
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe Backpack::Components::IconSprite, type: :component do
4
+ let(:component) { described_class.new(**params) }
5
+ let(:params) { {} }
6
+
7
+ subject(:output) { render_fragment(component) }
8
+
9
+ context "without Current" do
10
+ it "renders nothing" do
11
+ expect(output).to eq_html('')
12
+ end
13
+ end
14
+
15
+ context "with Current" do
16
+ let(:current_class) do
17
+ Class.new(ActiveSupport::CurrentAttributes) do
18
+ attribute :icons
19
+ end
20
+ end
21
+
22
+ before do
23
+ stub_const('Current', current_class)
24
+ end
25
+
26
+ after do
27
+ Current.reset
28
+ end
29
+
30
+ it "renders nothing" do
31
+ expect(output).to eq_html('')
32
+ end
33
+
34
+ context "with icons in Current" do
35
+ before do
36
+ Current.icons = %w[user close]
37
+ end
38
+
39
+ it "renders the sprite with icons ordered alphabetically" do
40
+ expect(output).to eq_html <<~HTML
41
+ <svg class="IconSprite" hidden=""><defs><symbol id="IconSprite-close" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></symbol><symbol id="IconSprite-user" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></symbol></defs></svg>
42
+ HTML
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,3 @@
1
+ class Backpack::Preview < Lookbook::Preview
2
+ include Backpack::Components
3
+ end
@@ -0,0 +1,33 @@
1
+ <%
2
+ props = Backpack::Components::Badge.literal_properties
3
+ %>
4
+ <table class="lookbook-table">
5
+ <thead>
6
+ <tr>
7
+ <th>Color</th>
8
+ <% props[:color].type.each do |color| %>
9
+ <th colspan="<%= props[:size].type.to_a.size %>"><code><%= color || :default %></code></th>
10
+ <% end %>
11
+ </tr>
12
+ <tr>
13
+ <th>Size</th>
14
+ <% props[:color].type.each do %>
15
+ <% props[:size].type.each do |size| %>
16
+ <th><code><%= size %></code></th>
17
+ <% end %>
18
+ <% end %>
19
+ </tr>
20
+ </thead>
21
+ <tbody>
22
+ <% props[:variant].type.each do |variant| %>
23
+ <tr>
24
+ <th><code><%= variant %></code></th>
25
+ <% props[:color].type.each do |color| %>
26
+ <% props[:size].type.each do |size| %>
27
+ <td><%= render Backpack::Components::Badge.new(variant:, size:, color:) { "Badge" } %></td>
28
+ <% end %>
29
+ <% end %>
30
+ </tr>
31
+ <% end %>
32
+ </tbody>
33
+ </table>
@@ -0,0 +1,10 @@
1
+ class BadgePreview < Backpack::Preview
2
+ def overview; end
3
+
4
+ # @param size [Integer] range { min: 1, max: 3, step: 1 }
5
+ # @param variant select { choices: [solid, soft, surface, outline] }
6
+ # @param label
7
+ def playground(size: 2, variant: :solid, label: "Badge")
8
+ Badge(variant:, size:) { label }
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class BreadcrumbPreview < Backpack::Preview
2
+ # Markup and style based on [ARIA Breadcrumb Pattern Example](https://www.w3.org/WAI/ARIA/apg/patterns/breadcrumb/examples/breadcrumb/)
3
+ def default
4
+ Breadcrumb() do |c|
5
+ c.item(href: "/") { "Home" }
6
+ c.item(href: "/sections") { "Sections" }
7
+ c.item(href: "") { "Articles" }
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,42 @@
1
+ <%
2
+ props = Backpack::Components::Button.literal_properties
3
+ icon = "arrow-right"
4
+ %>
5
+ <table class="lookbook-table">
6
+ <thead>
7
+ <tr>
8
+ <th>Color</th>
9
+ <% props[:color].type.each do |color| %>
10
+ <th colspan="<%= props[:size].type.to_a.size %>"><code><%= color || :default %></code></th>
11
+ <% end %>
12
+ </tr>
13
+ <tr>
14
+ <th>Size</th>
15
+ <% props[:color].type.each do %>
16
+ <% props[:size].type.each do |size| %>
17
+ <th><code><%= size %></code></th>
18
+ <% end %>
19
+ <% end %>
20
+ </tr>
21
+ </thead>
22
+ <tbody>
23
+ <% props[:variant].type.each do |variant| %>
24
+ <tr>
25
+ <th><code><%= variant %></code></th>
26
+ <% props[:color].type.each do |color| %>
27
+ <% props[:size].type.each do |size| %>
28
+ <td><%= render Backpack::Components::Button.new(variant:, size:, color:, icon:) { "Button" } %></td>
29
+ <% end %>
30
+ <% end %>
31
+ </tr>
32
+ <tr>
33
+ <th><code><%= variant %></code>, <code>disabled</code></th>
34
+ <% props[:color].type.each do |color| %>
35
+ <% props[:size].type.each do |size| %>
36
+ <td><%= render Backpack::Components::Button.new(variant:, size:, color:, icon:, disabled: true) { "Button" } %></td>
37
+ <% end %>
38
+ <% end %>
39
+ </tr>
40
+ <% end %>
41
+ </tbody>
42
+ </table>
@@ -0,0 +1,21 @@
1
+ class ButtonPreview < Backpack::Preview
2
+
3
+ def overview; end
4
+
5
+ # @param size [Integer] range { min: 1, max: 3, step: 1 }
6
+ # @param variant [Symbol] select { choices: [solid, soft, surface, outline, ghost] }
7
+ # @param color [Symbol] select { choices: [~, green, orange, red] }
8
+ # @param label
9
+ def playground(size: 2, variant: :solid, color: nil, label: "Button")
10
+ Button(size:, variant:, color:) do
11
+ label
12
+ end
13
+ end
14
+
15
+ def with_icon
16
+ Button do
17
+ Icon("arrow-right")
18
+ "Button"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ class HeadingPreview < Backpack::Preview
2
+ # @!group
3
+ def default
4
+ Heading() { "Hello, Lookbook!" }
5
+ end
6
+
7
+ def level_2
8
+ Heading(level: 2) { "Sous-titre" }
9
+ end
10
+
11
+ def level_2_as_h1
12
+ Heading(level: 2, tag: :h1) { "Sous-titre sous forme de h1" }
13
+ end
14
+
15
+ def level_3
16
+ Heading(level: 3) { "Titre 3" }
17
+ end
18
+ # @!endgroup
19
+ end
@@ -0,0 +1,11 @@
1
+ class IconPreview < Backpack::Preview
2
+ # This icon is coming from `app/assets/icons`
3
+ def default
4
+ Icon("user")
5
+ end
6
+
7
+ # This icon is coming from [Lucide](https://lucide.dev)'s [`lucide-static`](https://lucide.dev/guide/packages/lucide-static) package.
8
+ def lucide
9
+ Icon("house")
10
+ end
11
+ end
@@ -0,0 +1,23 @@
1
+ <%
2
+ props = Backpack::Components::Quotation.literal_properties
3
+ %>
4
+ <table class="lookbook-table">
5
+ <thead>
6
+ <tr>
7
+ <th></th>
8
+ <% props[:weight].type.each do |weight| %>
9
+ <th><code><%= weight %></code></th>
10
+ <% end %>
11
+ </tr>
12
+ </thead>
13
+ <tbody>
14
+ <% props[:size].type.each do |size| %>
15
+ <tr>
16
+ <th><code><%= size %></code></th>
17
+ <% props[:weight].type.each do |weight| %>
18
+ <td><%= render Backpack::Components::Quotation.new(size:, weight:, cite: "Jan Tschichold") { "Perfect typography is certainly the most elusive of all arts. Sculpture in stone alone comes near it in obstinacy." } %></td>
19
+ <% end %>
20
+ </tr>
21
+ <% end %>
22
+ </tbody>
23
+ </table>
@@ -0,0 +1,12 @@
1
+ class QuotationPreview < Backpack::Preview
2
+ def overview; end
3
+
4
+ # @param size [Integer] range { min: 1, max: 6, step: 1 }
5
+ # @param weight [Symbol] select { choices: [light, regular, medium, semibold, bold] }
6
+ # @param text textarea
7
+ # @param cite
8
+ def playground(size: 2, weight: :regular, cite: "Jan Tschichold",
9
+ text: "Perfect typography is certainly the most elusive of all arts. Sculpture in stone alone comes near it in obstinacy.")
10
+ Quotation(size:, weight:, cite:) { text }
11
+ end
12
+ end
@@ -0,0 +1,99 @@
1
+ class RichTextPreview < Backpack::Preview
2
+ # Content comes from [Chris Coyer's HTML Kitchen-sink](https://codepen.io/chriscoyier/pen/JpLzjd)
3
+ def default
4
+ RichText() do
5
+ <<~HTML.html_safe
6
+ <h1>h1 HTML5 Kitchen Sink</h1>
7
+ <h2>h2 Back in my quaint <a href='#'>garden</a></h2>
8
+ <h3>h3 Jaunty <a href='#'>zinnias</a> vie with flaunting phlox</h3>
9
+ <h4>h4 Five or six big jet planes zoomed quickly by the new tower.</h4>
10
+ <h5>h5 Expect skilled signwriters to use many jazzy, quaint old alphabets effectively.</h5>
11
+ <h6>h6 Pack my box with five dozen liquor jugs.</h6>
12
+ <p>Links can be <a href="/">visited</a> or <a href="#">not visited</a> (after clicking, reload the page to change the link).</p>
13
+ <p>This paragraph is nested inside an article. It contains many different, sometimes useful, HTML5 tags. Of course there are classics like <em>emphasis</em>, <strong>strong</strong>, and <small>small</small> but there are many others as well. Hover the following text for abbreviation tag: <abbr title="abbreviation">abbr</abbr>. Similarly, you can use acronym tag like this: <acronym title="For The Win">ftw</acronym>. You can define <del>deleted text</del> which often gets replaced with <ins>inserted</ins> text.</p>
14
+ <p>You can also use <kbd>keyboard text</kbd>, which sometimes is styled similarly to the <code>&lt;code&gt;</code> or <samp>samp</samp> tags. Even more specifically, there is a tag just for <var>variables</var>. Not to be mistaken with blockquotes
15
+ below, the quote tag lets you denote something as <q>quoted text</q>. Lastly don't forget the sub (H<sub>2</sub>O) and sup (E = MC<sup>2</sup>) tags. </p>
16
+ <hr>
17
+ <blockquote>
18
+ <p>Blockquote: I quickly explained that many big jobs involve few hazards</p>
19
+ </blockquote>
20
+ <blockquote>
21
+ <p>This is a mult-line blockquote with a cite reference. People think focus means saying yes to the thing you’ve got to focus on. But that’s not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick
22
+ carefully. I’m actually as proud of the things we haven’tdone as the things I have done. Innovation is saying no to 1,000 things.
23
+ <cite>Steve Jobs – Apple Worldwide Developers’ Conference, 1997</cite>
24
+ </p>
25
+ </blockquote>
26
+ <hr>
27
+ <dl>
28
+ <dt>Definition List Title</dt>
29
+ <dd>Definition list division.</dd>
30
+ <dt>Kitchen Sink</dt>
31
+ <dd>Used in expressions to describe work in which all conceivable (and some inconceivable) sources have been mined. In this case, a bunch of markup.</dd>
32
+ <dt>aside</dt>
33
+ <dd>Defines content aside from the page content</dd>
34
+ <dt>blockquote</dt>
35
+ <dd>Defines a section that is quoted from another source</dd>
36
+ </dl>
37
+ <hr>
38
+ <ul>
39
+ <li>Unordered List item one
40
+ <ul>
41
+ <li>Nested list item
42
+ <ul>
43
+ <li>Level 3, item one</li>
44
+ <li>Level 3, item two</li>
45
+ <li>Level 3, item three</li>
46
+ <li>Level 3, item four</li>
47
+ </ul>
48
+ </li>
49
+ <li>List item two</li>
50
+ <li>List item three</li>
51
+ <li>List item four</li>
52
+ </ul>
53
+ </li>
54
+ <li>List item two</li>
55
+ <li>List item three</li>
56
+ <li>List item four</li>
57
+ </ul>
58
+ <hr>
59
+ <ol>
60
+ <li>List item one
61
+ <ol>
62
+ <li>List item one
63
+ <ol>
64
+ <li>List item one</li>
65
+ <li>List item two</li>
66
+ <li>List item three</li>
67
+ <li>List item four</li>
68
+ </ol>
69
+ </li>
70
+ <li>List item two</li>
71
+ <li>List item three</li>
72
+ <li>List item four</li>
73
+ </ol>
74
+ </li>
75
+ <li>List item two</li>
76
+ <li>List item three</li>
77
+ <li>List item four</li>
78
+ </ol>
79
+ <hr>
80
+ <address>1 Infinite Loop<br>
81
+ Cupertino, CA 95014<br>
82
+ United States</address>
83
+ <hr>
84
+ <pre>
85
+ pre {
86
+ display: block;
87
+ padding: 7px;
88
+ background-color: #F5F5F5;
89
+ border: 1px solid #E1E1E8;
90
+ border-radius: 3px;
91
+ white-space: pre-wrap;
92
+ word-break: break-all;
93
+ font-family: Menlo, Monaco;
94
+ line-height: 160%;
95
+ }</pre>
96
+ HTML
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,5 @@
1
+ class SkipLinksPreview < Backpack::Preview
2
+ def default
3
+ SkipLinks()
4
+ end
5
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe Backpack::Components::Quotation, type: :component do
4
+ let(:component) { described_class.new(**params) { html } }
5
+ let(:params) { {} }
6
+ let(:text) do
7
+ "Perfect typography is certainly the most elusive of all arts. Sculpture in stone alone comes near it in obstinacy."
8
+ end
9
+ let(:html) do
10
+ "<p>#{text}</p>".html_safe
11
+ end
12
+
13
+ subject(:output) { render_fragment(component) }
14
+
15
+ it "renders a blockquote element" do
16
+ expect(output).to have_css("blockquote.Quotation.Quotation-size-2",
17
+ text:)
18
+ end
19
+
20
+ it "doesn't specify the font-weight if default" do
21
+ expect(output).not_to have_css("blockquote.Quotation[style]")
22
+ end
23
+
24
+ it "doesn't render a footer not a cite element" do
25
+ expect(output).to_not have_css("blockquote.Quotation footer")
26
+ expect(output).to_not have_css("blockquote.Quotation cite")
27
+ end
28
+
29
+ context "with a cite" do
30
+ let(:params) { { cite: "Jan Tschichold" } }
31
+
32
+ it "renders a cite element in a footer" do
33
+ expect(output).to have_css("blockquote.Quotation footer cite", text: "Jan Tschichold")
34
+ end
35
+ end
36
+
37
+ context "with variant options" do
38
+ let(:params) { { size: 5, weight: :bold } }
39
+
40
+ it "updates the variant modifiers in the class list" do
41
+ expect(output).to have_css("blockquote.Quotation.Quotation-size-5[style='--font-weight: var(--bold)']",
42
+ text:)
43
+ end
44
+ end
45
+
46
+ context "with custom HTML attributes" do
47
+ let(:params) do
48
+ {
49
+ class: "prose",
50
+ data: { controller: "quotation" }
51
+ }
52
+ end
53
+
54
+ it "merges user attributes with the component defaults" do
55
+ expect(output).to have_css("blockquote.Quotation.prose[data-controller='quotation']")
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe Backpack::Components::RichText, type: :component do
4
+ let(:component) { described_class.new(**params) { html } }
5
+ let(:params) { {} }
6
+ let(:html) { "<h1>Hello</h2> <p>World</p>".html_safe }
7
+
8
+ subject(:output) { render_fragment(component) }
9
+
10
+ it "wraps content in a div with the default class" do
11
+ expect(output).to have_css("div.RichText", text: "Hello World")
12
+ end
13
+
14
+ it "renders the HTML elements" do
15
+ expect(output).to have_css("div.RichText h1", text: "Hello")
16
+ expect(output).to have_css("div.RichText p", text: "World")
17
+ end
18
+
19
+ context "with a custom tag" do
20
+ let(:params) { { tag: :section } }
21
+
22
+ it "renders using the provided tag while keeping the default class" do
23
+ expect(output).to have_css("section.RichText")
24
+ end
25
+ end
26
+
27
+ context "with custom HTML attributes" do
28
+ let(:params) do
29
+ {
30
+ class: "prose",
31
+ data: { controller: "rich-text" }
32
+ }
33
+ end
34
+
35
+ it "merges user attributes with the component defaults" do
36
+ expect(output).to have_css("div.RichText.prose[data-controller='rich-text']")
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Backpack::Components::SkipLinks, type: :component do
4
+ let(:component) { described_class.new(**params) }
5
+ let(:params) { {} }
6
+
7
+ subject(:output) { render_fragment(component) }
8
+
9
+ it "renders the skip links list" do
10
+ expect(output).to have_css("ul.SkipLinks")
11
+ expect(output).to have_css("ul.SkipLinks > li", count: 2)
12
+ expect(output).to have_css(
13
+ "ul.SkipLinks > li:nth-child(1) > a[href='#content']",
14
+ text: "Aller au contenu"
15
+ )
16
+ expect(output).to have_css(
17
+ "ul.SkipLinks > li:nth-child(2) > a[href='#navigation']",
18
+ text: "Aller à la navigation"
19
+ )
20
+ end
21
+
22
+ context "with HTML attributes" do
23
+ let(:params) do
24
+ { class: "custom", data: { foo: "bar" } }
25
+ end
26
+
27
+ it "merges user attributes with the component defaults" do
28
+ expect(output).to have_css("ul.SkipLinks.custom[data-foo='bar']")
29
+ end
30
+ end
31
+ end
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right-icon lucide-arrow-right"><path d="M5 12h14"/><path d="m12 5 7 7-7 7"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-x-icon lucide-x"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-user-icon lucide-user"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>