diff --git a/.gitbook/assets/2025-05-08 at 10.33.28 - Screengrab@2x.png b/.gitbook/assets/2025-05-08 at 10.33.28 - Screengrab@2x.png new file mode 100644 index 0000000..f7b9dc2 Binary files /dev/null and b/.gitbook/assets/2025-05-08 at 10.33.28 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-05-08 at 10.57.19 - Screengrab@2x.png b/.gitbook/assets/2025-05-08 at 10.57.19 - Screengrab@2x.png new file mode 100644 index 0000000..589e4b8 Binary files /dev/null and b/.gitbook/assets/2025-05-08 at 10.57.19 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-05-08 at 11.06.18 - Screengrab@2x.png b/.gitbook/assets/2025-05-08 at 11.06.18 - Screengrab@2x.png new file mode 100644 index 0000000..8e18f37 Binary files /dev/null and b/.gitbook/assets/2025-05-08 at 11.06.18 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-05-08 at 11.09.40 - Screengrab@2x.png b/.gitbook/assets/2025-05-08 at 11.09.40 - Screengrab@2x.png new file mode 100644 index 0000000..d044472 Binary files /dev/null and b/.gitbook/assets/2025-05-08 at 11.09.40 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-05-08 at 11.12.44 - Screengrab@2x.png b/.gitbook/assets/2025-05-08 at 11.12.44 - Screengrab@2x.png new file mode 100644 index 0000000..ae9b946 Binary files /dev/null and b/.gitbook/assets/2025-05-08 at 11.12.44 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-05-08 at 11.14.30 - Screengrab@2x.png b/.gitbook/assets/2025-05-08 at 11.14.30 - Screengrab@2x.png new file mode 100644 index 0000000..aa1e1a7 Binary files /dev/null and b/.gitbook/assets/2025-05-08 at 11.14.30 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-05-08 at 12.52.19 - Screengrab@2x.png b/.gitbook/assets/2025-05-08 at 12.52.19 - Screengrab@2x.png new file mode 100644 index 0000000..c75b8e6 Binary files /dev/null and b/.gitbook/assets/2025-05-08 at 12.52.19 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-07-17 at 12.10.25 - Screengrab@2x.png b/.gitbook/assets/2025-07-17 at 12.10.25 - Screengrab@2x.png new file mode 100644 index 0000000..2d2f309 Binary files /dev/null and b/.gitbook/assets/2025-07-17 at 12.10.25 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-07-30 at 12.33.15 - Screengrab@2x.png b/.gitbook/assets/2025-07-30 at 12.33.15 - Screengrab@2x.png new file mode 100644 index 0000000..b86e87c Binary files /dev/null and b/.gitbook/assets/2025-07-30 at 12.33.15 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-07-30 at 12.38.17 - Screengrab@2x.png b/.gitbook/assets/2025-07-30 at 12.38.17 - Screengrab@2x.png new file mode 100644 index 0000000..69b786a Binary files /dev/null and b/.gitbook/assets/2025-07-30 at 12.38.17 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-07-30 at 12.59.26 - Screengrab@2x.png b/.gitbook/assets/2025-07-30 at 12.59.26 - Screengrab@2x.png new file mode 100644 index 0000000..fab3ac3 Binary files /dev/null and b/.gitbook/assets/2025-07-30 at 12.59.26 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-07-30 at 13.04.07 - Screengrab@2x.png b/.gitbook/assets/2025-07-30 at 13.04.07 - Screengrab@2x.png new file mode 100644 index 0000000..32dc87b Binary files /dev/null and b/.gitbook/assets/2025-07-30 at 13.04.07 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-08-14 at 14.32.29 - Screengrab@2x.png b/.gitbook/assets/2025-08-14 at 14.32.29 - Screengrab@2x.png new file mode 100644 index 0000000..7f28589 Binary files /dev/null and b/.gitbook/assets/2025-08-14 at 14.32.29 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-08-14 at 14.35.39 - Screengrab@2x.png b/.gitbook/assets/2025-08-14 at 14.35.39 - Screengrab@2x.png new file mode 100644 index 0000000..39e5848 Binary files /dev/null and b/.gitbook/assets/2025-08-14 at 14.35.39 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-08-14 at 14.36.56 - Screengrab@2x.png b/.gitbook/assets/2025-08-14 at 14.36.56 - Screengrab@2x.png new file mode 100644 index 0000000..efd0661 Binary files /dev/null and b/.gitbook/assets/2025-08-14 at 14.36.56 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-08-14 at 14.39.30 - Screengrab@2x.png b/.gitbook/assets/2025-08-14 at 14.39.30 - Screengrab@2x.png new file mode 100644 index 0000000..5372e4e Binary files /dev/null and b/.gitbook/assets/2025-08-14 at 14.39.30 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-08-14 at 14.41.40 - Screengrab@2x.png b/.gitbook/assets/2025-08-14 at 14.41.40 - Screengrab@2x.png new file mode 100644 index 0000000..e178392 Binary files /dev/null and b/.gitbook/assets/2025-08-14 at 14.41.40 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-08-14 at 14.43.51 - Screengrab@2x.png b/.gitbook/assets/2025-08-14 at 14.43.51 - Screengrab@2x.png new file mode 100644 index 0000000..bd01e95 Binary files /dev/null and b/.gitbook/assets/2025-08-14 at 14.43.51 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-08-14 at 14.44.03 - Screengrab@2x.png b/.gitbook/assets/2025-08-14 at 14.44.03 - Screengrab@2x.png new file mode 100644 index 0000000..c1b3c17 Binary files /dev/null and b/.gitbook/assets/2025-08-14 at 14.44.03 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-08-14 at 14.47.52 - Screengrab@2x.png b/.gitbook/assets/2025-08-14 at 14.47.52 - Screengrab@2x.png new file mode 100644 index 0000000..c061812 Binary files /dev/null and b/.gitbook/assets/2025-08-14 at 14.47.52 - Screengrab@2x.png differ diff --git a/.gitbook/assets/2025-08-14 at 14.52.10 - Screengrab@2x.png b/.gitbook/assets/2025-08-14 at 14.52.10 - Screengrab@2x.png new file mode 100644 index 0000000..632be2a Binary files /dev/null and b/.gitbook/assets/2025-08-14 at 14.52.10 - Screengrab@2x.png differ diff --git a/.gitbook/assets/API Keys page .png b/.gitbook/assets/API Keys page .png new file mode 100644 index 0000000..14ef4d1 Binary files /dev/null and b/.gitbook/assets/API Keys page .png differ diff --git a/.gitbook/assets/Add New Sync Provider.png b/.gitbook/assets/Add New Sync Provider.png new file mode 100644 index 0000000..eeee80d Binary files /dev/null and b/.gitbook/assets/Add New Sync Provider.png differ diff --git a/.gitbook/assets/Api key to companion.gif b/.gitbook/assets/Api key to companion.gif new file mode 100644 index 0000000..5827245 Binary files /dev/null and b/.gitbook/assets/Api key to companion.gif differ diff --git a/.gitbook/assets/Api key to plugin.gif b/.gitbook/assets/Api key to plugin.gif new file mode 100644 index 0000000..4dd4fe1 Binary files /dev/null and b/.gitbook/assets/Api key to plugin.gif differ diff --git a/.gitbook/assets/Area.gif b/.gitbook/assets/Area.gif new file mode 100644 index 0000000..8ef0ba5 Binary files /dev/null and b/.gitbook/assets/Area.gif differ diff --git a/.gitbook/assets/COVER - Framer Plugin.png b/.gitbook/assets/COVER - Framer Plugin.png new file mode 100644 index 0000000..85eeff1 Binary files /dev/null and b/.gitbook/assets/COVER - Framer Plugin.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-12 at 13.42.50@2x.png b/.gitbook/assets/CleanShot 2025-02-12 at 13.42.50@2x.png new file mode 100644 index 0000000..98411ae Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-12 at 13.42.50@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-14 at 13.55.01@2x.png b/.gitbook/assets/CleanShot 2025-02-14 at 13.55.01@2x.png new file mode 100644 index 0000000..eff69db Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-14 at 13.55.01@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-14 at 13.55.12@2x.png b/.gitbook/assets/CleanShot 2025-02-14 at 13.55.12@2x.png new file mode 100644 index 0000000..db63f9c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-14 at 13.55.12@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-17 at 12.35.31.png b/.gitbook/assets/CleanShot 2025-02-17 at 12.35.31.png new file mode 100644 index 0000000..f5c141b Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-17 at 12.35.31.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-17 at 12.52.32.png b/.gitbook/assets/CleanShot 2025-02-17 at 12.52.32.png new file mode 100644 index 0000000..93da316 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-17 at 12.52.32.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-17 at 14.55.17 (1).png b/.gitbook/assets/CleanShot 2025-02-17 at 14.55.17 (1).png new file mode 100644 index 0000000..8a48642 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-17 at 14.55.17 (1).png differ diff --git a/.gitbook/assets/CleanShot 2025-02-17 at 15.02.16.png b/.gitbook/assets/CleanShot 2025-02-17 at 15.02.16.png new file mode 100644 index 0000000..d0146e3 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-17 at 15.02.16.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-17 at 17.54.08.png b/.gitbook/assets/CleanShot 2025-02-17 at 17.54.08.png new file mode 100644 index 0000000..2d5fb68 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-17 at 17.54.08.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-18 at 09.24.41.png b/.gitbook/assets/CleanShot 2025-02-18 at 09.24.41.png new file mode 100644 index 0000000..d93134f Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-18 at 09.24.41.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-21 at 13.24.53@2x.png b/.gitbook/assets/CleanShot 2025-02-21 at 13.24.53@2x.png new file mode 100644 index 0000000..400a88c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-21 at 13.24.53@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-21 at 13.25.04@2x.png b/.gitbook/assets/CleanShot 2025-02-21 at 13.25.04@2x.png new file mode 100644 index 0000000..8fca490 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-21 at 13.25.04@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-21 at 13.27.06.gif b/.gitbook/assets/CleanShot 2025-02-21 at 13.27.06.gif new file mode 100644 index 0000000..f20d3df Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-21 at 13.27.06.gif differ diff --git a/.gitbook/assets/CleanShot 2025-02-26 at 21.44.22@2x.png b/.gitbook/assets/CleanShot 2025-02-26 at 21.44.22@2x.png new file mode 100644 index 0000000..4dcde7e Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-26 at 21.44.22@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-26 at 21.47.27@2x.png b/.gitbook/assets/CleanShot 2025-02-26 at 21.47.27@2x.png new file mode 100644 index 0000000..6982be6 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-26 at 21.47.27@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-28 at 19.53.05@2x.png b/.gitbook/assets/CleanShot 2025-02-28 at 19.53.05@2x.png new file mode 100644 index 0000000..155c9a1 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-28 at 19.53.05@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-28 at 19.54.37@2x.png b/.gitbook/assets/CleanShot 2025-02-28 at 19.54.37@2x.png new file mode 100644 index 0000000..b6a69fe Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-28 at 19.54.37@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-28 at 19.55.58.gif b/.gitbook/assets/CleanShot 2025-02-28 at 19.55.58.gif new file mode 100644 index 0000000..37c3a40 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-28 at 19.55.58.gif differ diff --git a/.gitbook/assets/CleanShot 2025-02-28 at 20.00.19.gif b/.gitbook/assets/CleanShot 2025-02-28 at 20.00.19.gif new file mode 100644 index 0000000..9f0e089 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-28 at 20.00.19.gif differ diff --git a/.gitbook/assets/CleanShot 2025-02-28 at 20.07.05.gif b/.gitbook/assets/CleanShot 2025-02-28 at 20.07.05.gif new file mode 100644 index 0000000..7a9120d Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-28 at 20.07.05.gif differ diff --git a/.gitbook/assets/CleanShot 2025-02-28 at 20.11.03@2x.png b/.gitbook/assets/CleanShot 2025-02-28 at 20.11.03@2x.png new file mode 100644 index 0000000..2b0be6c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-28 at 20.11.03@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-28 at 20.15.42@2x.png b/.gitbook/assets/CleanShot 2025-02-28 at 20.15.42@2x.png new file mode 100644 index 0000000..d95475e Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-28 at 20.15.42@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-28 at 20.21.56@2x.png b/.gitbook/assets/CleanShot 2025-02-28 at 20.21.56@2x.png new file mode 100644 index 0000000..67602b5 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-28 at 20.21.56@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-28 at 20.23.42@2x.png b/.gitbook/assets/CleanShot 2025-02-28 at 20.23.42@2x.png new file mode 100644 index 0000000..48947e7 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-28 at 20.23.42@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-28 at 20.25.00@2x.png b/.gitbook/assets/CleanShot 2025-02-28 at 20.25.00@2x.png new file mode 100644 index 0000000..d19b679 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-28 at 20.25.00@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-28 at 20.27.24@2x.png b/.gitbook/assets/CleanShot 2025-02-28 at 20.27.24@2x.png new file mode 100644 index 0000000..daeb715 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-28 at 20.27.24@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-02-28 at 20.29.22.gif b/.gitbook/assets/CleanShot 2025-02-28 at 20.29.22.gif new file mode 100644 index 0000000..6fd1031 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-02-28 at 20.29.22.gif differ diff --git a/.gitbook/assets/CleanShot 2025-03-04 at 19.15.07@2x.png b/.gitbook/assets/CleanShot 2025-03-04 at 19.15.07@2x.png new file mode 100644 index 0000000..00831b1 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-04 at 19.15.07@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-08 at 17.25.54@2x (1).png b/.gitbook/assets/CleanShot 2025-03-08 at 17.25.54@2x (1).png new file mode 100644 index 0000000..2d9ea20 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-08 at 17.25.54@2x (1).png differ diff --git a/.gitbook/assets/CleanShot 2025-03-08 at 17.25.54@2x.png b/.gitbook/assets/CleanShot 2025-03-08 at 17.25.54@2x.png new file mode 100644 index 0000000..2d9ea20 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-08 at 17.25.54@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-08 at 17.27.52.gif b/.gitbook/assets/CleanShot 2025-03-08 at 17.27.52.gif new file mode 100644 index 0000000..b6dcbed Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-08 at 17.27.52.gif differ diff --git a/.gitbook/assets/CleanShot 2025-03-12 at 16.58.55@2x.png b/.gitbook/assets/CleanShot 2025-03-12 at 16.58.55@2x.png new file mode 100644 index 0000000..53baeb4 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-12 at 16.58.55@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 17.57.05@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 17.57.05@2x.png new file mode 100644 index 0000000..b7a49db Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 17.57.05@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 18.00.14@2x (1).png b/.gitbook/assets/CleanShot 2025-03-18 at 18.00.14@2x (1).png new file mode 100644 index 0000000..890d2d1 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 18.00.14@2x (1).png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 18.00.14@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 18.00.14@2x.png new file mode 100644 index 0000000..890d2d1 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 18.00.14@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 18.13.58@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 18.13.58@2x.png new file mode 100644 index 0000000..c846c7c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 18.13.58@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 18.16.27@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 18.16.27@2x.png new file mode 100644 index 0000000..c7ec839 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 18.16.27@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 18.32.03@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 18.32.03@2x.png new file mode 100644 index 0000000..8e6c84c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 18.32.03@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 18.32.43@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 18.32.43@2x.png new file mode 100644 index 0000000..75ed4b2 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 18.32.43@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 18.38.37@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 18.38.37@2x.png new file mode 100644 index 0000000..2ebf75b Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 18.38.37@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 18.42.50@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 18.42.50@2x.png new file mode 100644 index 0000000..e837169 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 18.42.50@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 18.50.57.gif b/.gitbook/assets/CleanShot 2025-03-18 at 18.50.57.gif new file mode 100644 index 0000000..6c16b15 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 18.50.57.gif differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 18.57.50@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 18.57.50@2x.png new file mode 100644 index 0000000..7ae9c84 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 18.57.50@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 19.00.36@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 19.00.36@2x.png new file mode 100644 index 0000000..4eb7a18 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 19.00.36@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 19.04.12@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 19.04.12@2x.png new file mode 100644 index 0000000..ca8ca5c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 19.04.12@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 19.19.27@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 19.19.27@2x.png new file mode 100644 index 0000000..0f72831 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 19.19.27@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 19.19.58@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 19.19.58@2x.png new file mode 100644 index 0000000..3593331 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 19.19.58@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 19.23.59@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 19.23.59@2x.png new file mode 100644 index 0000000..e90fd88 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 19.23.59@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 19.40.39@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 19.40.39@2x.png new file mode 100644 index 0000000..01a4479 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 19.40.39@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 19.42.46@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 19.42.46@2x.png new file mode 100644 index 0000000..e182f70 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 19.42.46@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-18 at 20.10.56@2x.png b/.gitbook/assets/CleanShot 2025-03-18 at 20.10.56@2x.png new file mode 100644 index 0000000..7ace5d4 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-18 at 20.10.56@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-19 at 22.35.36@2x.png b/.gitbook/assets/CleanShot 2025-03-19 at 22.35.36@2x.png new file mode 100644 index 0000000..e069d82 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-19 at 22.35.36@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-19 at 22.40.59@2x.png b/.gitbook/assets/CleanShot 2025-03-19 at 22.40.59@2x.png new file mode 100644 index 0000000..86aa3bd Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-19 at 22.40.59@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-19 at 22.48.30@2x.png b/.gitbook/assets/CleanShot 2025-03-19 at 22.48.30@2x.png new file mode 100644 index 0000000..b658e61 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-19 at 22.48.30@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-19 at 22.50.48@2x.png b/.gitbook/assets/CleanShot 2025-03-19 at 22.50.48@2x.png new file mode 100644 index 0000000..cdf8d66 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-19 at 22.50.48@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-19 at 22.56.06@2x.png b/.gitbook/assets/CleanShot 2025-03-19 at 22.56.06@2x.png new file mode 100644 index 0000000..e10cf1f Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-19 at 22.56.06@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-19 at 22.58.22@2x.png b/.gitbook/assets/CleanShot 2025-03-19 at 22.58.22@2x.png new file mode 100644 index 0000000..266c1df Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-19 at 22.58.22@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-19 at 23.10.43@2x.png b/.gitbook/assets/CleanShot 2025-03-19 at 23.10.43@2x.png new file mode 100644 index 0000000..63df3f3 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-19 at 23.10.43@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-19 at 23.12.39@2x.png b/.gitbook/assets/CleanShot 2025-03-19 at 23.12.39@2x.png new file mode 100644 index 0000000..6fdcb65 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-19 at 23.12.39@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 11.02.30@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 11.02.30@2x.png new file mode 100644 index 0000000..69a7910 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 11.02.30@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 11.05.12@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 11.05.12@2x.png new file mode 100644 index 0000000..baac4c1 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 11.05.12@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 11.19.51@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 11.19.51@2x.png new file mode 100644 index 0000000..dd98255 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 11.19.51@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 11.25.40@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 11.25.40@2x.png new file mode 100644 index 0000000..82a611c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 11.25.40@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 11.45.27.gif b/.gitbook/assets/CleanShot 2025-03-20 at 11.45.27.gif new file mode 100644 index 0000000..8eba68d Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 11.45.27.gif differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 13.28.12@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 13.28.12@2x.png new file mode 100644 index 0000000..9f8d310 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 13.28.12@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 15.32.50@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 15.32.50@2x.png new file mode 100644 index 0000000..6282b6e Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 15.32.50@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 15.40.34@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 15.40.34@2x.png new file mode 100644 index 0000000..ada98af Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 15.40.34@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 16.02.26@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 16.02.26@2x.png new file mode 100644 index 0000000..c8c1967 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 16.02.26@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 16.05.25@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 16.05.25@2x.png new file mode 100644 index 0000000..7f72a2d Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 16.05.25@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 16.39.53@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 16.39.53@2x.png new file mode 100644 index 0000000..ff81e5c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 16.39.53@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 16.47.03@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 16.47.03@2x.png new file mode 100644 index 0000000..76dbb78 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 16.47.03@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 16.51.31@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 16.51.31@2x.png new file mode 100644 index 0000000..37fb6bc Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 16.51.31@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 16.56.59@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 16.56.59@2x.png new file mode 100644 index 0000000..772bb49 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 16.56.59@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 18.44.00@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 18.44.00@2x.png new file mode 100644 index 0000000..2efe5eb Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 18.44.00@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 18.46.47@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 18.46.47@2x.png new file mode 100644 index 0000000..187681c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 18.46.47@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 18.48.18@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 18.48.18@2x.png new file mode 100644 index 0000000..bac8cdc Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 18.48.18@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 18.52.10@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 18.52.10@2x.png new file mode 100644 index 0000000..2e8e021 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 18.52.10@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 19.05.38@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 19.05.38@2x.png new file mode 100644 index 0000000..8d65b97 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 19.05.38@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 19.06.07@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 19.06.07@2x.png new file mode 100644 index 0000000..0e7aa22 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 19.06.07@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 19.13.49@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 19.13.49@2x.png new file mode 100644 index 0000000..f473ce9 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 19.13.49@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-20 at 19.16.07@2x.png b/.gitbook/assets/CleanShot 2025-03-20 at 19.16.07@2x.png new file mode 100644 index 0000000..dba5457 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-20 at 19.16.07@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.42.25@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.42.25@2x.png new file mode 100644 index 0000000..29b39a1 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.42.25@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.43.05@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.43.05@2x.png new file mode 100644 index 0000000..cdadbc6 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.43.05@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.43.32@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.43.32@2x.png new file mode 100644 index 0000000..67dc420 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.43.32@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.43.58@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.43.58@2x.png new file mode 100644 index 0000000..5171384 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.43.58@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.44.28@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.44.28@2x.png new file mode 100644 index 0000000..ecb2163 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.44.28@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.44.58@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.44.58@2x.png new file mode 100644 index 0000000..0a90335 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.44.58@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.45.19@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.45.19@2x.png new file mode 100644 index 0000000..7f3975c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.45.19@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.45.43@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.45.43@2x.png new file mode 100644 index 0000000..e6278c5 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.45.43@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.46.10@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.46.10@2x.png new file mode 100644 index 0000000..7046a2a Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.46.10@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.46.41@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.46.41@2x.png new file mode 100644 index 0000000..dea0216 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.46.41@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.47.06@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.47.06@2x.png new file mode 100644 index 0000000..1906162 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.47.06@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.47.55@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.47.55@2x.png new file mode 100644 index 0000000..20af581 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.47.55@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.48.31@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.48.31@2x.png new file mode 100644 index 0000000..179d4fc Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.48.31@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 17.49.51@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 17.49.51@2x.png new file mode 100644 index 0000000..210c534 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 17.49.51@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-21 at 18.44.42@2x.png b/.gitbook/assets/CleanShot 2025-03-21 at 18.44.42@2x.png new file mode 100644 index 0000000..b85998a Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-21 at 18.44.42@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-24 at 10.59.38@2x.png b/.gitbook/assets/CleanShot 2025-03-24 at 10.59.38@2x.png new file mode 100644 index 0000000..2810eac Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-24 at 10.59.38@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-24 at 11.01.43@2x.png b/.gitbook/assets/CleanShot 2025-03-24 at 11.01.43@2x.png new file mode 100644 index 0000000..e3610e6 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-24 at 11.01.43@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-24 at 11.02.28@2x.png b/.gitbook/assets/CleanShot 2025-03-24 at 11.02.28@2x.png new file mode 100644 index 0000000..36e36c5 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-24 at 11.02.28@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-24 at 11.08.54@2x.png b/.gitbook/assets/CleanShot 2025-03-24 at 11.08.54@2x.png new file mode 100644 index 0000000..8fade3a Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-24 at 11.08.54@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-24 at 11.15.25@2x.png b/.gitbook/assets/CleanShot 2025-03-24 at 11.15.25@2x.png new file mode 100644 index 0000000..c7e0196 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-24 at 11.15.25@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-24 at 11.17.46@2x.png b/.gitbook/assets/CleanShot 2025-03-24 at 11.17.46@2x.png new file mode 100644 index 0000000..68f91f4 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-24 at 11.17.46@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-24 at 11.21.49@2x.png b/.gitbook/assets/CleanShot 2025-03-24 at 11.21.49@2x.png new file mode 100644 index 0000000..947e027 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-24 at 11.21.49@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-24 at 11.23.37@2x.png b/.gitbook/assets/CleanShot 2025-03-24 at 11.23.37@2x.png new file mode 100644 index 0000000..4e65340 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-24 at 11.23.37@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-24 at 11.29.05@2x.png b/.gitbook/assets/CleanShot 2025-03-24 at 11.29.05@2x.png new file mode 100644 index 0000000..5ec9e52 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-24 at 11.29.05@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-26 at 16.24.25@2x.png b/.gitbook/assets/CleanShot 2025-03-26 at 16.24.25@2x.png new file mode 100644 index 0000000..10042d9 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-26 at 16.24.25@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-26 at 16.27.30@2x.png b/.gitbook/assets/CleanShot 2025-03-26 at 16.27.30@2x.png new file mode 100644 index 0000000..dd52f15 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-26 at 16.27.30@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-27 at 21.19.35@2x.png b/.gitbook/assets/CleanShot 2025-03-27 at 21.19.35@2x.png new file mode 100644 index 0000000..cea7129 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-27 at 21.19.35@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-27 at 21.21.15@2x.png b/.gitbook/assets/CleanShot 2025-03-27 at 21.21.15@2x.png new file mode 100644 index 0000000..c3be254 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-27 at 21.21.15@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-27 at 21.26.47@2x.png b/.gitbook/assets/CleanShot 2025-03-27 at 21.26.47@2x.png new file mode 100644 index 0000000..aae7dbe Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-27 at 21.26.47@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-27 at 23.29.43@2x.png b/.gitbook/assets/CleanShot 2025-03-27 at 23.29.43@2x.png new file mode 100644 index 0000000..9844bdd Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-27 at 23.29.43@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-27 at 23.30.17@2x.png b/.gitbook/assets/CleanShot 2025-03-27 at 23.30.17@2x.png new file mode 100644 index 0000000..120dcd4 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-27 at 23.30.17@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-27 at 23.32.33@2x.png b/.gitbook/assets/CleanShot 2025-03-27 at 23.32.33@2x.png new file mode 100644 index 0000000..db9821d Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-27 at 23.32.33@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-27 at 23.33.13@2x.png b/.gitbook/assets/CleanShot 2025-03-27 at 23.33.13@2x.png new file mode 100644 index 0000000..fb85566 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-27 at 23.33.13@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-27 at 23.34.14@2x.png b/.gitbook/assets/CleanShot 2025-03-27 at 23.34.14@2x.png new file mode 100644 index 0000000..21a9e7c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-27 at 23.34.14@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-27 at 23.34.36@2x.png b/.gitbook/assets/CleanShot 2025-03-27 at 23.34.36@2x.png new file mode 100644 index 0000000..eef6fa0 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-27 at 23.34.36@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-28 at 00.04.12@2x (1).png b/.gitbook/assets/CleanShot 2025-03-28 at 00.04.12@2x (1).png new file mode 100644 index 0000000..f54b50e Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-28 at 00.04.12@2x (1).png differ diff --git a/.gitbook/assets/CleanShot 2025-03-28 at 00.04.12@2x.png b/.gitbook/assets/CleanShot 2025-03-28 at 00.04.12@2x.png new file mode 100644 index 0000000..f2b67da Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-28 at 00.04.12@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-28 at 00.04.56@2x.png b/.gitbook/assets/CleanShot 2025-03-28 at 00.04.56@2x.png new file mode 100644 index 0000000..d4c5abd Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-28 at 00.04.56@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-28 at 00.05.33@2x.png b/.gitbook/assets/CleanShot 2025-03-28 at 00.05.33@2x.png new file mode 100644 index 0000000..ad2b59c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-28 at 00.05.33@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-28 at 00.06.14@2x.png b/.gitbook/assets/CleanShot 2025-03-28 at 00.06.14@2x.png new file mode 100644 index 0000000..e61cd93 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-28 at 00.06.14@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-28 at 00.07.06@2x.png b/.gitbook/assets/CleanShot 2025-03-28 at 00.07.06@2x.png new file mode 100644 index 0000000..68a9506 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-28 at 00.07.06@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-28 at 00.07.30@2x.png b/.gitbook/assets/CleanShot 2025-03-28 at 00.07.30@2x.png new file mode 100644 index 0000000..4060be3 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-28 at 00.07.30@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-28 at 15.01.58@2x.png b/.gitbook/assets/CleanShot 2025-03-28 at 15.01.58@2x.png new file mode 100644 index 0000000..0b46489 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-28 at 15.01.58@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-28 at 15.02.45@2x.png b/.gitbook/assets/CleanShot 2025-03-28 at 15.02.45@2x.png new file mode 100644 index 0000000..9150825 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-28 at 15.02.45@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-28 at 15.03.22@2x.png b/.gitbook/assets/CleanShot 2025-03-28 at 15.03.22@2x.png new file mode 100644 index 0000000..41bea7a Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-28 at 15.03.22@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-31 at 14.13.33@2x (1).png b/.gitbook/assets/CleanShot 2025-03-31 at 14.13.33@2x (1).png new file mode 100644 index 0000000..6e30501 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-31 at 14.13.33@2x (1).png differ diff --git a/.gitbook/assets/CleanShot 2025-03-31 at 14.13.33@2x.png b/.gitbook/assets/CleanShot 2025-03-31 at 14.13.33@2x.png new file mode 100644 index 0000000..204dc86 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-31 at 14.13.33@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-31 at 14.20.05@2x.png b/.gitbook/assets/CleanShot 2025-03-31 at 14.20.05@2x.png new file mode 100644 index 0000000..07ba8b0 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-31 at 14.20.05@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-03-31 at 14.30.23@2x.png b/.gitbook/assets/CleanShot 2025-03-31 at 14.30.23@2x.png new file mode 100644 index 0000000..60d31a2 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-03-31 at 14.30.23@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-02 at 19.21.56@2x.png b/.gitbook/assets/CleanShot 2025-04-02 at 19.21.56@2x.png new file mode 100644 index 0000000..d7c39c1 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-02 at 19.21.56@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-02 at 19.23.14@2x.png b/.gitbook/assets/CleanShot 2025-04-02 at 19.23.14@2x.png new file mode 100644 index 0000000..9ba1917 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-02 at 19.23.14@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-02 at 19.28.04@2x.png b/.gitbook/assets/CleanShot 2025-04-02 at 19.28.04@2x.png new file mode 100644 index 0000000..2a655b0 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-02 at 19.28.04@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-02 at 19.30.36@2x.png b/.gitbook/assets/CleanShot 2025-04-02 at 19.30.36@2x.png new file mode 100644 index 0000000..1723c6b Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-02 at 19.30.36@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-02 at 19.32.07@2x.png b/.gitbook/assets/CleanShot 2025-04-02 at 19.32.07@2x.png new file mode 100644 index 0000000..3317370 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-02 at 19.32.07@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-02 at 19.32.43@2x.png b/.gitbook/assets/CleanShot 2025-04-02 at 19.32.43@2x.png new file mode 100644 index 0000000..acdfe2e Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-02 at 19.32.43@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-02 at 19.34.59@2x.png b/.gitbook/assets/CleanShot 2025-04-02 at 19.34.59@2x.png new file mode 100644 index 0000000..3fff260 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-02 at 19.34.59@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-02 at 19.41.16@2x.png b/.gitbook/assets/CleanShot 2025-04-02 at 19.41.16@2x.png new file mode 100644 index 0000000..9114b1c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-02 at 19.41.16@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-02 at 19.43.13@2x.png b/.gitbook/assets/CleanShot 2025-04-02 at 19.43.13@2x.png new file mode 100644 index 0000000..4b09d22 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-02 at 19.43.13@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 15.25.00@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 15.25.00@2x.png new file mode 100644 index 0000000..366289b Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 15.25.00@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 15.26.26@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 15.26.26@2x.png new file mode 100644 index 0000000..5f7ae30 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 15.26.26@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 15.31.34@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 15.31.34@2x.png new file mode 100644 index 0000000..369f47e Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 15.31.34@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 15.32.04@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 15.32.04@2x.png new file mode 100644 index 0000000..3ed1032 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 15.32.04@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 15.59.40@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 15.59.40@2x.png new file mode 100644 index 0000000..a6daddc Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 15.59.40@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 17.17.11@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 17.17.11@2x.png new file mode 100644 index 0000000..a3b8157 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 17.17.11@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 17.18.44@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 17.18.44@2x.png new file mode 100644 index 0000000..3a98d2a Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 17.18.44@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 17.28.45@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 17.28.45@2x.png new file mode 100644 index 0000000..7e02989 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 17.28.45@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 17.29.46@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 17.29.46@2x.png new file mode 100644 index 0000000..b16ad3d Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 17.29.46@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 17.32.28@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 17.32.28@2x.png new file mode 100644 index 0000000..385057c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 17.32.28@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 17.33.08@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 17.33.08@2x.png new file mode 100644 index 0000000..80881f3 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 17.33.08@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 17.35.33@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 17.35.33@2x.png new file mode 100644 index 0000000..d79454c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 17.35.33@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 17.36.12@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 17.36.12@2x.png new file mode 100644 index 0000000..f95d588 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 17.36.12@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 22.08.56@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 22.08.56@2x.png new file mode 100644 index 0000000..f3f85d9 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 22.08.56@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 22.14.04@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 22.14.04@2x.png new file mode 100644 index 0000000..4f429c5 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 22.14.04@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 22.19.06@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 22.19.06@2x.png new file mode 100644 index 0000000..74977d5 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 22.19.06@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 22.20.11@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 22.20.11@2x.png new file mode 100644 index 0000000..08a3867 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 22.20.11@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 22.28.28@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 22.28.28@2x.png new file mode 100644 index 0000000..16b7563 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 22.28.28@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 22.33.13@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 22.33.13@2x.png new file mode 100644 index 0000000..3b63abb Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 22.33.13@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 23.07.22@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 23.07.22@2x.png new file mode 100644 index 0000000..d639242 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 23.07.22@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 23.08.54@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 23.08.54@2x.png new file mode 100644 index 0000000..75dc03e Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 23.08.54@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 23.45.03@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 23.45.03@2x.png new file mode 100644 index 0000000..e8154b7 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 23.45.03@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 23.46.38@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 23.46.38@2x.png new file mode 100644 index 0000000..97951ba Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 23.46.38@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 23.51.22@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 23.51.22@2x.png new file mode 100644 index 0000000..75140be Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 23.51.22@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-03 at 23.53.09@2x.png b/.gitbook/assets/CleanShot 2025-04-03 at 23.53.09@2x.png new file mode 100644 index 0000000..87dca4f Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-03 at 23.53.09@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-07 at 18.01.09@2x.png b/.gitbook/assets/CleanShot 2025-04-07 at 18.01.09@2x.png new file mode 100644 index 0000000..5353878 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-07 at 18.01.09@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-07 at 18.50.52@2x.png b/.gitbook/assets/CleanShot 2025-04-07 at 18.50.52@2x.png new file mode 100644 index 0000000..ec9d5f1 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-07 at 18.50.52@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-07 at 18.53.44@2x.png b/.gitbook/assets/CleanShot 2025-04-07 at 18.53.44@2x.png new file mode 100644 index 0000000..b831229 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-07 at 18.53.44@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-09 at 17.26.21@2x.png b/.gitbook/assets/CleanShot 2025-04-09 at 17.26.21@2x.png new file mode 100644 index 0000000..2d83032 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-09 at 17.26.21@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-04-09 at 17.54.42.gif b/.gitbook/assets/CleanShot 2025-04-09 at 17.54.42.gif new file mode 100644 index 0000000..c8b9c85 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-09 at 17.54.42.gif differ diff --git a/.gitbook/assets/CleanShot 2025-04-09 at 18.05.00.gif b/.gitbook/assets/CleanShot 2025-04-09 at 18.05.00.gif new file mode 100644 index 0000000..16f7ac4 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-09 at 18.05.00.gif differ diff --git a/.gitbook/assets/CleanShot 2025-04-09 at 18.14.47.gif b/.gitbook/assets/CleanShot 2025-04-09 at 18.14.47.gif new file mode 100644 index 0000000..c41e74f Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-04-09 at 18.14.47.gif differ diff --git a/.gitbook/assets/CleanShot 2025-05-05 at 18.53.31@2x (1).png b/.gitbook/assets/CleanShot 2025-05-05 at 18.53.31@2x (1).png new file mode 100644 index 0000000..2610dff Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-05 at 18.53.31@2x (1).png differ diff --git a/.gitbook/assets/CleanShot 2025-05-05 at 18.53.31@2x.png b/.gitbook/assets/CleanShot 2025-05-05 at 18.53.31@2x.png new file mode 100644 index 0000000..2610dff Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-05 at 18.53.31@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-05 at 18.54.06@2x.png b/.gitbook/assets/CleanShot 2025-05-05 at 18.54.06@2x.png new file mode 100644 index 0000000..c71ed12 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-05 at 18.54.06@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-05 at 19.17.41@2x.png b/.gitbook/assets/CleanShot 2025-05-05 at 19.17.41@2x.png new file mode 100644 index 0000000..a442d49 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-05 at 19.17.41@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-05 at 19.17.55@2x.png b/.gitbook/assets/CleanShot 2025-05-05 at 19.17.55@2x.png new file mode 100644 index 0000000..508c1a4 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-05 at 19.17.55@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-06 at 11.40.05@2x (1).png b/.gitbook/assets/CleanShot 2025-05-06 at 11.40.05@2x (1).png new file mode 100644 index 0000000..78db506 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-06 at 11.40.05@2x (1).png differ diff --git a/.gitbook/assets/CleanShot 2025-05-06 at 11.40.05@2x.png b/.gitbook/assets/CleanShot 2025-05-06 at 11.40.05@2x.png new file mode 100644 index 0000000..78db506 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-06 at 11.40.05@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-06 at 13.04.18@2x.png b/.gitbook/assets/CleanShot 2025-05-06 at 13.04.18@2x.png new file mode 100644 index 0000000..308289e Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-06 at 13.04.18@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-06 at 13.10.56@2x.png b/.gitbook/assets/CleanShot 2025-05-06 at 13.10.56@2x.png new file mode 100644 index 0000000..3e7c588 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-06 at 13.10.56@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-06 at 13.23.12@2x.png b/.gitbook/assets/CleanShot 2025-05-06 at 13.23.12@2x.png new file mode 100644 index 0000000..02cd196 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-06 at 13.23.12@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-06 at 13.45.37@2x.png b/.gitbook/assets/CleanShot 2025-05-06 at 13.45.37@2x.png new file mode 100644 index 0000000..0f8d977 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-06 at 13.45.37@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-06 at 14.06.43@2x.png b/.gitbook/assets/CleanShot 2025-05-06 at 14.06.43@2x.png new file mode 100644 index 0000000..7a8cdbf Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-06 at 14.06.43@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-07 at 18.49.31@2x.png b/.gitbook/assets/CleanShot 2025-05-07 at 18.49.31@2x.png new file mode 100644 index 0000000..67e19a2 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-07 at 18.49.31@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-07 at 18.53.47@2x.png b/.gitbook/assets/CleanShot 2025-05-07 at 18.53.47@2x.png new file mode 100644 index 0000000..e0a2f72 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-07 at 18.53.47@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-07 at 18.58.34@2x.png b/.gitbook/assets/CleanShot 2025-05-07 at 18.58.34@2x.png new file mode 100644 index 0000000..72a672f Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-07 at 18.58.34@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-07 at 19.12.55@2x.png b/.gitbook/assets/CleanShot 2025-05-07 at 19.12.55@2x.png new file mode 100644 index 0000000..a5f8976 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-07 at 19.12.55@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-07 at 19.40.21@2x.png b/.gitbook/assets/CleanShot 2025-05-07 at 19.40.21@2x.png new file mode 100644 index 0000000..b97ef44 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-07 at 19.40.21@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-07 at 19.50.45@2x.png b/.gitbook/assets/CleanShot 2025-05-07 at 19.50.45@2x.png new file mode 100644 index 0000000..842740e Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-07 at 19.50.45@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-07 at 19.54.05@2x.png b/.gitbook/assets/CleanShot 2025-05-07 at 19.54.05@2x.png new file mode 100644 index 0000000..8f20381 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-07 at 19.54.05@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-07 at 20.00.10@2x.png b/.gitbook/assets/CleanShot 2025-05-07 at 20.00.10@2x.png new file mode 100644 index 0000000..a4e088c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-07 at 20.00.10@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-05-07 at 20.00.41@2x.png b/.gitbook/assets/CleanShot 2025-05-07 at 20.00.41@2x.png new file mode 100644 index 0000000..4acdd06 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-05-07 at 20.00.41@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 17.22.09@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 17.22.09@2x.png new file mode 100644 index 0000000..6ddcba4 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 17.22.09@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 17.22.54@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 17.22.54@2x.png new file mode 100644 index 0000000..1444fb7 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 17.22.54@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 19.32.31@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 19.32.31@2x.png new file mode 100644 index 0000000..309109d Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 19.32.31@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 19.48.24@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 19.48.24@2x.png new file mode 100644 index 0000000..0d27729 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 19.48.24@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 19.54.28@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 19.54.28@2x.png new file mode 100644 index 0000000..bd041fd Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 19.54.28@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 19.58.19@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 19.58.19@2x.png new file mode 100644 index 0000000..08db836 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 19.58.19@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 20.02.17@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 20.02.17@2x.png new file mode 100644 index 0000000..b239b12 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 20.02.17@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 20.04.23@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 20.04.23@2x.png new file mode 100644 index 0000000..5e58312 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 20.04.23@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 20.20.35@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 20.20.35@2x.png new file mode 100644 index 0000000..0562978 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 20.20.35@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 20.22.38@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 20.22.38@2x.png new file mode 100644 index 0000000..6ef8649 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 20.22.38@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 20.25.47@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 20.25.47@2x.png new file mode 100644 index 0000000..f4a1a79 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 20.25.47@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 20.33.12@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 20.33.12@2x.png new file mode 100644 index 0000000..2293645 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 20.33.12@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 20.37.44@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 20.37.44@2x.png new file mode 100644 index 0000000..af7641c Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 20.37.44@2x.png differ diff --git a/.gitbook/assets/CleanShot 2025-06-09 at 20.50.30@2x.png b/.gitbook/assets/CleanShot 2025-06-09 at 20.50.30@2x.png new file mode 100644 index 0000000..1b3dc51 Binary files /dev/null and b/.gitbook/assets/CleanShot 2025-06-09 at 20.50.30@2x.png differ diff --git a/.gitbook/assets/Code View of Configurations.png b/.gitbook/assets/Code View of Configurations.png new file mode 100644 index 0000000..d3e6696 Binary files /dev/null and b/.gitbook/assets/Code View of Configurations.png differ diff --git a/.gitbook/assets/Companion Plugin.png b/.gitbook/assets/Companion Plugin.png new file mode 100644 index 0000000..8fdfe3a Binary files /dev/null and b/.gitbook/assets/Companion Plugin.png differ diff --git a/.gitbook/assets/Configuration.png b/.gitbook/assets/Configuration.png new file mode 100644 index 0000000..cc25de6 Binary files /dev/null and b/.gitbook/assets/Configuration.png differ diff --git a/.gitbook/assets/Configurations (1).png b/.gitbook/assets/Configurations (1).png new file mode 100644 index 0000000..58de1ce Binary files /dev/null and b/.gitbook/assets/Configurations (1).png differ diff --git a/.gitbook/assets/Configurations.png b/.gitbook/assets/Configurations.png new file mode 100644 index 0000000..c2efcb0 Binary files /dev/null and b/.gitbook/assets/Configurations.png differ diff --git a/.gitbook/assets/Create API Key Light mode (1).png b/.gitbook/assets/Create API Key Light mode (1).png new file mode 100644 index 0000000..4947a8b Binary files /dev/null and b/.gitbook/assets/Create API Key Light mode (1).png differ diff --git a/.gitbook/assets/Create API Key Light mode .png b/.gitbook/assets/Create API Key Light mode .png new file mode 100644 index 0000000..4947a8b Binary files /dev/null and b/.gitbook/assets/Create API Key Light mode .png differ diff --git a/.gitbook/assets/Create API Key.gif b/.gitbook/assets/Create API Key.gif new file mode 100644 index 0000000..b2ca8ca Binary files /dev/null and b/.gitbook/assets/Create API Key.gif differ diff --git a/.gitbook/assets/Create New Project.gif b/.gitbook/assets/Create New Project.gif new file mode 100644 index 0000000..33d71b0 Binary files /dev/null and b/.gitbook/assets/Create New Project.gif differ diff --git a/.gitbook/assets/Create New Set.gif b/.gitbook/assets/Create New Set.gif new file mode 100644 index 0000000..50ca3e4 Binary files /dev/null and b/.gitbook/assets/Create New Set.gif differ diff --git a/.gitbook/assets/Create Organisation.gif b/.gitbook/assets/Create Organisation.gif new file mode 100644 index 0000000..ca9acaa Binary files /dev/null and b/.gitbook/assets/Create Organisation.gif differ diff --git a/.gitbook/assets/Create Theme Group.gif b/.gitbook/assets/Create Theme Group.gif new file mode 100644 index 0000000..408a0a8 Binary files /dev/null and b/.gitbook/assets/Create Theme Group.gif differ diff --git a/.gitbook/assets/Create api key with cmd k.gif b/.gitbook/assets/Create api key with cmd k.gif new file mode 100644 index 0000000..d88599c Binary files /dev/null and b/.gitbook/assets/Create api key with cmd k.gif differ diff --git a/.gitbook/assets/Create new PAT .png b/.gitbook/assets/Create new PAT .png new file mode 100644 index 0000000..c605406 Binary files /dev/null and b/.gitbook/assets/Create new PAT .png differ diff --git a/.gitbook/assets/Creating & Editing Configuration.gif b/.gitbook/assets/Creating & Editing Configuration.gif new file mode 100644 index 0000000..036c8ba Binary files /dev/null and b/.gitbook/assets/Creating & Editing Configuration.gif differ diff --git a/.gitbook/assets/Expand Complex Tokens.png b/.gitbook/assets/Expand Complex Tokens.png new file mode 100644 index 0000000..8f25677 Binary files /dev/null and b/.gitbook/assets/Expand Complex Tokens.png differ diff --git a/.gitbook/assets/Export Tokens to Figma Variables Companion Plugin.gif b/.gitbook/assets/Export Tokens to Figma Variables Companion Plugin.gif new file mode 100644 index 0000000..a710709 Binary files /dev/null and b/.gitbook/assets/Export Tokens to Figma Variables Companion Plugin.gif differ diff --git a/.gitbook/assets/Fetch Updates.png b/.gitbook/assets/Fetch Updates.png new file mode 100644 index 0000000..80f0f36 Binary files /dev/null and b/.gitbook/assets/Fetch Updates.png differ diff --git a/.gitbook/assets/Find API Key.png b/.gitbook/assets/Find API Key.png new file mode 100644 index 0000000..6cfcb4b Binary files /dev/null and b/.gitbook/assets/Find API Key.png differ diff --git a/.gitbook/assets/Find your API key@2x.png b/.gitbook/assets/Find your API key@2x.png new file mode 100644 index 0000000..8a85dd2 Binary files /dev/null and b/.gitbook/assets/Find your API key@2x.png differ diff --git a/.gitbook/assets/Graph Based Set.png b/.gitbook/assets/Graph Based Set.png new file mode 100644 index 0000000..6e56748 Binary files /dev/null and b/.gitbook/assets/Graph Based Set.png differ diff --git a/.gitbook/assets/Graph Engine.png b/.gitbook/assets/Graph Engine.png new file mode 100644 index 0000000..8584c2d Binary files /dev/null and b/.gitbook/assets/Graph Engine.png differ diff --git a/.gitbook/assets/Import Tokens.gif b/.gitbook/assets/Import Tokens.gif new file mode 100644 index 0000000..445037c Binary files /dev/null and b/.gitbook/assets/Import Tokens.gif differ diff --git a/.gitbook/assets/InviteMembers01.png b/.gitbook/assets/InviteMembers01.png new file mode 100644 index 0000000..def3290 Binary files /dev/null and b/.gitbook/assets/InviteMembers01.png differ diff --git a/.gitbook/assets/InviteMembers02.png b/.gitbook/assets/InviteMembers02.png new file mode 100644 index 0000000..f933e7c Binary files /dev/null and b/.gitbook/assets/InviteMembers02.png differ diff --git a/.gitbook/assets/InviteMembers03.png b/.gitbook/assets/InviteMembers03.png new file mode 100644 index 0000000..6903d52 Binary files /dev/null and b/.gitbook/assets/InviteMembers03.png differ diff --git a/.gitbook/assets/InviteMembers04a.png b/.gitbook/assets/InviteMembers04a.png new file mode 100644 index 0000000..33ef2cb Binary files /dev/null and b/.gitbook/assets/InviteMembers04a.png differ diff --git a/.gitbook/assets/Manage API Keys.png b/.gitbook/assets/Manage API Keys.png new file mode 100644 index 0000000..5bb19eb Binary files /dev/null and b/.gitbook/assets/Manage API Keys.png differ diff --git a/.gitbook/assets/Multiple Output files.gif b/.gitbook/assets/Multiple Output files.gif new file mode 100644 index 0000000..be70157 Binary files /dev/null and b/.gitbook/assets/Multiple Output files.gif differ diff --git a/.gitbook/assets/New.png b/.gitbook/assets/New.png new file mode 100644 index 0000000..f91b4d9 Binary files /dev/null and b/.gitbook/assets/New.png differ diff --git a/.gitbook/assets/Opening with Space and Return Key.gif b/.gitbook/assets/Opening with Space and Return Key.gif new file mode 100644 index 0000000..9880d47 Binary files /dev/null and b/.gitbook/assets/Opening with Space and Return Key.gif differ diff --git a/.gitbook/assets/Output File.png b/.gitbook/assets/Output File.png new file mode 100644 index 0000000..08f143b Binary files /dev/null and b/.gitbook/assets/Output File.png differ diff --git a/.gitbook/assets/Peronsal Access Tokens.png b/.gitbook/assets/Peronsal Access Tokens.png new file mode 100644 index 0000000..b0a264a Binary files /dev/null and b/.gitbook/assets/Peronsal Access Tokens.png differ diff --git a/.gitbook/assets/Preview Pane.gif b/.gitbook/assets/Preview Pane.gif new file mode 100644 index 0000000..723248f Binary files /dev/null and b/.gitbook/assets/Preview Pane.gif differ diff --git a/.gitbook/assets/Sample.gif b/.gitbook/assets/Sample.gif new file mode 100644 index 0000000..bb7570d Binary files /dev/null and b/.gitbook/assets/Sample.gif differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 6.00.10\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-03-27 at 6.00.10\342\200\257PM (1).png" new file mode 100644 index 0000000..f461f93 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 6.00.10\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 6.00.10\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 6.00.10\342\200\257PM.png" new file mode 100644 index 0000000..f461f93 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 6.00.10\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 6.07.46\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 6.07.46\342\200\257PM.png" new file mode 100644 index 0000000..6abfa01 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 6.07.46\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 6.12.47\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 6.12.47\342\200\257PM.png" new file mode 100644 index 0000000..eb452ae Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 6.12.47\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 6.13.47\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 6.13.47\342\200\257PM.png" new file mode 100644 index 0000000..94c869a Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 6.13.47\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 6.18.09\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 6.18.09\342\200\257PM.png" new file mode 100644 index 0000000..fc15d6a Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 6.18.09\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 6.19.16\342\200\257PM (2).png" "b/.gitbook/assets/Screenshot 2025-03-27 at 6.19.16\342\200\257PM (2).png" new file mode 100644 index 0000000..22f47e2 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 6.19.16\342\200\257PM (2).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 6.19.24\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 6.19.24\342\200\257PM.png" new file mode 100644 index 0000000..8f17b30 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 6.19.24\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 6.22.25\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 6.22.25\342\200\257PM.png" new file mode 100644 index 0000000..34da4fe Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 6.22.25\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 6.32.35\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 6.32.35\342\200\257PM.png" new file mode 100644 index 0000000..8c647cf Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 6.32.35\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 7.56.52\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 7.56.52\342\200\257PM.png" new file mode 100644 index 0000000..6f3e72a Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 7.56.52\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 7.58.26\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 7.58.26\342\200\257PM.png" new file mode 100644 index 0000000..efe524e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 7.58.26\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 8.07.22\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 8.07.22\342\200\257PM.png" new file mode 100644 index 0000000..771cc64 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 8.07.22\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 8.08.25\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 8.08.25\342\200\257PM.png" new file mode 100644 index 0000000..95ed733 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 8.08.25\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 8.20.09\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 8.20.09\342\200\257PM.png" new file mode 100644 index 0000000..7308e8a Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 8.20.09\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 8.21.16\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 8.21.16\342\200\257PM.png" new file mode 100644 index 0000000..41b2af8 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 8.21.16\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 8.25.15\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 8.25.15\342\200\257PM.png" new file mode 100644 index 0000000..c932234 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 8.25.15\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 8.25.27\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-03-27 at 8.25.27\342\200\257PM (1).png" new file mode 100644 index 0000000..1300120 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 8.25.27\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 8.25.27\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 8.25.27\342\200\257PM.png" new file mode 100644 index 0000000..1300120 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 8.25.27\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 8.28.30\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 8.28.30\342\200\257PM.png" new file mode 100644 index 0000000..4bdeb17 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 8.28.30\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 8.31.11\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 8.31.11\342\200\257PM.png" new file mode 100644 index 0000000..f82e4f8 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 8.31.11\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 8.32.43\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 8.32.43\342\200\257PM.png" new file mode 100644 index 0000000..d8c5098 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 8.32.43\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 8.34.02\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 8.34.02\342\200\257PM.png" new file mode 100644 index 0000000..dbcd3f3 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 8.34.02\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-03-27 at 8.35.13\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-03-27 at 8.35.13\342\200\257PM.png" new file mode 100644 index 0000000..37835f8 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-03-27 at 8.35.13\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 1.56.11\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 1.56.11\342\200\257PM.png" new file mode 100644 index 0000000..06cfe96 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 1.56.11\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 2.50.47\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 2.50.47\342\200\257PM.png" new file mode 100644 index 0000000..9463589 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 2.50.47\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 2.53.30\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 2.53.30\342\200\257PM.png" new file mode 100644 index 0000000..b41ebbf Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 2.53.30\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 2.57.42\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 2.57.42\342\200\257PM.png" new file mode 100644 index 0000000..d679026 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 2.57.42\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 3.03.14\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 3.03.14\342\200\257PM.png" new file mode 100644 index 0000000..d183fe9 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 3.03.14\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 3.23.24\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 3.23.24\342\200\257PM.png" new file mode 100644 index 0000000..2fbcff5 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 3.23.24\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 3.26.38\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 3.26.38\342\200\257PM.png" new file mode 100644 index 0000000..508c9c2 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 3.26.38\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 3.29.06\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 3.29.06\342\200\257PM.png" new file mode 100644 index 0000000..4472b2f Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 3.29.06\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 3.31.29\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 3.31.29\342\200\257PM.png" new file mode 100644 index 0000000..eff71a3 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 3.31.29\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 3.33.50\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 3.33.50\342\200\257PM.png" new file mode 100644 index 0000000..46a5add Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 3.33.50\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 4.25.59\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 4.25.59\342\200\257PM.png" new file mode 100644 index 0000000..30190a8 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 4.25.59\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 4.26.13\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 4.26.13\342\200\257PM.png" new file mode 100644 index 0000000..6c0c4e7 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 4.26.13\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 4.38.55\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 4.38.55\342\200\257PM.png" new file mode 100644 index 0000000..6fbdfcd Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 4.38.55\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 4.40.51\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 4.40.51\342\200\257PM.png" new file mode 100644 index 0000000..994c6d7 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 4.40.51\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 4.42.21\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 4.42.21\342\200\257PM.png" new file mode 100644 index 0000000..97c18c1 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 4.42.21\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 4.44.22\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 4.44.22\342\200\257PM.png" new file mode 100644 index 0000000..fe80f5a Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 4.44.22\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 4.45.14\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 4.45.14\342\200\257PM.png" new file mode 100644 index 0000000..bca5fde Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 4.45.14\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 4.55.41\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 4.55.41\342\200\257PM.png" new file mode 100644 index 0000000..97ab3ac Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 4.55.41\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 4.56.26\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-04-08 at 4.56.26\342\200\257PM (1).png" new file mode 100644 index 0000000..4097a51 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 4.56.26\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 4.56.26\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 4.56.26\342\200\257PM.png" new file mode 100644 index 0000000..4097a51 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 4.56.26\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.27.24\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.27.24\342\200\257PM.png" new file mode 100644 index 0000000..8d02578 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.27.24\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.29.16\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.29.16\342\200\257PM.png" new file mode 100644 index 0000000..cb89916 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.29.16\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.33.43\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.33.43\342\200\257PM.png" new file mode 100644 index 0000000..36488f7 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.33.43\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.34.13\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.34.13\342\200\257PM.png" new file mode 100644 index 0000000..4ea93a9 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.34.13\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.36.32\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.36.32\342\200\257PM.png" new file mode 100644 index 0000000..e28c1a5 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.36.32\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.40.54\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.40.54\342\200\257PM.png" new file mode 100644 index 0000000..df752e9 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.40.54\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.41.31\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.41.31\342\200\257PM.png" new file mode 100644 index 0000000..1b45ec6 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.41.31\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.45.31\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.45.31\342\200\257PM.png" new file mode 100644 index 0000000..25f0fc2 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.45.31\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.46.46\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.46.46\342\200\257PM.png" new file mode 100644 index 0000000..afbef1d Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.46.46\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.51.47\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.51.47\342\200\257PM.png" new file mode 100644 index 0000000..ba5548c Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.51.47\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.52.02\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.52.02\342\200\257PM.png" new file mode 100644 index 0000000..1970f36 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.52.02\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.56.04\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.56.04\342\200\257PM (1).png" new file mode 100644 index 0000000..078334e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.56.04\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.56.04\342\200\257PM (2).png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.56.04\342\200\257PM (2).png" new file mode 100644 index 0000000..078334e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.56.04\342\200\257PM (2).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.56.04\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.56.04\342\200\257PM.png" new file mode 100644 index 0000000..078334e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.56.04\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 5.56.45\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 5.56.45\342\200\257PM.png" new file mode 100644 index 0000000..0e2bf02 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 5.56.45\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 6.13.41\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 6.13.41\342\200\257PM.png" new file mode 100644 index 0000000..da41b23 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 6.13.41\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 6.29.29\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 6.29.29\342\200\257PM.png" new file mode 100644 index 0000000..8d680a7 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 6.29.29\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 6.32.05\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 6.32.05\342\200\257PM.png" new file mode 100644 index 0000000..2d1dfc5 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 6.32.05\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 6.37.25\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 6.37.25\342\200\257PM.png" new file mode 100644 index 0000000..63bbdd2 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 6.37.25\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 6.41.52\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 6.41.52\342\200\257PM.png" new file mode 100644 index 0000000..abe2667 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 6.41.52\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 6.46.08\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 6.46.08\342\200\257PM.png" new file mode 100644 index 0000000..3603628 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 6.46.08\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 6.47.24\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 6.47.24\342\200\257PM.png" new file mode 100644 index 0000000..260051f Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 6.47.24\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 6.48.46\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 6.48.46\342\200\257PM.png" new file mode 100644 index 0000000..7b3e52b Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 6.48.46\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 6.50.10\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 6.50.10\342\200\257PM.png" new file mode 100644 index 0000000..64b1180 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 6.50.10\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 6.59.27\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 6.59.27\342\200\257PM.png" new file mode 100644 index 0000000..084ca25 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 6.59.27\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 6.59.43\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 6.59.43\342\200\257PM.png" new file mode 100644 index 0000000..37c8c3e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 6.59.43\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 7.01.39\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 7.01.39\342\200\257PM.png" new file mode 100644 index 0000000..d56f90d Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 7.01.39\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 7.04.28\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-04-08 at 7.04.28\342\200\257PM (1).png" new file mode 100644 index 0000000..6afded2 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 7.04.28\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-08 at 7.04.28\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-08 at 7.04.28\342\200\257PM.png" new file mode 100644 index 0000000..6afded2 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-08 at 7.04.28\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 1.02.13\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 1.02.13\342\200\257PM.png" new file mode 100644 index 0000000..6bf1142 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 1.02.13\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 1.05.15\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 1.05.15\342\200\257PM.png" new file mode 100644 index 0000000..85c4442 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 1.05.15\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 1.07.48\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 1.07.48\342\200\257PM.png" new file mode 100644 index 0000000..94e6a3f Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 1.07.48\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 1.19.24\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 1.19.24\342\200\257PM.png" new file mode 100644 index 0000000..47746c1 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 1.19.24\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 12.51.28\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 12.51.28\342\200\257PM.png" new file mode 100644 index 0000000..d06a05d Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 12.51.28\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 12.53.14\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-04-09 at 12.53.14\342\200\257PM (1).png" new file mode 100644 index 0000000..ef053f0 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 12.53.14\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 12.53.14\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 12.53.14\342\200\257PM.png" new file mode 100644 index 0000000..ef053f0 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 12.53.14\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 12.58.20\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-04-09 at 12.58.20\342\200\257PM (1).png" new file mode 100644 index 0000000..919f66c Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 12.58.20\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 12.58.20\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 12.58.20\342\200\257PM.png" new file mode 100644 index 0000000..919f66c Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 12.58.20\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 7.24.05\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 7.24.05\342\200\257PM.png" new file mode 100644 index 0000000..7f92cb5 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 7.24.05\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 7.28.02\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 7.28.02\342\200\257PM.png" new file mode 100644 index 0000000..43014a9 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 7.28.02\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 7.59.50\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 7.59.50\342\200\257PM.png" new file mode 100644 index 0000000..88de5bf Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 7.59.50\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 8.03.37\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 8.03.37\342\200\257PM.png" new file mode 100644 index 0000000..47c2e93 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 8.03.37\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 8.05.40\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 8.05.40\342\200\257PM.png" new file mode 100644 index 0000000..444c9f6 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 8.05.40\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 8.07.38\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 8.07.38\342\200\257PM.png" new file mode 100644 index 0000000..e121601 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 8.07.38\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 8.12.41\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 8.12.41\342\200\257PM.png" new file mode 100644 index 0000000..fab6399 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 8.12.41\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 8.13.34\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 8.13.34\342\200\257PM.png" new file mode 100644 index 0000000..dd31807 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 8.13.34\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-09 at 8.16.41\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-09 at 8.16.41\342\200\257PM.png" new file mode 100644 index 0000000..1369df9 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-09 at 8.16.41\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-15 at 3.31.01\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-15 at 3.31.01\342\200\257PM.png" new file mode 100644 index 0000000..1276fab Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-15 at 3.31.01\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-15 at 3.36.43\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-04-15 at 3.36.43\342\200\257PM (1).png" new file mode 100644 index 0000000..2b59312 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-15 at 3.36.43\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-15 at 3.36.43\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-15 at 3.36.43\342\200\257PM.png" new file mode 100644 index 0000000..2b59312 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-15 at 3.36.43\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-15 at 3.37.48\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-15 at 3.37.48\342\200\257PM.png" new file mode 100644 index 0000000..cfd46ee Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-15 at 3.37.48\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 1.16.19\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 1.16.19\342\200\257PM.png" new file mode 100644 index 0000000..1a13aa2 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 1.16.19\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 12.49.24\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 12.49.24\342\200\257PM.png" new file mode 100644 index 0000000..bef082b Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 12.49.24\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 4.28.39\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 4.28.39\342\200\257PM.png" new file mode 100644 index 0000000..8ed329e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 4.28.39\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 4.31.48\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 4.31.48\342\200\257PM.png" new file mode 100644 index 0000000..9600b52 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 4.31.48\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 5.18.49\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 5.18.49\342\200\257PM.png" new file mode 100644 index 0000000..669b020 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 5.18.49\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 5.22.59\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 5.22.59\342\200\257PM.png" new file mode 100644 index 0000000..a38101c Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 5.22.59\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.07.34\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.07.34\342\200\257PM.png" new file mode 100644 index 0000000..49189d5 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.07.34\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.10.02\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.10.02\342\200\257PM.png" new file mode 100644 index 0000000..91ee309 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.10.02\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.11.40\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.11.40\342\200\257PM.png" new file mode 100644 index 0000000..818ec2a Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.11.40\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.13.09\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.13.09\342\200\257PM.png" new file mode 100644 index 0000000..274527f Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.13.09\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.14.52\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.14.52\342\200\257PM.png" new file mode 100644 index 0000000..de8fbb1 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.14.52\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.16.40\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.16.40\342\200\257PM.png" new file mode 100644 index 0000000..45cf28f Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.16.40\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.18.42\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.18.42\342\200\257PM.png" new file mode 100644 index 0000000..4332eb4 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.18.42\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.20.14\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.20.14\342\200\257PM (1).png" new file mode 100644 index 0000000..eef042e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.20.14\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.20.14\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.20.14\342\200\257PM.png" new file mode 100644 index 0000000..eef042e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.20.14\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.21.43\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.21.43\342\200\257PM.png" new file mode 100644 index 0000000..b27afcc Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.21.43\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.29.30\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.29.30\342\200\257PM.png" new file mode 100644 index 0000000..76a1adf Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.29.30\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.31.17\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.31.17\342\200\257PM.png" new file mode 100644 index 0000000..2ffe677 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.31.17\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.32.42\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.32.42\342\200\257PM.png" new file mode 100644 index 0000000..63564a8 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.32.42\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.34.21\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.34.21\342\200\257PM.png" new file mode 100644 index 0000000..c38f7fb Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.34.21\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.37.35\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.37.35\342\200\257PM.png" new file mode 100644 index 0000000..28a7dcf Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.37.35\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-17 at 6.39.37\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-17 at 6.39.37\342\200\257PM.png" new file mode 100644 index 0000000..a558edc Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-17 at 6.39.37\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 5.53.12\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 5.53.12\342\200\257PM.png" new file mode 100644 index 0000000..fe2a302 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 5.53.12\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 5.55.40\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 5.55.40\342\200\257PM.png" new file mode 100644 index 0000000..375ad84 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 5.55.40\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 5.56.46\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 5.56.46\342\200\257PM.png" new file mode 100644 index 0000000..9a1d12e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 5.56.46\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 5.58.01\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-04-22 at 5.58.01\342\200\257PM (1).png" new file mode 100644 index 0000000..335b83a Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 5.58.01\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 5.58.01\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 5.58.01\342\200\257PM.png" new file mode 100644 index 0000000..335b83a Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 5.58.01\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.01.06\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.01.06\342\200\257PM.png" new file mode 100644 index 0000000..9d74b0d Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.01.06\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.02.35\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.02.35\342\200\257PM.png" new file mode 100644 index 0000000..fc63fa7 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.02.35\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.05.06\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.05.06\342\200\257PM.png" new file mode 100644 index 0000000..90ef0d3 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.05.06\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.07.36\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.07.36\342\200\257PM.png" new file mode 100644 index 0000000..c9bdd18 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.07.36\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.09.12\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.09.12\342\200\257PM.png" new file mode 100644 index 0000000..ab2f9a8 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.09.12\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.10.19\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.10.19\342\200\257PM.png" new file mode 100644 index 0000000..06a3d03 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.10.19\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.11.24\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.11.24\342\200\257PM.png" new file mode 100644 index 0000000..3f492e2 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.11.24\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.13.10\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.13.10\342\200\257PM.png" new file mode 100644 index 0000000..33112b8 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.13.10\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.16.08\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.16.08\342\200\257PM.png" new file mode 100644 index 0000000..78c4f66 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.16.08\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.18.47\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.18.47\342\200\257PM.png" new file mode 100644 index 0000000..f0aeebb Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.18.47\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.21.30\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.21.30\342\200\257PM.png" new file mode 100644 index 0000000..efa0ce9 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.21.30\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.22.55\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.22.55\342\200\257PM.png" new file mode 100644 index 0000000..5918755 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.22.55\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.24.12\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.24.12\342\200\257PM.png" new file mode 100644 index 0000000..959cbe5 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.24.12\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.26.23\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.26.23\342\200\257PM.png" new file mode 100644 index 0000000..bd68306 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.26.23\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.27.57\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.27.57\342\200\257PM.png" new file mode 100644 index 0000000..3122825 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.27.57\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.29.04\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.29.04\342\200\257PM.png" new file mode 100644 index 0000000..41f0c1b Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.29.04\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.29.51\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.29.51\342\200\257PM.png" new file mode 100644 index 0000000..fe23d60 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.29.51\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.31.06\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.31.06\342\200\257PM.png" new file mode 100644 index 0000000..a6c63e2 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.31.06\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.32.03\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.32.03\342\200\257PM.png" new file mode 100644 index 0000000..151c5a8 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.32.03\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.33.21\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.33.21\342\200\257PM (1).png" new file mode 100644 index 0000000..cf0d87f Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.33.21\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-04-22 at 6.33.21\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-04-22 at 6.33.21\342\200\257PM.png" new file mode 100644 index 0000000..cf0d87f Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-04-22 at 6.33.21\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-05 at 8.00.21\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-06-05 at 8.00.21\342\200\257PM (1).png" new file mode 100644 index 0000000..8fe2f64 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-05 at 8.00.21\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-05 at 8.00.21\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-05 at 8.00.21\342\200\257PM.png" new file mode 100644 index 0000000..8fe2f64 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-05 at 8.00.21\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-05 at 8.07.04\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-06-05 at 8.07.04\342\200\257PM (1).png" new file mode 100644 index 0000000..c9282dd Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-05 at 8.07.04\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-05 at 8.07.04\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-05 at 8.07.04\342\200\257PM.png" new file mode 100644 index 0000000..c9282dd Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-05 at 8.07.04\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-05 at 8.34.44\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-06-05 at 8.34.44\342\200\257PM (1).png" new file mode 100644 index 0000000..082eb8c Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-05 at 8.34.44\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-05 at 8.34.44\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-05 at 8.34.44\342\200\257PM.png" new file mode 100644 index 0000000..b8ca8dc Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-05 at 8.34.44\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-05 at 8.37.42\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-06-05 at 8.37.42\342\200\257PM (1).png" new file mode 100644 index 0000000..dd09a6e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-05 at 8.37.42\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-05 at 8.37.42\342\200\257PM (2).png" "b/.gitbook/assets/Screenshot 2025-06-05 at 8.37.42\342\200\257PM (2).png" new file mode 100644 index 0000000..3d003f4 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-05 at 8.37.42\342\200\257PM (2).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-05 at 8.37.42\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-05 at 8.37.42\342\200\257PM.png" new file mode 100644 index 0000000..dd09a6e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-05 at 8.37.42\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-05 at 8.40.43\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-06-05 at 8.40.43\342\200\257PM (1).png" new file mode 100644 index 0000000..d151b32 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-05 at 8.40.43\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-05 at 8.40.43\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-05 at 8.40.43\342\200\257PM.png" new file mode 100644 index 0000000..d151b32 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-05 at 8.40.43\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 2.58.31\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 2.58.31\342\200\257PM.png" new file mode 100644 index 0000000..0da54e7 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 2.58.31\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 3.38.07\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 3.38.07\342\200\257PM.png" new file mode 100644 index 0000000..85e6ac0 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 3.38.07\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 3.40.29\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 3.40.29\342\200\257PM.png" new file mode 100644 index 0000000..efc5ef7 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 3.40.29\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 3.45.47\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 3.45.47\342\200\257PM.png" new file mode 100644 index 0000000..3a3fb96 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 3.45.47\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 3.47.26\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 3.47.26\342\200\257PM.png" new file mode 100644 index 0000000..43992d9 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 3.47.26\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 3.51.48\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 3.51.48\342\200\257PM.png" new file mode 100644 index 0000000..1b140da Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 3.51.48\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 3.53.18\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 3.53.18\342\200\257PM.png" new file mode 100644 index 0000000..b1acee5 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 3.53.18\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 3.55.05\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 3.55.05\342\200\257PM.png" new file mode 100644 index 0000000..237fbf4 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 3.55.05\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 4.40.07\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 4.40.07\342\200\257PM.png" new file mode 100644 index 0000000..604834e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 4.40.07\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 4.41.40\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 4.41.40\342\200\257PM.png" new file mode 100644 index 0000000..b63c0c3 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 4.41.40\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 4.42.52\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 4.42.52\342\200\257PM.png" new file mode 100644 index 0000000..15b7d93 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 4.42.52\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 5.06.59\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 5.06.59\342\200\257PM.png" new file mode 100644 index 0000000..9873402 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 5.06.59\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 8.37.23\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 8.37.23\342\200\257PM.png" new file mode 100644 index 0000000..798836e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 8.37.23\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 8.43.36\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 8.43.36\342\200\257PM.png" new file mode 100644 index 0000000..db6a600 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 8.43.36\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 8.44.27\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 8.44.27\342\200\257PM.png" new file mode 100644 index 0000000..ec1b7a8 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 8.44.27\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 8.45.42\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 8.45.42\342\200\257PM.png" new file mode 100644 index 0000000..4b9a40a Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 8.45.42\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 9.10.14\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 9.10.14\342\200\257PM.png" new file mode 100644 index 0000000..987eb6f Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 9.10.14\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 9.11.03\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 9.11.03\342\200\257PM.png" new file mode 100644 index 0000000..b523f07 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 9.11.03\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 9.12.23\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 9.12.23\342\200\257PM.png" new file mode 100644 index 0000000..840f376 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 9.12.23\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 9.32.22\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 9.32.22\342\200\257PM.png" new file mode 100644 index 0000000..47ffdf5 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 9.32.22\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 9.33.48\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 9.33.48\342\200\257PM.png" new file mode 100644 index 0000000..e168ecb Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 9.33.48\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-06 at 9.35.58\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-06 at 9.35.58\342\200\257PM.png" new file mode 100644 index 0000000..0f12bee Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-06 at 9.35.58\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-10 at 5.29.58\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-10 at 5.29.58\342\200\257PM.png" new file mode 100644 index 0000000..e33b7aa Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-10 at 5.29.58\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-10 at 5.37.06\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-10 at 5.37.06\342\200\257PM.png" new file mode 100644 index 0000000..2a8474e Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-10 at 5.37.06\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-10 at 5.40.13\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-10 at 5.40.13\342\200\257PM.png" new file mode 100644 index 0000000..97aef40 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-10 at 5.40.13\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-10 at 5.41.18\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-10 at 5.41.18\342\200\257PM.png" new file mode 100644 index 0000000..9ff0899 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-10 at 5.41.18\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-10 at 5.52.31\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-10 at 5.52.31\342\200\257PM.png" new file mode 100644 index 0000000..8789d51 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-10 at 5.52.31\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-10 at 6.13.21\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-10 at 6.13.21\342\200\257PM.png" new file mode 100644 index 0000000..63cf370 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-10 at 6.13.21\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-12 at 6.07.48\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-06-12 at 6.07.48\342\200\257PM (1).png" new file mode 100644 index 0000000..7eaf0bd Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-12 at 6.07.48\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-12 at 6.07.48\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-12 at 6.07.48\342\200\257PM.png" new file mode 100644 index 0000000..484691f Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-12 at 6.07.48\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-12 at 6.08.25\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-06-12 at 6.08.25\342\200\257PM (1).png" new file mode 100644 index 0000000..ea9c18c Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-12 at 6.08.25\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-12 at 6.08.25\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-12 at 6.08.25\342\200\257PM.png" new file mode 100644 index 0000000..ef2cf85 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-12 at 6.08.25\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-12 at 6.12.09\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-06-12 at 6.12.09\342\200\257PM (1).png" new file mode 100644 index 0000000..f5cd7d7 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-12 at 6.12.09\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-12 at 6.12.09\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-12 at 6.12.09\342\200\257PM.png" new file mode 100644 index 0000000..67c9725 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-12 at 6.12.09\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-12 at 6.12.54\342\200\257PM (1).png" "b/.gitbook/assets/Screenshot 2025-06-12 at 6.12.54\342\200\257PM (1).png" new file mode 100644 index 0000000..b8e1ec2 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-12 at 6.12.54\342\200\257PM (1).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-12 at 6.12.54\342\200\257PM (2).png" "b/.gitbook/assets/Screenshot 2025-06-12 at 6.12.54\342\200\257PM (2).png" new file mode 100644 index 0000000..71017a1 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-12 at 6.12.54\342\200\257PM (2).png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-12 at 6.12.54\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-12 at 6.12.54\342\200\257PM.png" new file mode 100644 index 0000000..71017a1 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-12 at 6.12.54\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-13 at 12.32.50\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-13 at 12.32.50\342\200\257PM.png" new file mode 100644 index 0000000..5c6e723 Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-13 at 12.32.50\342\200\257PM.png" differ diff --git "a/.gitbook/assets/Screenshot 2025-06-13 at 12.33.01\342\200\257PM.png" "b/.gitbook/assets/Screenshot 2025-06-13 at 12.33.01\342\200\257PM.png" new file mode 100644 index 0000000..8bb8acc Binary files /dev/null and "b/.gitbook/assets/Screenshot 2025-06-13 at 12.33.01\342\200\257PM.png" differ diff --git a/.gitbook/assets/Settings Theme Options.gif b/.gitbook/assets/Settings Theme Options.gif new file mode 100644 index 0000000..9078c19 Binary files /dev/null and b/.gitbook/assets/Settings Theme Options.gif differ diff --git a/.gitbook/assets/Static Sets.png b/.gitbook/assets/Static Sets.png new file mode 100644 index 0000000..f555e47 Binary files /dev/null and b/.gitbook/assets/Static Sets.png differ diff --git a/.gitbook/assets/Switch Organisation.gif b/.gitbook/assets/Switch Organisation.gif new file mode 100644 index 0000000..45f1a85 Binary files /dev/null and b/.gitbook/assets/Switch Organisation.gif differ diff --git a/.gitbook/assets/Switch between Graph and Static set.gif b/.gitbook/assets/Switch between Graph and Static set.gif new file mode 100644 index 0000000..2bb4e3e Binary files /dev/null and b/.gitbook/assets/Switch between Graph and Static set.gif differ diff --git a/.gitbook/assets/Theme - Create New Group.png b/.gitbook/assets/Theme - Create New Group.png new file mode 100644 index 0000000..a20cac8 Binary files /dev/null and b/.gitbook/assets/Theme - Create New Group.png differ diff --git a/.gitbook/assets/Theme - Group Edit.png b/.gitbook/assets/Theme - Group Edit.png new file mode 100644 index 0000000..127ae42 Binary files /dev/null and b/.gitbook/assets/Theme - Group Edit.png differ diff --git a/.gitbook/assets/Theme - Option Assign.png b/.gitbook/assets/Theme - Option Assign.png new file mode 100644 index 0000000..aa84fc7 Binary files /dev/null and b/.gitbook/assets/Theme - Option Assign.png differ diff --git a/.gitbook/assets/Theme - View - Primitives.png b/.gitbook/assets/Theme - View - Primitives.png new file mode 100644 index 0000000..7604f3b Binary files /dev/null and b/.gitbook/assets/Theme - View - Primitives.png differ diff --git a/.gitbook/assets/Themes Module New.png b/.gitbook/assets/Themes Module New.png new file mode 100644 index 0000000..1c1ffb1 Binary files /dev/null and b/.gitbook/assets/Themes Module New.png differ diff --git a/.gitbook/assets/Themes Module Options.png b/.gitbook/assets/Themes Module Options.png new file mode 100644 index 0000000..29eb08a Binary files /dev/null and b/.gitbook/assets/Themes Module Options.png differ diff --git a/.gitbook/assets/Themes in Tokens Module.png b/.gitbook/assets/Themes in Tokens Module.png new file mode 100644 index 0000000..919cf1e Binary files /dev/null and b/.gitbook/assets/Themes in Tokens Module.png differ diff --git a/.gitbook/assets/Themes.png b/.gitbook/assets/Themes.png new file mode 100644 index 0000000..d13a99b Binary files /dev/null and b/.gitbook/assets/Themes.png differ diff --git a/.gitbook/assets/Token Flow.gif b/.gitbook/assets/Token Flow.gif new file mode 100644 index 0000000..3ee447f Binary files /dev/null and b/.gitbook/assets/Token Flow.gif differ diff --git a/.gitbook/assets/Tokens - Theme Module Open.png b/.gitbook/assets/Tokens - Theme Module Open.png new file mode 100644 index 0000000..0c861f2 Binary files /dev/null and b/.gitbook/assets/Tokens - Theme Module Open.png differ diff --git a/.gitbook/assets/Tokens and Themes.png b/.gitbook/assets/Tokens and Themes.png new file mode 100644 index 0000000..8378406 Binary files /dev/null and b/.gitbook/assets/Tokens and Themes.png differ diff --git a/.gitbook/assets/Type Conversion.png b/.gitbook/assets/Type Conversion.png new file mode 100644 index 0000000..ae3bdf4 Binary files /dev/null and b/.gitbook/assets/Type Conversion.png differ diff --git a/.gitbook/assets/View Code and UI - configurations.gif b/.gitbook/assets/View Code and UI - configurations.gif new file mode 100644 index 0000000..3e37964 Binary files /dev/null and b/.gitbook/assets/View Code and UI - configurations.gif differ diff --git a/.gitbook/assets/Watch Mode Companion.gif b/.gitbook/assets/Watch Mode Companion.gif new file mode 100644 index 0000000..7dbb627 Binary files /dev/null and b/.gitbook/assets/Watch Mode Companion.gif differ diff --git a/.gitbook/assets/accountmenu.gif b/.gitbook/assets/accountmenu.gif new file mode 100644 index 0000000..898efc1 Binary files /dev/null and b/.gitbook/assets/accountmenu.gif differ diff --git a/.gitbook/assets/exportTokenStudio-LoginPage (1).png b/.gitbook/assets/exportTokenStudio-LoginPage (1).png new file mode 100644 index 0000000..0763e56 Binary files /dev/null and b/.gitbook/assets/exportTokenStudio-LoginPage (1).png differ diff --git a/.gitbook/assets/exportTokenStudio-LoginPage.png b/.gitbook/assets/exportTokenStudio-LoginPage.png new file mode 100644 index 0000000..8c941ad Binary files /dev/null and b/.gitbook/assets/exportTokenStudio-LoginPage.png differ diff --git a/.gitbook/assets/graph canvas.png b/.gitbook/assets/graph canvas.png new file mode 100644 index 0000000..7a67319 Binary files /dev/null and b/.gitbook/assets/graph canvas.png differ diff --git a/.gitbook/assets/header.png b/.gitbook/assets/header.png new file mode 100644 index 0000000..64951d3 Binary files /dev/null and b/.gitbook/assets/header.png differ diff --git a/.gitbook/assets/image (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1).png new file mode 100644 index 0000000..bbf6900 Binary files /dev/null and b/.gitbook/assets/image (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1).png b/.gitbook/assets/image (1) (1).png new file mode 100644 index 0000000..943e6d6 Binary files /dev/null and b/.gitbook/assets/image (1) (1).png differ diff --git a/.gitbook/assets/image (1).png b/.gitbook/assets/image (1).png new file mode 100644 index 0000000..2c0943c Binary files /dev/null and b/.gitbook/assets/image (1).png differ diff --git a/.gitbook/assets/image (10).png b/.gitbook/assets/image (10).png new file mode 100644 index 0000000..499ca58 Binary files /dev/null and b/.gitbook/assets/image (10).png differ diff --git a/.gitbook/assets/image (11).png b/.gitbook/assets/image (11).png new file mode 100644 index 0000000..6047d54 Binary files /dev/null and b/.gitbook/assets/image (11).png differ diff --git a/.gitbook/assets/image (12).png b/.gitbook/assets/image (12).png new file mode 100644 index 0000000..7bb494f Binary files /dev/null and b/.gitbook/assets/image (12).png differ diff --git a/.gitbook/assets/image (13).png b/.gitbook/assets/image (13).png new file mode 100644 index 0000000..53fe7fe Binary files /dev/null and b/.gitbook/assets/image (13).png differ diff --git a/.gitbook/assets/image (14).png b/.gitbook/assets/image (14).png new file mode 100644 index 0000000..369454a Binary files /dev/null and b/.gitbook/assets/image (14).png differ diff --git a/.gitbook/assets/image (15).png b/.gitbook/assets/image (15).png new file mode 100644 index 0000000..8c1b448 Binary files /dev/null and b/.gitbook/assets/image (15).png differ diff --git a/.gitbook/assets/image (16).png b/.gitbook/assets/image (16).png new file mode 100644 index 0000000..180c6d0 Binary files /dev/null and b/.gitbook/assets/image (16).png differ diff --git a/.gitbook/assets/image (2) (1).png b/.gitbook/assets/image (2) (1).png new file mode 100644 index 0000000..e067083 Binary files /dev/null and b/.gitbook/assets/image (2) (1).png differ diff --git a/.gitbook/assets/image (2).png b/.gitbook/assets/image (2).png new file mode 100644 index 0000000..8fc8ecd Binary files /dev/null and b/.gitbook/assets/image (2).png differ diff --git a/.gitbook/assets/image (3) (1).png b/.gitbook/assets/image (3) (1).png new file mode 100644 index 0000000..0a8bfa8 Binary files /dev/null and b/.gitbook/assets/image (3) (1).png differ diff --git a/.gitbook/assets/image (3).png b/.gitbook/assets/image (3).png new file mode 100644 index 0000000..f7f747b Binary files /dev/null and b/.gitbook/assets/image (3).png differ diff --git a/.gitbook/assets/image (4).png b/.gitbook/assets/image (4).png new file mode 100644 index 0000000..97c8e5b Binary files /dev/null and b/.gitbook/assets/image (4).png differ diff --git a/.gitbook/assets/image (5).png b/.gitbook/assets/image (5).png new file mode 100644 index 0000000..4b39642 Binary files /dev/null and b/.gitbook/assets/image (5).png differ diff --git a/.gitbook/assets/image (6).png b/.gitbook/assets/image (6).png new file mode 100644 index 0000000..9d28c9b Binary files /dev/null and b/.gitbook/assets/image (6).png differ diff --git a/.gitbook/assets/image (7).png b/.gitbook/assets/image (7).png new file mode 100644 index 0000000..2b12f43 Binary files /dev/null and b/.gitbook/assets/image (7).png differ diff --git a/.gitbook/assets/image (8).png b/.gitbook/assets/image (8).png new file mode 100644 index 0000000..779c2ec Binary files /dev/null and b/.gitbook/assets/image (8).png differ diff --git a/.gitbook/assets/image (9).png b/.gitbook/assets/image (9).png new file mode 100644 index 0000000..ab61597 Binary files /dev/null and b/.gitbook/assets/image (9).png differ diff --git a/.gitbook/assets/image.png b/.gitbook/assets/image.png new file mode 100644 index 0000000..f020b1b Binary files /dev/null and b/.gitbook/assets/image.png differ diff --git a/.gitbook/assets/profile.png b/.gitbook/assets/profile.png new file mode 100644 index 0000000..50551db Binary files /dev/null and b/.gitbook/assets/profile.png differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..8fc0f6f --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +# What is Studio + +## Welcome to Studio + +Studio is your organization's central source of truth for design tokens, managing both the tokens themselves and the decisions behind them. By bridging the gap between design and development, Studio ensures consistent, scalable design systems across your entire organization. + +What makes Studio unique is it's platform-agnostic approach. Your teams can consume tokens in their preferred format and workflow. Whether that's variables in Figma for designers, CSS variables for web developers, Swift constants for iOS teams, or XML resources for Android developers. + +## Why choose Studio? + +### True Single Source of Truth + +Studio doesn't just store your design tokens. It _is_ the single source of truth. All design decisions are captured, maintained, and distributed from Studio, ensuring consistency regardless of which tools your teams use downstream. + +### Universal Consumption Model + +Import your tokens directly into any platform or tool. Designers can pull values through our [companion-by-tokens-studio.md](plugins/companion-by-tokens-studio.md "mention") or our ever-popular [tokens-studio-for-figma-plugin.md](plugins/tokens-studio-for-figma-plugin.md "mention") and create Figma variables. Developers can generate CSS variables and mobile teams can implement native constants. All from the same source, always in sync. + +### Seamless Design-to-Code Workflow + +Transform design tokens from your design software directly into production-ready code for any platform. No more manual updates or synchronization issues between design and development teams. + +### Built for Enterprise Scale + +From small teams to large organizations, our platform grows with you. Manage multiple themes, versions, and environments while maintaining complete control over your design system. + +### Cross-Functional Collaboration + +Enable all stakeholders to work together seamlessly. With built-in version control and clear documentation, everyone accesses the same design decisions. Just in the format they need. + +## Key features + +* [**Token Management**](platform/tokens/) - Create, organize, and maintain your design tokens +* [**Theming**](platform/themes/) - Build and manage multiple themes with ease +* [**Version Control**](platform/releases/) - Track changes and manage releases +* [**Team Management**](settings/organisation/) - Collaborate with your team effectively + +## Getting started + +Ready to transform your design system workflow? Follow our step-by-step guide: + +1. [Start your journey](getting-started/getting-started.md) - Create your account and first project +2. [Connect to Figma](connect-studio-to-figma/) - Sync your design tokens +3. [Connect to code](connect-studio-to-code/) - Integrate with your development workflow + +Join the growing number of teams using Tokens Studio to create more consistent, efficient design systems. diff --git a/SUMMARY.md b/SUMMARY.md new file mode 100644 index 0000000..5616234 --- /dev/null +++ b/SUMMARY.md @@ -0,0 +1,302 @@ +# Table of contents + +## Getting Started + +* [What is Studio](README.md) +* [Creating an account](getting-started/getting-started.md) +* [Setting up Studio](getting-started/setting-up-studio/README.md) + * [Import from Tokens Studio for Figma](getting-started/setting-up-studio/import-from-tokens-studio-for-figma.md) + * [Import from Figma variables](getting-started/setting-up-studio/import-from-figma-variables.md) + +*** + +* [Connect Studio to Figma](connect-studio-to-figma/README.md) + * [Using Companion by Tokens Studio](connect-studio-to-figma/using-companion-by-tokens-studio.md) + * [Using Tokens Studio for Figma](connect-studio-to-figma/using-tokens-studio-for-figma.md) +* [Connect Studio to Code](connect-studio-to-code/README.md) + * [Tokens Studio CLI](connect-studio-to-code/tokens-studio-cli.md) + * [GraphQL](connect-studio-to-code/graphql.md) + * [Postman](connect-studio-to-code/postman.md) +* [Getting ready for production](getting-ready-for-production.md) +* [Connect](connect.md) +* [Migrate to Studio](migrate-to-studio.md) + +## Platform + +* [Tokens](platform/tokens/README.md) + * [Token Sets](platform/tokens/token-sets.md) + * [Token flow](platform/tokens/token-flow.md) +* [Themes](platform/themes/README.md) + * [Theme Groups and Theme Options](platform/themes/theme-groups-and-theme-options.md) +* [Releases](platform/releases/README.md) + * [Integrate Release to](platform/releases/integrate-release-to.md) +* [Configuration](platform/configuration.md) +* [Support](platform/support.md) +* [Plans and Billing](platform/plans-and-billing.md) +* [Activity Log](platform/activity-log.md) + +## STYLE DICTIONARY + +* [Page 2](style-dictionary/page-2.md) + +## GRAPH ENGINE + +* [Introduction](graph-engine/introduction.md) +* [Editor](graph-engine/editor.md) +* [Creating a Graph Based Set](graph-engine/creating-a-graph-based-set/README.md) + * [Generating a Token Set](graph-engine/creating-a-graph-based-set/generating-a-token-set.md) +* [Nodes](graph-engine/nodes.md) +* [Types](graph-engine/types.md) +* [Editing](graph-engine/editing.md) +* [Available Nodes](graph-engine/available-nodes/README.md) + * [Accessibility](graph-engine/available-nodes/accessibility/README.md) + * [Color Blindness](graph-engine/available-nodes/accessibility/color-blindness.md) + * [Array](graph-engine/available-nodes/array/README.md) + * [Array Filter](graph-engine/available-nodes/array/array-filter.md) + * [Array Find](graph-engine/available-nodes/array/array-find.md) + * [Arrify](graph-engine/available-nodes/array/arrify.md) + * [Concat](graph-engine/available-nodes/array/concat.md) + * [Filter](graph-engine/available-nodes/array/filter.md) + * [Find](graph-engine/available-nodes/array/find.md) + * [Flatten](graph-engine/available-nodes/array/flatten.md) + * [Index Array](graph-engine/available-nodes/array/index-array.md) + * [Inject Item](graph-engine/available-nodes/array/inject-item.md) + * [Array Length](graph-engine/available-nodes/array/array-length.md) + * [Array Push](graph-engine/available-nodes/array/push.md) + * [Remove Item](graph-engine/available-nodes/array/remove.md) + * [Replace Item](graph-engine/available-nodes/array/replace-item.md) + * [Reverse Array](graph-engine/available-nodes/array/reverse-array.md) + * [Slice Array](graph-engine/available-nodes/array/slice-array.md) + * [Sort Array](graph-engine/available-nodes/array/sort-array.md) + * [Array Map](graph-engine/available-nodes/array/array-map.md) + * [Color](graph-engine/available-nodes/color/README.md) + * [Color To String](graph-engine/available-nodes/color/color-to-string.md) + * [Color Wheel](graph-engine/available-nodes/color/color-wheel.md) + * [Contrast](graph-engine/available-nodes/color/contrast.md) + * [Contrasting Alpha](graph-engine/available-nodes/color/contrasting-alpha.md) + * [Contrasting Color](graph-engine/available-nodes/color/contrasting-color.md) + * [Contrasting from Array](graph-engine/available-nodes/color/contrasting-from-array.md) + * [Convert Color](graph-engine/available-nodes/color/convert.md) + * [Create Color](graph-engine/available-nodes/color/create.md) + * [Darken Color](graph-engine/available-nodes/color/darken.md) + * [Deconstruct Color](graph-engine/available-nodes/color/deconstruct.md) + * [Delta E](graph-engine/available-nodes/color/delta-e.md) + * [Distance](graph-engine/available-nodes/color/distance.md) + * [Flatten Alpha](graph-engine/available-nodes/color/flatten-alpha.md) + * [Lighten Color](graph-engine/available-nodes/color/lighten.md) + * [Match Alpha](graph-engine/available-nodes/color/match-alpha.md) + * [Mix Colors](graph-engine/available-nodes/color/mix.md) + * [Name Color](graph-engine/available-nodes/color/name-color.md) + * [Poline](graph-engine/available-nodes/color/poline.md) + * [Range](graph-engine/available-nodes/color/range.md) + * [Scale Colors](graph-engine/available-nodes/color/scale.md) + * [Sort Colors By Distance](graph-engine/available-nodes/color/sort-colors-by-distance.md) + * [String To Color](graph-engine/available-nodes/color/string-to-color.md) + * [CSS](graph-engine/available-nodes/css/README.md) + * [CSS Accessible Clamp](graph-engine/available-nodes/css/css-accessible-clamp.md) + * [CSS Box](graph-engine/available-nodes/css/css-box.md) + * [CSS Function](graph-engine/available-nodes/css/css-function.md) + * [CSS Map](graph-engine/available-nodes/css/css-map.md) + * [Curves](graph-engine/available-nodes/curves/README.md) + * [Bezier Curve](graph-engine/available-nodes/curves/bezier-curve.md) + * [Construct Float Curve](graph-engine/available-nodes/curves/construct-float-curve.md) + * [Deconstruct Float Curve](graph-engine/available-nodes/curves/deconstruct-float-curve.md) + * [Flip Float Curve](graph-engine/available-nodes/curves/flip-float-curve.md) + * [Preset Bezier Curves](graph-engine/available-nodes/curves/preset-bezier-curves.md) + * [Sample Array from Float Curve](graph-engine/available-nodes/curves/sample-array-from-float-curve.md) + * [Sample Curve](graph-engine/available-nodes/curves/sample-curve.md) + * [Sample Float Curve](graph-engine/available-nodes/curves/sample-float-curve.md) + * [Design Tokens](graph-engine/available-nodes/design-tokens/README.md) + * [Array To Set](graph-engine/available-nodes/design-tokens/array-to-set.md) + * [Create Border](graph-engine/available-nodes/design-tokens/create-border.md) + * [Create Border Design Token](graph-engine/available-nodes/design-tokens/create-border-design-token.md) + * [Create Border Token](graph-engine/available-nodes/design-tokens/create-border-token.md) + * [Create Box Shadow](graph-engine/available-nodes/design-tokens/create-box-shadow.md) + * [Create Box Shadow Design Token](graph-engine/available-nodes/design-tokens/create-box-shadow-design-token.md) + * [Create Box Shadow Token](graph-engine/available-nodes/design-tokens/create-box-shadow-token.md) + * [Create Design Token](graph-engine/available-nodes/design-tokens/create-design-token.md) + * [Create Reference](graph-engine/available-nodes/design-tokens/create-reference.md) + * [Create Typography](graph-engine/available-nodes/design-tokens/create-typography.md) + * [Create Typography Design Token](graph-engine/available-nodes/design-tokens/create-typography-design-token.md) + * [Create Typography Token](graph-engine/available-nodes/design-tokens/create-typography-token.md) + * [Destruct Token](graph-engine/available-nodes/design-tokens/destruct-token.md) + * [External Token Set](graph-engine/available-nodes/design-tokens/external-token-set.md) + * [Extract Token](graph-engine/available-nodes/design-tokens/extract-token.md) + * [Flatten Token Sets](graph-engine/available-nodes/design-tokens/flatten-token-sets.md) + * [Group Tokens](graph-engine/available-nodes/design-tokens/group-tokens.md) + * [Inline Tokens](graph-engine/available-nodes/design-tokens/inline-tokens.md) + * [Invert Token Set](graph-engine/available-nodes/design-tokens/invert-token-set.md) + * [Leonardo Color](graph-engine/available-nodes/design-tokens/leonardo-color.md) + * [Leonardo Theme](graph-engine/available-nodes/design-tokens/leonardo-theme.md) + * [Name Tokens](graph-engine/available-nodes/design-tokens/name-tokens.md) + * [Preview Typography](graph-engine/available-nodes/design-tokens/preview-typography.md) + * [Resolve Tokens](graph-engine/available-nodes/design-tokens/resolve-tokens.md) + * [Set To Array](graph-engine/available-nodes/design-tokens/set-to-array.md) + * [Ungroup Tokens](graph-engine/available-nodes/design-tokens/ungroup-tokens.md) + * [Utils](graph-engine/available-nodes/design-tokens/utils/README.md) + * [Size Scales](graph-engine/available-nodes/design-tokens/utils/size-scales.md) + * [Group Token Array](graph-engine/available-nodes/design-tokens/group-token-array.md) + * [Ungroup Token Array](graph-engine/available-nodes/design-tokens/ungroup-token-array.md) + * [Figma](graph-engine/available-nodes/figma/README.md) + * [Code Syntax](graph-engine/available-nodes/figma/code-syntax.md) + * [Publish Varibales](graph-engine/available-nodes/figma/publish-variable.md) + * [Scope All](graph-engine/available-nodes/figma/scope-all.md) + * [Scope by Type](graph-engine/available-nodes/figma/scope-by-type.md) + * [Scope Color](graph-engine/available-nodes/figma/scope-color.md) + * [Scope Number](graph-engine/available-nodes/figma/scope-number.md) + * [Scope String](graph-engine/available-nodes/figma/scope-string.md) + * [Generic](graph-engine/available-nodes/generic/README.md) + * [Constant](graph-engine/available-nodes/generic/constant.md) + * [Delay](graph-engine/available-nodes/generic/delay.md) + * [Input](graph-engine/available-nodes/generic/input.md) + * [Object Merge](graph-engine/available-nodes/generic/object-merge.md) + * [Note](graph-engine/available-nodes/generic/note.md) + * [Object Path](graph-engine/available-nodes/generic/object-path.md) + * [Objectify](graph-engine/available-nodes/generic/objectify.md) + * [Output](graph-engine/available-nodes/generic/output.md) + * [Panic](graph-engine/available-nodes/generic/panic.md) + * [Passthrough](graph-engine/available-nodes/generic/passthrough.md) + * [Subgraph](graph-engine/available-nodes/generic/subgraph.md) + * [Time](graph-engine/available-nodes/generic/time.md) + * [Gradient](graph-engine/available-nodes/gradient/README.md) + * [Gradient Stop](graph-engine/available-nodes/gradient/gradient-stop.md) + * [Logic](graph-engine/available-nodes/logic/README.md) + * [And](graph-engine/available-nodes/logic/and.md) + * [Compare](graph-engine/available-nodes/logic/compare.md) + * [If](graph-engine/available-nodes/logic/if.md) + * [Not](graph-engine/available-nodes/logic/not.md) + * [Or](graph-engine/available-nodes/logic/or.md) + * [Switch](graph-engine/available-nodes/logic/switch.md) + * [Math](graph-engine/available-nodes/math/README.md) + * [Absolute](graph-engine/available-nodes/math/absolute.md) + * [Add](graph-engine/available-nodes/math/add.md) + * [Add Variadic](graph-engine/available-nodes/math/add-node-variadic.md) + * [Ceiling](graph-engine/available-nodes/math/ceiling.md) + * [Clamp](graph-engine/available-nodes/math/clamp.md) + * [Closest Number](graph-engine/available-nodes/math/closest-number.md) + * [Cosine](graph-engine/available-nodes/math/cosine.md) + * [Count](graph-engine/available-nodes/math/count.md) + * [Difference](graph-engine/available-nodes/math/difference.md) + * [Divide](graph-engine/available-nodes/math/divide.md) + * [Divide Variadic](graph-engine/available-nodes/math/divide-variadic.md) + * [Evaluate Math](graph-engine/available-nodes/math/evaluate-math.md) + * [Exponentiation](graph-engine/available-nodes/math/exponentiation.md) + * [Floor](graph-engine/available-nodes/math/floor.md) + * [Fluid](graph-engine/available-nodes/math/fluid.md) + * [Lerp](graph-engine/available-nodes/math/lerp.md) + * [Modulo](graph-engine/available-nodes/math/modulo.md) + * [Multiply](graph-engine/available-nodes/math/multiply.md) + * [Multiply Variadic](graph-engine/available-nodes/math/multiply-variadic.md) + * [Power](graph-engine/available-nodes/math/power.md) + * [Random](graph-engine/available-nodes/math/random.md) + * [Range Mapping](graph-engine/available-nodes/math/range-mapping.md) + * [Round](graph-engine/available-nodes/math/round.md) + * [Sine](graph-engine/available-nodes/math/sine.md) + * [Snap](graph-engine/available-nodes/math/snap.md) + * [Square Root](graph-engine/available-nodes/math/square-root.md) + * [Subtract](graph-engine/available-nodes/math/subtract.md) + * [Subtract Variadic](graph-engine/available-nodes/math/subtract-variadic.md) + * [Tangent](graph-engine/available-nodes/math/tangent.md) + * [Preview](graph-engine/available-nodes/preview/README.md) + * [Color Compare](graph-engine/available-nodes/preview/color-compare.md) + * [Color Scale](graph-engine/available-nodes/preview/color-scale.md) + * [Color Swatch](graph-engine/available-nodes/preview/color-swatch.md) + * [Math Expression](graph-engine/available-nodes/preview/math-expression.md) + * [Number](graph-engine/available-nodes/preview/number.md) + * [Preview Curve](graph-engine/available-nodes/preview/preview-curve.md) + * [Search](graph-engine/available-nodes/search/README.md) + * [Find First Match](graph-engine/available-nodes/search/find-first-match.md) + * [Linear Search](graph-engine/available-nodes/search/linear-search.md) + * [Series](graph-engine/available-nodes/series/README.md) + * [Alternating Series](graph-engine/available-nodes/series/alternating-series.md) + * [Arithmetic Series](graph-engine/available-nodes/series/arithmetic-series.md) + * [Exponential Decay](graph-engine/available-nodes/series/exponential-decay.md) + * [Fibonacci Series](graph-engine/available-nodes/series/fibonacci-series.md) + * [Geometric Series](graph-engine/available-nodes/series/geometric-series.md) + * [Harmonic Series](graph-engine/available-nodes/series/harmonic-series.md) + * [Inverse Linear Mapping](graph-engine/available-nodes/series/inverse-linear-mapping.md) + * [Linear Space](graph-engine/available-nodes/series/linear-space.md) + * [Power Series](graph-engine/available-nodes/series/power-series.md) + * [String](graph-engine/available-nodes/string/README.md) + * [Case Convert](graph-engine/available-nodes/string/case-convert.md) + * [Interpolation](graph-engine/available-nodes/string/interpolation.md) + * [Join Array](graph-engine/available-nodes/string/join.md) + * [Lowercase](graph-engine/available-nodes/string/lowercase.md) + * [Normalize](graph-engine/available-nodes/string/normalize.md) + * [Pad](graph-engine/available-nodes/string/pad.md) + * [Regex](graph-engine/available-nodes/string/regex.md) + * [Replace](graph-engine/available-nodes/string/replace.md) + * [Split String](graph-engine/available-nodes/string/split.md) + * [Stringify](graph-engine/available-nodes/string/stringify.md) + * [Uppercase](graph-engine/available-nodes/string/uppercase.md) + * [Typography](graph-engine/available-nodes/typography/README.md) + * [Base Font Size](graph-engine/available-nodes/typography/base-font-size.md) + * [Typing](graph-engine/available-nodes/typing/README.md) + * [Assert Defined](graph-engine/available-nodes/typing/assert-defined.md) + * [Has Value](graph-engine/available-nodes/typing/has-value.md) + * [Parse Number](graph-engine/available-nodes/typing/parse-number.md) + * [Parse Unit](graph-engine/available-nodes/typing/parse-unit.md) + * [Pass Unit](graph-engine/available-nodes/typing/pass-unit.md) + * [Vector2](graph-engine/available-nodes/vector2/README.md) + * [Add](graph-engine/available-nodes/vector2/add.md) + * [Create](graph-engine/available-nodes/vector2/create.md) + * [Destructure](graph-engine/available-nodes/vector2/destructure.md) + * [Dot Product](graph-engine/available-nodes/vector2/dot-product.md) + * [Length](graph-engine/available-nodes/vector2/length.md) + * [Normalize](graph-engine/available-nodes/vector2/normalize.md) + * [Scale](graph-engine/available-nodes/vector2/scale.md) + * [Subtract](graph-engine/available-nodes/vector2/subtract.md) + * [Naming](graph-engine/available-nodes/naming/README.md) + * [Alphabetic Scale](graph-engine/available-nodes/naming/alphabetic-scale.md) + * [Alphanumeric Scale](graph-engine/available-nodes/naming/alphanumeric-scale.md) + * [Greek Letter](graph-engine/available-nodes/naming/greek-letter.md) + * [Hierarchy Level](graph-engine/available-nodes/naming/hierarchy-level.md) + * [Numeric Scale](graph-engine/available-nodes/naming/numeric-scale.md) + * [T-Shirt Size](graph-engine/available-nodes/naming/t-shirt-size.md) + +*** + +* [Example Graphs](example-graphs/README.md) + * [Creating a simple color scale](example-graphs/creating-a-simple-color-scale.md) + * [Creating a Font Size Scale](example-graphs/base-font-size-scale.md) + * [Creating a Spacing Scale](example-graphs/creating-a-spacing-scale.md) + * [Creating a Sizing Scale](example-graphs/creating-a-sizing-scale.md) + * [Creating Multiple Color Scales](example-graphs/creating-multiple-color-scales.md) +* [Node Examples](node-examples/README.md) + * [Math](node-examples/math/README.md) + * [Absolute](node-examples/math/absolute.md) + * [Add](node-examples/math/add.md) + * [Add (Variadic)](node-examples/math/add-variadic.md) + * [Ceil](node-examples/math/ceil.md) + * [Clamp](node-examples/math/clamp.md) + * [Closest Number](node-examples/math/closest-number.md) + * [Cosine](node-examples/math/cosine.md) + * [Count](node-examples/math/count.md) + * [Multiply](node-examples/math/multiply.md) + +## Settings + +* [Organizations](settings/organisation/README.md) + * [Inviting members](settings/organisation/inviting-members.md) +* [Projects](settings/project.md) +* [API keys](settings/api-keys.md) +* [Accounts](settings/accounts.md) + +## Guides + +* [Migrating from Tokens Studio for Figma Plugin to the Tokens Studio Platform](guides/migrating-from-tokens-studio-for-figma-plugin-to-the-tokens-studio-platform.md) +* [Integrating with Github Actions](guides/integrating-with-github-actions.md) +* [Integrating with NextJS](guides/integrating-with-nextjs.md) +* [React Native & Expo](guides/react-native-and-expo.md) +* [Azure](guides/azure.md) + +## PLUGINS + +* [Tokens Studio for Figma Plugin](plugins/tokens-studio-for-figma-plugin.md) +* [Companion by Tokens Studio](plugins/companion-by-tokens-studio.md) +* [Tokens Studio for Framer Plugin](plugins/tokens-studio-for-framer-plugin.md) + +## Development + +* [SDKs](development/sdks.md) +* [CLI](development/cli.md) diff --git a/connect-studio-to-code/README.md b/connect-studio-to-code/README.md new file mode 100644 index 0000000..1b2baee --- /dev/null +++ b/connect-studio-to-code/README.md @@ -0,0 +1,57 @@ +# Connect Studio to Code + +## **Using the Studio CLI and API** + +This documentation provides a detailed guide on how to use the Studio CLI and API for managing design tokens efficiently. + +## **Accessing the SDK and CLI Documentation** + +Tokens Studio publishes documentation for the SDK on our Github. You can refer to the documentation for any questions and tooling you may need. [https://tokens-studio.github.io/studio-app/](https://tokens-studio.github.io/studio-app/) + +### **Accessing documentation within Studio** + +1. Open the Studio application. +2. Go to your **organization dashboard**. +3. Click the **SDK and CLI** button. + +
+ +## **Creating an API Key** + +* **Generate a Key:** + * Go to **Personal Settings** in Studio. + * Select **API Keys** (below "Edit Profile"). + * Create a new API key (e.g., "Test Key"). +* **Copy and Store the Key:** + * Copy the key string and **store it securely** (e.g., in a password manager or vault). + * You won’t be able to view the key again after closing the window. + +
+ +## Accessing the API + +The API operates on a **GraphQL interface**. You can use tools like **Postman**, **Curl**, or the **Apollo Sandbox** to interact with it. + +{% content-ref url="tokens-studio-cli.md" %} +[tokens-studio-cli.md](tokens-studio-cli.md) +{% endcontent-ref %} + +{% content-ref url="graphql.md" %} +[graphql.md](graphql.md) +{% endcontent-ref %} + +{% content-ref url="postman.md" %} +[postman.md](postman.md) +{% endcontent-ref %} + +## **Best Practices** + +1. **Secure API Key Storage:** + * Use a password manager or secure vault. + * Avoid storing keys in plain text. +2. **Automation:** + * Use environment variables to prevent manual prompts in CI pipelines. +3. **Explore API Schema:** + * Use Apollo Sandbox for schema introspection before creating complex queries. + +This documentation provides an overview of using Studio’s API and CLI effectively. For further assistance, refer to the official [SDK and CLI documentation page](https://tokens-studio.github.io/studio-app/). diff --git a/connect-studio-to-code/graphql.md b/connect-studio-to-code/graphql.md new file mode 100644 index 0000000..786d3c2 --- /dev/null +++ b/connect-studio-to-code/graphql.md @@ -0,0 +1,117 @@ +--- +description: How to access Tokens Studio data directly using GraphQL in your project. +--- + +# GraphQL + +If you're looking to automate Tokens Studio data for build pipelines or pull it to another project or tool you're using, we offer a GraphQL endpoint that you can query directly. + +**Prerequisites**: + +* [api-keys.md](../settings/api-keys.md "mention") + +## **Accessing the GraphQL endpoint** + +{% stepper %} +{% step %} +### **Access the Apollo Sandbox:** + +
+ +Open the **GraphQL endpoint** [**https://graphql.app.tokens.studio/graphql**](https://graphql.app.tokens.studio/graphql) +{% endstep %} + +{% step %} +### **Configure the Authorization Header** + +Open the **Connection settings** modal by clicking on the Gear icon in the top menu bar. + +
+ +Within the **Connection settings** modal, there is a **Shared headers** section. Select "Authorization header" in the header key input. + +{% hint style="warning" %} +You will need an API key generated from the Tokens Studio platform. If you don't have this available, you can follow [these instructions to generate one](./#creating-an-api-key). +{% endhint %} + +In the value input: `Bearer ` (replace `` with your API key. Click save. + +
+{% endstep %} + +{% step %} +### **View the available queries:** + +
+ +The query section will show the available queries as can be seen in the [SDK-CLI documentation > Query page](https://tokens-studio.github.io/studio-app/types/Query.html). + +
+{% endstep %} +{% endstepper %} + +## Example: Running a Query + +{% stepper %} +{% step %} +### Choose the query to use + +
+ +Click on `projects(...): PaginatedProjects!` in the Fields section. This will automatically populate the base query in the Operations section of the Apollo playground. +{% endstep %} + +{% step %} +### Add the model to return. + +
+ +Add `data: [Project!]!`. Again, this will auto-populate the Operations field. This step is needed because the Projects list is a paginated response. +{% endstep %} + +{% step %} +### Add the fields you want returned + +
+ +Click on `name: String!` and `organizationId: String!` to add them to the query + +Your query should be the following now: + +```graphql +query Projects($organization: String!) { + projects(organization: $organization) { + data { + organizationId + name + } + } +} +``` +{% endstep %} + +{% step %} +### Add variables + +In the "**Variables**" section, we need to add the organisation id. To get the organisation ID, Navigate to your organization in Studio. Copy the **Organization ID** from the URL (after `/org/`). + +
+ +Return to the Apollo Sandbox, enter the organisation id in the "**Variables section**". + +```json +{ + "organization": "" +} +``` +{% endstep %} + +{% step %} +### Run the Query + +
+ +Click the button in the top right corner to receive a list of projects in the response. The name and organization id will be displayed for each item in the list. +{% endstep %} +{% endstepper %} + diff --git a/connect-studio-to-code/postman.md b/connect-studio-to-code/postman.md new file mode 100644 index 0000000..610e8c7 --- /dev/null +++ b/connect-studio-to-code/postman.md @@ -0,0 +1,62 @@ +# Postman + +**Prerequisites**: + +* [api-keys.md](../settings/api-keys.md "mention") + +### **Using Postman to Call the API** + +1. **Set Up a Request:** + * Create a new **POST request** in Postman. + * Use the same endpoint as Apollo Sandbox. + +
+ +2. **Add Authorization:** + +* In the **Authorization** tab, select **Bearer Token**. +* Paste your API key into the token field. + +
+ +3. **Check the Headers:** + +* The headers will show a predefined Authorisation. + +
+ +4. **Define the Body:** + +* Go to the Body tab. Select the "raw" option. In the input enter the "operationName" and "variables" as we have defined in the [Apollo Sandbox](postman.md#using-the-api-key-with-graphql). + +
+ +* Use the "query" in the "Operation" section of Apollo Sandbox and convert it into a single-line string. You can use this [tool](https://multi-to-single-string.netlify.app/) to convert the query from multi-line to single-line. + +
+ +The single line query will look like this: + +```json +query Projects($organization: String!) {\n projects(organization: $organization) {\n data {\n organizationId\n name\n }\n }\n} +``` + +* Provide necessary variables (e.g., `organization ID`) in the payload. The final query will look something like this: + +```json +{ + "operationName": "Projects", + "variables": { + "organization": "" + }, + "query": "query Projects($organization: String!) {\n projects(organization: $organization) {\n data {\n organizationId\n name\n }\n }\n}" +} +``` + +
+ +5. **Send the Request:** + +* Execute the request by clicking on "Send" to receive JSON responses similar to the Apollo Sandbox. + +
diff --git a/connect-studio-to-code/tokens-studio-cli.md b/connect-studio-to-code/tokens-studio-cli.md new file mode 100644 index 0000000..dc11da0 --- /dev/null +++ b/connect-studio-to-code/tokens-studio-cli.md @@ -0,0 +1,205 @@ +--- +description: >- + Tokens Studio offers an NPM package that you can integrate with your systems. + This package allows you to connect directly to the Tokens Studio platform and + pull tokens directly into your project. +--- + +# Tokens Studio CLI + +You may find this useful if you use build pipelines and want to ensure that you have the latest token data in your projects during deployments. + +**Prerequisites**: + +* [api-keys.md](../settings/api-keys.md "mention") + +## **Key Features of the CLI** + +1. **Current Features:** + * Pull token sets into local files. + * Simplify organization and project selection. +2. **Planned Features:** + * **Watch Mode:** Automatically sync changes from Studio to local files. + * **Release Artifacts:** Pull releases directly instead of token sets. + +## **System Requirements** + +* Node v22 or greater is installed [https://nodejs.org/en/download](https://nodejs.org/en/download) + +## **Installing the CLI** + +{% stepper %} +{% step %} +### Using your terminal, navigate to the directory that you want to connect Studio + +{% code title="Example of navigating to a directory" %} +```bash +cd ./your-system/projects/my-project +``` +{% endcode %} + +* Install the `npm install @tokens-studio/sdk.` +* If you don’t have a `package.json`, initialize it first with `npm init`. +* Ensure that the node.js version installed is v.22 or above. +{% endstep %} + +{% step %} +### Initialize your project for NPM + +If you don't already have a `package.json` file, you can create one by running `npm init` . This allows npm packages to be installed in the directory. +{% endstep %} + +{% step %} +### Install the package + +In your terminal, install the package. + +```bash +npm install @tokens-studio/sdk --save-dev +``` + +{% hint style="info" %} +**If you're using a different package manager, the package remains the same. For example:** + +Yarn: `yarn add @tokens-studio/sdk --dev` + +PNPM: `pnpm install @tokens-studio/sdk --dev` + +Bun: `bun add @tokens-studio/sdk --dev` +{% endhint %} +{% endstep %} +{% endstepper %} + +## Using the CLI + +Once installed, you can run commands using `npx tokensstudio` + +### Available Commands + +You can run `npx tokensstudio --help` to view all available commands from the CLI. + +```bash +Tokens Studio CLI 2.0.2 + +Usage: +$ tokensstudio + +Commands: +pull +setup + +For more info, run any command with the `--help` flag: +$ tokensstudio --help +$ tokensstudio pull --help +$ tokensstudio setup --help + +Options: +--help [boolean] Shows an overview of CLI usage +--version [boolean] Prints NPM version of the CLI +``` + +## Setting up your project with the CLI + +{% hint style="warning" %} +You will need an API key generated from the Tokens Studio platform. If you don't have this available, you can follow [these instructions to generate one](./#creating-an-api-key). +{% endhint %} + +Once installed, you will need to configure the CLI to use your Tokens Studio account. + +{% stepper %} +{% step %} +### In your terminal, run the setup command + +`npx tokensstudio setup --host graphql.prod.tokens.studio` +{% endstep %} + +{% step %} +### When prompted, enter your API key. + +```bash + Tokens Studio CLI 2.0.2 + +You did not pass an API key in the environment variables, but you can paste one here. + You can create an API key in Studio user settings by navigating to a project dashboard + and clicking the bottom left menu -> API keys. + + API key: +``` + +{% hint style="info" %} +### You can skip the setup step by defined the API KEY as an environment variable when calling the CLI. + +```bash +TOKENSSTUDIO_APIKEY= npx tokensstudio pull +``` +{% endhint %} +{% endstep %} + +{% step %} +### Select the organization and project + +```bash +✔ Done! + ■ Fetched organizations + ■ Fetched projects + +Select your organisation +Hyma + +Select your project +Tokens Zen Garden +``` + +When successful, a `.tokensstudio.json` file will be created at the root of your project. + +
{
+  "version": "2",
+  "org": "7xxxxxx1-3xx5-4xxx-xxx6-xxxx4axxxxf2",
+  "project": "xxxxfa7d-xxxx-4xxx-xxx2-xxxx0126xxxx",
+  "branch": "main",
+  "release": "",
+  "output": "tokens"
+}
+
+{% endstep %} + +{% step %} +### Pull Tokens into your project + +In the `.tokensstudio.json` file, edit the **output** property value to be the local project directory where you'd like the tokens to be stored. For example, if your project uses a `src` directory, you would want to change that to `"output": "src/tokens"`\ + + +Use the `pull` command to download the tokens from Tokens Studio to your project. + +```bash +npx tokensstudio pull --host graphql.prod.tokens.studio +``` + +{% code title="Results" %} +```bash +✔ Done! + ■ Fetched tokensets + +✔ Success Found 18 sets with 938 tokens in total. + ◼ global.json + ◼ semantic.json + ◼ comp/button.json + ◼ comp/list-item.json + ◼ comp/menu-item.json + ◼ comp/toggle.json + ◼ pattern/menu-bar.json + ◼ pattern/feature.json + ◼ pattern/card-user.json + ◼ pattern/card-pricing.json + ◼ sections/nav.json + ◼ sections/hero.json + ◼ sections/features.json + ◼ sections/team.json + ◼ sections/pricing.json + ◼ sections/footer.json + ◼ theme/light.json + ◼ theme/dark.json +``` +{% endcode %} +{% endstep %} +{% endstepper %} diff --git a/connect-studio-to-figma/README.md b/connect-studio-to-figma/README.md new file mode 100644 index 0000000..feaf821 --- /dev/null +++ b/connect-studio-to-figma/README.md @@ -0,0 +1,15 @@ +# Connect Studio to Figma + +Our [companion-by-tokens-studio.md](../plugins/companion-by-tokens-studio.md "mention") Figma plugin integrates easily with the Studio and allows you to sync the tokens from your organizations and projects. + +Read our guide on how to connect Companion + +{% content-ref url="using-companion-by-tokens-studio.md" %} +[using-companion-by-tokens-studio.md](using-companion-by-tokens-studio.md) +{% endcontent-ref %} + +Familiar with our flagship Tokens Studio Figma plugin? Studio can be integrated directly with the plugin. + +{% content-ref url="using-tokens-studio-for-figma.md" %} +[using-tokens-studio-for-figma.md](using-tokens-studio-for-figma.md) +{% endcontent-ref %} diff --git a/connect-studio-to-figma/using-companion-by-tokens-studio.md b/connect-studio-to-figma/using-companion-by-tokens-studio.md new file mode 100644 index 0000000..e648a6a --- /dev/null +++ b/connect-studio-to-figma/using-companion-by-tokens-studio.md @@ -0,0 +1,66 @@ +# Using Companion by Tokens Studio + +Companion by Tokens Studio is a Figma plugin which is meant purely for consumption of design tokens from Studio as variables in Figma. + +**Prerequisites**: + +* [api-keys.md](../settings/api-keys.md "mention") + + + +{% stepper %} +{% step %} +### Open a Figma design file + +This can be a new empty file to ensure that your production design files are not affected while setting up a connection between Studio and Figma. +{% endstep %} + +{% step %} +### Install/Launch the plugin + +1. Go to plugins > Companion by Tokens Studio. +2. Run the plugin. +{% endstep %} + +{% step %} +### Setting up Studio sync + +1. Return to Studio. +2. Click on Find your API key. You can also jump to the API keys page by using the keyboard shortcut cmd+k. +3. The API key is linked to the user which means that it gives access to all the Organisations and Projects that a user is part of. + +For more info read [Platform > API keys](../settings/api-keys.md). + +
+{% endstep %} + +{% step %} +### Creating your API key + +1. Click on create a new key. +2. Give your API key a name. +3. (Optional) Give your API key a description. +4. Click create. +5. Copy your API key. + +IMPORTANT: Your API key will not be visible again, so make sure to copy it. + +
+ + +{% endstep %} + +{% step %} +### Syncing to Companion by Tokens Studio + +1. Return to Figma and the plugin. +2. Enter your API key. +3. Choose the Organisation that you want to connect. +4. Choose the Project that you want to connect. +5. You are now connected to Studio and your tokens should reflect in the plugin. + +
+ +For more information on the features of Companion by Tokens Studio, see [Companion by Tokens Studio](../plugins/companion-by-tokens-studio.md). +{% endstep %} +{% endstepper %} diff --git a/connect-studio-to-figma/using-tokens-studio-for-figma.md b/connect-studio-to-figma/using-tokens-studio-for-figma.md new file mode 100644 index 0000000..85a1096 --- /dev/null +++ b/connect-studio-to-figma/using-tokens-studio-for-figma.md @@ -0,0 +1,81 @@ +# Using Tokens Studio for Figma + +**Prerequisites**: + +* [api-keys.md](../settings/api-keys.md "mention") + +{% stepper %} +{% step %} +### Open a Figma design file + +This can be an empty file to ensure that your production designs are not affected while setting up connection with Studio. +{% endstep %} + +{% step %} +### Install/Launch Tokens Studio for Figma + +1. Go to Plugins > Tokens Studio for Figma. +2. In the plugin’s interface, open a "New empty file". + +
+{% endstep %} + +{% step %} +### Adding a new sync provider + +1. Open the Settings tab on the plugin. +2. Click on Add new sync provider. +3. Select Token Studio from the list. + +
+{% endstep %} + +{% step %} +### Setting up Token Studio sync + +1. Return to Studio and go to the dashboad on the left panel. +2. Click on Find your API key. You can also jump to the API keys page by using the keyboard shortcut cmd+k. +3. The API key is linked to the user which means that it gives access to all the Organisations and Projects that a user is part of. + +For more info read [Platform > API keys](../settings/api-keys.md). + +
+{% endstep %} + +{% step %} +### Creating your API key + +1. Click on create a new key. +2. Give your API key a name. +3. (Optional) Give your API key a description. +4. Click create. +5. Copy your API key. + +IMPORTANT: Your API key will not be visible again, so make sure to copy it. + +
+{% endstep %} + +{% step %} +### Finish adding Studio sync on the plugin + +1. Return to Figma, on the plugin click already have access. +2. Give a name for the sync for easy identification. +3. Enter the API key in the Personal Access Token field. +4. Choose the Organisation that you want to connect. +5. Choose the Project that you want to connect. +6. You are now connected to Studio and your tokens should reflect in the plugin under the Tokens tab + +
+ + +{% endstep %} + +{% step %} +### Bi-directional syncing + +1. Connection with Studio and the plugin is a bi-directional sync. +2. Any changes on Studio can be pulled in the plugin by clicking on sync icon at the bottom left of the plugin. +3. Any changes on the plugin will be automatically updated on the studio. +{% endstep %} +{% endstepper %} diff --git a/connect.md b/connect.md new file mode 100644 index 0000000..1002402 --- /dev/null +++ b/connect.md @@ -0,0 +1,6 @@ +--- +hidden: true +--- + +# Connect + diff --git a/development/cli.md b/development/cli.md new file mode 100644 index 0000000..0a4fff0 --- /dev/null +++ b/development/cli.md @@ -0,0 +1,6 @@ +--- +hidden: true +--- + +# CLI + diff --git a/development/sdks.md b/development/sdks.md new file mode 100644 index 0000000..0c5d5bd --- /dev/null +++ b/development/sdks.md @@ -0,0 +1,6 @@ +--- +hidden: true +--- + +# SDKs + diff --git a/example-graphs/README.md b/example-graphs/README.md new file mode 100644 index 0000000..85ab4e4 --- /dev/null +++ b/example-graphs/README.md @@ -0,0 +1,2 @@ +# Example Graphs + diff --git a/example-graphs/base-font-size-scale.md b/example-graphs/base-font-size-scale.md new file mode 100644 index 0000000..97a9c07 --- /dev/null +++ b/example-graphs/base-font-size-scale.md @@ -0,0 +1,227 @@ +--- +hidden: true +--- + +# Creating a Font Size Scale + +### What It Does + +Creates a systematic font size scale using harmonic progression. This multi-step workflow generates mathematically-related font sizes that maintain visual harmony, then converts them into properly named design tokens with hierarchical organization. + +### Complete Workflow + +This example demonstrates a 6-step process that transforms a single base font size into a complete token system: + +1. **Base Value Setup:** Define the starting font size +2. **Harmonic Series Generation:** Create mathematically related sizes +3. **Token Creation:** Convert each size into a named token +4. **Namespace Grouping:** Add hierarchical prefixes +5. **Set Conversion:** Format for token system output +6. **Final Export:** Output structured token set + +

Base Font Scale

+ +

Table Output

+ +{% stepper %} +{% step %} +### Setting up a base font size + +
+ +Setting up a base font size which will be used as the foundation for generating the harmonic scale can be done in a number of ways using different nodes like [Constant](../graph-engine/available-nodes/generic/constant.md), [Input](../graph-engine/available-nodes/generic/input.md) etc. In this example, we will use Constant node as our starting point. + +* Drag a Constant node (Generic > Constant) into your graph. +* Important: Set the type of the input to be "Number" from the dropdown. +* Set the value input to 16 (your base font size in pixels). +* The node will output the number value ready for mathematical operations. + +> Why Number Type Matters: Setting the input type to "Number" ensures the Harmonic Series node can perform mathematical calculations on this value. Other types like "String" would prevent the harmonic progression from working correctly. + + +{% endstep %} + +{% step %} +### Generating a harmonic font scale using the base size + +
+ +Once we have the base font size as the output from our Constant node we want to generate a scale using the selected base size. To generate a harmonic font scale we will use a Harmonic Series node. This node takes a base value and generates a harmonic progression, the number of steps in the scale can be adjusted by adjusting the stepsUp and stepsDown inputs in the node. + +* Drag a Harmonic Series node (Series > Harmonic Series) into your graph. +* Connect the output from your Constant node to the input named base in the Harmonic Series node. +* Configure the remaining inputs to create a balanced font scale: +* Set `stepsDown` to 0 (no smaller sizes below the base) +* Set `stepsUp` to 5 (generate 5 additional larger sizes above the base) +* Set `notes` to 5 (use 5 intervals within each octave for finer gradation) +* Set `ratio` to 2 (use a 2:1 ratio for harmonic progression) +* Set `precision` to 0 (round to whole numbers for pixel values) + +The output will be an array of 6 font sizes: \[16, 18, 21, 24, 28, 32] from smallest to largest using harmonic relationships. + +What This Creates: The harmonic series generates font sizes that are mathematically related, creating a visually pleasing progression. Each size maintains a musical relationship to the others, ensuring your typography scale feels balanced and harmonious.\ +We now have a list of font sizes but these sizes are not yet in the design token format. In this example we want to convert these sizes into design tokens and also name our design tokens in a logical manner. +{% endstep %} + +{% step %} +### Token Creation (Array Map Subgraph) + +
+ +To create design tokens and name the font sizes in our harmonic scale we will use Array Map node. Array map is an easy way to change or do certain actions on each item in our list. An array map will take each item in the list, do the changes that we specify inside the array map (subgraph) on each item of the list and give us a new list as an output. + +* Drag an Array Map node (Array > Array Map) into your graph. +* Connect the array output of your Harmonic Series node to the array input of the Array Map node. +* To define what happens inside the Array Map, click on the "Subgraph Explorer" button. + +Inside the Array map we see an input node and an output node.The input node inside the Array Map has the following outputs: value, index, length coming in from the Harmonic Series node. In the image below, we see a font size with value 32 at index 5 and the length of the array 6. + +
+ +**Converting the font size to string format** + +

Stringify

+ +To create a design token we need to have the value as a string type, at this point the value that we have is a number type. + +* To convert a number to string we will use a [Stringify](../graph-engine/available-nodes/string/stringify.md) node (String > Stringify). +* Drag the Stringify node into the subgraph and connect the value from the input node to the value input of the Stringify node. +* This will give us an output which is a string representation of the font size. + +
+ +#### Creating systematic token names + +There are various ways that we can name the design token, for this example we will use the [Numeric Scale](../graph-engine/available-nodes/naming/numeric-scale.md) node.The Numeric Scale node allows us the option to have a multiplier, a prefix and a suffix. + +

Numeric Scale

+ +* Drag a Numeric Scale node (Naming > Numeric Scale) into your subgraph. +* Connect the index from the input node to the index input of the Numeric Scale node. +* Configure the naming pattern: +* Set `multiplier` to 1 (no scaling needed, just use sequential numbers) +* Set `prefix` to "size-" (text to add before the number) +* Leave `suffix` empty (no text needed after the number) + +This will create names like "size-1", "size-2", etc. The Numeric Scale automatically adds 1 to the index before applying the multiplier, so index 0 becomes "size-1", index 1 becomes "size-2", and so on. + +
+ +Assembling the design token + +
+ +Now we have the value and the name that we want to assign to our design token. To create a design token drag in the [Create Design Token](../graph-engine/available-nodes/design-tokens/create-design-token.md) node (Design Tokens > Create Design Token) into the subgraph. + +* Connect the output from the Numeric Scale to the input called name in the Create Design Token node. +* Connect the output from the Stringify node to the input named value in the Create Design Token node. +* Set the type as "dimension" from the dropdown in the input panel on the right, this is to create a dimension design token appropriate for font sizes. + +

Inside the subgraph explorer

+ +

Output

+ +Now we have created a Design Token. Connect the token output of the Create Design Token node to the Output node that was present in the Array Map.\ +Important: Make sure the Output node type is set to "Any" to handle token objects properly. The output of the Array Map can be seen by clicking on the original graph. + +**On the original graph:** right-click the Array Map node and click on "Force-Execute" to ensure that all the nodes inside the Array Map are executed on each item of our list from Harmonic Series node.\ +The output of the Array Map will have a list of design tokens with the naming convention that we have created. Each font size from the Harmonic Series node has been transformed to a design token with the correct naming. + +
+{% endstep %} + +{% step %} +### Adding a namespace to the Design Tokens names + +We have the design tokens with the name as size-1, size-2, etc. For this example we want to add a namespace "font.size" to our design token names (font.size.size-1). To do this we will use the Group Token Array node, this node will let us add a namespace to an array of tokens. + +* Drag the Group Token Array node (Design Tokens > Group Token Array) to the graph. +* In the input of the Group Token Array node, add "font.size" to the name input. +* Connect the value output from the Array Map to the tokens input of the Group Token Array. + +The output will be a list of design tokens that has the naming convention of "font.size.size-1", "font.size.size-2", etc. + +
+{% endstep %} + +{% step %} +### Creating a token set + +At this point our design tokens are in a list or array. We need to convert the list to a token set before getting the final output. + +
+ +* To convert to a token set drag the Array of Tokens to Set node (Design Tokens > Array of Tokens to Set). +* Connect the tokens output from the Group Token Array to the tokens input of this node. +* This will convert our design tokens from an array to a token set. + +``` +{ + "font": { + "size": { + "size-1": { + "value": "16", + "type": "dimension" + }, + "size-2": { + "value": "18", + "type": "dimension" + }, + "size-3": { + "value": "21", + "type": "dimension" + } + // ... continuing through size-6 + } + } +} +``` + + +{% endstep %} + +{% step %} +### Final Output + +To get the design tokens into the table format we need to connect it to the Output node. + +Important: In the output node set the input in the right panel as "tokenSet". + +* Connect the tokenSet output from the previous node to the input of the Output node. + +
+ + +{% endstep %} + +{% step %} +### Final Result + +The graph is now complete and it will output the design tokens. Remember to click on the "Save" button to make sure that you do not lose your graph.To view the design tokens in table format, click on the "Table" button next to the "Save" button. + +
+ +We have a token set with harmonically-related font sizes generated from a single base size which creates a mathematically consistent typography scale. We can also now connect to the Tokens Studio for Figma plugin or the Companion by Tokens Studio plugin and use these design tokens in Figma.\ + +{% endstep %} +{% endstepper %} + +\ + + + + +\ + + +\ + + + + + + + + + + diff --git a/example-graphs/creating-a-simple-color-scale.md b/example-graphs/creating-a-simple-color-scale.md new file mode 100644 index 0000000..656e8fd --- /dev/null +++ b/example-graphs/creating-a-simple-color-scale.md @@ -0,0 +1,175 @@ +# Creating a simple color scale + +### What It Does + +Creates a systematic color palette using algorithmic color scaling. This multi-step workflow generates a complete, systematic color scale using a algorithm. Starting with a base color, design tokens are created, organized, and named through it’s hierarchy. + +### Complete Workflow + +This example demonstrates a 6-step process that transforms a single base color into a complete token system: + +1. Base Color Setup: Define the starting color +2. Color Scale Generation: Create algorithmically related shades +3. Token Creation: Convert each color into a named token +4. Namespace Grouping: Add hierarchical prefixes +5. Set Conversion: Format for token system output +6. Final Export: Output structured token set + +{% stepper %} +{% step %} +### Selecting a base color for creating a scale + +
+ +Selecting a color which will be used as the base color of a generated scale can be done in a number of ways using different nodes like [Constant](../graph-engine/available-nodes/generic/constant.md), [Create Color](../graph-engine/available-nodes/color/create.md), [Input](../graph-engine/available-nodes/generic/input.md) etc. In this example, we will use Constant node as our starting point. + +* Drag a Constant node (Generic > Constant) into your graph. +* Set the type of the input to be "Color" from the dropdown. +* Set your base color value (the color that all other shades will be generated from). +* The node will output the color value ready for scale generation. + +> **Why Color Type Matters:** Setting the input type to "Color" ensures the Scale Colors node (which we will use to generate the color scale) can perform proper color calculations and transformations. +{% endstep %} + +{% step %} +### Generating a color scale using the base color + +
+ +Once we have the base color as the output from our Constant node we want to generate a scale using the selected base color. To generate a color scale we will use a [Scale Colors](../graph-engine/available-nodes/color/scale.md) node. This node takes a base color and generates a color scale, the number of steps in the scale can be adjusted by adjusting the `stepsUp` and `stepsDown` input in the node. + +* Drag a Scale Colors node into your graph. +* Connect the output from your Constant node to the input named color in the Scale colors node. +* You can adjust the number of steps in the scale, in this example we are creating a scale with 11 steps. This is done by setting the `stepsUp` to "5" and `stepsDown` to "5", so we have a scale with 5 colors above and below the base color. +* The output will be a list (array) of 11 colors from lightest to darkest using your base color.\ + + +
+ +We now have a list of colors but these colors are not yet in the design token format. In this example we want to convert these colors into design tokens and also name our design tokens in a logical manner. +{% endstep %} + +{% step %} +### Token Creation (Array Map Subgraph) + +To create design tokens from our color scale, we use the [Array Map](../graph-engine/available-nodes/array/array-map.md) node. The Array Map node allows you to perform an action on each item in a list. An Array Map node has an internal graph called a subgraph that operates on each item. + +* Drag an Array Map node into your graph. +* Connect the output of your Scale colors node to the input of the Array Map node. + +
+ +* To define what happens inside the Array Map, click on the Subgraph Explorer button. +* Inside the Array map we see a input node and an output node. +* The input node inside the Array Map has the following inputs: value, index, length coming in from the Scale Color node. In the image below, we see a color with value `#191212` at index `10` and the length of the array `11`. + +
+ +* To create a design token we need to have the value as a string type, at this point the value that we have is a color type. +* To convert a color to string we will use a [Color to string](../graph-engine/available-nodes/color/color-to-string.md) node. Drag the Color to string node into the graph and connect the value from the input node to the color node. This will give us an output which is a string. \ + + +
+ +* There are various ways that we can name the design token, for this example we will use the [Numeric scale](../graph-engine/available-nodes/naming/numeric-scale.md) node. +* The Numeric scale node allows us the option to have a multiplier, a prefix and a suffix. +* Drag a Numeric scale node into your graph. Connect the index from the input to the index of the Numeric scale node. We will add a multiplier of `100` and a prefix of `red.` to have a naming convention like `red.100` if the index is `1`. + +
+ +* Now we have the value and the name that we want to assign to our design token. To create a design token drag in the node [Create Design Token](../graph-engine/available-nodes/design-tokens/create-design-token.md) into the graph. +* Connect the output from the Numeric scale to the input called "name" in the Create Design Token node. +* Connect the output from the Color to String node to the input name "value" in the Create Design Token node. +* Set the type as "color" on the node from the input panel in the right, this is to create a color design token. + +
+ +
+ +* Now we have created a Design Token. Connect the output of the node to the output node that was present in the Array Map. + +
+ +* The output of the Array Map can be seen by clicking on the original graph. + +
+ +* On the original graph right-click the Array Map node and click on "Force Execution" to ensure that all the nodes inside the Array Map are executed on each item of our list from Scale Colors node. + +
+ +* The output of the Array Map will have a list of design tokens with the naming convention that we have created. Each color from the Scale colors node has been transformed to a design token with the correct naming. + +
+{% endstep %} + +{% step %} +### Adding a namespace to the Design Tokens names + +* We have the design tokens with the name as `red.100` . For this example we want to add a namespace "color" to our design token names (color.red.100). +* To do this we will use the [Group Token](../graph-engine/available-nodes/design-tokens/group-tokens.md) node, this node will let us add a namespace to an array of tokens. +* Drag the Group Tokens node to the graph. In the input of the Group Tokens node, add "color" to the name input. +* The output will be a list of design tokens that has the naming convention of "color.red.100". + +
+{% endstep %} + +{% step %} +### Creating a token set + +* At this point our design tokens are in a list or array. We need to convert the list to a token set before getting the final output. +* To convert to a token set drag the [Array of tokens to Set](../graph-engine/available-nodes/design-tokens/array-to-set.md) node. This will convert our design tokens from an array to a token set. + +
+ +* The output of this node gives us the design tokens in the format + +``` +{ +"color": { + "red": { + "100": { + "value": "#ede6e6", + "type" : "color", + } + ...... + } +} +} +``` + +
+ + +{% endstep %} + +{% step %} +### Final Output + +* To get the design tokens into the table format we need to connect it to the Output node. +* **Important**: In the output node set the input in the right panel as "tokenSet". +* Connect the output from the previous node to the input of the Output node. + +
+ + +{% endstep %} + +{% step %} +### Final Result + +* The graph is now complete and it will output the design tokens. Remember to click on the "Save" button to make sure that you do not lose your graph. + +
+ +* To view the design tokens in table format, click on the "Table" button next to the "Save" button. +* We have a token set with colors generated from a single color which can be used as a reference in other sets. We can also now connect to the Tokens Studio for Figma plugin or the Companion by Tokens Studio plugin and use these design tokens in Figma. + +
+ + +{% endstep %} +{% endstepper %} + + + diff --git a/example-graphs/creating-a-sizing-scale.md b/example-graphs/creating-a-sizing-scale.md new file mode 100644 index 0000000..ac8d0cc --- /dev/null +++ b/example-graphs/creating-a-sizing-scale.md @@ -0,0 +1,160 @@ +--- +hidden: true +--- + +# Creating a Sizing Scale + +### What It Does + +Creates a systematic sizing token system using linear progression. This multi-step workflow generates mathematically-related size values for component dimensions (width, height, containers), then converts them into properly named design tokens with hierarchical organization. + +### Complete Workflow + +This example demonstrates a 6-step process that transforms a single base size value into a complete token system: + +1. **Base Size Setup**: Define the starting size value +2. **Linear Space Generation**: Create evenly distributed size values +3. **Token Creation**: Convert each size value into a named token +4. **Namespace Grouping**: Add hierarchical prefixes +5. **Set Conversion**: Format for token system output +6. **Final Export**: Output structured token set + +### 1. Setting up the base size value + +Creating a sizing scale starts with defining a base size unit that will determine the range of your sizing system. In this example, we'll use a 16px base unit to create a practical sizing scale for components. + +**\[IMAGE: Screenshot showing Constant node configured for sizing]** + +**Base Size Configuration:** + +* Drag a **Constant** node (`Generic > Constant`) into your graph +* Set the **type** of the input to be **"Number"** from the dropdown +* Set your base size value to `16` (this will be your starting point) +* The node will output the numeric value ready for linear space generation + +**Why Number Type**: Setting the input type to "Number" ensures the Linear Space node can perform proper mathematical calculations for even distribution. + +### 2. Generating evenly distributed size values + +Once we have the base size value, we need to generate a series of evenly distributed size values. The Linear Space node creates a mathematical progression from start to end with specified intervals. + +**\[IMAGE: Screenshot showing Linear Space node connected to Constant node]** + +**Linear Space Configuration:** + +* Drag a **Linear Space** node into your graph +* Connect the output from your **Constant** node to the `start` input +* Configure the sizing parameters: + * `start`: Connected from Constant (16) + * `stop`: Set to `512` (your maximum size value for large components) + * `length`: Set to `10` (number of size steps you want) + * `precision`: Set to `0` (whole numbers only) +* The output will be an array of 10 evenly distributed size values: `[16, 71, 127, 182, 238, 293, 349, 404, 460, 512]` + +**Linear Distribution**: The Linear Space node mathematically calculates even intervals between your start and stop values, ensuring consistent sizing relationships. + +### 3. Token Creation (Array Map Subgraph) + +We now have an array of size values that need to be converted into design tokens with systematic naming. The Array Map processes each size value through a subgraph that creates properly formatted tokens. + +**\[IMAGE: Screenshot showing Array Map node connected to Linear Space]** + +**Array Map Setup:** + +* Drag an **Array Map** node and connect the Linear Space output to its `array` input +* Double-click the Array Map to enter the **Subgraph Explorer** + +**\[IMAGE: Screenshot showing the complete Array Map subgraph for sizing tokens]** + +**Subgraph Configuration:** + +**Input Node:** + +* Provides `value` (current size number), `index` (position), and `length` (total count) + +**Stringify Node:** + +* Connect `value` from Input node to `value` input +* Converts the numeric size value to string format (e.g., `16` becomes `"16"`) + +**Numeric Scale Node:** + +* Connect `index` from Input node to `index` input +* Set `multiplier` to `1` (sequential numbering) +* Leave `prefix` and `suffix` empty (just numbers: "1", "2", "3", etc.) + +**Create Design Token Node:** + +* Connect `name` from Numeric Scale output +* Connect `value` from Stringify output +* Set `type` to `"dimension"` (appropriate for size values) +* Leave `description` empty + +**Output Node:** + +* Connect from Create Design Token output to `value` input +* Set type to `"any"` + +**Result**: Creates tokens with names like `1: "16"`, `2: "71"`, `3: "127"`, etc. + +### 4. Adding namespace organization + +The tokens from the Array Map need to be organized under a size namespace to create a hierarchical token structure. + +**\[IMAGE: Screenshot showing Group Token Array node]** + +**Group Token Array Configuration:** + +* Drag a **Group Token Array** node into your graph +* Connect the `value` output from Array Map to the `tokens` input +* Set the `name` input to `"size"` + +**What This Does**: Adds the "size." prefix to all token names, transforming `1`, `2`, `3`... into `size.1`, `size.2`, `size.3`... + +### 5. Converting to token set format + +**\[IMAGE: Screenshot showing Array of Tokens to Set node]** + +**Token Set Conversion:** + +* Drag an **Array of Tokens to Set** node +* Connect the tokens output from Group Token Array to the `tokens` input +* This formats the token array into the proper token set structure required for design systems + +### 6. Final Output + +**\[IMAGE: Screenshot showing Output node and final sizing table result]** + +**Output Configuration:** + +* Drag an **Output** node and connect the token set to it +* The final result displays your complete sizing scale + +**Final Result:**\ +The completed workflow generates a systematic sizing token set: + +```json +{ + "size.1": "16", + "size.2": "71", + "size.3": "127", + "size.4": "182", + "size.5": "238", + "size.6": "293", + "size.7": "349", + "size.8": "404", + "size.9": "460", + "size.10": "512" +} +``` + +**\[IMAGE: Screenshot showing the complete final graph with all connections]** + +**Usage Examples:** + +* `size.1` (16px) - Small icons, avatars +* `size.3` (127px) - Medium buttons, input fields +* `size.6` (293px) - Card components, image containers +* `size.10` (512px) - Large hero sections, full-width components + +**Customization**: You can adjust the `stop` value in Linear Space to create larger or smaller maximum sizes, or change the `length` to generate more or fewer size steps. diff --git a/example-graphs/creating-a-spacing-scale.md b/example-graphs/creating-a-spacing-scale.md new file mode 100644 index 0000000..143165e --- /dev/null +++ b/example-graphs/creating-a-spacing-scale.md @@ -0,0 +1,158 @@ +--- +hidden: true +--- + +# Creating a Spacing Scale + +What It Does + +Creates a systematic spacing token system using linear progression. This multi-step workflow generates mathematically-related spacing values that maintain consistent visual rhythm, then converts them into properly named design tokens with hierarchical organization. + +### Complete Workflow + +This example demonstrates a 6-step process that transforms a single base spacing value into a complete token system: + +1. **Base Spacing Setup**: Define the starting spacing value +2. **Linear Space Generation**: Create evenly distributed spacing values +3. **Token Creation**: Convert each spacing value into a named token +4. **Namespace Grouping**: Add hierarchical prefixes +5. **Set Conversion**: Format for token system output +6. **Final Export**: Output structured token set + +### 1. Setting up the base spacing value + +Creating a spacing scale starts with defining a base spacing unit that will determine the range of your spacing system. In this example, we'll use a 4px base unit to create a practical spacing scale. + +**\[IMAGE: Screenshot showing Constant node configured for spacing]** + +**Base Spacing Configuration:** + +* Drag a **Constant** node (`Generic > Constant`) into your graph +* Set the **type** of the input to be **"Number"** from the dropdown +* Set your base spacing value to `4` (this will be your starting point) +* The node will output the numeric value ready for linear space generation + +**Why Number Type**: Setting the input type to "Number" ensures the Linear Space node can perform proper mathematical calculations for even distribution. + +### 2. Generating evenly distributed spacing values + +Once we have the base spacing value, we need to generate a series of evenly distributed spacing values. The Linear Space node creates a mathematical progression from start to end with specified intervals. + +**\[IMAGE: Screenshot showing Linear Space node connected to Constant node]** + +**Linear Space Configuration:** + +* Drag a **Linear Space** node into your graph +* Connect the output from your **Constant** node to the `start` input +* Configure the spacing parameters: + * `start`: Connected from Constant (4) + * `stop`: Set to `64` (your maximum spacing value) + * `length`: Set to `8` (number of spacing steps you want) + * `precision`: Set to `0` (whole numbers only) +* The output will be an array of 8 evenly distributed spacing values: `[4, 13, 21, 30, 38, 47, 55, 64]` + +**Linear Distribution**: The Linear Space node mathematically calculates even intervals between your start and stop values, ensuring consistent spacing relationships. + +### 3. Token Creation (Array Map Subgraph) + +We now have an array of spacing values that need to be converted into design tokens with systematic naming. The Array Map processes each spacing value through a subgraph that creates properly formatted tokens. + +**\[IMAGE: Screenshot showing Array Map node connected to Linear Space]** + +**Array Map Setup:** + +* Drag an **Array Map** node and connect the Linear Space output to its `array` input +* Double-click the Array Map to enter the **Subgraph Explorer** + +**\[IMAGE: Screenshot showing the complete Array Map subgraph for spacing tokens]** + +**Subgraph Configuration:** + +**Input Node:** + +* Provides `value` (current spacing number), `index` (position), and `length` (total count) + +**Stringify Node:** + +* Connect `value` from Input node to `value` input +* Converts the numeric spacing value to string format (e.g., `4` becomes `"4"`) + +**Numeric Scale Node:** + +* Connect `index` from Input node to `index` input +* Set `multiplier` to `1` (sequential numbering) +* Leave `prefix` and `suffix` empty (just numbers: "1", "2", "3", etc.) + +**Create Design Token Node:** + +* Connect `name` from Numeric Scale output +* Connect `value` from Stringify output +* Set `type` to `"dimension"` (appropriate for spacing values) +* Leave `description` empty + +**Output Node:** + +* Connect from Create Design Token output to `value` input +* Set type to `"any"` + +**Result**: Creates tokens with names like `1: "4"`, `2: "13"`, `3: "21"`, etc. + +### 4. Adding namespace organization + +The tokens from the Array Map need to be organized under a spacing namespace to create a hierarchical token structure. + +**\[IMAGE: Screenshot showing Group Token Array node]** + +**Group Token Array Configuration:** + +* Drag a **Group Token Array** node into your graph +* Connect the `value` output from Array Map to the `tokens` input +* Set the `name` input to `"spacing"` + +**What This Does**: Adds the "spacing." prefix to all token names, transforming `1`, `2`, `3`... into `spacing.1`, `spacing.2`, `spacing.3`... + +### 5. Converting to token set format + +**\[IMAGE: Screenshot showing Array of Tokens to Set node]** + +**Token Set Conversion:** + +* Drag an **Array of Tokens to Set** node +* Connect the tokens output from Group Token Array to the `tokens` input +* This formats the token array into the proper token set structure required for design systems + +### 6. Final Output + +**\[IMAGE: Screenshot showing Output node and final spacing table result]** + +**Output Configuration:** + +* Drag an **Output** node and connect the token set to it +* The final result displays your complete spacing scale + +**Final Result:**\ +The completed workflow generates a systematic spacing token set: + +```json +{ + "spacing.1": "4", + "spacing.2": "13", + "spacing.3": "21", + "spacing.4": "30", + "spacing.5": "38", + "spacing.6": "47", + "spacing.7": "55", + "spacing.8": "64" +} +``` + +**\[IMAGE: Screenshot showing the complete final graph with all connections]** + +**Usage Examples:** + +* `spacing.1` (4px) - Fine adjustments, button padding +* `spacing.3` (21px) - Component margins +* `spacing.5` (38px) - Section spacing +* `spacing.8` (64px) - Large layout gaps + +**Customization**: You can adjust the `stop` value in Linear Space to create larger or smaller maximum spacing, or change the `length` to generate more or fewer spacing steps. diff --git a/example-graphs/creating-multiple-color-scales.md b/example-graphs/creating-multiple-color-scales.md new file mode 100644 index 0000000..6e5f5d0 --- /dev/null +++ b/example-graphs/creating-multiple-color-scales.md @@ -0,0 +1,174 @@ +--- +hidden: true +--- + +# Creating Multiple Color Scales + +What It Does + +Creates multiple systematic color palettes in a single workflow using parallel color scaling. This multi-step process generates complete color scales from different base colors, then converts each shade into properly named design tokens with hierarchical organization. + +### Complete Workflow + +This example demonstrates a 6-step process that transforms multiple base colors into a unified token system: + +1. **Multiple Base Colors Setup**: Define starting colors for each palette +2. **Parallel Scale Generation**: Create algorithmically related shades for each color +3. **Individual Token Creation**: Convert each color into named tokens +4. **Array Combination**: Merge all color families into one array +5. **Set Conversion**: Format for token system output +6. **Final Export**: Output comprehensive token set + +### 1. Setting up multiple base colors + +Creating multiple color scales requires defining separate base colors that will each generate their own color family. In this example, we'll create both blue and red color scales using separate Constant nodes. + +**Blue Base Color Setup:** + +
+ +* Drag a **Constant** node (`Generic > Constant`) into your graph +* Set the **type** of the input to be **"Color"** from the dropdown +* Set your blue base color value (the color that all blue shades will be generated from) +* The node will output the blue color value ready for scale generation + +**Red Base Color Setup:** + +
+ +* Drag a second **Constant** node (`Generic > Constant`) into your graph +* Set the **type** of the input to be **"Color"** from the dropdown +* Set your red base color value (the color that all red shades will be generated from) +* The node will output the red color value ready for scale generation + +**Why Multiple Base Colors**: Each color family needs its own starting point to generate distinct but systematically related color scales. + +### 2. Generating parallel color scales + +Once we have both base colors, we need to generate separate color scales for each. This requires using multiple Scale Colors nodes working in parallel. + +**Blue Scale Generation:** + +
+ +* Drag a **Scale Colors** node into your graph +* Connect the output from your **blue Constant** node to the `color` input +* Configure the scale parameters: + * Set `stepsUp` to `5` (5 lighter shades above base) + * Set `stepsDown` to `5` (5 darker shades below base) +* The output will be an array of 11 blue colors from lightest to darkest + +**Red Scale Generation:** + +
+ +* Drag a second **Scale Colors** node into your graph +* Connect the output from your **red Constant** node to the `color` input +* Configure with identical parameters: + * Set `stepsUp` to `5` (5 lighter shades above base) + * Set `stepsDown` to `5` (5 darker shades below base) +* The output will be an array of 11 red colors from lightest to darkest + +**Parallel Processing**: Both color scales are generated simultaneously, maintaining consistency in the number of steps while producing distinct color families. + +### 3. Token Creation (Multiple Array Map Subgraphs) + +We now have two separate arrays of colors that need to be converted into design tokens. Each color family requires its own Array Map with a subgraph configured for that specific color name. + + + +**Blue Token Creation:** + +* Drag an **Array Map** node and connect the blue Scale Colors output to its `array` input +* Double-click the Array Map to enter the **Subgraph Explorer** + +**\[IMAGE: Screenshot showing the blue Array Map subgraph with all internal nodes]** + +Configure the blue subgraph with these nodes: + +* **Input** node (provides `value`, `index`, `length`) +* **Color to string** node (connect `value` from Input) +* **Numeric Scale** node (connect `index` from Input, set `multiplier` to `100`, `prefix` to `"blue."`) +* **Create Design Token** node (connect name from Numeric Scale, value from Color to string, set type to `"color"`) +* **Output** node (connect from Create Design Token, set type to `"any"`) + +**Red Token Creation:** + +* Drag a second **Array Map** node and connect the red Scale Colors output to its `array` input +* Configure an identical subgraph but change the **Numeric Scale** `prefix` to `"red."` + +**\[IMAGE: Screenshot showing the red Array Map subgraph with "red." prefix configuration]** + +**Result**: Each Array Map produces tokens like `blue.100`, `blue.200`... and `red.100`, `red.200`... respectively. + +### 4. Combining multiple token arrays + +After creating tokens for each color family, we need to combine them into a single unified array for final processing. + +**\[IMAGE: Screenshot showing Arrify and Array flatten nodes combining the two token arrays]** + +**Merging Arrays:** + +* Drag an **Arrify** node into your graph +* Connect the output from the **blue Array Map** to one input +* Connect the output from the **red Array Map** to another input +* Drag an **Array flatten** node and connect the Arrify output to it + +**What This Does**: The Arrify node combines both token arrays into a nested structure, then Array flatten merges them into one continuous array containing all blue and red tokens. + +### 5. Final token set formatting + +**\[IMAGE: Screenshot showing Array of Tokens to Set node connected to the flattened array]** + +**Converting to Token Set:** + +* Drag an **Array of Tokens to Set** node +* Connect the flattened array output to the `tokens` input +* This converts the array format into a proper token set structure + +### 6. Final Output + +**\[IMAGE: Screenshot showing the Output node and the final table result]** + +**Output Configuration:** + +* Drag an **Output** node and connect the token set to it +* The final result will be a comprehensive token set containing both color families + +**Final Result:**\ +The completed workflow generates a systematic token set with: + +* `blue.100` through `blue.1100` (11 blue tokens) +* `red.100` through `red.1100` (11 red tokens) +* **Total: 22 design tokens** in one unified workflow + +**\[IMAGE: Screenshot showing the complete final graph with all connections]** + +```json +{ + "blue.100": "#e5e7eb", + "blue.200": "#c5cdde", + "blue.300": "#9fb8d3", + "blue.400": "#7391c8", + "blue.500": "#4169bd", + "blue.600": "#1d4ed8", + "blue.700": "#1e40af", + "blue.800": "#1e3a8a", + "blue.900": "#1e3a8a", + "blue.1000": "#312e81", + "blue.1100": "#1e1b4b", + "red.100": "#fee2e2", + "red.200": "#fecaca", + "red.300": "#fca5a5", + "red.400": "#f87171", + "red.500": "#ef4444", + "red.600": "#dc2626", + "red.700": "#b91c1c", + "red.800": "#991b1b", + "red.900": "#7f1d1d", + "red.1000": "#651e1e", + "red.1100": "#4a1e1e" +} +``` + +**Scalability**: This workflow can easily be extended by adding more Constant→Scale Colors→Array Map chains for additional color families like green, purple, yellow, etc. diff --git a/getting-ready-for-production.md b/getting-ready-for-production.md new file mode 100644 index 0000000..c20c9a3 --- /dev/null +++ b/getting-ready-for-production.md @@ -0,0 +1,6 @@ +--- +hidden: true +--- + +# Getting ready for production + diff --git a/getting-started/getting-started.md b/getting-started/getting-started.md new file mode 100644 index 0000000..3d3cc26 --- /dev/null +++ b/getting-started/getting-started.md @@ -0,0 +1,39 @@ +# Creating an account + +{% hint style="info" %} +If you're already signed up you can skip ahead. +{% endhint %} + +{% stepper %} +{% step %} +### Sign up + +We're rolling out access to Studio. You can sign up with your email address at [https://app.tokens.studio/auth/register](https://app.tokens.studio/auth/register). + +You can use either your email address, or use your Gmail account. +{% endstep %} + +{% step %} +### Confirming your account + +Once signed up, you'll receive an confirmation email in your inbox. + +{% hint style="info" %} + If you don’t see it in your inbox, please check your spam folder. +{% endhint %} + +Look for an email from us with the subject line “_Please confirm your registration_”. + +Click the **Confirm** button or copy and paste the confirmation link into your browser. +{% endstep %} + +{% step %} +### Activating your Account + +Once your email has been verified, you will be redirected to the Tokens Studio waitlist page. + +In the onboarding email sent to you, there will be an activation code that can be used the "Redeem" field to get access to Studio. + +

Tokens Studio Waitlist Page

+{% endstep %} +{% endstepper %} diff --git a/getting-started/setting-up-studio/README.md b/getting-started/setting-up-studio/README.md new file mode 100644 index 0000000..a33d3af --- /dev/null +++ b/getting-started/setting-up-studio/README.md @@ -0,0 +1,60 @@ +# Setting up Studio + +{% hint style="info" %} +If you haven't signed up or set up your account with Studio, you can read this guide on [Getting Started](../getting-started.md) +{% endhint %} + +{% stepper %} +{% step %} +### Creating your Organization + +Once your account is set up and you've logged in successfully, you'll be asked to create an organization on your first sign in. + +1. Give your organization a name. +2. _(Optional)_ Upload an Icon for your organization. +3. Click **Create**. + +

Create new organization form.

+{% endstep %} + +{% step %} +### Creating your first Project + +The next step is to create a project. You will be prompted to create a new project. + +1. Name your project (e.g., “Test Design System” or “My Brand Tokens”). +2. (Optional) Choose an Icon for the project. + +#### Start with a template (Optional) + +1. Tokens Studio offers starter templates for popular frameworks like Tailwind CSS, Radix UI, Chakra UI, and Open Color. +2. If you prefer a blank setup, leave the template option empty. +3. Click **Create**. + +Once your project is created, you’ll be taken to the **Project Dashboard**, where you can start adding or uploading tokens. + +

Selecting a template for starter tokens.

+{% endstep %} + +{% step %} +### Setting up your tokens + +{% hint style="info" %} +Already set up your tokens in the Tokens Studio for Figma plugin? You can follow the steps in section [Import from Tokens Studio for Figma](import-from-tokens-studio-for-figma.md). + +Using Figma variables? follow the steps in the section [Import from Figma variables](import-from-figma-variables.md). +{% endhint %} + +1. Click on the button **Create your first token set.** +2. Name your token set (e.g., "global", "core", "primitives"). +3. _(Optional)_ Give your token set a description. +4. Select the type of token set you want to create: Static set or [Graph based set](broken-reference). +5. Click **create**. + +
+{% endstep %} +{% endstepper %} + +### Watch the video walkthrough + +{% embed url="https://www.youtube.com/watch?v=uz09y3yo-yg" %} diff --git a/getting-started/setting-up-studio/import-from-figma-variables.md b/getting-started/setting-up-studio/import-from-figma-variables.md new file mode 100644 index 0000000..5da0169 --- /dev/null +++ b/getting-started/setting-up-studio/import-from-figma-variables.md @@ -0,0 +1,84 @@ +# Import from Figma variables + +If you already have design tokens or variables in Figma, you can easily import them into Studio. + +{% stepper %} +{% step %} +### Open Figma and your design file + +In Figma, ensure you have set up Figma Variables that you want to migrate. +{% endstep %} + +{% step %} +### Launch the Tokens Studio for Figma Plugin + +1. Go to Plugins > Tokens Studio for Figma. +2. In the plugin’s interface, click **New empty file**. + +
+{% endstep %} + +{% step %} +### Import Figma Variables + +1. In the plugin, click the **Styles & Variables** dropdown and select **Import Variables.** +2. Answer questions about how you want to format your token values. For example, you can choose whether to convert numbers to dimensions, use rem values, etc. +3. Click **Import**. + +
+ +{% hint style="info" %} +_Tip: You might see collections such as “foundation” or “light” and “dark” in Figma, which will become token sets groups and the modes will become token sets in Studio. The Figma collections will be mapped as Theme Groups and modes as Theme Options in Studio._ +{% endhint %} +{% endstep %} + +{% step %} +### Export your design tokens + +1. In the bottom-left of the plugin, click **Export file/folder**. +2. Choose **Multiple files** and then **Export**. +3. This will download a .zip file containing your tokens in JSON format. You can save this anywhere locally on your system. + +
+{% endstep %} + +{% step %} +### Upload Tokens to Studio + +1. Return to the Tokens Studio app in your browser. +2. Navigate to your Project Dashboard. +3. Using the zip file downloaded above, click the **Upload tokens** or drag-and-drop the zip file into the upload area. + +
+{% endstep %} + +{% step %} +### Reviewing imported tokens and themes + +1. Studio will parse the .zip file and create matching sets (e.g., foundation, light, dark). +2. Verify that your sets and tokens appear correctly in the left-hand panel. +3. Go to the Themes module on the left panel. +4. Verify that your theme groups and theme options appear correctly. + +
+{% endstep %} + +{% step %} +### Organizing and Theming Your Tokens + +Studio supports theming through the concept of Theme Groups and Theme Options. This allows you to toggle between sets like light and dark, or any other variant (for more information on Themes check out [Features > Themes](../../platform/themes/)). + +The Figma collections will be created as Theme Groups and modes will be created as Theme Options. + +1. Open the Theme Panel\ + • In your project, click the Themes tab. +2. Verify that your collections have been created as Theme Groups (e.g., Color Mode, breakpoint) +3. Verify that the modes in your collections have been created as Theme Options under the corresponding Theme Group (e.g., Light and Dark in Color Mode) +4. Click on the Theme Option on the left panel to see the sets that are enabled for the Theme Option. +5. Open the Tokens tab on the left panel. \ + • At the bottom of the left-hand panel, you can select which theme is active (e.g., Default + Light or Default + Dark).\ + • This will update the token values displayed in the UI. + +
+{% endstep %} +{% endstepper %} diff --git a/getting-started/setting-up-studio/import-from-tokens-studio-for-figma.md b/getting-started/setting-up-studio/import-from-tokens-studio-for-figma.md new file mode 100644 index 0000000..4beff07 --- /dev/null +++ b/getting-started/setting-up-studio/import-from-tokens-studio-for-figma.md @@ -0,0 +1,68 @@ +# Import from Tokens Studio for Figma + +If you already have design tokens set up in Tokens Studio for Figma plugin, you can easily import them into Studio. Below is an example workflow using the Tokens Studio for Figma plugin. + + + +{% stepper %} +{% step %} +### Open Figma and your design file +{% endstep %} + +{% step %} +### Launch the Tokens Studio for Figma plugin +{% endstep %} + +{% step %} +### Export your design tokens + +1. In the bottom-left of the plugin, click **Export file/folder**. +2. Choose **Multiple files** and then **Export**. +3. This will download a .zip file containing your tokens in JSON format. You can save this anywhere locally on your system. + +
+{% endstep %} + +{% step %} +### Upload Tokens to Studio + +1. Return to the Tokens Studio app in your browser. +2. Navigate to your Project Dashboard. +3. Using the zip file downloaded above, click the **Upload tokens** or drag-and-drop the zip file into the upload area. + +
+{% endstep %} + +{% step %} +### Reviewing imported tokens and themes + +1. Studio will parse the .zip file and create matching sets (e.g., foundation, light, dark). +2. Verify that your sets and tokens appear correctly in the left-hand panel. +3. Go to the Themes module on the left panel. +4. Verify that your theme groups and theme options appear correctly. + +
+ + +{% endstep %} + +{% step %} +### Organizing and Theming Your Tokens + +Studio supports theming through the concept of Theme Groups and Theme Options. This allows you to toggle between sets like light and dark, or any other variant (for more information on Themes check out [Features > Themes](../../platform/themes/)). + +The Figma collections will be created as Theme Groups and modes will be created as Theme Options. + +1. Open the Theme Panel\ + • In your project, click the Themes tab. +2. Verify that your collections have been created as Theme Groups (e.g., Color Mode, breakpoint) +3. Verify that the modes in your collections have been created as Theme Options under the corresponding Theme Group (e.g., Light and Dark in Color Mode) +4. Click on the Theme Option on the left panel to see the sets that are enabled for the Theme Option. +5. Open the Tokens tab on the left panel. \ + • At the bottom of the left-hand panel, you can select which theme is active (e.g., Default + Light or Default + Dark).\ + • This will update the token values displayed in the UI. + +
+{% endstep %} +{% endstepper %} + diff --git a/graph-engine/available-nodes/README.md b/graph-engine/available-nodes/README.md new file mode 100644 index 0000000..6b3dccd --- /dev/null +++ b/graph-engine/available-nodes/README.md @@ -0,0 +1,2 @@ +# Available Nodes + diff --git a/graph-engine/available-nodes/accessibility/README.md b/graph-engine/available-nodes/accessibility/README.md new file mode 100644 index 0000000..fd5de60 --- /dev/null +++ b/graph-engine/available-nodes/accessibility/README.md @@ -0,0 +1,9 @@ +# Accessibility + +Nodes for testing and adjusting design tokens for accessibility. Includes tools to simulate color blindness and calculate contrast ratios, ensuring compliance with standards like WCAG. + + + +{% content-ref url="color-blindness.md" %} +[color-blindness.md](color-blindness.md) +{% endcontent-ref %} diff --git a/graph-engine/available-nodes/accessibility/color-blindness.md b/graph-engine/available-nodes/accessibility/color-blindness.md new file mode 100644 index 0000000..9ff8239 --- /dev/null +++ b/graph-engine/available-nodes/accessibility/color-blindness.md @@ -0,0 +1,42 @@ +# Color Blindness + +### What It Does + +Simulates how colors appear to people with different types of color blindness. This helps you check if your design token color palettes remain accessible and distinguishable for users with color vision deficiencies. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ----------------------------------------- | ----- | -------- | +| color | The color to simulate color blindness for | Color | No | +| type | The type of color blindness to simulate | Text | No | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------------------------------------------------- | ----- | +| value | The color as it would appear to someone with the specified color blindness | Color | + +![Color Blindness Example](<../../../.gitbook/assets/Screenshot 2025-04-09 at 12.58.20 PM.png>) + +### How to Use It + +1. Drag the Color Blindness node into your graph. +2. Connect a brand color token (like `#0066CC`) to the "color" input. +3. Select a color blindness type (e.g., "protanopia" for red-blind vision) from the dropdown. +4. The output will show how that color token appears to someone with that type of color vision deficiency. +5. Connect this to a `Contrast` node with your background color to verify accessibility standards are met across all vision types. + +### See Also + +* **Contrast**: Tests the accessibility of text against background colors for WCAG compliance (see `color/contrast.md`). +* **Color Scale**: Generates accessible color scales that maintain distinctiveness across vision types (see [`color/scale`](../vector2/scale.md)). +* **Deconstruct**: Breaks down colors into components to modify after testing for color blindness (see [`color/deconstruct`](../color/deconstruct.md)). +* **Blend**: Helps adjust colors that have poor visibility in certain color blindness modes (see `color/blend`). + +### Use Cases + +* **Design System Validation**: Test your entire color token system to ensure sufficient contrast and distinguishability across all color blindness types. +* **Accessible Component Tokens**: Verify that your UI component color tokens (buttons, alerts, form states) remain functionally distinct for all users. +* **Data Visualization Token System**: Develop a specialized set of color tokens for charts and graphs that maintain information hierarchy for users with deuteranopia (the most common type). +* **Dark/Light Theme Testing**: Verify that your theme token transitions maintain accessibility across vision types. diff --git a/graph-engine/available-nodes/array/README.md b/graph-engine/available-nodes/array/README.md new file mode 100644 index 0000000..876aafd --- /dev/null +++ b/graph-engine/available-nodes/array/README.md @@ -0,0 +1,65 @@ +# Array + +Nodes for manipulating lists. Filter items, transform values, or combine arrays—handles tasks like processing color sets, token collections, or any grouped data efficiently. + + + +{% content-ref url="array-filter.md" %} +[array-filter.md](array-filter.md) +{% endcontent-ref %} + +{% content-ref url="array-find.md" %} +[array-find.md](array-find.md) +{% endcontent-ref %} + +{% content-ref url="arrify.md" %} +[arrify.md](arrify.md) +{% endcontent-ref %} + +{% content-ref url="concat.md" %} +[concat.md](concat.md) +{% endcontent-ref %} + +{% content-ref url="flatten.md" %} +[flatten.md](flatten.md) +{% endcontent-ref %} + +{% content-ref url="index-array.md" %} +[index-array.md](index-array.md) +{% endcontent-ref %} + +{% content-ref url="inject-item.md" %} +[inject-item.md](inject-item.md) +{% endcontent-ref %} + +{% content-ref url="array-length.md" %} +[array-length.md](array-length.md) +{% endcontent-ref %} + +{% content-ref url="push.md" %} +[push.md](push.md) +{% endcontent-ref %} + +{% content-ref url="remove.md" %} +[remove.md](remove.md) +{% endcontent-ref %} + +{% content-ref url="replace-item.md" %} +[replace-item.md](replace-item.md) +{% endcontent-ref %} + +{% content-ref url="reverse-array.md" %} +[reverse-array.md](reverse-array.md) +{% endcontent-ref %} + +{% content-ref url="slice-array.md" %} +[slice-array.md](slice-array.md) +{% endcontent-ref %} + +{% content-ref url="sort-array.md" %} +[sort-array.md](sort-array.md) +{% endcontent-ref %} + +{% content-ref url="array-map.md" %} +[array-map.md](array-map.md) +{% endcontent-ref %} diff --git a/graph-engine/available-nodes/array/array-filter.md b/graph-engine/available-nodes/array/array-filter.md new file mode 100644 index 0000000..af658ed --- /dev/null +++ b/graph-engine/available-nodes/array/array-filter.md @@ -0,0 +1,66 @@ +# Array Filter + +### What It Does + +Creates a sub-graph that evaluates each item in an array, returning a new array containing only the items where your condition evaluates to true. You define the filtering condition in the inner graph using a custom combination of nodes. + +### Inputs + +| Name | Description | Type | Required | +| ---------------- | ------------------------------------------------------ | ------ | -------- | +| array | The array to filter | List | Yes | +| _Dynamic inputs_ | Any inputs you add to the inner graph will appear here | Varies | No | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------------------------------------------- | ---- | +| value | A new array containing only the items that match your condition | List | + +### Inner Graph Special Inputs + +| Name | Description | Type | +| ------ | -------------------------------------- | ------ | +| value | The current array item being evaluated | Any | +| index | The current position in the array | Number | +| length | The total length of the array | Number | + +### Inner Graph Required Output + +| Name | Description | Type | +| ------- | --------------------------------------------------------- | ------ | +| matches | Whether the current item should be included in the result | Yes/No | + +![Array Filter Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.07.34 PM.png>) + +### How to Use It + +1. Drag the Array Filter node into your graph. +2. Connect your array to the "array" input. In this example the input is a Harmonic series outputting an array \[16, 18, 21. 24, 28, 32]. +3. Click on the Subgraph Explorer button on the Array filer node to open and edit the inner graph. +4. In the inner graph, build your condition using the special "value" input. In this case a simple Compare node to check if the value is < 32. The output is a boolean. +5. Connect your condition's result to the "matches" input on the Output node. The "matches" accepts a boolean. +6. Return to the main graph, where you can use the filtered array output. The output is an array of two values \[16, 18] which is matching the condition in the subgraph. + +
+ +
+ +### Tips + +* The inner graph runs once for each item in the array. +* You can add your own inputs to the inner graph's Input node, which will appear as inputs on the main Array Filter node. +* For complex filtering, you can build any logic you need in the inner graph. +* If no items match your condition, the output will be an empty array. + +### See Also + +* [**Array Find**](array-find.md): Similar to Array Filter, but returns only the first matching item instead of all matching items. +* [**Find First Match**](../search/find-first-match.md): For simple comparison-based searching (greater than, less than). +* [**Linear Search**](../search/linear-search.md): For exact-match searching of a single item. + +### Use Cases + +* **Data Filtering**: Remove unwanted items from datasets based on custom criteria. +* **Collection Refinement**: Keep only items that meet specific business rules or thresholds. +* **Conditional Processing**: Process only the subset of items that require attention. diff --git a/graph-engine/available-nodes/array/array-find.md b/graph-engine/available-nodes/array/array-find.md new file mode 100644 index 0000000..fa62412 --- /dev/null +++ b/graph-engine/available-nodes/array/array-find.md @@ -0,0 +1,67 @@ +# Array Find + +What It Does + +Creates a sub-graph that evaluates each item in an array, returning the first item where your condition evaluates to true. You define the matching condition in the inner graph using a custom combination of nodes. + +### Inputs + +| Name | Description | Type | Required | +| ---------------- | ------------------------------------------------------ | ------ | -------- | +| array | The array to search through | List | Yes | +| _Dynamic inputs_ | Any inputs you add to the inner graph will appear here | Varies | No | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------------------------------------------------------- | ------ | +| value | The first matching item found (undefined if none found) | Any | +| index | The position of the matching item in the array (-1 if none found) | Number | +| found | Whether a matching item was found | Yes/No | + +### Inner Graph Special Inputs + +| Name | Description | Type | +| ------ | -------------------------------------- | ------ | +| value | The current array item being evaluated | Any | +| index | The current position in the array | Number | +| length | The total length of the array | Number | + +### Inner Graph Required Output + +| Name | Description | Type | +| ------- | ----------------------------------------------- | ------ | +| matches | Whether the current item matches your condition | Yes/No | + +![Array Find Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.10.02 PM.png>) + +### How to Use It + +1. Drag the Array Find node into your graph. +2. Connect your array to the "array" input. In this example the input is a Geometric Series which outputs an array `[16, 24, 36, 54, 81, 122]`. +3. Click on the Subgraph Explorer button on the node to open and edit the inner graph. +4. In the inner graph, build your condition using the special "value" input. In this case a Compare node to check if the "value" is less than `50`. +5. Connect your condition's result to the "matches" input on the Output node. +6. Return to the main graph, where you can use the matched value, index, and found outputs. It outputs the first value that matches the condition. In this case the output is `16`. + +
+ +

Subgraph explorer

+ +### Tips + +* The inner graph runs once for each item in the array until a match is found. +* You can add your own inputs to the inner graph's Input node, which will appear as inputs on the main Array Find node. +* For complex comparisons, you can build any logic you need in the inner graph. + +### See Also + +* [**Array Filter**](array-filter.md): Similar to Array Find, but returns all matching items instead of just the first. +* [**Find First Match**](../search/find-first-match.md): For simple comparison-based searching (greater than, less than). +* [**Linear Search**](../search/linear-search.md): For exact-match searching. + +### Use Cases + +* **Finding Data by Complex Criteria**: Locate items based on multiple conditions or calculations. +* **Advanced Filtering**: When your matching logic requires multiple steps or operations. +* **Custom Search Algorithms**: Implement specialized search logic for your specific data structures. diff --git a/graph-engine/available-nodes/array/array-length.md b/graph-engine/available-nodes/array/array-length.md new file mode 100644 index 0000000..ed3c5a7 --- /dev/null +++ b/graph-engine/available-nodes/array/array-length.md @@ -0,0 +1,42 @@ +# Array Length + +### What It Does + +Counts how many items are in a list and returns that number. It's perfect for determining the size of collections or arrays. + +### Inputs + +| Name | Description | Type | Required | +| ----- | -------------------------- | ---- | -------- | +| array | The list to count items in | List | Yes | + +### Outputs + +| Name | Description | Type | +| ------ | ------------------------------- | ------ | +| length | The number of items in the list | Number | + +![Array Length Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.20.14 PM.png>) + +### How to Use It + +1. Drag the Array Length node into your graph. +2. Connect your list (like `[Red, Green, Blue]`) to the "array" input. +3. The output will be the number of items in the list (e.g., 3). + +
+ +### Tips + +* An empty array will return 0. +* This node only counts top-level items; it doesn't count elements in nested arrays. + +### See Also + +* [**Index Array**](index-array.md): For accessing specific items in a list by their position. + +### Use Cases + +* **Dynamic Sizing**: Use the length to calculate scalable spacing based on the number of elements. +* **Limit Checking**: Verify if a token collection has the expected number of items. +* **Conditional Logic**: Create different behaviors based on how many items exist in a collection. diff --git a/graph-engine/available-nodes/array/array-map.md b/graph-engine/available-nodes/array/array-map.md new file mode 100644 index 0000000..1b905a3 --- /dev/null +++ b/graph-engine/available-nodes/array/array-map.md @@ -0,0 +1,68 @@ +# Array Map + +### What It Does + +Transforms each item in a list by applying the same operations to every element. It runs a mini-graph for each item in your list and collects the results into a new list of the same length. + +### Inputs + +| Name | Description | Type | Required | +| ---------------- | ------------------------------------------------------ | ------ | -------- | +| array | The list to process each item | List | Yes | +| _Dynamic inputs_ | Any inputs you add to the inner graph will appear here | Varies | No | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------------------------- | ---- | +| value | The resulting list after processing each item | List | + +![Array Map Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.39.37 PM.png>) + +### Inner Graph Special Inputs + +| Name | Description | Type | +| ------ | -------------------------------------- | ------ | +| value | The current array item being processed | Any | +| index | The current position in the array | Number | +| length | The total length of the array | Number | + +### Inner Graph Required Output + +| Name | Description | Type | +| ----- | ---------------------------------------------------- | ---- | +| value | The transformed value to include in the result array | Any | + +
+ +### How to Use It + +1. Drag the Array Map node into your graph. +2. Connect your list (like `[2, 4, 6, 8, 10]`) to the "array" input. +3. Click on the 'Subgraph Explorer' the node to open the inner graph editor. +4. Inside the inner graph, build your transformation logic using the "value" input. +5. In this example we connect the "value" to a "Multiply" node and multiply by 100. +6. Connect your transformed result to the "value" output on the Output node. +7. Return to the main graph, right click on the "Array Map" and click on "Force Execute" to ensure the inner graph is run on each item in the array. The output will be an array with the operation done on each item in the array. + +
+ +
+ +### Tips + +* The inner graph runs once for each item in the array, in order. +* You can add your own inputs to the inner graph's Input node, which will appear as inputs on the main Array Map node. +* Use "index" inside the inner graph to access the position of the current item being processed. +* The resulting array will always have the same length as the input array. + +### See Also + +* [**Array Filter**](filter.md): For selecting only specific items from a list rather than transforming all of them. +* [**Array Find**](find.md): For finding a single item in an array based on custom criteria. + +### Use Cases + +* **Color Palette Generation**: Transform a list of base colors by applying the same adjustments to each. +* **Scaling Values**: Convert all measurements in a list by applying the same mathematical operations. +* **Token Transformation**: Process each design token in a collection to add or modify properties consistently. diff --git a/graph-engine/available-nodes/array/arrify.md b/graph-engine/available-nodes/array/arrify.md new file mode 100644 index 0000000..73f89c6 --- /dev/null +++ b/graph-engine/available-nodes/array/arrify.md @@ -0,0 +1,43 @@ +# Arrify + +### What It Does + +Takes any input value and ensures it is converted into an array format. It accepts various input types and transforms them into a uniform array structure. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ------------------------------------------ | ---- | -------- | +| items | The value(s) to be converted into an array | Any | No | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------------------------- | ---- | +| value | A properly formatted array of items | List | + +![Arrify Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.11.40 PM.png>) + +### How to Use It + +1. Drag the Arrify node into your graph. +2. Connect any value or multiple values to the "items" input. +3. The node will output an array containing all input values. + +
+ +### Tips + +* This node is particularly useful when you need to standardize varied data formats into a consistent array structure. +* If you provide multiple inputs, they will all be included as elements in the resulting array. + +### See Also + +* [**Array flatten**](flatten.md): For flattening nested arrays into a single level. +* [**Concat**](concat.md): For joining multiple arrays together end-to-end. + +### Use Cases + +* **Normalizing Data Structures**: Convert inconsistent data formats into standardized arrays for consistent processing. +* **Preparing Input for Array Operations**: Ensure values are in array format before applying array-specific nodes. +* **Creating Collections**: Gather multiple individual design tokens into a collection for batch processing. diff --git a/graph-engine/available-nodes/array/concat.md b/graph-engine/available-nodes/array/concat.md new file mode 100644 index 0000000..789539c --- /dev/null +++ b/graph-engine/available-nodes/array/concat.md @@ -0,0 +1,45 @@ +# Concat + +### What It Does + +Combines two lists into a single list by joining them end-to-end. This is perfect for merging collections like color arrays, spacing scales, or any other grouped token sets. + +### Inputs + +| Name | Description | Type | Required | +| ---- | --------------------------------- | ---- | -------- | +| a | The first list to combine | List | Yes | +| b | The second list to add to the end | List | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------------------ | ---- | +| value | The combined list with all items from both lists | List | + +![Array Concat Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.13.09 PM.png>) + +### How to Use It + +1. Drag the Array Concat node into your graph. +2. Connect your first list (like `[Red, Blue]`) to the "a" input. +3. Connect your second list (like `[Green, Yellow]`) to the "b" input. +4. Run the graph—your output will be `[Red, Blue, Green, Yellow]`. + +
+ +### Tips + +* Both lists must be of the same type (e.g., both colors or both numbers). +* Use multiple Concat nodes to combine more than two lists. + +### See Also + +* [**Array Push**](push.md): For adding just a single item to a list. +* [**Array Remove**](remove.md): For removing items from a list. + +### Use Cases + +* **Combining Token Collections**: Merge a base set of tokens with extension sets (e.g., join core colors with accent colors). +* **Building Complete Scales**: Combine different parts of a scale (e.g., join negative and positive spacing values). +* **Theme Management**: Join multiple theme-specific token collections to create a comprehensive theme. diff --git a/graph-engine/available-nodes/array/filter.md b/graph-engine/available-nodes/array/filter.md new file mode 100644 index 0000000..781033f --- /dev/null +++ b/graph-engine/available-nodes/array/filter.md @@ -0,0 +1,47 @@ +--- +hidden: true +--- + +# Filter + +### What It Does + +Creates a new list containing only the items that meet specific conditions. It runs a test on each item and keeps only those that pass, perfect for filtering token collections based on criteria. + +### Inputs + +| Name | Description | Type | Required | +| ----- | --------------------------- | ---- | -------- | +| array | The list of items to filter | List | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------------------------------------- | ---- | +| value | The filtered list containing only items that met the condition | List | + +### How to Use It + +1. Drag the Array Filter node into your graph. +2. Connect your source list to the "array" input. +3. Double-click the node to open the inner filter graph. +4. Create a condition in the inner graph that returns true for items you want to keep. +5. Run the graph—your output will be a new list with only the matching items. + +![Array Filter Example](screenshot-placeholder.png) + +### Tips + +* The inner filter graph has special inputs: "value" (current item), "index" (position), and "length" (total count). +* Connect your logic to the "matches" output in the inner graph to define which items to keep. + +### See Also + +* **Array Find**: For finding just the first matching item in a list. +* **Array Remove**: For removing specific items from a list. + +### Use Cases + +* **Filtered Color Palettes**: Keep only colors that meet a specific brightness threshold for light/dark themes. +* **Token Subset**: Filter spacing tokens to only include values within a certain range. +* **Data Filtering**: Remove unwanted values from a data list before visualization or processing. diff --git a/graph-engine/available-nodes/array/find.md b/graph-engine/available-nodes/array/find.md new file mode 100644 index 0000000..e0aed5c --- /dev/null +++ b/graph-engine/available-nodes/array/find.md @@ -0,0 +1,49 @@ +--- +hidden: true +--- + +# Find + +### What It Does + +Searches a list for the first item that matches your criteria. Unlike filter which returns all matches, this returns just the first matching item, its position, and whether anything was found. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ----------------------------------- | ---- | -------- | +| array | The list of items to search through | List | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------------------------------- | ------ | +| value | The first matching item (if found) | Any | +| found | Whether a matching item was found | Yes/No | +| index | The position of the matching item (-1 if not found) | Number | + +### How to Use It + +1. Drag the Array Find node into your graph. +2. Connect your source list to the "array" input. +3. Double-click the node to open the inner search graph. +4. Create a condition in the inner graph that returns true for the item you want to find. +5. Run the graph—the outputs will contain the first matching item, if any. + +![Array Find Example](screenshot-placeholder.png) + +### Tips + +* The inner graph has special inputs: "value" (current item), "index" (position), and "length" (total count). +* Always check the "found" output before using the "value" since it may be undefined if nothing matches. + +### See Also + +* **Array Filter**: For getting all matching items in a list. +* **Array Remove**: For removing items from a list. + +### Use Cases + +* **Token Lookup**: Find a specific color or spacing token by a property like its name or value. +* **Threshold Detection**: Find the first measurement in a scale that exceeds a certain value. +* **Default Selection**: Locate a fallback value in a list when a primary option isn't available. diff --git a/graph-engine/available-nodes/array/flatten.md b/graph-engine/available-nodes/array/flatten.md new file mode 100644 index 0000000..714ad65 --- /dev/null +++ b/graph-engine/available-nodes/array/flatten.md @@ -0,0 +1,43 @@ +# Flatten + +### What It Does + +Flattens an array of arrays into a single level array, combining all nested elements into one unified list. + +### Inputs + +| Name | Description | Type | Required | +| ----- | -------------------------- | ---- | -------- | +| array | The nested list to flatten | List | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------- | ---- | +| array | The resulting flattened list | List | + +![Array flatten Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.14.52 PM.png>) + +### How to Use It + +1. Drag the Array flatten node into your graph. +2. Connect a nested list (like `[[1, 2], [3, 4]]`) to the "array" input. +3. The node will output a single flattened list (like `[1, 2, 3, 4]`). + +
+ +### Tips + +* This node only flattens one level deep, not recursively through all nested arrays. +* Make sure your input is actually an array of arrays, or the node will throw an error. + +### See Also + +* [**Arrify**](arrify.md): For converting any value into an array format. +* [**Concat**](concat.md): For joining multiple arrays together end-to-end. + +### Use Cases + +* **Merging Token Groups**: Combine nested token groups into a flat structure for easier processing. +* **Simplifying Data Structures**: Convert complex nested lists of values into a simpler format for operations. +* **Processing Multi-dimensional Data**: Transform grid-based data into a linear sequence for sequential processing. diff --git a/graph-engine/available-nodes/array/index-array.md b/graph-engine/available-nodes/array/index-array.md new file mode 100644 index 0000000..51a26ff --- /dev/null +++ b/graph-engine/available-nodes/array/index-array.md @@ -0,0 +1,45 @@ +# Index Array + +### What It Does + +Extracts a single value from a list at a specified position (index). It allows you to retrieve individual elements from an array by their numerical position. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ------------------------------------- | ------ | -------- | +| array | The list to extract the value from | List | Yes | +| index | The position to extract (starts at 0) | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------- | ---- | +| value | The item found at that position | Any | + +![Index Array Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.16.40 PM.png>) + +### How to Use It + +1. Drag the Index Array node into your graph. +2. Connect an array (like `[Red, Green, Blue]`) to the "array" input. +3. Set the "index" value (default is 0, which returns the first item). +4. The output will be the value at that position (e.g., with index 1, the output would be "Green"). + +
+ +### Tips + +* Array indexes start at 0, so the first item is at index 0, the second at index 1, etc. +* If you use a negative index, it counts backward from the end (-1 is the last item). + +### See Also + +* **Array Find**: For finding items by a specific condition rather than position. +* **Slice**: For extracting a range of items from an array. + +### Use Cases + +* **Color Palette Access**: Extract a specific color from a palette array by its position. +* **Token Selection**: Select a specific token from a standardized set based on importance level. +* **Sequential Processing**: Access individual steps from a sequence of design values. diff --git a/graph-engine/available-nodes/array/inject-item.md b/graph-engine/available-nodes/array/inject-item.md new file mode 100644 index 0000000..e607ae0 --- /dev/null +++ b/graph-engine/available-nodes/array/inject-item.md @@ -0,0 +1,46 @@ +# Inject Item + +### What It Does + +Adds a single item into a list at a specific position. Unlike push which adds to the end, this allows you to insert an item anywhere in the list. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ---------------------------------- | ------ | -------- | +| array | The original list | List | Yes | +| item | The item to insert into the list | Any | Yes | +| index | The position to insert the item at | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------- | ---- | +| array | The list with the new item added | List | + +![Inject Item Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.18.42 PM.png>) + +### How to Use It + +1. Drag the Inject Item node into your graph. +2. Connect your list (like `[16, 24]`) to the "array" input. +3. Connect the item to insert (like `15`) to the "item" input. +4. Set the "index" value (e.g., 1 to insert between the first and second items). + +
+ +### Tips + +* Use index 0 to insert at the beginning of the list. +* You can use negative indexes to count from the end (-1 inserts before the last item). + +### See Also + +* [**Array Push**](push.md): For adding items to the end of an array. +* [**Replace**](../string/replace.md): For replacing existing items rather than inserting new ones. + +### Use Cases + +* **Color Palette Refinement**: Insert a transitional color between existing shades at a specific position. +* **Priority Insertion**: Add a new high-priority item in the middle of an existing sequence. +* **Layered Structure Design**: Insert elements between existing layers in a design structure. diff --git a/graph-engine/available-nodes/array/push.md b/graph-engine/available-nodes/array/push.md new file mode 100644 index 0000000..7bc4f75 --- /dev/null +++ b/graph-engine/available-nodes/array/push.md @@ -0,0 +1,45 @@ +# Array Push + +### What It Does + +Adds a single item to the end of a list and gives you the updated list. It's perfect for growing collections like color palettes or spacing scales step-by-step. + +### Inputs + +| Name | Description | Type | Required | +| ----- | -------------------------------- | ---- | -------- | +| array | The list you want to add to | List | Yes | +| item | The single thing you want to add | Any | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------- | ---- | +| value | The new list with the item added | List | + +![Array Push Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.21.43 PM.png>) + +### How to Use It + +1. Drag the Array Push into the editor. +2. Connect a list (like `[Red, Blue, Green]`) to the "array" input. +3. Connect a single item (like `Purple`) to the "item" input. +4. Run the graph—your output will be `[Red, Blue, Green, Purple]`. + +
+ +### Tips + +* Match the item type to your list (e.g., don't add a number to a color list). +* Use this when building a list one item at a time. + +### See Also + +* [**Array Concat**](concat.md): For combining two lists. +* [**Array Remove**](remove.md): For taking items out of a list. + +### Use Cases + +* **Building a Color Palette**: Start with a base color list and add new shades (e.g., push `#33F` to `[#00F, #66F]`). +* **Spacing Scale**: Grow a spacing set by adding new values (e.g., push `16px` to `[4px, 8px]`). +* **Design Token Collection**: Add a new token (like a border style) to an existing token list. diff --git a/graph-engine/available-nodes/array/remove.md b/graph-engine/available-nodes/array/remove.md new file mode 100644 index 0000000..0716116 --- /dev/null +++ b/graph-engine/available-nodes/array/remove.md @@ -0,0 +1,46 @@ +# Remove Item + +### What It Does + +Removes a single item from a list at a specific position. It returns both the modified list and the item that was removed, making it useful for extracting elements or trimming collections. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ---------------------------------- | ------ | -------- | +| array | The list to remove an item from | List | Yes | +| index | The position of the item to remove | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------ | ---- | +| array | The list with the item removed | List | +| item | The item that was removed | Any | + +![Remove Item Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.29.30 PM.png>) + +### How to Use It + +1. Drag the Remove Item node into your graph. +2. Connect a list (like `[Red, Blue, Green]`) to the "array" input. +3. Connect a number (like `1`) to the "index" input to specify which position to remove. +4. Run the graph—your "array" output will be `[Red, Green]` and your "item" output will be `Blue`. + +
+ +### Tips + +* Indexes start at 0, so the first item is at position 0, the second at position 1, etc. +* You can use negative indexes (-1 removes the last item, -2 the second-to-last, etc.). + +### See Also + +* [**Array Push**](push.md): For adding an item to a list. +* [**Array Filter**](filter.md): For removing multiple items based on conditions. + +### Use Cases + +* **Token Refinement**: Remove specific tokens from a design system collection to create simplified subsets. +* **Data Processing**: Extract a specific element from a data series for individual analysis. +* **Sequential Operations**: Process items one-by-one by removing them from a working list as you handle them. diff --git a/graph-engine/available-nodes/array/replace-item.md b/graph-engine/available-nodes/array/replace-item.md new file mode 100644 index 0000000..ad88b03 --- /dev/null +++ b/graph-engine/available-nodes/array/replace-item.md @@ -0,0 +1,46 @@ +# Replace Item + +### What It Does + +Substitutes an item at a specific position in a list with a new item. The original list remains unchanged while a new list is created with the replacement. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ------------------------------------- | ------ | -------- | +| array | The original list | List | Yes | +| item | The new item to put into the list | Any | Yes | +| index | The position to replace (starts at 0) | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------- | ---- | +| array | The list with the replaced item | List | + +![Replace Item Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.31.17 PM.png>) + +### How to Use It + +1. Drag the Replace Item node into your graph. +2. Connect your list (like `[Red, Green, Blue]`) to the "array" input. +3. Connect the replacement item (like `Yellow`) to the "item" input. +4. Set the "index" value (e.g., 2 to replace the third item). + +
+ +### Tips + +* Array indexes start at 0, so index 1 refers to the second item in the list. +* You can use negative indices to count from the end (-1 replaces the last item). + +### See Also + +* [**Inject Item**](inject-item.md): For inserting new items without replacing existing ones. +* [**Remove Item**](remove.md): For removing items from a list without replacements. + +### Use Cases + +* **Color Palette Refinement**: Replace a color in a palette with an improved version. +* **Token Update**: Swap out a specific design token in a collection with an updated value. +* **Content Revision**: Update specific items in a structured content list without changing the list structure. diff --git a/graph-engine/available-nodes/array/reverse-array.md b/graph-engine/available-nodes/array/reverse-array.md new file mode 100644 index 0000000..6d68270 --- /dev/null +++ b/graph-engine/available-nodes/array/reverse-array.md @@ -0,0 +1,43 @@ +# Reverse Array + +### What It Does + +Flips the order of items in a list, making the last element first and the first element last. It creates a new reversed list without changing the original. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ----------------------- | ---- | -------- | +| array | The list to be reversed | List | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------- | ---- | +| value | The reversed list | List | + +![Reverse Array Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.32.42 PM.png>) + +### How to Use It + +1. Drag the Reverse Array node into your graph. +2. Connect your list (like `[Red, Green, Blue]`) to the "array" input. +3. The output will be the list in reverse order (e.g., `[Blue, Green, Red]`). + +
+ +### Tips + +* This node preserves the original list and outputs a new reversed copy. +* Useful for changing the visual priority or sequence of design elements. + +### See Also + +* [**Sort Array**](sort-array.md): For arranging items based on specific criteria rather than simply reversing them. +* [**Array Filter**](array-filter.md): For selectively including or excluding items from a list. + +### Use Cases + +* **Reversing Color Gradients**: Flip a color sequence to create an opposite gradient direction. +* **Priority Inversion**: Transform a list sorted by importance to focus on different priorities. +* **Visual Hierarchy Experimentation**: Test alternative arrangements of design elements by reversing their order. diff --git a/graph-engine/available-nodes/array/slice-array.md b/graph-engine/available-nodes/array/slice-array.md new file mode 100644 index 0000000..39752bb --- /dev/null +++ b/graph-engine/available-nodes/array/slice-array.md @@ -0,0 +1,46 @@ +# Slice Array + +### What It Does + +Extracts a portion of a list to create a new list, based on start and end positions you specify. This lets you take a subset of items from any list. + +### Inputs + +| Name | Description | Type | Required | +| ----- | --------------------------------------------- | ------ | -------- | +| array | The list to extract items from | List | Yes | +| start | The beginning position (index starts at 0) | Number | Yes | +| end | The end position (not included in the result) | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------------------- | ---- | +| value | The extracted portion of list | List | + +![Slice Array Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.34.21 PM.png>) + +### How to Use It + +1. Drag the Slice Array node into your graph. +2. Connect your list (like `[Red, Blue, Green, Orange, Purple]`) to the "array" input. +3. Set the "start" value (e.g., 1) and "end" value (e.g., 4). +4. The output will be the specified portion of the list (e.g., `[Blue, Green, Orange]`). + +
+ +### Tips + +* The end index is not included in the result, so slice(1,4) returns items at positions 1, 2, and 3. +* You can use negative indices to count from the end of the list (-1 is the last item). + +### See Also + +* [**Index Array**](index-array.md): For extracting a single item from a list. +* [**Array Filter**](filter.md): For selecting items based on a condition rather than position. + +### Use Cases + +* **Color Palette Segments**: Extract part of a color palette to use in a specific component. +* **Token Subsets**: Create smaller token collections from larger standardized sets. +* **Sequential Grouping**: Group related tokens together by extracting portions from a sequence. diff --git a/graph-engine/available-nodes/array/sort-array.md b/graph-engine/available-nodes/array/sort-array.md new file mode 100644 index 0000000..1345b16 --- /dev/null +++ b/graph-engine/available-nodes/array/sort-array.md @@ -0,0 +1,46 @@ +# Sort Array + +### What It Does + +Arranges items in a list in a specific order, either ascending or descending. It can sort by a specific property for complex objects, helping to organize collections. + +### Inputs + +| Name | Description | Type | Required | +| ------ | ---------------------------------------------- | ---- | -------- | +| array | The list to be sorted | List | Yes | +| order | Direction of sort ("asc" or "desc") | Text | No | +| sortBy | Property name to sort by (for object elements) | Text | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | --------------- | ---- | +| value | The sorted list | List | + +![Sort Array Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 6.37.35 PM.png>) + +### How to Use It + +1. Drag the Sort Array node into your graph. +2. Connect your list (like `[16, 18, 21, 24, 28, 32]`) to the "array" input. +3. Set "sortBy" to the property to sort on (e.g., "value"). +4. Optionally change "order" to "desc" for descending order (default is "asc"). + +
+ +### Tips + +* For simple lists (numbers or strings), use an empty string for the "sortBy" value. +* The sort is stable, meaning equal items maintain their relative order. + +### See Also + +* [**Reverse Array**](reverse-array.md): For simply flipping the order of items without sorting. +* [**Array Filter**](filter.md): For selecting items rather than reordering them. + +### Use Cases + +* **Color Organization**: Sort colors by brightness, hue, or other properties. +* **Token Prioritization**: Arrange design tokens by their importance or frequency of use. +* **Size Sequencing**: Order spacing or sizing tokens from smallest to largest for consistent scales. diff --git a/graph-engine/available-nodes/color/README.md b/graph-engine/available-nodes/color/README.md new file mode 100644 index 0000000..66f1e4c --- /dev/null +++ b/graph-engine/available-nodes/color/README.md @@ -0,0 +1,93 @@ +# Color + +Nodes for working with colors. Generate scales, adjust properties, compare contrast, or convert formats—covers everything from single hues to full palettes. + + + +{% content-ref url="color-to-string.md" %} +[color-to-string.md](color-to-string.md) +{% endcontent-ref %} + +{% content-ref url="color-wheel.md" %} +[color-wheel.md](color-wheel.md) +{% endcontent-ref %} + +{% content-ref url="contrast.md" %} +[contrast.md](contrast.md) +{% endcontent-ref %} + +{% content-ref url="contrasting-alpha.md" %} +[contrasting-alpha.md](contrasting-alpha.md) +{% endcontent-ref %} + +{% content-ref url="contrasting-color.md" %} +[contrasting-color.md](contrasting-color.md) +{% endcontent-ref %} + +{% content-ref url="contrasting-from-array.md" %} +[contrasting-from-array.md](contrasting-from-array.md) +{% endcontent-ref %} + +{% content-ref url="convert.md" %} +[convert.md](convert.md) +{% endcontent-ref %} + +{% content-ref url="create.md" %} +[create.md](create.md) +{% endcontent-ref %} + +{% content-ref url="darken.md" %} +[darken.md](darken.md) +{% endcontent-ref %} + +{% content-ref url="deconstruct.md" %} +[deconstruct.md](deconstruct.md) +{% endcontent-ref %} + +{% content-ref url="delta-e.md" %} +[delta-e.md](delta-e.md) +{% endcontent-ref %} + +{% content-ref url="distance.md" %} +[distance.md](distance.md) +{% endcontent-ref %} + +{% content-ref url="flatten-alpha.md" %} +[flatten-alpha.md](flatten-alpha.md) +{% endcontent-ref %} + +{% content-ref url="lighten.md" %} +[lighten.md](lighten.md) +{% endcontent-ref %} + +{% content-ref url="match-alpha.md" %} +[match-alpha.md](match-alpha.md) +{% endcontent-ref %} + +{% content-ref url="mix.md" %} +[mix.md](mix.md) +{% endcontent-ref %} + +{% content-ref url="name-color.md" %} +[name-color.md](name-color.md) +{% endcontent-ref %} + +{% content-ref url="poline.md" %} +[poline.md](poline.md) +{% endcontent-ref %} + +{% content-ref url="range.md" %} +[range.md](range.md) +{% endcontent-ref %} + +{% content-ref url="scale.md" %} +[scale.md](scale.md) +{% endcontent-ref %} + +{% content-ref url="sort-colors-by-distance.md" %} +[sort-colors-by-distance.md](sort-colors-by-distance.md) +{% endcontent-ref %} + +{% content-ref url="string-to-color.md" %} +[string-to-color.md](string-to-color.md) +{% endcontent-ref %} diff --git a/graph-engine/available-nodes/color/color-to-string.md b/graph-engine/available-nodes/color/color-to-string.md new file mode 100644 index 0000000..ce3ee7c --- /dev/null +++ b/graph-engine/available-nodes/color/color-to-string.md @@ -0,0 +1,46 @@ +# Color To String + +### What It Does + +Converts a color object into a text representation in a specified format. This is useful when you need to output colors as hex codes, CSS color functions, or other text-based formats. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ------------------------------------------ | ------ | -------- | +| color | The color to convert to text | Color | No | +| space | The format to output (hex, rgb, hsl, etc.) | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------- | ------ | +| value | The color as a text string | String | + +
+ +### How to Use It + +1. Drag the Color to String node into your graph. +2. Drag the Input node and set the input type to "color". Set the input color (e.g. #2669F4) +3. Connect the output to the "color" input. +4. Choose an output format from the "space" dropdown (e.g., "hsl" for "hsl(225,0,0) format). +5. Run the graph—your output will be a text string like "#2669F4" or "hsl(220.49 90.351% 55.294%)". + +
+ +### Tips + +* The "hex" format is most common for web development and design tools. +* Other formats like "rgb" or "hsl" provide more readable information about the color's components. + +### See Also + +* [**String to Color**](string-to-color.md): For converting text color representations back into color objects. +* [**Deconstruct Color**](deconstruct.md): For breaking a color into its individual component values. + +### Use Cases + +* **CSS Output**: Generate color strings for use in CSS stylesheets or style objects. +* **Design Token Export**: Convert colors to string format for export to design token files. +* **Color Communication**: Create readable text versions of colors for documentation or sharing. diff --git a/graph-engine/available-nodes/color/color-wheel-hue.mdx b/graph-engine/available-nodes/color/color-wheel-hue.mdx new file mode 100644 index 0000000..e92161e --- /dev/null +++ b/graph-engine/available-nodes/color/color-wheel-hue.mdx @@ -0,0 +1,4 @@ +# Color Wheel (Hue) + + +{% embed url="https://graph.beta.tokens.studio/editor/cm8ih2qfa000a5vhyxv0atljj" %} diff --git a/graph-engine/available-nodes/color/color-wheel.md b/graph-engine/available-nodes/color/color-wheel.md new file mode 100644 index 0000000..a929be6 --- /dev/null +++ b/graph-engine/available-nodes/color/color-wheel.md @@ -0,0 +1,56 @@ +# Color Wheel + +### What It Does + +Generates a set of colors arranged in a color wheel pattern. Starting from a base hue, it creates a specified number of colors by rotating around the color wheel at consistent intervals, while maintaining the same saturation and lightness values. + +### Inputs + +| Name | Description | Type | Required | +| ---------- | ------------------------------------------------ | ------ | -------- | +| baseHue | The starting hue angle (0-360 degrees) | Number | No | +| angle | The total angle to rotate around the color wheel | Number | No | +| saturation | The saturation percentage for all colors (0-100) | Number | No | +| lightness | The lightness percentage for all colors (0-100) | Number | No | +| colors | The number of colors to generate | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------- | -------------- | +| value | An array of evenly spaced colors | List of Colors | + +
+ +### How to Use It + +1. Drag the Color Wheel node into your graph. +2. Set the "baseHue" to your starting hue angle (default is 360/0, which is red). +3. Set the "angle" to determine how far around the wheel to go (default is 180 degrees). +4. Adjust "saturation" and "lightness" to control the vibrancy and brightness (defaults are 80%). +5. Set the "colors" value to determine how many colors to generate (default is 8). +6. Run the graph—your output will be an array of colors evenly distributed around the wheel. +7. Connect a [Color Scale](../vector2/scale.md) preview node to visualise your output. + +
+ +
+ +### Tips + +* For a full color wheel, set angle to 360 degrees. +* For complementary colors, use 2 colors with angle 180. +* For triadic colors, use 3 colors with angle 360. +* For analogous colors, use 3-5 colors with a smaller angle (30-60 degrees). + +### See Also + +* [**Range**](range.md): For creating a range between two specific colors. +* [**Scale Colors**](../preview/color-scale.md): For generating a graduated scale of a single color. +* [**Mix Colors**](mix.md): For blending between two specific colors. + +### Use Cases + +* **Color Harmonies**: Create complementary, triadic, or other color schemes. +* **Data Visualization**: Generate distinct colors for charts and graphs. +* **UI Theming**: Develop consistent color families for interface elements. diff --git a/graph-engine/available-nodes/color/contrast.md b/graph-engine/available-nodes/color/contrast.md new file mode 100644 index 0000000..6b2498c --- /dev/null +++ b/graph-engine/available-nodes/color/contrast.md @@ -0,0 +1,47 @@ +# Contrast + +### What It Does + +The Contrast node calculates the contrast ratio between two colors. It provides a numeric value representing the contrast level, with higher numbers indicating greater contrast between the colors. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ---------------------------------------------------- | ------ | -------- | +| A | First color to compare | Color | No | +| B | Second color to compare | Color | No | +| Algorithm | Contrast calculation method (APCA is default) | String | No | +| Absolute | Whether to return the absolute value of the contrast | Yes/No | No | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------------------------------- | ------ | +| Value | The calculated contrast ratio between the two colors | Number | + +
+ +### How to Use It + +1. Drag the Contrast node into your graph. +2. Connect two colors to the "A" and "B" inputs (defaults are black and white). +3. Optionally choose the algorithm method and whether to use absolute value. +4. The output will be a numeric value representing the contrast ratio. + +
+ +### Tips + +* Higher contrast values generally indicate better readability when using text. +* The APCA algorithm provides perceptually accurate contrast measurements. + +### See Also + +* [**Contrasting**: ](contrasting-color.md)For finding a color with sufficient contrast against a background. +* [**Contrasting Alpha**:](contrasting-alpha.md) For adjusting opacity to achieve a target contrast. + +### Use Cases + +* **Accessibility Verification**: Check if text and background color combinations meet WCAG standards. +* **Readability Testing**: Evaluate if UI elements have sufficient contrast for clear visibility. +* **Color Pair Evaluation**: Compare different color combinations to find optimal contrast ratios. diff --git a/graph-engine/available-nodes/color/contrasting-alpha.md b/graph-engine/available-nodes/color/contrasting-alpha.md new file mode 100644 index 0000000..efa70a5 --- /dev/null +++ b/graph-engine/available-nodes/color/contrasting-alpha.md @@ -0,0 +1,52 @@ +# Contrasting Alpha + +### What It Does + +The Contrasting Alpha node adjusts a color's transparency until it reaches a target contrast ratio with a background. It uses binary search to find the optimal alpha value that provides the desired contrast level. + +### Inputs + +| Name | Description | Type | Required | +| ---------- | ---------------------------------------------------------- | ------ | -------- | +| Foreground | The color to adjust transparency for | Color | No | +| Background | The background color to test contrast against | Color | No | +| Algorithm | Contrast calculation method (APCA is default) | String | No | +| Threshold | Target contrast value to achieve | Number | No | +| Precision | Number of binary search iterations (higher = more precise) | Number | No | + +### Outputs + +| Name | Description | Type | +| -------- | ---------------------------------------------- | ------ | +| Alpha | The calculated alpha value (0-1) | Number | +| Color | The resulting color with adjusted transparency | Color | +| Contrast | The actual contrast ratio achieved | Number | + +
+ +### How to Use It + +1. Drag the Contrasting Alpha node into your graph. +2. Connect a foreground color (like `#737272`) and background color (like `#FFF`). +3. Set your desired contrast threshold (default: 60). +4. Adjust precision if needed (default: 5 iterations). +5. The node outputs the color with adjusted alpha, the alpha value, and the resulting contrast. + +
+ +### Tips + +* Higher precision values give more accurate results but may increase processing time. +* This node is useful for ensuring text remains readable while maintaining some transparency. + +### See Also + +* [**Contrast**:](contrast.md) For measuring contrast between two colors. +* [**Contrasting Color**](contrasting-color.md): For selecting between two colors based on contrast. +* [**Flatten Alpha**](flatten-alpha.md): For removing transparency from a color. + +### Use Cases + +* **Semi-Transparent UI Elements**: Create overlay panels that maintain text readability. +* **Accessible Design**: Ensure text with transparency meets accessibility standards. +* **Dynamic Backgrounds**: Automatically adjust text opacity based on varying background colors. diff --git a/graph-engine/available-nodes/color/contrasting-color.md b/graph-engine/available-nodes/color/contrasting-color.md new file mode 100644 index 0000000..7200ef0 --- /dev/null +++ b/graph-engine/available-nodes/color/contrasting-color.md @@ -0,0 +1,51 @@ +# Contrasting Color + +### What It Does + +The Contrasting Color node evaluates two colors against a background and selects the one with better contrast. It uses contrast algorithms like APCA to determine which color has higher visibility against the specified background. + +### Inputs + +| Name | Description | Type | Required | +| ---------- | ---------------------------------------------------------- | ------ | -------- | +| A | First color option | Color | No | +| B | Second color option | Color | No | +| Background | The background color to test contrast against | Color | No | +| Algorithm | Contrast calculation method (APCA is default) | String | No | +| Threshold | Minimum contrast value considered sufficient (default: 60) | Number | No | + +### Outputs + +| Name | Description | Type | +| ---------- | ---------------------------------------------------- | ------ | +| Color | The color with the higher contrast ratio | Color | +| Sufficient | Whether the contrast meets the threshold requirement | Yes/No | +| Contrast | The contrast ratio value of the selected color | Number | + +
+ +### How to Use It + +1. Drag the Contrasting Color node into your graph. +2. Connect two color options to the "A" and "B" inputs. +3. Set the "Background" to the surface color where these colors will appear. +4. Adjust the "Threshold" to your desired minimum contrast level (60 is default). +5. The node outputs the color with better contrast, whether it's sufficient, and the contrast value. + +
+ +### Tips + +* Use this node to automatically select the most readable text color. +* The threshold value depends on your accessibility requirements (higher values mean better contrast). + +### See Also + +* [**Contrast**:](contrast.md) For calculating contrast between two colors without selection. +* [**Contrasting Alpha**:](contrasting-alpha.md) For finding an opacity that provides sufficient contrast. + +### Use Cases + +* **Adaptive Text Colors**: Automatically switch between light and dark text based on background color. +* **Accessible UI Elements**: Select the most readable color for interactive elements. +* **Dynamic Theming**: Choose optimal colors that maintain readability across different backgrounds. diff --git a/graph-engine/available-nodes/color/contrasting-from-array.md b/graph-engine/available-nodes/color/contrasting-from-array.md new file mode 100644 index 0000000..df06e05 --- /dev/null +++ b/graph-engine/available-nodes/color/contrasting-from-array.md @@ -0,0 +1,55 @@ +# Contrasting from Array + +### What It Does + +The Contrasting from Array node evaluates multiple colors against a background and returns the first one that meets a contrast threshold. If no color is sufficiently contrasting, it returns the one with the highest contrast. + +### Inputs + +| Name | Description | Type | Required | +| ---------- | ---------------------------------------------------------- | -------------- | -------- | +| Colors | Array of color options to evaluate | List of Colors | Yes | +| Background | The background color to test contrast against | Color | No | +| Algorithm | Contrast calculation method (APCA is default) | String | No | +| Threshold | Minimum contrast value considered sufficient (default: 60) | Number | No | + +### Outputs + +| Name | Description | Type | +| ---------- | -------------------------------------------------------- | ------ | +| Color | The selected color with best/sufficient contrast | Color | +| Sufficient | Whether the selected color meets the threshold | Yes/No | +| Contrast | The contrast ratio of the selected color | Number | +| Index | The position of the selected color in the original array | Number | + +
+ +### How to Use It + +1. Drag the Contrasting from Array node into your graph. +2. Drag a Scale colors node and set the input color as `#0044FF` +3. Connect the output of Scale colors node to the "Colors" input. +4. Set the "Background" to the surface color where the colors will appear. Default is set as `#FFFFFF` +5. Adjust the "Threshold" to your desired minimum contrast level. Default is set as 60. +6. Select the "Algorithm" method. Default is APCA. +7. The node outputs the first color that meets the threshold, or the one with highest contrast. +8. The output "Color" is `#3C6BED` ("Index" of 4 in the input array) because it gives a "Contrast" of 71.59 which is more than the "Threshold" value of 60. + +
+ +### Tips + +* Arrange your colors array with preferred options first, as the node returns the first sufficient color. +* The index output is useful for tracking which color was selected from the array. + +### See Also + +* [**Contrasting Color**](contrasting-color.md): For choosing between two specific colors. +* [**Contrast**](contrast.md): For calculating the contrast ratio between colors. +* [**Sort Colors By Distance**](sort-colors-by-distance.md): For ordering colors by their contrast. + +### Use Cases + +* **Theme Color Selection**: Find an appropriate color from a theme palette for a specific background. +* **Text Color Optimization**: Automatically select the most readable text color from a set of brand options. +* **Accessible UI Components**: Choose colors that meet accessibility requirements from a predefined set. diff --git a/graph-engine/available-nodes/color/convert.md b/graph-engine/available-nodes/color/convert.md new file mode 100644 index 0000000..9c1c14d --- /dev/null +++ b/graph-engine/available-nodes/color/convert.md @@ -0,0 +1,43 @@ +# Convert Color + +### What It Does + +Transforms a color from one color space to another. This allows you to change how a color is represented and measured, which is useful for different operations and color manipulations. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ----------------------------------------------- | ------ | -------- | +| color | The color to convert | Color | Yes | +| space | The target color space (e.g., srgb, hsl, oklch) | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------------ | ----- | +| color | The converted color in the new color space | Color | + +
+ +### How to Use It + +1. Drag the Convert Color node into your graph. +2. Connect a color (like `#FF0000`) to the "color" input. +3. Select a color space (like "oklch") from the "space" dropdown or input. +4. Run the graph—your output will be the same color but represented in the new color space. + +### Tips + +* Different color spaces are better for different operations: HSL for hue adjustments, OKLCH for perceptual lightness. +* Converting between spaces preserves the visual color but changes how its values are structured. + +### See Also + +* [**Create Color**](create.md): For building a color from raw values in a specific color space. +* [**Deconstruct Color**](deconstruct.md): For breaking a color into its component values. + +### Use Cases + +* **Perceptual Editing**: Convert to OKLCH to make perceptually uniform color adjustments. +* **HSL Manipulations**: Convert to HSL to easily modify hue, saturation, or lightness independently. +* **Color System Standardization**: Ensure all colors in your design system use the same color space for consistent manipulation. diff --git a/graph-engine/available-nodes/color/create.md b/graph-engine/available-nodes/color/create.md new file mode 100644 index 0000000..851db5f --- /dev/null +++ b/graph-engine/available-nodes/color/create.md @@ -0,0 +1,50 @@ +# Create Color + +### What It Does + +Creates a color from individual channel values in a specified color space. It allows you to build colors from scratch by defining each component separately, perfect for creating systematic color variations. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ---------------------------------------------------------- | ------ | -------- | +| space | The color space to use (e.g., srgb, hsl, lab) | String | No | +| a | The first channel value (red in RGB, hue in HSL) | Number | No | +| b | The second channel value (green in RGB, saturation in HSL) | Number | No | +| c | The third channel value (blue in RGB, lightness in HSL) | Number | No | +| alpha | The transparency value (0-1) | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------- | ----- | +| value | The created color | Color | + +
+ +### How to Use It + +1. Drag the Create Color node into your graph. +2. Choose a color space (e.g., "hsl") for the "space" input. +3. Drag four Constant node into your graph. Set the input type to number. +4. Connect constant nodes to the a, b, c inputs (e.g., 210 for hue, 80 for saturation, 50 for lightness). +5. Optionally connect a value between 0-1 to the "alpha" input for transparency (e.g., 0.5 for 50% transparency). +6. The Create Color node outputs a color `#1980E6E6` for the above values. + +
+ +### Tips + +* Different color spaces require different value ranges: RGB uses 0-255, HSL uses 0-360 for hue and 0-100 for saturation/lightness. +* Try different color spaces to create colors that are easier to adjust systematically. + +### See Also + +* [**Convert Color**](convert.md): For converting between different color spaces. +* [**Deconstruct Color**](deconstruct.md): For breaking a color down into its channel values. + +### Use Cases + +* **Systematic Color Palettes**: Create related colors by varying just one channel value while keeping others constant. +* **Accessible Color Alternatives**: Generate variations with the same hue but different lightness values to ensure accessibility. +* **Brand Color Extensions**: Use your brand color as a base and create a full palette by systematically modifying channel values. diff --git a/graph-engine/available-nodes/color/darken.md b/graph-engine/available-nodes/color/darken.md new file mode 100644 index 0000000..17db7db --- /dev/null +++ b/graph-engine/available-nodes/color/darken.md @@ -0,0 +1,45 @@ +# Darken Color + +### What It Does + +Makes a color darker by reducing its lightness by a specified amount. It's perfect for creating shades of a base color or generating darker variants for hover states and hierarchical elements. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ---------------------------------- | ------ | -------- | +| color | The color to darken | Color | No | +| value | How much to darken the color (0-1) | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------ | ----- | +| value | The darkened color | Color | + +
+ +### How to Use It + +1. Drag the Darken Color node into your graph. +2. Connect a color (like `#5C9AFF`) to the "color" input. +3. Set a value between 0 and 1 (like `0.3`) to the "value" input. +4. Run the graph—your output will be a darker version of the input color (`#1d59b8`). + +
+ +### Tips + +* A value of 0 makes no change, while 1 produces black. +* Use small increments (0.1-0.3) for subtle darkening effects in UI states. + +### See Also + +* [**Lighten Color**](lighten.md): For making colors lighter instead of darker. +* [**Mix Colors**](mix.md): For blending a color with black for more control. + +### Use Cases + +* **Button States**: Create darker variants of a button color for hover and active states. +* **Color Scales**: Generate a range of related dark shades from a base color. +* **Background Hierarchy**: Create darker backgrounds for elevated or nested UI elements. diff --git a/graph-engine/available-nodes/color/deconstruct.md b/graph-engine/available-nodes/color/deconstruct.md new file mode 100644 index 0000000..1892023 --- /dev/null +++ b/graph-engine/available-nodes/color/deconstruct.md @@ -0,0 +1,48 @@ +# Deconstruct Color + +### What It Does + +Breaks a color down into its individual component values based on its color space. This gives you access to each channel (like red, green, blue in RGB) for separate manipulation. + +### Inputs + +| Name | Description | Type | Required | +| ----- | --------------------------------------- | ----- | -------- | +| color | The color to break down into components | Color | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------------------------------------------- | ------ | +| space | The color space of the input color | String | +| a | The first channel value (e.g., red in RGB, hue in HSL) | Number | +| b | The second channel value (e.g., green in RGB, saturation in HSL) | Number | +| c | The third channel value (e.g., blue in RGB, lightness in HSL) | Number | +| alpha | The transparency value (0-1) | Number | + +
+ +### How to Use It + +1. Drag the Deconstruct Color node into your graph. +2. Connect a color (like `#4D6ADD`) to the "color" input. +3. Run the graph—each output will contain a separate component of the color. +4. Connect the individual channel outputs to other nodes for specific manipulations. + +
+ +### Tips + +* The channel meanings (a, b, c) depend on the color's space (RGB, HSL, LAB, etc.). [Read more about color channels](https://colorjs.io/docs/spaces#hct). +* Use with Create Color to rebuild a color after modifying specific channels. + +### See Also + +* [**Create Color**](create.md): For rebuilding a color from individual channel values. +* [**Convert Color**](convert.md): For changing a color's space before deconstructing it. + +### Use Cases + +* **Channel Manipulation**: Extract the hue of a color to create variations with the same hue but different saturation/lightness. +* **Color Analysis**: Break down colors to understand their composition or for comparison. +* **Systematic Adjustments**: Modify just one aspect of a color (like saturation) while preserving other qualities. diff --git a/graph-engine/available-nodes/color/delta-e.md b/graph-engine/available-nodes/color/delta-e.md new file mode 100644 index 0000000..2470346 --- /dev/null +++ b/graph-engine/available-nodes/color/delta-e.md @@ -0,0 +1,50 @@ +# Delta E + +### What It Does + +The Delta E node calculates the perceptual distance between two colors. It provides a numeric measurement of how different two colors appear to the human eye, using various industry-standard algorithms. + +### Inputs + +| Name | Description | Type | Required | +| --------- | -------------------------------------------------------------- | ------ | -------- | +| Color A | First color for comparison | Color | No | +| Color B | Second color for comparison | Color | No | +| Precision | Number of decimal places in the result | Number | No | +| Algorithm | Color difference algorithm to use (76, CMC, 2000, Jz, ITP, OK) | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------------------------------- | ------ | +| Value | The calculated color difference (Delta E) | Number | + +
+ +### How to Use It + +1. Drag the Delta E node into your graph. +2. Connect two colors to "Color A" and "Color B" inputs. +3. Choose an algorithm (default is "2000", which is the industry-standard CIEDE2000). +4. Set the desired precision for the result (default is 4 decimal places). +5. The output value indicates how different the colors appear (higher values = more different). + +
+ +### Tips + +* Values below 1.0 are generally imperceptible to the human eye. +* Values between 1.0 and 2.0 are perceptible only with close observation. +* The CIEDE2000 (2000) algorithm is the most accurate for design work. + +### See Also + +* [**Distance**](distance.md): For calculating geometric distance between colors. +* [**Contrast**](contrast.md): For calculating contrast ratio between colors. +* [**Sort Colors By Distance**](sort-colors-by-distance.md): For sorting colors based on their differences. + +### Use Cases + +* **Color Matching**: Verify how close two colors appear to each other. +* **Palette Refinement**: Ensure colors in a palette are sufficiently distinct. +* **Accessibility Validation**: Check if color variations are perceptually different enough. diff --git a/graph-engine/available-nodes/color/distance.md b/graph-engine/available-nodes/color/distance.md new file mode 100644 index 0000000..c1924fd --- /dev/null +++ b/graph-engine/available-nodes/color/distance.md @@ -0,0 +1,50 @@ +# Distance + +### What It Does + +The Distance node measures the geometric distance between two colors in a specified color space. Unlike Delta E, which measures perceptual difference, this node calculates raw mathematical distance between color coordinates. The output is based on the CIEDE2000 color difference formula. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ---------------------------------------------------------- | ------ | -------- | +| Color A | First color for distance calculation | Color | No | +| Color B | Second color for distance calculation | Color | No | +| Precision | Number of decimal places in the result | Number | No | +| Space | Color space to perform calculation in (Lab, ICtCp, Jzazbz) | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------------ | ------ | +| Value | The calculated distance between the colors | Number | + +
+ +### How to Use It + +1. Drag the Distance node into your graph. +2. Connect two colors to "Color A" and "Color B" inputs. +3. Select a color space (default is "Lab"). +4. Set the desired precision for the result (default is 4 decimal places). +5. The output value indicates the geometric distance between the colors. + +
+ +### Tips + +* Different color spaces produce different results as they represent color differently. +* Lab is generally a good default space for most design applications. +* Higher values indicate greater distance/difference between colors. + +### See Also + +* [**Delta E**](delta-e.md): For calculating perceptually accurate color differences. +* [**Sort Colors By Distance**](sort-colors-by-distance.md): For sorting colors based on their differences. +* [**Contrast**](contrast.md): For calculating contrast ratio between colors. + +### Use Cases + +* **Color Sorting**: Organize colors based on their distance from a reference color. +* **Color Difference Analysis**: Compare color similarity in mathematical terms. +* **Color Space Exploration**: Understand how colors relate in different color spaces. diff --git a/graph-engine/available-nodes/color/flatten-alpha.md b/graph-engine/available-nodes/color/flatten-alpha.md new file mode 100644 index 0000000..fff1274 --- /dev/null +++ b/graph-engine/available-nodes/color/flatten-alpha.md @@ -0,0 +1,45 @@ +# Flatten Alpha + +### What It Does + +The Flatten Alpha node blends a transparent foreground color with a solid background color to create a single opaque color. It calculates how the colors would appear when layered and removes transparency. + +### Inputs + +| Name | Description | Type | Required | +| ---------- | --------------------------------------------------- | ----- | -------- | +| Foreground | The (potentially transparent) color to blend on top | Color | Yes | +| Background | The solid background color to blend with | Color | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------------------------------- | ----- | +| Value | The resulting opaque color after blending | Color | + +
+ +### How to Use It + +1. Drag the Flatten Alpha node into your graph. +2. Connect a color with transparency to the "Foreground" input (e.g., `#FF000080`). +3. Connect a solid color to the "Background" input (e.g., `#000`). +4. The output will be an opaque color representing the visual appearance of the two blended colors (`#800000`). + +
+ +### Tips + +* This node is useful for converting transparent colors to formats that don't support alpha channels. +* The background color should be fully opaque for accurate results. + +### See Also + +* [**Mix Colors**](mix.md): For blending colors with control over the mixing percentage. +* [**Color to String**](color-to-string.md): For converting the resulting color to a specific format. + +### Use Cases + +* **Format Conversion**: Convert RGBA colors to HEX for systems that don't support transparency. +* **Color Export**: Prepare colors with transparency for use in older design tools. +* **Visual Simulation**: Preview how transparent colors will appear against a specific background. diff --git a/graph-engine/available-nodes/color/lighten.md b/graph-engine/available-nodes/color/lighten.md new file mode 100644 index 0000000..aca7a35 --- /dev/null +++ b/graph-engine/available-nodes/color/lighten.md @@ -0,0 +1,45 @@ +# Lighten Color + +### What It Does + +Makes a color lighter by increasing its lightness by a specified amount. This is useful for creating tints of a base color or generating lighter variants for disabled states and background elements. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ----------------------------------- | ------ | -------- | +| color | The color to lighten | Color | No | +| value | How much to lighten the color (0-1) | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------- | ----- | +| value | The lightened color | Color | + +
+ +### How to Use It + +1. Drag the Lighten Color node into your graph. +2. Connect a color (like `#1D1CEE`) to the "color" input. +3. Set a value between 0 and 1 (like `0.4`) to the "value" input. +4. Run the graph—your output will be a lighter version of the input color (`#77A0FF`). + +
+ +### Tips + +* A value of 0 makes no change, while 1 produces white. +* Dark colors can be lightened more before losing their character than light colors. + +### See Also + +* [**Darken Color**](darken.md): For making colors darker instead of lighter. +* [**Mix Colors**](mix.md): For blending a color with white for more control. + +### Use Cases + +* **Disabled States**: Create lighter variants of interface elements to indicate disabled status. +* **Background Variations**: Generate lighter background colors that complement your main palette. +* **Tint Series**: Create a progression of increasingly lighter tints from a base brand color. diff --git a/graph-engine/available-nodes/color/match-alpha.md b/graph-engine/available-nodes/color/match-alpha.md new file mode 100644 index 0000000..2bd2f35 --- /dev/null +++ b/graph-engine/available-nodes/color/match-alpha.md @@ -0,0 +1,52 @@ +# Match Alpha + +### What It Does + +The Match Alpha node calculates the opacity value needed to blend a foreground color with a background color to match a reference color. It reverse-engineers the alpha value that would create the target color. + +### Inputs + +| Name | Description | Type | Required | +| ---------- | ---------------------------------------- | ------ | -------- | +| Foreground | The color to apply transparency to | Color | No | +| Background | The background color for blending | Color | No | +| Reference | The target color to match | Color | No | +| Threshold | Maximum allowable color difference (0-1) | Number | No | +| Precision | Calculation precision for alpha value | Number | No | + +### Outputs + +| Name | Description | Type | +| -------- | ---------------------------------------------- | ------- | +| In Range | Whether a valid alpha value was found | Boolean | +| Color | The foreground color with the calculated alpha | Color | +| Alpha | The calculated alpha value (0-1) | Number | + +
+ +### How to Use It + +1. Drag the Match Alpha node into your graph. +2. Connect your foreground color (like `#5C5656`), background color (like `#FFF`), and reference color (`#CFCDCD`). +3. Adjust threshold and precision if needed (defaults are 0.01). +4. The node outputs the calculated alpha value (0.3) and the semi-transparent foreground color (`#5C56564D`). +5. If "In Range" is false, no suitable alpha value could be found. + +
+ +### Tips + +* Lower threshold values require more exact color matching. +* If no suitable alpha is found, try different foreground and background colors. +* This node works best when the reference color is between the foreground and background colors. + +### See Also + +* [**Flatten Alpha**](flatten-alpha.md): For the reverse operation - merging a transparent color with a background. +* [**Contrasting Alpha**](contrasting-alpha.md): For finding alpha values that maintain contrast requirements. + +### Use Cases + +* **Color System Analysis**: Discover the transparency values used in existing designs. +* **Overlay Recreation**: Recreate the exact transparency of an existing overlay or glass effect. +* **Color Harmonization**: Find transparency values that harmonize colors in a composition. diff --git a/graph-engine/available-nodes/color/mix.md b/graph-engine/available-nodes/color/mix.md new file mode 100644 index 0000000..18cd029 --- /dev/null +++ b/graph-engine/available-nodes/color/mix.md @@ -0,0 +1,48 @@ +# Mix Colors + +### What It Does + +Blends two colors together at a specified ratio. This creates smooth transitions between colors and is perfect for generating intermediate shades or creating color relationships. + +### Inputs + +| Name | Description | Type | Required | +| ------ | --------------------------------------------------------------------- | ------ | -------- | +| colorA | The first color to mix | Color | No | +| colorB | The second color to mix | Color | No | +| value | The mixing ratio (0-1), where 0 is fully colorA and 1 is fully colorB | Number | No | +| space | The color space to perform the mixing in | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------- | ----- | +| value | The resulting mixed color | Color | + +
+ +### How to Use It + +1. Drag the Mix Colors node into your graph. +2. Connect your first color (like `#3366FF`) to the "colorA" input. +3. Connect your second color (like `#FF9900`) to the "colorB" input. +4. Set a value between 0 and 1 (like `0.5` for an equal mix) to the "value" input. +5. Run the graph—your output will be a blend of the two colors (in this case `#C17C97`). + +
+ +### Tips + +* Different color spaces produce different mixing results. Try "oklch" for perceptually smooth blends. +* To create a color scale, use multiple Mix nodes with different mixing values. + +### See Also + +* [**Range**](range.md): For creating a series of colors between two endpoints. +* [**Lighten Color**](lighten.md): For simple lightness adjustments to a single color. + +### Use Cases + +* **Color Harmonies**: Mix complementary colors to create harmonious accent colors. +* **UI State Variations**: Create hover or active states by mixing with white or black. +* **Gradient Development**: Generate intermediate colors for smooth multi-color gradients. diff --git a/graph-engine/available-nodes/color/name-color.md b/graph-engine/available-nodes/color/name-color.md new file mode 100644 index 0000000..b5bb047 --- /dev/null +++ b/graph-engine/available-nodes/color/name-color.md @@ -0,0 +1,44 @@ +# Name Color + +### What It Does + +The Name Color node identifies the closest standard [CSS color name](https://www.w3schools.com/tags/ref_colornames.asp) for any color. It compares the input color to all named web colors and returns the name with the smallest perceptual difference. + +### Inputs + +| Name | Description | Type | Required | +| ----- | --------------------- | ----- | -------- | +| Color | The color to identify | Color | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------------ | ------ | +| Value | The name of the closest matching CSS color | String | + +
+ +### How to Use It + +1. Drag the Name Color node into your graph. +2. Connect any color to the "Color" input (like `#E91BCB`). +3. The node will automatically find the closest CSS color name. +4. The output will be a string like "fuchsia", "mediumorchid", or "firebrick". + +
+ +### Tips + +* This node uses perceptual distance (Delta E) for matching to available CSS colors and provide accurate naming. +* CSS named colors are limited, so the result might not be an exact match. + +### See Also + +* [**String to Color**](string-to-color.md): For the reverse operation - converting color names to colors. +* [**Delta E**](delta-e.md): For calculating the difference between colors. + +### Use Cases + +* **Color Communication**: Convert exact color values to human-readable names for team discussions. +* **Design Documentation**: Generate descriptive color names for design specifications. +* **Data Visualization**: Simplify color data by grouping similar colors under standard names. diff --git a/graph-engine/available-nodes/color/poline.md b/graph-engine/available-nodes/color/poline.md new file mode 100644 index 0000000..93a0a1f --- /dev/null +++ b/graph-engine/available-nodes/color/poline.md @@ -0,0 +1,53 @@ +# Poline + +### What It Does + +The Poline node generates a smooth color palette between multiple anchor colors using the Poline algorithm. It creates sophisticated color progressions by interpolating through 3D color space with customizable distribution functions. Read more about [Poline](https://meodai.github.io/poline/?ref=evernote.design). + +### Inputs + +| Name | Description | Type | Required | +| ------------------ | -------------------------------------------------- | -------------- | -------- | +| Anchor Colors | Array of colors to interpolate between | List of Colors | Yes | +| Num Points | Number of colors to generate in the palette | Number | No | +| Inverted Lightness | Whether to invert the lightness interpolation | Yes/No | No | +| Position Fn X | Function for color distribution in the X dimension | String | No | +| Position Fn Y | Function for color distribution in the Y dimension | String | No | +| Position Fn Z | Function for color distribution in the Z dimension | String | No | +| Hue Shift | Amount to shift all hues in the resulting palette | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------------------- | -------------- | +| Value | Array of generated colors in the palette | List of Colors | + +
+ +### How to Use It + +1. Drag the Poline node into your graph. +2. Connect at least two colors to the "Anchor Colors" input. (You can create an array of colors using the [Arrify node](../array/arrify.md)). +3. Set "Num Points" to control how many colors are in the final palette (default: 4). +4. Optionally customize the position functions and other parameters. [Read more about these parameters](https://meodai.github.io/poline/?ref=evernote.design). +5. The output will be an array of colors creating a smooth palette between the anchor colors. So if the input is two colors and the "Num Points" is 4, the output will be an array of six colors. + +
+ +### Tips + +* Different position functions create different distribution patterns (sinusoidal is the default). +* More anchor colors create more complex, multi-dimensional palettes. +* Try inverting lightness to create interesting contrast variations. + +### See Also + +* [**Color Wheel**](color-wheel.md): For generating simpler color palettes based on color wheel relationships. +* [**Range**](range.md): For linear interpolation between two colors. +* [**Scale**](scale.md): For creating color scales with customizable easing. + +### Use Cases + +* **Advanced Color Systems**: Create sophisticated, multi-dimensional color palettes. +* **Data Visualization**: Generate perceptually uniform color scales for complex data. +* **Design Systems**: Create related but distinct color sets for different UI components. diff --git a/graph-engine/available-nodes/color/range.md b/graph-engine/available-nodes/color/range.md new file mode 100644 index 0000000..4c726de --- /dev/null +++ b/graph-engine/available-nodes/color/range.md @@ -0,0 +1,52 @@ +# Range + +### What It Does + +Creates a sequence of colors that transition smoothly between two endpoint colors. Perfect for generating color palettes, gradients, or stepping between design tokens with customizable interpolation. + +### Inputs + +| Name | Description | Type | Required | +| ----------- | -------------------------------------------------- | ------ | -------- | +| colorA | The starting color | Color | No | +| colorB | The ending color | Color | No | +| space | The color space to interpolate in | String | No | +| hue | How to interpolate the hue (shorter, longer, etc.) | String | No | +| steps | Number of colors to generate (including endpoints) | Number | No | +| progression | The interpolation curve (linear, quadratic, cubic) | String | No | + +### Outputs + +| Name | Description | Type | +| ------ | --------------------------------------------------- | ---- | +| colors | Array of colors transitioning from colorA to colorB | List | + +
+ +### How to Use It + +1. Drag the Range node into your graph. +2. Connect your starting color (like `#3366FF`) to the "colorA" input. +3. Connect your ending color (like `#FF6633`) to the "colorB" input. +4. Set the color "space" to interpolate in (like lab). +5. Set "steps" to the number of colors you want (e.g., 5). +6. Set the progression to define the interpolation (like linear). +7. Run the graph—your output will be an array of colors that form a smooth transition. + +
+ +### Tips + +* Different color spaces produce different transitions. "Lab" and "Oklch" usually give the most perceptually uniform results. +* The "progression" parameter controls the easing of the transition—try different options for varied effects. + +### See Also + +* [**Mix Colors**](mix.md): For blending just two colors together. +* [**Scale Colors**](scale.md): For creating variants of a single color. + +### Use Cases + +* **Color Palettes**: Generate a consistent palette with evenly spaced colors for data visualization. +* **Gradient Creation**: Build multi-stop gradient definitions for backgrounds or UI elements. +* **Token Scales**: Create a complete set of design tokens from light to dark for a design system. diff --git a/graph-engine/available-nodes/color/scale.md b/graph-engine/available-nodes/color/scale.md new file mode 100644 index 0000000..c6fe8d8 --- /dev/null +++ b/graph-engine/available-nodes/color/scale.md @@ -0,0 +1,48 @@ +# Scale Colors + +### What It Does + +Creates a palette of related colors by generating lighter and darker variations of a base color. This is perfect for building comprehensive color scales or creating light and dark variants for UI elements. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ---------------------------------------- | ------ | -------- | +| color | The base color to create variations from | Color | No | +| stepsUp | Number of lighter variations to create | Number | No | +| stepsDown | Number of darker variations to create | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------------------------------------------------- | ---- | +| value | Array of colors with lighter variations followed by darker variations | List | + +
+ +### How to Use It + +1. Drag the Scale Colors node into your graph. +2. Connect your base color (like `#3366CC`) to the "color" input. +3. Set "stepsUp" to the number of lighter variations you want (e.g., 3). +4. Set "stepsDown" to the number of darker variations you want (e.g., 3). +5. Run the graph—your output will be an array of colors with your base color in the middle. +6. Drag in a [Color Scale](../vector2/scale.md) preview node to visualise the colors. + +
+ +### Tips + +* The colors are arranged from lightest to darkest in the output array. +* Use this to quickly create semantic UI color scales (e.g., primary-100 through primary-900). + +### See Also + +* [**Range**](range.md): For creating a color transition between two different colors. +* [**Lighten Color**](lighten.md): For simple lightness adjustments to a single color. + +### Use Cases + +* **UI Component Libraries**: Create complete color scales for buttons, alerts, and other UI elements. +* **Background Variations**: Generate lighter and darker backgrounds for different UI states and hierarchies. +* **Design System Scales**: Build systematic color scales with consistent lightness steps for your design system. diff --git a/graph-engine/available-nodes/color/sort-colors-by-distance.md b/graph-engine/available-nodes/color/sort-colors-by-distance.md new file mode 100644 index 0000000..f23a1da --- /dev/null +++ b/graph-engine/available-nodes/color/sort-colors-by-distance.md @@ -0,0 +1,49 @@ +# Sort Colors By Distance + +### What It Does + +The Sort Colors By Distance node arranges an array of colors by their relationship to a reference color. It can sort based on various color attributes like contrast, hue, lightness, saturation, or overall color distance. + +### Inputs + +| Name | Description | Type | Required | +| ------------- | --------------------------------------------------------------- | -------------- | -------- | +| Colors | Array of colors to be sorted | List of Colors | Yes | +| Compare Color | Reference color to sort against | Color | Yes | +| Type | Sorting method (Contrast, Hue, Lightness, Saturation, Distance) | String | No | +| Algorithm | Contrast algorithm to use when sorting by contrast | String | No | + +### Outputs + +| Name | Description | Type | +| ------- | ------------------------------------------------------ | --------------- | +| Value | The sorted array of colors | List of Colors | +| Indices | The original indices of the colors in the sorted array | List of Numbers | + +
+ +### How to Use It + +1. Drag the Sort Colors By Distance node into your graph. +2. Connect an array of colors to the "Colors" input. (Here a [Color Wheel](color-wheel.md) node is used generate an array of colors). +3. Connect a reference color to the "Compare Color" input (like `#1728E3`). +4. Select a sorting method from the "Type" dropdown (default: Hue). Here lightness is selected. +5. The output will be the sorted colors and their original indices. + +
+ +### Tips + +* Use different sorting methods to achieve various visual arrangements of color palettes. +* The indices output is useful for tracking how the original array was rearranged. + +### See Also + +* [**Color Wheel**](color-wheel.md): For generating colors to sort. +* [**Range**](range.md): For creating color ranges to sort. + +### Use Cases + +* **Color Palette Organization**: Arrange colors in a visually logical order. +* **Accessible Color Selection**: Sort by contrast to find the most readable options. +* **Gradient Generation**: Sort colors by hue or lightness to create smooth transitions. diff --git a/graph-engine/available-nodes/color/string-to-color.md b/graph-engine/available-nodes/color/string-to-color.md new file mode 100644 index 0000000..7233acd --- /dev/null +++ b/graph-engine/available-nodes/color/string-to-color.md @@ -0,0 +1,43 @@ +# String To Color + +### What It Does + +Converts a text representation of a color into a color object. This lets you transform hex codes, color names, or CSS color functions into usable color objects for your graph. + +### Inputs + +| Name | Description | Type | Required | +| ----- | -------------------------------------------------------------------- | ------ | -------- | +| color | The color string to convert (e.g., "#FF0000", "red", "rgb(255,0,0)") | String | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------------- | ----- | +| color | The parsed color as a color object | Color | + +
+ +### How to Use It + +1. Drag the String to Color node into your graph. +2. Connect a text string (like `"#3366CC"`, `"blue"`, or `"hsl(210, 100%, 50%)"`) to the "color" input. +3. Run the graph—your output will be a color object that can be used with other color nodes. + +
+ +### Tips + +* The node accepts many formats: hex codes, color names, RGB, HSL, and more. +* Use this to convert color data from APIs, user inputs, or imported design tokens. + +### See Also + +* [**Color to String**](color-to-string.md): For converting color objects back to text representations. +* [**Create Color**](create.md): For building a color from individual channel values. + +### Use Cases + +* **Processing Input Data**: Convert color strings from imported data files or API responses. +* **Design Token Import**: Transform color tokens from text-based formats into usable color objects. +* **Dynamic Theming**: Parse color strings from configuration files or user preferences. diff --git a/graph-engine/available-nodes/css/README.md b/graph-engine/available-nodes/css/README.md new file mode 100644 index 0000000..2432067 --- /dev/null +++ b/graph-engine/available-nodes/css/README.md @@ -0,0 +1,21 @@ +# CSS + +Nodes for generating CSS-related outputs. Create properties, map tokens to styles, or calculate responsive clamps—designed for producing code-ready results. + + + +{% content-ref url="css-accessible-clamp.md" %} +[css-accessible-clamp.md](css-accessible-clamp.md) +{% endcontent-ref %} + +{% content-ref url="css-box.md" %} +[css-box.md](css-box.md) +{% endcontent-ref %} + +{% content-ref url="css-function.md" %} +[css-function.md](css-function.md) +{% endcontent-ref %} + +{% content-ref url="css-map.md" %} +[css-map.md](css-map.md) +{% endcontent-ref %} diff --git a/graph-engine/available-nodes/css/css-accessible-clamp.md b/graph-engine/available-nodes/css/css-accessible-clamp.md new file mode 100644 index 0000000..3582092 --- /dev/null +++ b/graph-engine/available-nodes/css/css-accessible-clamp.md @@ -0,0 +1,44 @@ +# CSS Accessible Clamp + +### What It Does +Generates a CSS clamp() function that creates fluid typography based on viewport width. It automatically calculates the correct formula to smoothly scale font sizes between minimum and maximum values, ensuring accessibility by using rem units. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| minSize | Minimum font size in pixels | Number | No | +| maxSize | Maximum font size in pixels | Number | No | +| minViewport | Minimum viewport width in pixels | Number | No | +| maxViewport | Maximum viewport width in pixels | Number | No | +| baseFontSize | Base font size in pixels (usually browser default of 16px) | Number | No | +| precision | Number of decimal places in the output | Number | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| value | The generated CSS clamp function | Text | + +### How to Use It +1. Drag the CSS Accessible Clamp node into your graph. +2. Set the "minSize" for your smallest font size (default 16px). +3. Set the "maxSize" for your largest font size (default 24px). +4. Define the viewport range with "minViewport" (default 320px) and "maxViewport" (default 1920px). +5. Run the graph—your output will be a CSS clamp() function like `clamp(1rem, calc(0.500vw + 0.5rem), 1.5rem)`. + +![CSS Accessible Clamp Example](screenshot-placeholder.png) + +### Tips +- The output uses rem units for better accessibility, allowing text to scale with browser settings. +- Use this for responsive typography that respects user preferences. +- The calculated formula ensures linear scaling between viewport sizes. + +### See Also +- **CSS Function**: For creating other CSS functions like var(), calc(), etc. +- **Range Mapping**: For mapping values between ranges without generating CSS. +- **Math Lerp**: For basic linear interpolation calculations. + +### Use Cases +- **Responsive Typography**: Create text that smoothly scales from mobile to desktop. +- **Accessible Design**: Ensure text sizes respect user preferences while maintaining proportions. +- **Design Systems**: Generate fluid type scales that work across all viewport sizes. +- **Component Libraries**: Define responsive text components that scale automatically. \ No newline at end of file diff --git a/graph-engine/available-nodes/css/css-box.md b/graph-engine/available-nodes/css/css-box.md new file mode 100644 index 0000000..4682428 --- /dev/null +++ b/graph-engine/available-nodes/css/css-box.md @@ -0,0 +1,41 @@ +# CSS Box + +### What It Does +Creates CSS box model notation by combining four values (top, right, bottom, left) into a single space-separated string. This is the standard format used for CSS properties like margin, padding, and border-width. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| top | The top value | Number | No | +| right | The right value | Number | No | +| bottom | The bottom value | Number | No | +| left | The left value | Number | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| value | The combined CSS box value (e.g., "10 20 10 20") | Text | + +### How to Use It +1. Drag the CSS Box node into your graph. +2. Set values for each side: "top" (e.g., 10), "right" (e.g., 20), "bottom" (e.g., 10), "left" (e.g., 20). +3. Run the graph—your output will be "10 20 10 20". +4. Use this output with CSS properties like margin, padding, or border-width. + +![CSS Box Example](screenshot-placeholder.png) + +### Tips +- This format follows the CSS standard: top, right, bottom, left (clockwise from the top). +- CSS has shorthand rules: if all four values are the same, you can use a single value. +- When using with CSS, you may need to add units (like "px" or "rem") after the generated string. + +### See Also +- **CSS Function**: For creating other CSS functions like var(), calc(), etc. +- **CSS Accessible Clamp**: For generating responsive typography values. +- **String Join**: For combining strings with custom separators. + +### Use Cases +- **Margins and Padding**: Define spacing around elements. +- **Border Width**: Set different border widths for each side of an element. +- **Position Offsets**: Define top, right, bottom, left values for positioned elements. +- **Design Tokens**: Create standardized spacing values for your design system. \ No newline at end of file diff --git a/graph-engine/available-nodes/css/css-function.md b/graph-engine/available-nodes/css/css-function.md new file mode 100644 index 0000000..4be3407 --- /dev/null +++ b/graph-engine/available-nodes/css/css-function.md @@ -0,0 +1,39 @@ +# CSS Function + +### What It Does +Creates CSS function syntax by wrapping a value in one of the standard CSS functions (like var(), calc(), rgb(), etc.). This node formats the input value correctly according to CSS syntax rules. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| functionName | The CSS function to use | Text | Yes | +| value | The content to place inside the function | Text | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| value | The complete CSS function with the value | Text | + +### How to Use It +1. Drag the CSS Function node into your graph. +2. Select a function from the "functionName" dropdown (e.g., "var()"). +3. Set the "value" you want inside the function (e.g., "--primary-color"). +4. Run the graph—with the example values, your output will be "var(--primary-color)". + +![CSS Function Example](screenshot-placeholder.png) + +### Tips +- The function list includes all standard CSS functions from the MDN documentation. +- For functions that take multiple parameters, include them all in the value input with proper formatting. +- Remember to follow each function's syntax requirements for proper CSS output. + +### See Also +- **CSS Accessible Clamp**: For generating responsive typography with clamp(). +- **CSS Box**: For creating CSS box model properties. +- **String Interpolate**: For more complex string manipulation needs. + +### Use Cases +- **CSS Variables**: Create var() references to design token variables. +- **Calculations**: Generate calc() expressions for dynamic layouts. +- **Colors**: Format RGB, HSL, or other color function notations. +- **Transforms**: Create transform functions like translate(), rotate(), scale(). \ No newline at end of file diff --git a/graph-engine/available-nodes/css/css-map.md b/graph-engine/available-nodes/css/css-map.md new file mode 100644 index 0000000..8c4590d --- /dev/null +++ b/graph-engine/available-nodes/css/css-map.md @@ -0,0 +1,35 @@ +# CSS Map + +### What It Does +Creates an object containing CSS properties from all connected inputs. It allows you to gather multiple CSS-related values into a single structured object. + +### Inputs +| Name | Description | Type | Required | +|-------|------------------------------|------|----------| +| (dynamic) | Any CSS property you want to include | Any | No | + +### Outputs +| Name | Description | Type | +|-------|-------------------------------------|--------| +| value | Object containing all CSS properties | Object | + +### How to Use It +1. Drag the CSS Map node into your graph. +2. Add inputs by right-clicking the node and selecting "Add Input". +3. Name each input using valid CSS property names (e.g., "color", "font-size"). +4. Connect values to each input to build your CSS object. + +![CSS Map Example](screenshot-placeholder.png) + +### Tips +- Only properties with connected values will appear in the output object. +- Property names should match standard CSS property names for compatibility with CSS output formats. + +### See Also +- **CSS Box**: For creating box model-specific CSS properties. +- **CSS Function**: For generating CSS function syntax like calc() or var(). + +### Use Cases +- **Component Styling**: Collect various style properties to define a component's appearance. +- **Token Organization**: Group related CSS properties into a structured format for design systems. +- **Style Preprocessing**: Prepare multiple CSS values before applying them to style generators. \ No newline at end of file diff --git a/graph-engine/available-nodes/curves/README.md b/graph-engine/available-nodes/curves/README.md new file mode 100644 index 0000000..5647f5f --- /dev/null +++ b/graph-engine/available-nodes/curves/README.md @@ -0,0 +1,37 @@ +# Curves + +Nodes for creating and sampling curves. Supports Bezier and float curves for tasks like defining transitions or interpolation in graphs. + + + +{% content-ref url="bezier-curve.md" %} +[bezier-curve.md](bezier-curve.md) +{% endcontent-ref %} + +{% content-ref url="construct-float-curve.md" %} +[construct-float-curve.md](construct-float-curve.md) +{% endcontent-ref %} + +{% content-ref url="deconstruct-float-curve.md" %} +[deconstruct-float-curve.md](deconstruct-float-curve.md) +{% endcontent-ref %} + +{% content-ref url="flip-float-curve.md" %} +[flip-float-curve.md](flip-float-curve.md) +{% endcontent-ref %} + +{% content-ref url="preset-bezier-curves.md" %} +[preset-bezier-curves.md](preset-bezier-curves.md) +{% endcontent-ref %} + +{% content-ref url="sample-array-from-float-curve.md" %} +[sample-array-from-float-curve.md](sample-array-from-float-curve.md) +{% endcontent-ref %} + +{% content-ref url="sample-curve.md" %} +[sample-curve.md](sample-curve.md) +{% endcontent-ref %} + +{% content-ref url="sample-float-curve.md" %} +[sample-float-curve.md](sample-float-curve.md) +{% endcontent-ref %} diff --git a/graph-engine/available-nodes/curves/bezier-curve.md b/graph-engine/available-nodes/curves/bezier-curve.md new file mode 100644 index 0000000..3eb74dc --- /dev/null +++ b/graph-engine/available-nodes/curves/bezier-curve.md @@ -0,0 +1,52 @@ +# Bezier Curve + +### What It Does + +Creates a cubic Bezier curve by defining two control points that determine the curve's shape. The curve always starts at point (0,0) and ends at point (1,1), with the control points determining how it curves between these fixed points. + +### Inputs + +| Name | Description | Type | Required | +| ---- | ---------------------------------------------- | ------ | -------- | +| x1 | X coordinate of the first control point (0-1) | Number | No | +| y1 | Y coordinate of the first control point (0-1) | Number | No | +| x2 | X coordinate of the second control point (0-1) | Number | No | +| y2 | Y coordinate of the second control point (0-1) | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------- | ----- | +| curve | The resulting Bezier curve | Curve | + +![Bezier Curve Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 6.29.29 PM.png>) + +### How to Use It + +1. Drag the Bezier Curve node into your graph. +2. Set the x1, y1 coordinates for the first control point (default is 0.5, 0). +3. Set the x2, y2 coordinates for the second control point (default is 0.5, 1). +4. Run the graph—the output will be a Bezier curve object you can use with other curve nodes. +5. Adjust the control points to change the shape of the curve. + +
+ +### Tips + +* Different control point configurations create different curve behaviors: + * Linear: Set points to (0,0) and (1,1) + * Ease-in: Set points to (0.42, 0) and (1, 1) + * Ease-out: Set points to (0, 0) and (0.58, 1) + * Ease-in-out: Set points to (0.42, 0) and (0.58, 1) +* All coordinates must be between 0 and 1. + +### See Also + +* **Preset Beziers**: For commonly used predefined Bezier curves. +* **Sample Curve**: To evaluate a curve at a specific point. +* **Float Curve**: For more complex curve definitions. + +### Use Cases + +* **Animation Timing**: Create custom easing functions for smoother animations. +* **Interpolation Control**: Define how values should blend between endpoints. diff --git a/graph-engine/available-nodes/curves/construct-float-curve.md b/graph-engine/available-nodes/curves/construct-float-curve.md new file mode 100644 index 0000000..450b88d --- /dev/null +++ b/graph-engine/available-nodes/curves/construct-float-curve.md @@ -0,0 +1,36 @@ +# Construct Float Curve + +### What It Does +Creates a float curve by combining segment points and control points. It builds a mathematical curve representation that can be used for animations, transitions, or interpolations. + +### Inputs +| Name | Description | Type | Required | +|---------------|----------------------------------------------|----------|----------| +| segments | The anchor points that define the curve path | List | Yes | +| controlPoints | The handles that control the curve's shape | List | Yes | + +### Outputs +| Name | Description | Type | +|-------|----------------------------------------|-------------| +| curve | The constructed float curve object | Float Curve | + +### How to Use It +1. Drag the Construct Float Curve node into your graph. +2. Connect an array of Vec2 points to the "segments" input (these are the anchor points). +3. Connect an array of Vec2 control point pairs to the "controlPoints" input. +4. The node outputs a complete float curve that can be used with other curve nodes. + +![Construct Float Curve Example](screenshot-placeholder.png) + +### Tips +- You must have exactly one more segment than control point pairs for a valid curve. +- Each segment is a [x,y] coordinate, and each control point is a pair of [x,y] coordinates. + +### See Also +- **Deconstruct Float Curve**: For breaking a float curve into its component parts. +- **Sample Float Curve**: For evaluating a float curve at specific points. + +### Use Cases +- **Custom Easing Functions**: Create precise animation timing curves for transitions. +- **Data Visualization**: Build custom curves for representing complex data relationships. +- **Path Generation**: Define smooth paths for design elements to follow. \ No newline at end of file diff --git a/graph-engine/available-nodes/curves/deconstruct-float-curve.md b/graph-engine/available-nodes/curves/deconstruct-float-curve.md new file mode 100644 index 0000000..48a80cb --- /dev/null +++ b/graph-engine/available-nodes/curves/deconstruct-float-curve.md @@ -0,0 +1,45 @@ +# Deconstruct Float Curve + +### What It Does + +Breaks down a float curve into its fundamental components: segments (anchor points) and control points. This allows you to access and manipulate the individual parts of a curve. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ------------------------------ | ----------- | -------- | +| curve | The float curve to deconstruct | Float Curve | Yes | + +### Outputs + +| Name | Description | Type | +| ------------- | -------------------------------------------- | ---- | +| segments | The anchor points that define the curve path | List | +| controlPoints | The handles that control the curve's shape | List | + +![Deconstruct Float Curve Example](<../../../.gitbook/assets/Screenshot 2025-04-09 at 8.13.34 PM.png>) + +### How to Use It + +1. Drag the Deconstruct Float Curve node into your graph. +2. Connect a float curve to the "curve" input. +3. Use the "segments" output to access the curve's anchor points. +4. Use the "controlPoints" output to access the curve's control handles. + +
+ +### Tips + +* Segments are always one more than control point pairs in a properly constructed curve. +* Use this node when you need to modify individual points of an existing curve. + +### See Also + +* **Construct Float Curve**: For building a float curve from segments and control points. +* **Flip Float Curve**: For creating mirrored versions of a curve. + +### Use Cases + +* **Curve Analysis**: Examine the specific points that make up a curve. +* **Curve Manipulation**: Extract components to adjust them before reconstructing the curve. +* **Animation Control**: Fine-tune animation paths by accessing their component points. diff --git a/graph-engine/available-nodes/curves/flip-float-curve.md b/graph-engine/available-nodes/curves/flip-float-curve.md new file mode 100644 index 0000000..1427db2 --- /dev/null +++ b/graph-engine/available-nodes/curves/flip-float-curve.md @@ -0,0 +1,37 @@ +# Flip Float Curve + +### What It Does +Mirrors a float curve horizontally, vertically, or both, creating transformed versions of the curve while maintaining its mathematical properties. This allows for quick creation of inverse or reflected curve behaviors. + +### Inputs +| Name | Description | Type | Required | +|----------------|-------------------------------------|-------------|----------| +| curve | The float curve to flip | Float Curve | Yes | +| flipHorizontal | Whether to mirror across Y-axis | Yes/No | No | +| flipVertical | Whether to mirror across X-axis | Yes/No | No | + +### Outputs +| Name | Description | Type | +|-------|-----------------------------|-------------| +| curve | The transformed float curve | Float Curve | + +### How to Use It +1. Drag the Flip Float Curve node into your graph. +2. Connect a float curve to the "curve" input. +3. Set "flipHorizontal" and/or "flipVertical" to true as needed. +4. The node outputs a new curve with the specified transformations applied. + +![Flip Float Curve Example](screenshot-placeholder.png) + +### Tips +- When both horizontal and vertical flips are false, the original curve is passed through unchanged. +- Flipping horizontally will reverse the direction of the curve, useful for creating reverse animations. + +### See Also +- **Construct Float Curve**: For building a float curve from scratch. +- **Sample Float Curve**: For evaluating the resulting curve at specific points. + +### Use Cases +- **Animation Reversals**: Create reversed versions of easing functions. +- **Symmetrical Designs**: Generate mirrored curves for symmetrical design elements. +- **Curve Libraries**: Efficiently create variations of standard curves for different contexts. \ No newline at end of file diff --git a/graph-engine/available-nodes/curves/preset-bezier-curves.md b/graph-engine/available-nodes/curves/preset-bezier-curves.md new file mode 100644 index 0000000..b16ba3e --- /dev/null +++ b/graph-engine/available-nodes/curves/preset-bezier-curves.md @@ -0,0 +1,55 @@ +# Preset Bezier Curves + +### What It Does + +Provides quick access to a library of commonly used Bezier curves for animations and transitions. Instead of manually defining control points, you can select from named presets that represent standard easing functions. + +### Inputs + +| Name | Description | Type | Required | +| ---- | ----------------------------------- | ---- | -------- | +| name | The name of the preset curve to use | Text | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------- | ----- | +| curve | The selected Bezier curve | Curve | + +![Preset Bezier Curves Example](<../../../.gitbook/assets/Screenshot 2025-04-09 at 8.16.41 PM.png>) + +### How to Use It + +1. Drag the Preset Bezier Curves node into your graph. +2. Select a preset from the "name" dropdown (default is "linear"). +3. Run the graph—the output will be a Bezier curve with the control points for the selected preset. +4. Use this output with other curve nodes like Sample Curve. + +### Available Presets + +* **Linear**: A straight line with no easing (linear interpolation) +* **Ease In**: Starts slow, accelerates (variations: Sine, Quad, Cubic, Quart, Quint, Expo, Circ, Back) +* **Ease Out**: Starts fast, decelerates (variations: Sine, Quad, Cubic, Quart, Quint, Expo, Circ, Back) +* **Ease In Out**: Starts slow, speeds up in the middle, slows down at the end (variations: Sine, Quad, Cubic, Quart, Quint, Expo, Circ, Back, Elastic) + +### Tips + +* Different easing functions create different visual feels: + * Sine: Gentle, subtle easing + * Quad/Cubic/Quart/Quint: Progressively stronger easing + * Expo: Dramatic, exponential easing + * Circ: Based on circular motion + * Back: Slightly overshoots before settling + * Elastic: Bouncy, spring-like motion + +### See Also + +* **Bezier Curve**: For creating custom curves when presets aren't sufficient. +* **Sample Curve**: To evaluate a curve at a specific point. +* **Float Curve**: For more complex curve definitions. + +### Use Cases + +* **UI Animations**: Create natural-feeling transitions between states. +* **Motion Design**: Apply industry-standard easing to movement. +* **Data Visualization**: Transform linear data into more organic visual representations. diff --git a/graph-engine/available-nodes/curves/sample-array-from-float-curve.md b/graph-engine/available-nodes/curves/sample-array-from-float-curve.md new file mode 100644 index 0000000..3b12f8c --- /dev/null +++ b/graph-engine/available-nodes/curves/sample-array-from-float-curve.md @@ -0,0 +1,37 @@ +# Sample Array from Float Curve + +### What It Does +Evaluates a float curve at multiple X positions and returns an array of the corresponding Y values. This allows you to generate sequences of values based on a curve's shape. + +### Inputs +| Name | Description | Type | Required | +|--------------|-----------------------------------------------|-------------|----------| +| curve | The float curve to sample | Float Curve | Yes | +| samplePoints | Array of X positions (0-1) to sample | List | Yes | +| precision | Number of decimal places for the results | Number | No | + +### Outputs +| Name | Description | Type | +|--------|---------------------------------------------|------| +| values | Array of Y values sampled from the curve | List | + +### How to Use It +1. Drag the Sample Array from Float Curve node into your graph. +2. Connect a float curve to the "curve" input. +3. Connect an array of X positions (between 0 and 1) to the "samplePoints" input. +4. Optionally set the "precision" input to control decimal places (default is 2). + +![Sample Array from Float Curve Example](screenshot-placeholder.png) + +### Tips +- All X values must be between 0 and 1, representing normalized positions along the curve. +- Higher precision values will give more accurate results but might be unnecessary for most design applications. + +### See Also +- **Sample Float Curve**: For sampling a single point on a curve. +- **Construct Float Curve**: For creating custom curves to sample. + +### Use Cases +- **Animation Keyframes**: Generate multiple animation steps from a single easing curve. +- **Data Visualization**: Create smooth distributions of values based on a curve shape. +- **Design Scales**: Build graduated scales for spacing, sizing, or opacity based on a mathematical curve. \ No newline at end of file diff --git a/graph-engine/available-nodes/curves/sample-curve.md b/graph-engine/available-nodes/curves/sample-curve.md new file mode 100644 index 0000000..1c0d113 --- /dev/null +++ b/graph-engine/available-nodes/curves/sample-curve.md @@ -0,0 +1,50 @@ +# Sample Curve + +### What It Does + +Evaluates a curve at a specific point along its length, returning the exact coordinates (x,y) at that position. This allows you to get precise values from a curve at any point between its start and end. + +### Inputs + +| Name | Description | Type | Required | +| ------ | ---------------------------------------------- | ------ | -------- | +| curve | The curve to sample | Curve | Yes | +| sample | The position along the curve to evaluate (0-1) | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------------------------- | ------- | +| value | The coordinates at the sample point as a 2D vector | Vector2 | +| x | The x-coordinate at the sample point | Number | +| y | The y-coordinate at the sample point | Number | + +![Sample Curve Example](<../../../.gitbook/assets/Screenshot 2025-04-09 at 8.05.40 PM.png>) + +### How to Use It + +
+ +1. Drag the Sample Curve node into your graph. +2. Connect a curve (like from a Bezier Curve node) to the "curve" input. +3. Set the "sample" input to a value between 0 and 1 (default is 0.5, which is the middle of the curve). +4. Run the graph—the outputs will be the coordinates at that point on the curve. + * For a standard Bezier with default control points, at sample=0.5, you might get value=\[0.5, 0.5] + +### Tips + +* The sample value represents the progression along the curve, where 0 is the start and 1 is the end. +* For Bezier curves, the sample doesn't directly correspond to x-coordinates—a sample of 0.5 might not give you an x-coordinate of 0.5 due to the curve's shape. +* Use this node to map progress (0-1) to actual coordinate values along a curve. + +### See Also + +* **Bezier Curve**: For creating curves that can be sampled. +* **Preset Beziers**: For commonly used predefined curves. +* **Float Curve**: For more complex curve definitions. + +### Use Cases + +* **Animation Paths**: Calculate positions along a curved path for smooth movement. +* **Easing Functions**: Convert linear progress to eased values for natural animations. +* **Data Visualization**: Map data points to curved representations instead of straight lines. diff --git a/graph-engine/available-nodes/curves/sample-float-curve.md b/graph-engine/available-nodes/curves/sample-float-curve.md new file mode 100644 index 0000000..27d0a18 --- /dev/null +++ b/graph-engine/available-nodes/curves/sample-float-curve.md @@ -0,0 +1,46 @@ +# Sample Float Curve + +### What It Does + +Evaluates a float curve at a specific X value and returns the corresponding Y value. This node allows you to get a precise point along a curve for interpolation or animation. + +### Inputs + +| Name | Description | Type | Required | +| ----- | -------------------------------------------- | ----------- | -------- | +| curve | The float curve to sample | Float Curve | Yes | +| x | The position along the curve (0-1) to sample | Number | No | + +### Outputs + +| Name | Description | Type | +| ---- | ------------------------------------------ | ------ | +| y | The calculated value at the given position | Number | + +![Sample Float Curve Example](<../../../.gitbook/assets/Screenshot 2025-04-09 at 7.59.50 PM.png>) + +### How to Use It + +1. Drag the Sample Float Curve node into your graph. +2. Connect a float curve to the "curve" input. +3. Set the "x" value to a number between 0 and 1 (defaults to 0). +4. The node outputs the y-value at that position on the curve. +5. + +
+ +### Tips + +* The x value must be between 0 and 1, representing the normalized position along the curve. +* For easing functions, 0 typically represents the start and 1 represents the end of the animation. + +### See Also + +* **Sample Array from Float Curve**: For sampling multiple points along a curve at once. +* **Bezier Curve**: For creating standard cubic bezier curves to sample. + +### Use Cases + +* **Animation Timing**: Get precise intermediate values for smooth animations. +* **Easing Functions**: Apply custom easing to transitions between states. +* **Interpolation**: Calculate values between keyframes based on curved rather than linear progression. diff --git a/graph-engine/available-nodes/design-tokens/README.md b/graph-engine/available-nodes/design-tokens/README.md new file mode 100644 index 0000000..69358d1 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/README.md @@ -0,0 +1,3 @@ +# Design Tokens + +Nodes for building and managing design tokens. Constructs tokens like borders, shadows, or typography from inputs, organizing them into reusable sets. diff --git a/graph-engine/available-nodes/design-tokens/array-to-set.md b/graph-engine/available-nodes/design-tokens/array-to-set.md new file mode 100644 index 0000000..8c43dba --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/array-to-set.md @@ -0,0 +1,36 @@ +# Array of Tokens to Set + +### What It Does +The Array of Tokens to Set node converts a flat array of tokens into a hierarchical token set structure. It transforms a simple list of tokens into a nested object structure, organizing tokens based on their names. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Tokens | A flat array of design tokens | List | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token Set | A hierarchical collection of tokens organized by their names | Object | + +### How to Use It +1. Drag the Array of Tokens to Set node into your graph. +2. Connect an array of tokens to the "Tokens" input. +3. The node will organize the tokens into a hierarchical structure based on the name properties of each token. +4. Use the resulting token set with nodes that require structured token collections. + +![Array of Tokens to Set Example](screenshot-placeholder.png) + +### Tips +- Token names with periods or slashes (e.g., `colors.primary` or `colors/primary`) will be converted into nested objects in the resulting set. +- This node is useful for preparing tokens for export to file formats that expect a hierarchical structure. +- All token metadata is preserved during the conversion process. + +### See Also +- **Token set to token array**: For converting in the opposite direction. +- **Group**: For more customizable grouping operations on token arrays. + +### Use Cases +- **Token Export Preparation**: Convert a processed list of tokens back into a structured format for export. +- **Token Organization**: Automatically organize a flat list of tokens into a logical hierarchy. +- **Token Structure Rebuilding**: Restore hierarchical structure to tokens that have been flattened for processing. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/create-border-design-token.md b/graph-engine/available-nodes/design-tokens/create-border-design-token.md new file mode 100644 index 0000000..f28cfd3 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/create-border-design-token.md @@ -0,0 +1,49 @@ +# Create Border Design Token + +### What It Does +The Create Border Design Token node constructs a border-type design token from provided inputs. It allows you to define border properties such as width, style, and color, and generates a standardized token object that can be used in a design system. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Name | The name identifier for the token | String | Yes | +| Reference | A reference to another token (used when the token references another token) | String | No* | +| Value | Array of border values defining width, style, and color | Array | No* | +| Description | Optional description of what the token represents | String | No | +| $extensions | Optional metadata for the token | Object | No | + +*Either Reference or Value must be provided + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token | The complete design token object | Object | + +### How to Use It +1. Drag the Create Border Design Token node into your graph. +2. Connect a string to the "Name" input to identify your token. +3. Either: + - Connect an array of border values to the "Value" input, or + - Connect a reference string to the "Reference" input if this token references another token. +4. Optionally add a description and any extension metadata. +5. The node will output a complete border token object that follows the Tokens Studio format. + +![Create Border Design Token Example](screenshot-placeholder.png) + +### Tips +- Border tokens typically include properties like width, style (solid, dashed, etc.), and color. +- Use this node in combination with other token creation nodes to build a complete design token system. +- The "Reference" input allows you to create alias tokens that point to other tokens. +- Make sure your border values follow the expected structure with width, style, and color properties. + +### See Also +- **Create Color Design Token**: For creating color tokens. +- **Create Typography Design Token**: For creating typography tokens. +- **Create Shadow Design Token**: For creating shadow tokens. +- **Flatten Token Sets**: For managing collections of tokens. + +### Use Cases +- **Button Borders**: Create consistent border styles for different button states. +- **Input Field Styling**: Define border tokens for form fields in various states (default, focus, error). +- **Card Components**: Establish border styles for card components in a design system. +- **Dividers**: Create standardized border tokens for dividers and separators. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/create-border-token.md b/graph-engine/available-nodes/design-tokens/create-border-token.md new file mode 100644 index 0000000..6750286 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/create-border-token.md @@ -0,0 +1,53 @@ +--- +hidden: true +--- + +# Create Border Token + +### What It Does + +The Create Border Design Token node creates a complete border token by combining a name with border value(s) or a reference. It's used to define standardized borders in your design system. + +### Inputs + +| Name | Description | Type | Required | +| ----------- | ------------------------------------------------------ | ------ | -------- | +| Name | The token's identifier | Text | Yes | +| Reference | Reference to another token (if not using direct value) | Text | No\* | +| Value | Array of border values (color, width, style) | List | No\* | +| Description | Optional explanation of the token's purpose | Text | No | +| $extensions | Additional metadata for the token | Object | No | + +\*Either Reference or Value must be provided + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------- | ----- | +| Token | The complete border design token | Token | + +### How to Use It + +1. Drag the Create Border Design Token node into your graph. +2. Connect a name (like "border.primary") to the "Name" input. +3. Either connect border value(s) from Create Border nodes to the "Value" input, or +4. Connect a reference string (like "{border.base}") to the "Reference" input. +5. Optionally add a description and extensions as needed. + +![Create Border Design Token Example](screenshot-placeholder.png) + +### Tips + +* Use Value for direct border definitions, or Reference to point to another border token. +* You can provide multiple border values to create complex borders. + +### See Also + +* **Create a Border**: For creating border values to use with this node. +* **Create Design Token**: For creating basic design tokens of other types. + +### Use Cases + +* **Component Library**: Define standard borders for UI elements like buttons and cards. +* **Design System**: Create a consistent set of border tokens for various states and components. +* **Theme Switching**: Create border tokens that can be swapped out for different themes. diff --git a/graph-engine/available-nodes/design-tokens/create-border.md b/graph-engine/available-nodes/design-tokens/create-border.md new file mode 100644 index 0000000..4e98d48 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/create-border.md @@ -0,0 +1,38 @@ +# Create a Border + +### What It Does +The Create a Border node generates a composite border value by combining color, width, and style properties. It's useful for creating consistent border definitions in your design system. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Color | The border color (e.g., "#000000" or "black") | Text | Yes | +| Width | The border thickness (e.g., "1px" or "0.25rem") | Text | Yes | +| Style | The border line style (e.g., "solid" or "dashed") | Text | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Value | The composite border value | Border | + +### How to Use It +1. Drag the Create a Border node into your graph. +2. Connect a color value (like "#E2E2E2") to the "Color" input. +3. Connect a width value (like "1px") to the "Width" input. +4. Connect a style value (like "solid") to the "Style" input. +5. The output provides a border value that can be used in border tokens. + +![Create a Border Example](screenshot-placeholder.png) + +### Tips +- Use standard CSS border styles: solid, dashed, dotted, etc. +- Width can use any CSS units (px, rem, em, etc.). + +### See Also +- **Create Border Token**: For creating a complete border token with name and metadata. +- **Create Design Token**: For creating other types of design tokens. + +### Use Cases +- **UI Component Borders**: Create consistent border styles for buttons, cards, and input fields. +- **Focus States**: Define border values for interactive element focus states. +- **Separator Lines**: Create subtle dividers between content sections. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/create-box-shadow-design-token.md b/graph-engine/available-nodes/design-tokens/create-box-shadow-design-token.md new file mode 100644 index 0000000..c04e122 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/create-box-shadow-design-token.md @@ -0,0 +1,49 @@ +# Create Box Shadow Design Token + +### What It Does +The Create Box Shadow Design Token node constructs a box-shadow-type design token from provided inputs. It allows you to define shadow properties such as x-offset, y-offset, blur, spread, and color, and generates a standardized token object that can be used in a design system. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Name | The name identifier for the token | String | Yes | +| Reference | A reference to another token (used when the token references another token) | String | No* | +| Value | Array of box shadow values defining x, y, blur, spread and color | Array | No* | +| Description | Optional description of what the token represents | String | No | +| $extensions | Optional metadata for the token | Object | No | + +*Either Reference or Value must be provided + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token | The complete design token object | Object | + +### How to Use It +1. Drag the Create Box Shadow Design Token node into your graph. +2. Connect a string to the "Name" input to identify your token. +3. Either: + - Connect an array of box shadow values to the "Value" input, or + - Connect a reference string to the "Reference" input if this token references another token. +4. Optionally add a description and any extension metadata. +5. The node will output a complete box shadow token object that follows the Tokens Studio format. + +![Create Box Shadow Design Token Example](screenshot-placeholder.png) + +### Tips +- Box shadow tokens typically include properties like x-offset, y-offset, blur radius, spread radius, and color. +- You can create multiple shadow layers by providing an array of shadow objects. +- The "Reference" input allows you to create alias tokens that point to other tokens. +- Make sure your shadow values follow the expected structure with x, y, blur, spread, and color properties. + +### See Also +- **Create Color Design Token**: For creating color tokens. +- **Create Typography Design Token**: For creating typography tokens. +- **Create Border Design Token**: For creating border tokens. +- **Flatten Token Sets**: For managing collections of tokens. + +### Use Cases +- **Elevation System**: Create consistent shadow styles for different elevation levels. +- **Component States**: Define shadow tokens for different interactive states (hover, active, etc.). +- **Modal Overlays**: Establish shadow tokens for modal and popup components. +- **Card Depth**: Create standardized shadow tokens for indicating visual hierarchy through depth. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/create-box-shadow-token.md b/graph-engine/available-nodes/design-tokens/create-box-shadow-token.md new file mode 100644 index 0000000..601757d --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/create-box-shadow-token.md @@ -0,0 +1,53 @@ +--- +hidden: true +--- + +# Create Box Shadow Token + +### What It Does + +The Create Box Shadow Design Token node creates a complete box shadow token by combining a name with box shadow value(s) or a reference. It's used to define standardized shadow effects in your design system. + +### Inputs + +| Name | Description | Type | Required | +| ----------- | ------------------------------------------------------ | ------ | -------- | +| Name | The token's identifier | Text | Yes | +| Reference | Reference to another token (if not using direct value) | Text | No\* | +| Value | Array of box shadow values | List | No\* | +| Description | Optional explanation of the token's purpose | Text | No | +| $extensions | Additional metadata for the token | Object | No | + +\*Either Reference or Value must be provided + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------ | ----- | +| Token | The complete box shadow design token | Token | + +### How to Use It + +1. Drag the Create Box Shadow Design Token node into your graph. +2. Connect a name (like "shadow.card") to the "Name" input. +3. Either connect box shadow value(s) from Create Box Shadow nodes to the "Value" input, or +4. Connect a reference string (like "{shadow.base}") to the "Reference" input. +5. Optionally add a description and extensions as needed. + +![Create Box Shadow Design Token Example](screenshot-placeholder.png) + +### Tips + +* Use Value for direct shadow definitions, or Reference to point to another shadow token. +* You can provide multiple box shadow values to create complex shadow effects. + +### See Also + +* **Create a Box Shadow**: For creating box shadow values to use with this node. +* **Create Design Token**: For creating basic design tokens of other types. + +### Use Cases + +* **Elevation System**: Define a systematic set of shadows for different UI elevations. +* **Component States**: Create shadow tokens for different interaction states (hover, active, etc.). +* **Dark/Light Modes**: Create shadow tokens that can be swapped for different themes. diff --git a/graph-engine/available-nodes/design-tokens/create-box-shadow.md b/graph-engine/available-nodes/design-tokens/create-box-shadow.md new file mode 100644 index 0000000..a7440a9 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/create-box-shadow.md @@ -0,0 +1,43 @@ +# Create a Box Shadow + +### What It Does +The Create a Box Shadow node generates a composite box shadow value by combining x, y, blur, spread, color, and type properties. It's used to define consistent shadow effects in your design system. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| X | Horizontal offset of the shadow (e.g., "0px" or "2px") | Text | Yes | +| Y | Vertical offset of the shadow (e.g., "2px" or "4px") | Text | Yes | +| Blur | Shadow blur radius (e.g., "5px" or "10px") | Text | Yes | +| Spread | Shadow spread distance (e.g., "0px" or "2px") | Text | Yes | +| Color | Shadow color (e.g., "rgba(0,0,0,0.2)" or "#00000033") | Text | Yes | +| Type | Shadow type: "innerShadow" or "dropShadow" | Text | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Value | The composite box shadow value | Box Shadow | + +### How to Use It +1. Drag the Create a Box Shadow node into your graph. +2. Connect x offset (like "0px") to the "X" input. +3. Connect y offset (like "4px") to the "Y" input. +4. Connect blur radius (like "8px") to the "Blur" input. +5. Connect spread distance (like "0px") to the "Spread" input. +6. Connect color value (like "rgba(0,0,0,0.15)") to the "Color" input. +7. Connect shadow type (like "dropShadow") to the "Type" input. + +![Create a Box Shadow Example](screenshot-placeholder.png) + +### Tips +- Use "dropShadow" for outer shadows and "innerShadow" for inner shadows. +- Use RGBA or hex with alpha for shadows to control opacity separately from color. + +### See Also +- **Create Box Shadow Token**: For creating a complete box shadow token with name and metadata. +- **Create Design Token**: For creating other types of design tokens. + +### Use Cases +- **Elevation System**: Create consistent shadow values for different elevation levels. +- **Interactive States**: Define shadows for hover, active, or focus states. +- **Modal Overlays**: Create shadows for modals, dialogs, and popups. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/create-design-token.md b/graph-engine/available-nodes/design-tokens/create-design-token.md new file mode 100644 index 0000000..649cf25 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/create-design-token.md @@ -0,0 +1,46 @@ +# Create Design Token + +### What It Does +The Create Design Token node generates a standard design token from basic inputs. It constructs a token object with name, type, value, and optional metadata that follows the Tokens Studio format. This node handles simple token types like color, dimension, fontFamily, and others. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Name | The name identifier for the token | String | Yes | +| Type | The token type (color, dimension, etc.) | String | Yes | +| Value | The token value | String | Yes | +| Description | Optional description of what the token represents | String | No | +| $extensions | Optional metadata for the token | Object | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token | The complete design token object | Object | + +### How to Use It +1. Drag the Create Design Token node into your graph. +2. Connect a string to the "Name" input to identify your token. +3. Select a token type from the available options (color, dimension, fontFamily, etc.). +4. Connect a string value appropriate for the chosen type. +5. Optionally add a description and any extension metadata. +6. The node will output a complete token object that follows the Tokens Studio format. + +![Create Design Token Example](screenshot-placeholder.png) + +### Tips +- Use this node for simpler token types like color, dimension, and fontFamily. +- For complex token types like typography, border, and boxShadow, use their dedicated creation nodes. +- Make sure your value format matches the expected format for the chosen token type. +- Use descriptive names that follow your design system's naming convention. + +### See Also +- **Create Border Design Token**: For creating border tokens with multiple properties. +- **Create Typography Design Token**: For creating typography tokens with multiple properties. +- **Create Box Shadow Design Token**: For creating shadow tokens with multiple properties. +- **Flatten Token Sets**: For managing collections of tokens. + +### Use Cases +- **Color Systems**: Create color tokens for your design system's palette. +- **Spacing System**: Define dimension tokens for your spacing scale. +- **Font Families**: Establish font family tokens for your typography system. +- **Motion Tokens**: Create duration tokens for animations and transitions. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/create-reference.md b/graph-engine/available-nodes/design-tokens/create-reference.md new file mode 100644 index 0000000..878007a --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/create-reference.md @@ -0,0 +1,36 @@ +# Create Reference + +### What It Does +The Create Reference node builds a token reference string by joining path segments with dots and wrapping them in curly braces. It's used for creating references to other tokens in your design system. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Segments | Token path segments (can add multiple) | Text | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Reference | The formatted token reference | Text | + +### How to Use It +1. Drag the Create Reference node into your graph. +2. Connect one or more text values as segments (like "colors", "primary", "base"). +3. The node will join these segments with dots and wrap them in curly braces. +4. The output will be a reference string (e.g., "{colors.primary.base}"). + +![Create Reference Example](screenshot-placeholder.png) + +### Tips +- Add as many segment inputs as needed to build your reference path. +- The reference format follows the W3C Design Tokens standard. +- If no segments are provided, the output will be an empty string. + +### See Also +- **Create Design Token**: For creating tokens that can use these references. +- **Resolve**: For resolving references to their actual values. + +### Use Cases +- **Token Aliasing**: Create references to reuse token values in multiple places. +- **Theme Building**: Create references to base tokens for theme variations. +- **Component Tokens**: Reference system tokens from component-specific tokens. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/create-typography-design-token.md b/graph-engine/available-nodes/design-tokens/create-typography-design-token.md new file mode 100644 index 0000000..e85f8e3 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/create-typography-design-token.md @@ -0,0 +1,49 @@ +# Create Typography Design Token + +### What It Does +The Create Typography Design Token node constructs a typography-type design token from provided inputs. It allows you to define typography properties such as font family, font weight, font size, line height, letter spacing, and more, generating a standardized token object that can be used in a design system. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Name | The name identifier for the token | String | Yes | +| Reference | A reference to another token (used when the token references another token) | String | No* | +| Value | Typography values defining font properties | Object | No* | +| Description | Optional description of what the token represents | String | No | +| $extensions | Optional metadata for the token | Object | No | + +*Either Reference or Value must be provided + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token | The complete design token object | Object | + +### How to Use It +1. Drag the Create Typography Design Token node into your graph. +2. Connect a string to the "Name" input to identify your token. +3. Either: + - Connect a typography values object to the "Value" input, or + - Connect a reference string to the "Reference" input if this token references another token. +4. Optionally add a description and any extension metadata. +5. The node will output a complete typography token object that follows the Tokens Studio format. + +![Create Typography Design Token Example](screenshot-placeholder.png) + +### Tips +- Typography tokens typically include properties like fontFamily, fontSize, fontWeight, lineHeight, and letterSpacing. +- Use this node in combination with other token creation nodes to build a complete typography system. +- The "Reference" input allows you to create alias tokens that point to other typography tokens. +- Make sure your typography values follow the expected structure with all required properties. + +### See Also +- **Create Color Design Token**: For creating color tokens. +- **Create Border Design Token**: For creating border tokens. +- **Create Box Shadow Design Token**: For creating shadow tokens. +- **Flatten Token Sets**: For managing collections of tokens. + +### Use Cases +- **Text Styles**: Create consistent typography styles for different text elements. +- **Heading System**: Define a hierarchy of heading styles for your design system. +- **Body Text Variants**: Establish different body text styles for various contexts. +- **Special Text Elements**: Create typography tokens for captions, labels, and other specialized text components. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/create-typography-token.md b/graph-engine/available-nodes/design-tokens/create-typography-token.md new file mode 100644 index 0000000..1c0a331 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/create-typography-token.md @@ -0,0 +1,53 @@ +--- +hidden: true +--- + +# Create Typography Token + +### What It Does + +The Create Typography Design Token node creates a complete typography token by combining a name with typography value(s) or a reference. It's used to define standardized text styles in your design system. + +### Inputs + +| Name | Description | Type | Required | +| ----------- | ------------------------------------------------------ | ---------- | -------- | +| Name | The token's identifier | Text | Yes | +| Reference | Reference to another token (if not using direct value) | Text | No\* | +| Value | Typography value with font properties | Typography | No\* | +| Description | Optional explanation of the token's purpose | Text | No | +| $extensions | Additional metadata for the token | Object | No | + +\*Either Reference or Value must be provided + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------ | ----- | +| Token | The complete typography design token | Token | + +### How to Use It + +1. Drag the Create Typography Design Token node into your graph. +2. Connect a name (like "typography.heading1") to the "Name" input. +3. Either connect a typography value from a Create Typography node to the "Value" input, or +4. Connect a reference string (like "{typography.base}") to the "Reference" input. +5. Optionally add a description and extensions as needed. + +![Create Typography Design Token Example](screenshot-placeholder.png) + +### Tips + +* Use Value for direct typography definitions, or Reference to point to another typography token. +* Maintain consistent naming patterns for typography tokens across your design system. + +### See Also + +* **Create a Typography**: For creating typography values to use with this node. +* **Create Design Token**: For creating basic design tokens of other types. + +### Use Cases + +* **Text Styles Library**: Define a complete set of text styles for your application. +* **Responsive Typography**: Create typography tokens that adapt to different screen sizes. +* **Brand Implementation**: Ensure consistent typography across all brand applications. diff --git a/graph-engine/available-nodes/design-tokens/create-typography.md b/graph-engine/available-nodes/design-tokens/create-typography.md new file mode 100644 index 0000000..62acdfd --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/create-typography.md @@ -0,0 +1,42 @@ +# Create a Typography + +### What It Does +The Create a Typography node generates a composite typography value by combining font properties like family, weight, size, and spacing. It's used to define consistent text styles in your design system. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Font Family | The font family name (e.g., "Inter" or "Roboto") | Text | No | +| Font Weight | The font weight (e.g., "400" or "Bold") | Text | No | +| Font Size | The font size (e.g., "16px" or "1rem") | Text | No | +| Line Height | The line height (e.g., "24px" or "1.5") | Text | No | +| Letter Spacing | The letter spacing (e.g., "0.5px" or "-0.01em") | Text | No | +| Paragraph Spacing | The spacing between paragraphs | Text | No | +| Text Decoration | The text decoration (e.g., "none" or "underline") | Text | No | +| Text Case | The text case transformation (e.g., "none" or "uppercase") | Text | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Value | The composite typography value | Typography | + +### How to Use It +1. Drag the Create a Typography node into your graph. +2. Connect values to the typography properties you want to define. +3. Leave optional properties empty if you don't need them. +4. The output provides a typography value that can be used in typography tokens. + +![Create a Typography Example](screenshot-placeholder.png) + +### Tips +- You only need to specify the properties you want to use, leaving others blank. +- Font sizes and spacing can use any CSS units (px, rem, em, etc.). + +### See Also +- **Create Typography Token**: For creating a complete typography token with name and metadata. +- **Create Design Token**: For creating other types of design tokens. + +### Use Cases +- **Text Styles**: Create consistent typography styles for headings, body text, and captions. +- **Design System**: Define a typographic scale with harmonious sizes and spacing. +- **Brand Guidelines**: Implement typography according to brand guidelines. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/destruct-token.md b/graph-engine/available-nodes/design-tokens/destruct-token.md new file mode 100644 index 0000000..ac70bd3 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/destruct-token.md @@ -0,0 +1,42 @@ +# Destruct token + +### What It Does +The Destruct token node breaks down a design token into its individual components. It's useful for accessing specific parts of a token for reference, modification, or creating new tokens. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Token | The design token to break down | Token | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Name | The token's identifier | Text | +| Description | The token's description | Text | +| Type | The token's type (color, typography, etc.) | Text | +| $extensions | Additional metadata for the token | Object | +| Value | The token's primitive value (for basic tokens) | Text | +| Border | The token's border value (for border tokens) | Border | +| Typography | The token's typography value (for typography tokens) | Typography | +| Box Shadow | The token's box shadow values (for box shadow tokens) | List | + +### How to Use It +1. Drag the Destruct token node into your graph. +2. Connect a token to the "Token" input. +3. The node outputs all the individual components of the token. +4. Only the outputs relevant to the token type will have values. + +![Destruct token Example](screenshot-placeholder.png) + +### Tips +- Not all outputs will contain data - only those relevant to the token type. +- For references (like `{color.primary}`), the Value output will contain the reference string. + +### See Also +- **Create Design Token**: For creating new tokens using the extracted components. +- **Extract Single Token**: For extracting one token from a collection. + +### Use Cases +- **Token Modification**: Extract, modify, and recreate tokens with updated values. +- **Token Analysis**: Examine the structure and properties of existing tokens. +- **Token Transformation**: Convert between different token formats or structures. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/external-token-set.md b/graph-engine/available-nodes/design-tokens/external-token-set.md new file mode 100644 index 0000000..514c066 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/external-token-set.md @@ -0,0 +1,35 @@ +# External Token Set + +### What It Does +The External Token Set node retrieves a set of design tokens from an external source like a URL or file path. It loads and exposes these tokens for use in your design system graph. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| URI | The location of the external token set (URL or file path) | Text | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token Set | The loaded collection of design tokens | List | + +### How to Use It +1. Drag the External Token Set node into your graph. +2. Connect or enter a URI string pointing to your token set (e.g., a JSON file URL). +3. The node will load the tokens from that location when the graph executes. +4. The output will be the complete set of tokens ready for further processing. + +![External Token Set Example](screenshot-placeholder.png) + +### Tips +- Make sure the URI points to a valid token set in a supported format. +- Use this node to import tokens from tools like Figma, Adobe XD, or other design systems. + +### See Also +- **Flatten Token Sets**: For combining multiple token sets into a single flat array. +- **Resolve Tokens**: For resolving token references within imported token sets. + +### Use Cases +- **Design System Integration**: Load tokens from an external design system repository. +- **Version Control**: Reference tokens stored in a version-controlled repository. +- **Remote Configuration**: Use remotely hosted tokens to enable centralized updates. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/extract-token.md b/graph-engine/available-nodes/design-tokens/extract-token.md new file mode 100644 index 0000000..1724b41 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/extract-token.md @@ -0,0 +1,38 @@ +# Extract token + +### What It Does +The Extract token node retrieves a specific token from a set of tokens based on its name. It's useful for filtering out a single token from a larger collection for individual processing or reference. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Tokens | The collection of tokens to search through | List | Yes | +| Name | The name of the token to extract | Text | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Found | Boolean indicating whether the token was found | Yes/No | +| Token | The extracted token if found, otherwise undefined | Token | + +### How to Use It +1. Drag the Extract token node into your graph. +2. Connect a list of tokens to the "Tokens" input. +3. Connect the name of the token you want to extract to the "Name" input. +4. The "Found" output will be true if the token was found, false otherwise. +5. The "Token" output will contain the extracted token if found. + +![Extract token Example](screenshot-placeholder.png) + +### Tips +- The token name must match exactly (case-sensitive). +- Use the "Found" output to conditionally process the token only when it exists. + +### See Also +- **Destruct Token**: For breaking down the extracted token into its components. +- **Create Design Token**: For creating new tokens based on extracted ones. + +### Use Cases +- **Targeted Modification**: Extract specific tokens for individual processing or modification. +- **Token References**: Pull specific tokens to reference in other token definitions. +- **Token Validation**: Check if a specific token exists within a set. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/flatten-token-sets.md b/graph-engine/available-nodes/design-tokens/flatten-token-sets.md new file mode 100644 index 0000000..953bada --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/flatten-token-sets.md @@ -0,0 +1,36 @@ +# Flatten Token Sets + +### What It Does +The Flatten Token Sets node combines multiple arrays of tokens into a single flat array, removing any duplicate tokens by name. If tokens with the same name appear in multiple input arrays, only the token from the array with higher precedence is kept. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Array of Tokens | A nested array containing multiple token arrays to be flattened | List of Lists | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Tokens | A single flattened array of tokens with duplicates removed | List | + +### How to Use It +1. Drag the Flatten Token Sets node into your graph. +2. Connect multiple token arrays to the "Array of Tokens" input. +3. The node will combine all tokens into a single array, removing duplicates based on token names. +4. The resulting flat array contains unique tokens, with precedence given to tokens that appear later in the input arrays. + +![Flatten Token Sets Example](screenshot-placeholder.png) + +### Tips +- The order of input arrays matters - tokens from later arrays will override tokens with the same name from earlier arrays. +- This node is useful for merging multiple token sets while handling conflicts. +- Use this node when you need to merge tokens from different sources or components of a design system. + +### See Also +- **Token set to token array**: For flattening hierarchical token structures. +- **Array to Set**: For converting a flat array back to a hierarchical structure. + +### Use Cases +- **Token Merging**: Combine tokens from multiple sources while handling naming conflicts. +- **Theme Construction**: Merge base tokens with theme-specific tokens, allowing theme tokens to override base tokens. +- **Token Deduplication**: Remove duplicate tokens from multiple collections while preserving the most important ones. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/group-token-array.md b/graph-engine/available-nodes/design-tokens/group-token-array.md new file mode 100644 index 0000000..de00da0 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/group-token-array.md @@ -0,0 +1,43 @@ +# Group Token Array + +### What It Does + +The Group token array node adds a namespace prefix to all token names in an array, organizing them into a logical group. It prepends the specified name followed by a dot to each token's existing name. + +### Inputs + +| Name | Description | Type | Required | +| ------ | --------------------------------------- | ---- | -------- | +| Name | The namespace to add to all token names | Text | Yes | +| Tokens | The array of tokens to group | List | Yes | + +### Outputs + +| Name | Description | Type | +| ------ | --------------------------------------- | ---- | +| Tokens | The array of tokens with modified names | List | + +### How to Use It + +1. Drag the Group token array node into your graph. +2. Connect a string to the "Name" input (e.g., "colors" or "spacing"). +3. Connect an array of tokens to the "Tokens" input. +4. The node will output the same tokens but with each name prefixed by the namespace and a dot. + +![Group token array Example](arrays/screenshot-placeholder.png) + +### Tips + +* Use this to create hierarchical organization in your token sets. +* The grouping only affects the token names, not their values or other properties. + +### See Also + +* **Ungroup token array**: For removing namespace prefixes from token names. +* **Flatten Token Sets**: For flattening hierarchical token structures. + +### Use Cases + +* **Category Organization**: Group related tokens under categories like "color", "spacing", or "typography". +* **Component Tokens**: Organize component-specific tokens under component names. +* **Theme Variants**: Create theme-specific groupings like "dark" or "light". diff --git a/graph-engine/available-nodes/design-tokens/group-tokens.md b/graph-engine/available-nodes/design-tokens/group-tokens.md new file mode 100644 index 0000000..7c9e819 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/group-tokens.md @@ -0,0 +1,37 @@ +# Group tokens + +### What It Does +The Group tokens node adds a namespace to a token set, placing all tokens under a new group name. It creates a hierarchical structure by nesting the entire token set under the specified name. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Name | The name to use as the new group namespace | String | Yes | +| Token Set | The token set to be grouped under the new namespace | Object | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token Set | The resulting token set with all tokens grouped under the new namespace | Object | + +### How to Use It +1. Drag the Group tokens node into your graph. +2. Connect a token set to the "Token Set" input. +3. Set the "Name" input to the desired namespace (e.g., "colors"). +4. The node will create a new token set with all tokens nested under the specified name. + +![Group tokens Example](screenshot-placeholder.png) + +### Tips +- This node is useful for organizing tokens into logical categories. +- You can create deeper nesting by using dot notation in the name (e.g., "theme.dark"). +- Group multiple token sets separately and then merge them to create a comprehensive token structure. + +### See Also +- **Ungroup tokens**: For removing a namespace from tokens. +- **Array to Set**: For converting a flat array of tokens to a hierarchical structure. + +### Use Cases +- **Token Organization**: Organize tokens into logical categories like colors, typography, or spacing. +- **Theme Creation**: Create theme-specific token sets by grouping tokens under theme names. +- **Token Merging**: Prepare token sets for merging by grouping them under different namespaces. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/inline-tokens.md b/graph-engine/available-nodes/design-tokens/inline-tokens.md new file mode 100644 index 0000000..9fc5ad6 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/inline-tokens.md @@ -0,0 +1,35 @@ +# Inline Tokens + +### What It Does +The Inline Tokens node creates a set of design tokens that are stored directly within the graph. It allows you to define and reference tokens without requiring an external source. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Value | The collection of tokens to store inline | List | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Tokens | The stored collection of design tokens | List | + +### How to Use It +1. Drag the Inline Tokens node into your graph. +2. Edit the node's properties to define your tokens directly in the graph editor. +3. The node will output the defined tokens for use in your design system. +4. Connect the output to other nodes that need to process or use these tokens. + +![Inline Tokens Example](screenshot-placeholder.png) + +### Tips +- Use this approach for small token sets or when you want to keep everything self-contained in your graph. +- The input is hidden in the UI as tokens are typically edited through the node's properties panel. + +### See Also +- **External Token Set**: For importing tokens from external sources. +- **Create Design Token**: For creating individual tokens to add to a set. + +### Use Cases +- **Quick Prototyping**: Create small token sets directly in your graph for rapid iteration. +- **Self-Contained Graphs**: Build portable graphs that don't rely on external files. +- **Default Values**: Define fallback token sets that can be overridden by external sources. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/invert-token-set.md b/graph-engine/available-nodes/design-tokens/invert-token-set.md new file mode 100644 index 0000000..e4ab68f --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/invert-token-set.md @@ -0,0 +1,35 @@ +# Invert Token Set + +### What It Does +The Invert Token Set node takes a collection of tokens and reverses their values while preserving their names. It's useful for creating inverse relationships like light/dark themes or flipping scales. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Tokens | The collection of tokens to invert | List | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Tokens | The inverted collection of tokens | List | + +### How to Use It +1. Drag the Invert Token Set node into your graph. +2. Connect a list of tokens to the "Tokens" input. +3. The node will reverse the order of values while keeping the original token names. +4. Connect the output to other nodes that need to work with the inverted token set. + +![Invert Token Set Example](screenshot-placeholder.png) + +### Tips +- This is particularly useful for creating dark mode variants from light mode token sets. +- The token names remain the same, but their values are inverted in order. + +### See Also +- **Flatten Token Sets**: For combining multiple token sets into a single flat array. +- **Group Tokens**: For organizing tokens into hierarchical structures. + +### Use Cases +- **Light/Dark Theme Generation**: Invert color scales to create dark mode variants from light mode tokens. +- **Directional Variants**: Create RTL (right-to-left) spacing variants from LTR (left-to-right) tokens. +- **Alternate Scales**: Generate descending size scales from ascending ones while preserving semantic names. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/leonardo-color.md b/graph-engine/available-nodes/design-tokens/leonardo-color.md new file mode 100644 index 0000000..4406572 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/leonardo-color.md @@ -0,0 +1,44 @@ +# Leonardo Color + +### What It Does +The Leonardo Color node creates a color configuration for Adobe's Leonardo color system. It sets up parameters for generating accessible color scales based on specified color keys, contrast ratios, and smoothing settings. The output can be used with the Leonardo Theme node to create comprehensive color themes with guaranteed accessibility. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Name | Name for the Leonardo color | String | Yes | +| Color Keys | Array of colors that define the color range | Array of Colors | Yes | +| Ratios | Array of contrast ratios to generate | Array of Numbers | Yes | +| Smooth | Whether to apply smoothing to the generated scale | Boolean | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Value | Leonardo color configuration object | Object | + +### How to Use It +1. Drag the Leonardo Color node into your graph. +2. Connect a string to the "Name" input to identify this color configuration. +3. Connect an array of colors to the "Color Keys" input. These colors define the range of the scale. +4. Connect an array of numbers to the "Ratios" input. These ratios define the contrast points to generate in the scale. +5. Optionally, connect a boolean to the "Smooth" input to determine if the scale should be smoothed. +6. Use the output as input to a Leonardo Theme node to generate a complete color theme. + +![Leonardo Color Example](screenshot-placeholder.png) + +### Tips +- Use at least two color keys to create an effective color range. +- Choose ratios based on WCAG accessibility guidelines (e.g., 3, 4.5, 7) to ensure accessible color scales. +- Experiment with smoothing on and off to see which produces better results for your specific color range. +- Leonardo works best when you provide colors that create a logical progression (e.g., from light to dark). + +### See Also +- **Leonardo Theme**: For generating a complete theme from Leonardo color configurations. +- **Create Color Design Token**: For creating standard color tokens from Leonardo outputs. +- **Create Design Token**: For creating other types of design tokens. + +### Use Cases +- **Accessible Color Systems**: Generate color scales that meet WCAG accessibility guidelines. +- **Dark/Light Mode**: Create color scales that work consistently across both light and dark modes. +- **Data Visualization**: Develop accessible and visually consistent color scales for charts and graphs. +- **UI Component Themes**: Build comprehensive color themes for UI components with guaranteed accessibility. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/leonardo-theme.md b/graph-engine/available-nodes/design-tokens/leonardo-theme.md new file mode 100644 index 0000000..c6e7a8e --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/leonardo-theme.md @@ -0,0 +1,46 @@ +# Leonardo Theme + +### What It Does +The Leonardo Theme node generates accessible color values based on Adobe's Leonardo color system. It takes Leonardo color configurations and produces a theme of colors that meet specified contrast requirements. The node calculates and outputs an array of colors that can be used to create design tokens. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Colors | Array of Leonardo color configurations | Array of LeonardoColor | Yes | +| Contrast | Global contrast modifier | Number | Yes | +| Lightness | Global lightness modifier | Number | Yes | +| Saturation | Global saturation modifier | Number | Yes | +| Background Color | Leonardo color configuration for the background | LeonardoColor | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Colors | Array of calculated color values | Array of Colors | + +### How to Use It +1. Drag the Leonardo Theme node into your graph. +2. Connect an array of Leonardo Color node outputs to the "Colors" input. +3. Connect a number to the "Contrast" input to adjust the global contrast. +4. Connect a number to the "Lightness" input to adjust the global lightness. +5. Connect a number to the "Saturation" input to adjust the global saturation. +6. Connect a Leonardo Color node output to the "Background Color" input. +7. The node outputs an array of calculated color values that can be further processed into design tokens. + +![Leonardo Theme Example](screenshot-placeholder.png) + +### Tips +- The Background Color input is crucial as it determines the contrast base for all other colors. +- Experiment with different contrast, lightness, and saturation values to fine-tune your color theme. +- Connect the output to token creation nodes to integrate the colors into your design token system. +- For best results, use a consistent approach to creating your input Leonardo colors. + +### See Also +- **Leonardo Color**: For creating Leonardo color configurations to feed into this node. +- **Create Color Design Token**: For creating standard color tokens from the output colors. +- **Create Design Token**: For creating other types of design tokens. + +### Use Cases +- **Accessible Design Systems**: Generate complete color themes that meet WCAG accessibility guidelines. +- **Adaptive Interfaces**: Create color systems that adapt to different background colors while maintaining accessibility. +- **Brand Color Palettes**: Develop expanded color palettes from core brand colors that ensure contrast and readability. +- **Dark/Light Themes**: Generate matching themes for both dark and light modes with guaranteed accessibility. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/name-tokens.md b/graph-engine/available-nodes/design-tokens/name-tokens.md new file mode 100644 index 0000000..ff4b767 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/name-tokens.md @@ -0,0 +1,35 @@ +# Name tokens + +### What It Does +The Name tokens node renames a collection of tokens sequentially by their index position. It automatically assigns names in multiples of 100 (100, 200, 300, etc.) based on each token's position in the array. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Tokens | The collection of tokens to rename | List | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Tokens | The renamed tokens with sequential names | List | + +### How to Use It +1. Drag the Name tokens node into your graph. +2. Connect a list of tokens to the "Tokens" input. +3. The output will be the same tokens but with names set to "100", "200", "300", etc. based on their position. +4. Use these renamed tokens in other nodes that require named tokens. + +![Name tokens Example](screenshot-placeholder.png) + +### Tips +- This node overwrites any existing names in the tokens. +- The naming pattern follows multiples of 100, making it easy to insert tokens between existing ones later. + +### See Also +- **Alphabetic**: For naming tokens with alphabetic sequences. +- **Numeric**: For more customizable numeric naming patterns. + +### Use Cases +- **Automatic Naming**: Quickly name a set of tokens without manually entering each name. +- **Token Scale Creation**: Create evenly spaced naming for token scales (e.g., spacing or sizing scales). +- **Token Organization**: Establish a clear numerical ordering for tokens in a collection. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/preview-typography.md b/graph-engine/available-nodes/design-tokens/preview-typography.md new file mode 100644 index 0000000..b0f44f1 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/preview-typography.md @@ -0,0 +1,37 @@ +# Preview Typography + +### What It Does +The Preview Typography node creates a visual preview of typography tokens, allowing designers and developers to see how text appears with the specified typographic styling. It renders sample text using the font properties defined in the typography tokens. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Value | The typography tokens to preview | List | Yes | +| Text | The sample text to display (defaults to "The quick brown fox jumps over the lazy dog") | String | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| None | This node is primarily for visual preview and does not produce output data | - | + +### How to Use It +1. Drag the Preview Typography node into your graph. +2. Connect a list of typography tokens to the "Value" input. +3. Optionally, provide custom text in the "Text" input to see your specific content with the typography styles. +4. The node will display a visual preview of each typography token applied to the sample text. + +![Preview Typography Example](screenshot-placeholder.png) + +### Tips +- Use this node as a visual check when creating or modifying typography tokens. +- The default pangram ("The quick brown fox...") is useful as it contains all letters of the alphabet. +- Customize the preview text to see how specific content will look with your typography tokens. + +### See Also +- **Create Typography**: For creating typography tokens. +- **Create Typography Token**: For generating typography design tokens. + +### Use Cases +- **Typography Validation**: Quickly verify the appearance of typography tokens during design system development. +- **Visual Documentation**: Generate visual examples of typography styles for design system documentation. +- **Style Comparison**: Compare multiple typography tokens to ensure visual consistency across your design system. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/resolve-tokens.md b/graph-engine/available-nodes/design-tokens/resolve-tokens.md new file mode 100644 index 0000000..4aafd69 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/resolve-tokens.md @@ -0,0 +1,36 @@ +# Resolve tokens + +### What It Does +The Resolve tokens node processes a set of design tokens, resolving any references between them into their actual values. It's essential for handling token aliasing and transforming abstract token definitions into concrete values. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Inputs | The primary set of tokens to resolve | List of Lists | Yes | +| Context | Additional tokens to use for reference resolution | List of Lists | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Value | The resolved set of tokens with references replaced by actual values | List | + +### How to Use It +1. Drag the Resolve tokens node into your graph. +2. Connect your primary tokens to the "Inputs" input. +3. Optionally, connect additional tokens as context for reference resolution to the "Context" input. +4. The output will be a flattened list of tokens with all references resolved to their actual values. + +![Resolve tokens Example](screenshot-placeholder.png) + +### Tips +- Context tokens are used for resolution but are excluded from the final output. +- The node maintains token structure but replaces reference values like `{color.primary}` with their actual values. + +### See Also +- **Create Reference**: For creating references that can be resolved by this node. +- **Destruct Token**: For breaking down tokens into their individual components. + +### Use Cases +- **Token Preprocessing**: Prepare tokens for export by resolving all internal references. +- **Reference Validation**: Verify that all token references can be successfully resolved. +- **Theme Generation**: Create complete theme sets with all abstract references resolved to concrete values. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/set-to-array.md b/graph-engine/available-nodes/design-tokens/set-to-array.md new file mode 100644 index 0000000..12ed7b8 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/set-to-array.md @@ -0,0 +1,36 @@ +# Token set to token array + +### What It Does +The Token set to token array node converts a hierarchical token set structure into a flat array of individual tokens. It transforms nested token collections into a simple list that can be processed by nodes that expect token arrays. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Token Set | A hierarchical collection of design tokens | Object | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Tokens | A flat array of all tokens from the input set | List | + +### How to Use It +1. Drag the Token set to token array node into your graph. +2. Connect a token set object to the "Token Set" input. +3. The node will flatten the hierarchical structure and output all tokens as a simple array. +4. Use the resulting token array with nodes that process individual tokens. + +![Token set to token array Example](screenshot-placeholder.png) + +### Tips +- This node preserves all token information including name, value, and type. +- The resulting array contains all tokens regardless of their original nesting level. +- Particularly useful when working with external token formats that use hierarchical structures. + +### See Also +- **Array to Set**: For converting in the opposite direction. +- **Flatten**: For more advanced flattening operations on token arrays. + +### Use Cases +- **Processing External Tokens**: Convert imported token sets into a format that can be processed by the graph. +- **Token Transformation**: Prepare tokens from a nested structure for batch operations. +- **Token Analysis**: Create a flat list of all tokens for inspection or validation. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/ungroup-token-array.md b/graph-engine/available-nodes/design-tokens/ungroup-token-array.md new file mode 100644 index 0000000..2216844 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/ungroup-token-array.md @@ -0,0 +1,43 @@ +# Ungroup Token Array + +### What It Does + +The Ungroup token array node removes a namespace prefix from token names in an array. It filters tokens to only include those with the specified namespace and removes that prefix from their names. + +### Inputs + +| Name | Description | Type | Required | +| ------ | ---------------------------------------- | ---- | -------- | +| Name | The namespace to remove from token names | Text | Yes | +| Tokens | The array of tokens to ungroup | List | Yes | + +### Outputs + +| Name | Description | Type | +| ------ | -------------------------------------------------- | ---- | +| Tokens | The array of filtered tokens with simplified names | List | + +### How to Use It + +1. Drag the Ungroup token array node into your graph. +2. Connect a string to the "Name" input (e.g., "colors" or "spacing"). +3. Connect an array of tokens to the "Tokens" input. +4. The node will filter tokens to only those starting with the given namespace, then remove that prefix from their names. + +![Ungroup token array Example](arrays/screenshot-placeholder.png) + +### Tips + +* This node both filters and renames tokens in a single operation. +* Only tokens that start with the exact namespace followed by a dot will be included in the output. + +### See Also + +* **Group token array**: For adding namespace prefixes to token names. +* **Flatten Token Sets**: For flattening hierarchical token structures. + +### Use Cases + +* **Extract Subcategories**: Extract a specific category from a larger token collection. +* **Clean Up Imports**: Simplify token names from external sources by removing their namespaces. +* **Component Extraction**: Pull out component-specific tokens from a larger design system. diff --git a/graph-engine/available-nodes/design-tokens/ungroup-tokens.md b/graph-engine/available-nodes/design-tokens/ungroup-tokens.md new file mode 100644 index 0000000..cfc9254 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/ungroup-tokens.md @@ -0,0 +1,37 @@ +# Ungroup tokens + +### What It Does +The Ungroup tokens node extracts a subset of tokens from a hierarchical token set by removing a specified namespace. It allows you to access tokens from a deeper level in the hierarchy and bring them up to a higher level. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Name | The name of the group to extract (using dot notation for nested groups) | String | Yes | +| Token Set | The hierarchical token set containing the group to extract | Object | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token Set | The extracted subset of tokens from the specified group | Object | + +### How to Use It +1. Drag the Ungroup tokens node into your graph. +2. Connect a token set to the "Token Set" input. +3. Set the "Name" input to the path of the group you want to extract (e.g., "colors.primary"). +4. The node will extract the specified group and output it as a new token set. + +![Ungroup tokens Example](screenshot-placeholder.png) + +### Tips +- Use dot notation (e.g., "colors.primary") to access deeply nested groups. +- The node will throw an error if the specified group cannot be found in the token set. +- This node is useful for isolating specific categories of tokens for focused processing. + +### See Also +- **Group**: For grouping tokens into a new namespace. +- **Token set to token array**: For flattening an entire token set. + +### Use Cases +- **Token Subset Processing**: Extract a specific category of tokens (like colors or typography) for specialized operations. +- **Token Focus**: Isolate a set of related tokens to apply transformations specifically to them. +- **Token Navigation**: Navigate through a complex token hierarchy to access specific subsets. \ No newline at end of file diff --git a/graph-engine/available-nodes/design-tokens/utils/README.md b/graph-engine/available-nodes/design-tokens/utils/README.md new file mode 100644 index 0000000..7e3cb40 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/utils/README.md @@ -0,0 +1,6 @@ +--- +hidden: true +--- + +# Utils + diff --git a/graph-engine/available-nodes/design-tokens/utils/size-scales.md b/graph-engine/available-nodes/design-tokens/utils/size-scales.md new file mode 100644 index 0000000..cfae1e5 --- /dev/null +++ b/graph-engine/available-nodes/design-tokens/utils/size-scales.md @@ -0,0 +1,36 @@ +# Size Scales + +### What It Does +The Size Scales utility provides standardized naming conventions for size-based scales in design systems. It generates consistent size naming patterns in different formats (default, short, long) that can be used across design token systems. + +### How It Works +This utility module generates three different scales: +1. **Default Scale**: Uses standard size abbreviations (xs, sm, md, lg, xl) with numeric prefixes for extended sizes (2xl, 3xl, etc.) +2. **Short Scale**: Uses compact abbreviations (xs, s, m, l, xl) with numeric prefixes +3. **Long Scale**: Uses descriptive names (x-small, small, medium, large, x-large) with multiplicative naming for extended sizes (2x-small, 3x-small, etc.) + +### Supported Size Patterns +| Scale Type | Examples | +|------------|----------| +| Default | xs, sm, md, lg, xl, 2xl, 3xl... | +| Short | xs, s, m, l, xl, 2xl, 3xl... | +| Long | x-small, small, medium, large, x-large, 2x-small, 2x-large... | + +### Value Ordering +All scales are consistently ordered from smallest to largest, with the numeric values: +- Very small sizes: ..., -4, -3, -2 (xs/x-small) +- Small: -1 (sm/small) +- Medium: 0 (md/medium) +- Large: 1 (lg/large) +- Very large sizes: 2, 3, 4, ... (xl, 2xl, 3xl / x-large, 2x-large, 3x-large) + +### Tips +- Choose the scale that best fits your design system's naming conventions. +- The module handles both extended small sizes (2xs, 3xs) and extended large sizes (2xl, 3xl). +- Use the same scale consistently throughout your token system for better readability. + +### Use Cases +- **T-shirt Size Node**: Powers the T-shirt Size node's naming schemas. +- **Component Size Variants**: Create consistent size naming across components. +- **Spacing Scales**: Establish readable naming conventions for spacing tokens. +- **Typography Scales**: Define readable size classifications for typography tokens. \ No newline at end of file diff --git a/graph-engine/available-nodes/figma.md b/graph-engine/available-nodes/figma.md new file mode 100644 index 0000000..0aaeb7f --- /dev/null +++ b/graph-engine/available-nodes/figma.md @@ -0,0 +1,2 @@ +# Figma + diff --git a/graph-engine/available-nodes/figma/README.md b/graph-engine/available-nodes/figma/README.md new file mode 100644 index 0000000..1ab2cc7 --- /dev/null +++ b/graph-engine/available-nodes/figma/README.md @@ -0,0 +1,3 @@ +# Figma + +Nodes for integration with Figma. Publish variables, define scopes, or adjust syntax to align graph outputs with Figma’s design system features. diff --git a/graph-engine/available-nodes/figma/code-syntax.md b/graph-engine/available-nodes/figma/code-syntax.md new file mode 100644 index 0000000..229faf5 --- /dev/null +++ b/graph-engine/available-nodes/figma/code-syntax.md @@ -0,0 +1,43 @@ +# Code Syntax + +### What It Does + +The Code Syntax node defines code snippets for different platforms (Web, Android, iOS) that will appear in the Figma variables panel. It helps developers understand how to use design tokens in code. + +### Inputs + +| Name | Description | Type | Required | +| ------- | -------------------------------------- | ----- | -------- | +| Token | The design token to add code syntax to | Token | Yes | +| Web | Web platform code syntax | Text | No | +| Android | Android platform code syntax | Text | No | +| iOS | iOS platform code syntax | Text | No | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------------------- | ----- | +| Token | The design token with added code syntax | Token | + +### How to Use It + +1. Drag the Code Syntax node into your graph. +2. Connect a design token to the "Token" input. +3. Add code snippets for specific platforms (e.g., `$colors.primary` for Web, `R.color.primary` for Android). +4. The token will now display these code references when published to Figma. + +### Tips + +* Only add syntax for platforms your team actually uses to avoid confusion. +* Use platform-specific naming conventions to make the code useful for developers. + +### See Also + +* **Publish Variable**: For controlling whether this token is published to Figma users. +* **Scope By Type**: For automatically assigning appropriate Figma scopes. + +### Use Cases + +* **Design System Integration**: Provide developers with ready-to-use code snippets for each design token. +* **Cross-Platform Development**: Display different syntax for each platform where the design token will be used. +* **Developer Handoff**: Streamline the implementation process by showing exactly how to reference variables in code. diff --git a/graph-engine/available-nodes/figma/publish-variable.md b/graph-engine/available-nodes/figma/publish-variable.md new file mode 100644 index 0000000..24db59f --- /dev/null +++ b/graph-engine/available-nodes/figma/publish-variable.md @@ -0,0 +1,36 @@ +# Publish Variable + +### What It Does +The Publish Variable node controls whether a design token is published to Figma users. It allows you to make certain variables available or hidden in the Figma variables panel. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Token | The design token to control publishing for | Token | Yes | +| Publish | Whether to publish this token to Figma | Yes/No | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token | The token with publishing setting applied | Token | + +### How to Use It +1. Drag the Publish Variable node into your graph. +2. Connect a design token to the "Token" input. +3. Set "Publish" to true (default) to make the token available to Figma users. +4. Set "Publish" to false to hide the token, making it only available for references in other tokens. + +![Publish Variable Example](screenshot-placeholder.png) + +### Tips +- Use this node to hide utility or intermediate tokens that aren't directly useful to designers. +- Publishing fewer variables keeps the Figma variables panel cleaner and more user-friendly. + +### See Also +- **Code Syntax**: For adding code snippets to tokens visible in Figma. +- **Scope By Type**: For automatically assigning appropriate Figma scopes. + +### Use Cases +- **Design System Organization**: Show only the most essential variables to designers while keeping implementation details hidden. +- **Developer-Only Tokens**: Hide technical tokens that are only needed for references or calculations. +- **Variable Management**: Control which tokens from a larger set get exposed to designers in Figma. \ No newline at end of file diff --git a/graph-engine/available-nodes/figma/publish-variables.md b/graph-engine/available-nodes/figma/publish-variables.md new file mode 100644 index 0000000..40b987c --- /dev/null +++ b/graph-engine/available-nodes/figma/publish-variables.md @@ -0,0 +1,2 @@ +# Publish Variables + diff --git a/graph-engine/available-nodes/figma/scope-all.md b/graph-engine/available-nodes/figma/scope-all.md new file mode 100644 index 0000000..5f84127 --- /dev/null +++ b/graph-engine/available-nodes/figma/scope-all.md @@ -0,0 +1,35 @@ +# Scope All + +### What It Does +The Scope All node adds the ALL_SCOPES scope to a design token, making it available for all possible uses in Figma. This allows the token to be used in any context within Figma's variables system. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Token | The design token to add ALL_SCOPES to | Token | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token | The token with ALL_SCOPES applied | Token | + +### How to Use It +1. Drag the Scope All node into your graph. +2. Connect a design token to the "Token" input. +3. The node will add the ALL_SCOPES scope to the token. +4. The output token will be available for all possible uses in Figma. + +![Scope All Example](screenshot-placeholder.png) + +### Tips +- Use this node when you want a token to be available everywhere in Figma. +- This is ideal for universal tokens that should be applicable in any context. + +### See Also +- **Scope By Type**: For automatically assigning specific scopes based on token type. +- **Scope Color**: For more granular control over color token scopes. + +### Use Cases +- **Universal Tokens**: Make tokens like brand colors available for any purpose in Figma. +- **Multi-purpose Variables**: Create variables that can be used across different contexts. +- **Simplified Scope Management**: Avoid having to specify individual scopes for versatile tokens. \ No newline at end of file diff --git a/graph-engine/available-nodes/figma/scope-by-type.md b/graph-engine/available-nodes/figma/scope-by-type.md new file mode 100644 index 0000000..1500d1a --- /dev/null +++ b/graph-engine/available-nodes/figma/scope-by-type.md @@ -0,0 +1,36 @@ +# Scope By Type + +### What It Does +The Scope By Type node automatically assigns appropriate Figma scopes to a token based on its type. It intelligently determines where a token can be used in Figma based on its data type. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Token | The design token to automatically scope | Token | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token | The token with automatically assigned scopes | Token | + +### How to Use It +1. Drag the Scope By Type node into your graph. +2. Connect a design token to the "Token" input. +3. The node automatically assigns appropriate scopes based on the token type. +4. The output token will have Figma scopes that match its intended use. + +![Scope By Type Example](screenshot-placeholder.png) + +### Tips +- This node saves time by automatically determining the right scopes for different token types. +- Review the assigned scopes if you need specific control over where tokens appear in Figma. + +### See Also +- **Scope All**: For making a token available in all possible contexts. +- **Scope Color**: For more granular control over color token scopes. +- **Scope Number**: For detailed control over number token scopes. + +### Use Cases +- **Bulk Token Processing**: Quickly assign appropriate scopes to many tokens at once. +- **Design System Setup**: Ensure all tokens have sensible scope defaults when being published to Figma. +- **Token Type Conversion**: Automatically update scopes when a token changes type. \ No newline at end of file diff --git a/graph-engine/available-nodes/figma/scope-color.md b/graph-engine/available-nodes/figma/scope-color.md new file mode 100644 index 0000000..f3bd1a6 --- /dev/null +++ b/graph-engine/available-nodes/figma/scope-color.md @@ -0,0 +1,41 @@ +# Scope Color + +### What It Does +The Scope Color node defines specific variable scopes for color tokens in Figma. It allows precise control over where and how color variables can be used within the Figma interface. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Token | The design token to add scopes to | Token | Yes | +| All Fills | Include all fills scope | Yes/No | No | +| Effects | Include effects scope | Yes/No | No | +| Frame Fill | Include frame fill scope | Yes/No | No | +| Shape Fill | Include shape fill scope | Yes/No | No | +| Stroke | Include stroke scope | Yes/No | No | +| Text Fill | Include text fill scope | Yes/No | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token | The token with color scopes applied | Token | + +### How to Use It +1. Drag the Scope Color node into your graph. +2. Connect a color token to the "Token" input. +3. Check the boxes for contexts where the color should be available (e.g., Text Fill, Stroke). +4. The output token will be available in Figma only for the selected contexts. + +![Scope Color Example](screenshot-placeholder.png) + +### Tips +- Only select the scopes that make sense for your color's intended use. +- Using more specific scopes creates a cleaner variables panel in Figma. + +### See Also +- **Scope All**: For making a color available in all possible contexts. +- **Scope By Type**: For automatically assigning appropriate scopes based on token type. + +### Use Cases +- **Text-Only Colors**: Create color variables that only appear as options for text fills. +- **Stroke-Specific Colors**: Define colors that are only available for strokes but not fills. +- **UI Color Organization**: Separate colors by their function to create a more intuitive design system. \ No newline at end of file diff --git a/graph-engine/available-nodes/figma/scope-number.md b/graph-engine/available-nodes/figma/scope-number.md new file mode 100644 index 0000000..8f2ab9f --- /dev/null +++ b/graph-engine/available-nodes/figma/scope-number.md @@ -0,0 +1,49 @@ +# Scope Number + +### What It Does +The Scope Number node defines specific variable scopes for number tokens in Figma. It provides detailed control over where and how numeric variables can be used within Figma's interface. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Token | The design token to add scopes to | Token | Yes | +| Gap Between | Include gap between scope | Yes/No | No | +| Padding | Include padding scope | Yes/No | No | +| Corner Radius | Include corner radius scope | Yes/No | No | +| Font Weight | Include font weight scope | Yes/No | No | +| Font Size | Include font size scope | Yes/No | No | +| Line Height | Include line height scope | Yes/No | No | +| Letter Spacing | Include letter spacing scope | Yes/No | No | +| Paragraph Spacing | Include paragraph spacing scope | Yes/No | No | +| Paragraph Indent | Include paragraph indent scope | Yes/No | No | +| Layer Opacity | Include layer opacity scope | Yes/No | No | +| Effects | Include effects scope | Yes/No | No | +| Stroke | Include stroke scope | Yes/No | No | +| Text Content | Include text content scope | Yes/No | No | +| Width And Height | Include width and height scope | Yes/No | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token | The token with number scopes applied | Token | + +### How to Use It +1. Drag the Scope Number node into your graph. +2. Connect a number token to the "Token" input. +3. Check the boxes for contexts where the number should be available (e.g., Font Size, Corner Radius). +4. The output token will be available in Figma only for the selected contexts. + +![Scope Number Example](screenshot-placeholder.png) + +### Tips +- Group related numeric values with similar scopes to create a logical set of variables. +- Consider the purpose of each number to determine its appropriate scopes. + +### See Also +- **Scope All**: For making a number available in all possible contexts. +- **Scope By Type**: For automatically assigning appropriate scopes based on token type. + +### Use Cases +- **Spacing System**: Create spacing tokens that are only available for gap and padding properties. +- **Typography Scale**: Define text-specific numeric variables for font sizes and line heights. +- **Border System**: Create radius tokens that only appear in corner radius contexts. \ No newline at end of file diff --git a/graph-engine/available-nodes/figma/scope-string.md b/graph-engine/available-nodes/figma/scope-string.md new file mode 100644 index 0000000..5c95092 --- /dev/null +++ b/graph-engine/available-nodes/figma/scope-string.md @@ -0,0 +1,38 @@ +# Scope String + +### What It Does +The Scope String node defines specific variable scopes for string tokens in Figma. It controls where and how text variables can be used within the Figma interface. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Token | The design token to add scopes to | Token | Yes | +| Font Family | Include font family scope | Yes/No | No | +| Font Style | Include font weight or style scope | Yes/No | No | +| Text Content | Include text content scope | Yes/No | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Token | The token with string scopes applied | Token | + +### How to Use It +1. Drag the Scope String node into your graph. +2. Connect a string token to the "Token" input. +3. Check the boxes for contexts where the string should be available (e.g., Font Family, Text Content). +4. The output token will be available in Figma only for the selected contexts. + +![Scope String Example](screenshot-placeholder.png) + +### Tips +- Use Text Content scope for reusable text snippets or microcopy. +- Font Family and Font Style scopes are perfect for typography tokens. + +### See Also +- **Scope All**: For making a string available in all possible contexts. +- **Scope By Type**: For automatically assigning appropriate scopes based on token type. + +### Use Cases +- **Typography System**: Create font family variables that only appear in typography contexts. +- **Microcopy Library**: Define reusable text variables that appear as options for text content. +- **Brand Voice**: Maintain consistent language patterns by creating text variables with specific scopes. \ No newline at end of file diff --git a/graph-engine/available-nodes/generic/README.md b/graph-engine/available-nodes/generic/README.md new file mode 100644 index 0000000..6ba206d --- /dev/null +++ b/graph-engine/available-nodes/generic/README.md @@ -0,0 +1,3 @@ +# Generic + +Basic utility nodes. Provides input/output handling, delays, or debugging tools—essential for managing data flow in any graph. diff --git a/graph-engine/available-nodes/generic/constant.md b/graph-engine/available-nodes/generic/constant.md new file mode 100644 index 0000000..81b4f52 --- /dev/null +++ b/graph-engine/available-nodes/generic/constant.md @@ -0,0 +1,47 @@ +# Constant + +### What It Does + +Provides a fixed value that doesn't change during graph execution. It allows you to set a single value that can be connected to multiple nodes, making it easier to maintain consistent values across your graph. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ------------------- | ---- | -------- | +| value | The value to output | Any | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------ | ---- | +| value | The constant value | Any | + +![Constant Example](<../../../.gitbook/assets/Screenshot 2025-04-15 at 3.37.48 PM.png>) + +### How to Use It + +1. Drag the Constant node into your graph. +2. Double-click the node or edit its properties to set the desired value. +3. Connect the node's output to any other nodes that need this value. +4. Run the graph—the constant value will be passed to all connected nodes. + +
+ +### Tips + +* Use Constants for values that are used in multiple places to avoid duplicating the same value. +* The Constant node can hold any type of data (text, numbers, colors, arrays, etc.). +* If you need to change a value used in multiple places, updating the Constant node will update all connections. + +### See Also + +* **Input**: For values that should be configurable from outside the graph. +* **Output**: For exporting values from the graph. +* **Note**: For adding comments and documentation to your graph. + +### Use Cases + +* **Shared Values**: Use a single source for values needed in multiple calculations. +* **Configuration**: Set design system constants like base sizes or colors. +* **Default Values**: Provide fallback values for optional inputs. +* **Documentation**: Label important values in your graph for better understanding. diff --git a/graph-engine/available-nodes/generic/delay.md b/graph-engine/available-nodes/generic/delay.md new file mode 100644 index 0000000..5a95f81 --- /dev/null +++ b/graph-engine/available-nodes/generic/delay.md @@ -0,0 +1,43 @@ +# Delay + +### What It Does + +The Delay node temporarily holds a value for a specific duration before passing it to the output. It's useful for creating timing effects or simulating processing time in your graph. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ------------------------------------------------------------ | ------ | -------- | +| Value | The data you want to delay | Any | Yes | +| Delay | How long to wait in milliseconds before outputting the value | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------------- | ---- | +| Value | The delayed value (same as input) | Any | + +![Delay Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.21.30 PM.png>) + +### How to Use It + +1. Drag the Delay node into your graph. +2. Connect the value you want to delay to the "Value" input. +3. Set the "Delay" input (defaults to 1000ms if not specified). +4. When the node is triggered, it will wait for the specified delay and then output the value. + +### Tips + +* Use shorter delays (under 500ms) for subtle timing effects and longer delays for more noticeable pauses. +* The delay is measured in milliseconds (1000ms = 1 second). + +### See Also + +* **Passthrough**: For immediately passing values without delay. +* **Time**: For getting the current time or measuring durations. + +### Use Cases + +* **Animation Sequencing**: Delay different parts of a color or spacing animation to create staggered effects. +* **Simulated Loading**: Create realistic delays between state changes to mimic processing time. +* **Timed Updates**: Schedule token changes to happen after a certain period has elapsed. diff --git a/graph-engine/available-nodes/generic/input.md b/graph-engine/available-nodes/generic/input.md new file mode 100644 index 0000000..5805521 --- /dev/null +++ b/graph-engine/available-nodes/generic/input.md @@ -0,0 +1,44 @@ +# Input + +### What It Does + +Defines the entry points for data flowing into your graph. This node allows you to create named inputs that can be configured when the graph runs, making your graph reusable with different values. + +### Inputs + +| Name | Description | Type | Required | +| ---------------- | ------------------------------------------------------- | ---- | -------- | +| \[custom inputs] | Any named inputs you define become available as outputs | Any | No | + +### Outputs + +| Name | Description | Type | +| ------------------- | ----------------------------------------------- | ---- | +| \[matching outputs] | Each input you define creates a matching output | Any | + +![Input Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.22.55 PM.png>) + +### How to Use It + +1. Drag the Input node into your graph (usually at the left/beginning). +2. Click the "+" button to add a new named input (like "baseColor" or "spacing"). +3. Set the type and default value for each input. +4. Connect the outputs to other nodes in your graph that need these values. +5. When the graph is used, these inputs can be configured externally. + +### Tips + +* You should only have one Input node per graph. +* Give your inputs clear, descriptive names that indicate their purpose. +* Set meaningful default values so the graph works well even without custom inputs. + +### See Also + +* **Output**: For defining what values are returned from your graph. +* **Constant**: For values that don't need to change between uses of the graph. + +### Use Cases + +* **Design System Components**: Create reusable components with configurable properties. +* **Theming**: Build a color scheme generator that takes base colors as inputs. +* **Layout Systems**: Define spacing algorithms that can adapt to different base units. diff --git a/graph-engine/available-nodes/generic/note.md b/graph-engine/available-nodes/generic/note.md new file mode 100644 index 0000000..d1040d5 --- /dev/null +++ b/graph-engine/available-nodes/generic/note.md @@ -0,0 +1,45 @@ +# Note + +### What It Does + +Adds a visual comment or documentation to your graph without affecting the execution flow. Notes are useful for explaining complex parts of your graph, documenting intentions, or organizing your workspace. + +### Inputs + +| Name | Description | Type | Required | +| ------ | -------------------- | ---- | -------- | +| _None_ | Notes have no inputs | - | - | + +### Outputs + +| Name | Description | Type | +| ------ | --------------------- | ---- | +| _None_ | Notes have no outputs | - | + +![Note Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.26.23 PM.png>) + +### How to Use It + +1. Drag the Note node into your graph. +2. Double-click on the node or edit its properties to add your comment text. +3. Position the Note near the relevant part of your graph. +4. Resize or format the Note as needed to improve legibility. + +### Tips + +* Use Notes to explain the purpose of complex node groups or calculations. +* Add version information or change logs to keep track of your graph's evolution. +* Color-code your Notes to categorize different parts of your graph. + +### See Also + +* **Constant**: For adding fixed values to your graph. +* **Input**: For values that should be configurable from outside the graph. +* **Output**: For exporting values from the graph. + +### Use Cases + +* **Documentation**: Explain how complex parts of your graph work. +* **Collaboration**: Leave information for other team members about design decisions. +* **Organization**: Create section headers to separate different functional areas. +* **Reference**: Store important information like color codes or naming conventions. diff --git a/graph-engine/available-nodes/generic/object-merge.md b/graph-engine/available-nodes/generic/object-merge.md new file mode 100644 index 0000000..e2f7381 --- /dev/null +++ b/graph-engine/available-nodes/generic/object-merge.md @@ -0,0 +1,43 @@ +# Object Merge + +### What It Does + +The Merge objects node combines multiple objects into a single object. It's perfect for consolidating data from different sources, with later objects in the array overriding properties from earlier ones in case of conflicts. + +### Inputs + +| Name | Description | Type | Required | +| ------------ | --------------------------------------------------------------------------------------------------------- | ---- | -------- | +| Objects | An array of objects to merge together | List | No | +| Concat Array | How arrays should be merged: "concat" (join arrays), "merge" (replace arrays), or "combine" (smart merge) | Text | No | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------- | ---- | +| Value | The resulting merged object | Any | + +![Merge objects Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.24.12 PM.png>) + +### How to Use It + +1. Drag the Merge objects node into your graph. +2. Connect an array of objects to the "Objects" input. +3. Select how you want arrays handled using the "Concat Array" input (defaults to "concat"). +4. Run the graph to get a single merged object that combines all properties. + +### Tips + +* Objects later in the array will override properties from earlier objects when there are conflicts. +* Choose "concat" to join arrays, "merge" to replace them, or "combine" for a more intelligent merge. + +### See Also + +* **Objectify**: For creating an object from key-value pairs. +* **Object Property**: For accessing specific properties of an object. + +### Use Cases + +* **Token Combining**: Merge base tokens with theme-specific overrides to create a complete token set. +* **Configuration Building**: Combine default settings with user preferences to create a final configuration. +* **Data Aggregation**: Merge data objects from multiple sources into a single comprehensive object. diff --git a/graph-engine/available-nodes/generic/object-path.md b/graph-engine/available-nodes/generic/object-path.md new file mode 100644 index 0000000..ebaa524 --- /dev/null +++ b/graph-engine/available-nodes/generic/object-path.md @@ -0,0 +1,44 @@ +# Object Path + +### What It Does + +The Object Path node extracts a specific value from within a nested object structure using a dot notation path. It helps you access deeply nested properties without having to create multiple nodes. + +### Inputs + +| Name | Description | Type | Required | +| ------ | -------------------------------------------------------------------------------- | ---- | -------- | +| Object | The object you want to extract data from | Any | Yes | +| Path | The location of the property you want (using dot notation like "colors.primary") | Text | Yes | + +### Outputs + +| Name | Description | Type | +| ------- | ---------------------------------------------------------- | ------ | +| Value | The extracted property value at the specified path | Any | +| Missing | Indicates whether the property was found (true if missing) | Yes/No | + +![Object Path Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.27.57 PM.png>) + +### How to Use It + +1. Drag the Object Path node into your graph. +2. Connect an object to the "Object" input. +3. Set the "Path" input to specify which property to extract (e.g., "theme.colors.primary"). +4. Run the graph to receive the value at that path and a missing flag. + +### Tips + +* Use dot notation to navigate nested structures (e.g., "colors.primary.500"). +* Check the "Missing" output to determine if the property exists in the object. + +### See Also + +* **Merge objects**: For combining multiple objects together. +* **Objectify**: For creating objects from key-value pairs. + +### Use Cases + +* **Token Extraction**: Pull specific values from a complex token structure (like typography.body.fontSize). +* **Conditional Logic**: Check if specific properties exist before using them. +* **Data Transformation**: Extract and reformat specific parts of complex data structures. diff --git a/graph-engine/available-nodes/generic/objectify.md b/graph-engine/available-nodes/generic/objectify.md new file mode 100644 index 0000000..394d2df --- /dev/null +++ b/graph-engine/available-nodes/generic/objectify.md @@ -0,0 +1,42 @@ +# Objectify + +### What It Does + +Combines multiple inputs of any type into a single object, where each input becomes a property in the resulting object. This allows you to group related values together into a structured format. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ----------------------------------- | ---- | -------- | +| (dynamic) | Properties to include in the object | Any | No | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------------- | ------ | +| value | Object containing all input properties | Object | + +![Objectify Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.29.04 PM.png>) + +### How to Use It + +1. Drag the Objectify node into your graph. +2. Right-click on the node and select "Add Input" to create new property inputs. +3. Name each input to define the property key in the resulting object. +4. Connect values to each input to set the corresponding property values. + +### Tips + +* Property names in the resulting object match exactly the input names you define. +* Add as many inputs as needed to construct your object with all required properties. + +### See Also + +* **Object Path**: For extracting values from existing objects by path. +* **Object Merge**: For combining multiple existing objects. + +### Use Cases + +* **Token Structure**: Create structured design tokens that contain multiple related properties. +* **Component Configuration**: Build configuration objects for complex design components. +* **Data Organization**: Group related values into a logical structure for easier processing. diff --git a/graph-engine/available-nodes/generic/output.md b/graph-engine/available-nodes/generic/output.md new file mode 100644 index 0000000..c0abcb9 --- /dev/null +++ b/graph-engine/available-nodes/generic/output.md @@ -0,0 +1,43 @@ +# Output + +### What It Does + +Defines the final results that your graph produces. This node collects values from within your graph and exposes them as named outputs, determining what data is returned when the graph completes. + +### Inputs + +| Name | Description | Type | Required | +| ---------------- | ------------------------------------------------- | ---- | -------- | +| \[custom inputs] | Any named inputs you add become the graph outputs | Any | No | + +### Outputs + +| Name | Description | Type | +| ------------------- | ---------------------------------------------------------------- | ---- | +| \[matching outputs] | Each input creates a matching output (typically used internally) | Any | + +![Output Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.29.51 PM.png>) + +### How to Use It + +1. Drag the Output node into your graph (usually at the right/end). +2. Click the "+" button to add named inputs (like "resultColor" or "spacingScale"). +3. Connect values from your graph to these inputs. +4. When the graph runs, these connected values will be available as the graph's outputs. + +### Tips + +* You should only have one Output node per graph. +* Give your outputs clear, descriptive names that indicate what they contain. +* Every value you want to access from outside the graph should connect to this node. + +### See Also + +* **Input**: For defining entry points where data flows into your graph. +* **Constant**: For fixed values that don't change during graph execution. + +### Use Cases + +* **Token Generation**: Export the final set of design tokens after processing. +* **Calculation Results**: Return the results of complex calculations or transformations. +* **Component APIs**: Define what properties a reusable graph component exposes. diff --git a/graph-engine/available-nodes/generic/panic.md b/graph-engine/available-nodes/generic/panic.md new file mode 100644 index 0000000..937b3dd --- /dev/null +++ b/graph-engine/available-nodes/generic/panic.md @@ -0,0 +1,42 @@ +# Panic + +### What It Does + +Throws an error and stops the graph execution when triggered by any truthy value. This acts as a deliberate fail-state for validation or testing purposes. + +### Inputs + +| Name | Description | Type | Required | +| ------- | ------------------------------------- | ---- | -------- | +| trigger | Value that triggers the error if true | Any | Yes | + +### Outputs + +| Name | Description | Type | +| ------ | ----------- | ---- | +| (none) | | | + +### How to Use It + +1. Drag the Panic node into your graph. +2. Connect the output of another node (like a condition or comparison) to the "trigger" input. +3. When the connected value is truthy (true, non-zero number, non-empty string, etc.), the graph will halt with an error. +4. Use this for input validation or to stop execution under specific conditions. + +![Panic Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.31.06 PM.png>) + +### Tips + +* Combine with comparison nodes to create validation checks for your graph inputs. +* The error message will include the value that triggered the panic for easier debugging. + +### See Also + +* **If**: For conditional execution without stopping the graph. +* **Compare**: For comparing values before connecting to Panic. + +### Use Cases + +* **Input Validation**: Halt the graph if invalid design token values are detected. +* **Range Checking**: Ensure color values or numerical inputs stay within acceptable bounds. +* **Debug Testing**: Deliberately trigger errors during development to test error handling. diff --git a/graph-engine/available-nodes/generic/passthrough.md b/graph-engine/available-nodes/generic/passthrough.md new file mode 100644 index 0000000..c8348d3 --- /dev/null +++ b/graph-engine/available-nodes/generic/passthrough.md @@ -0,0 +1,42 @@ +# Passthrough + +### What It Does + +Passes a value directly from input to output without modifying it. This is useful for reorganizing graph connections or making temporary connections during development. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ------------------------- | ---- | -------- | +| value | The value to pass through | Any | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------- | ---- | +| value | The same value as the input | Any | + +![Passthrough Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.32.03 PM.png>) + +### How to Use It + +1. Drag the Passthrough node into your graph. +2. Connect any value to the "value" input. +3. Connect the "value" output to any node that should receive the original value. +4. The node will simply pass the value through without changing it. + +### Tips + +* Use Passthrough nodes to clean up complicated graph layouts by redirecting connections. +* The node preserves the exact type of data passed through it, making it work with any value type. + +### See Also + +* **Note**: For adding comments to your graph without affecting data flow. +* **Objectify**: For combining multiple values into an object structure. + +### Use Cases + +* **Graph Organization**: Improve the readability of complex graphs by rerouting connections. +* **Debugging**: Insert between connections to create inspection points during development. +* **Interface Planning**: Use as placeholders when designing node interfaces before implementation. diff --git a/graph-engine/available-nodes/generic/subgraph.md b/graph-engine/available-nodes/generic/subgraph.md new file mode 100644 index 0000000..23f25b6 --- /dev/null +++ b/graph-engine/available-nodes/generic/subgraph.md @@ -0,0 +1,42 @@ +# Subgraph + +### What It Does + +Creates a nested graph within your main graph, allowing you to encapsulate complex logic into a reusable component. It acts like a function that can contain its own internal network of nodes. + +### Inputs + +| Name | Description | Type | Required | +| --------- | --------------------------------------------------- | ---- | ---------------------- | +| (dynamic) | Inputs are defined by the inner graph's Input nodes | Any | Depends on inner graph | + +### Outputs + +| Name | Description | Type | +| --------- | ----------------------------------------------------- | ---- | +| (dynamic) | Outputs are defined by the inner graph's Output nodes | Any | + +![Subgraph Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.33.21 PM.png>) + +### How to Use It + +1. Drag the Subgraph node into your graph. +2. Double-click the node to open and edit the inner graph. +3. Add Input and Output nodes within the inner graph to define the interface. +4. Build your logic inside the subgraph using any other nodes. + +### Tips + +* Keep related functionality together by grouping it in a subgraph for better organization. +* Inputs and outputs from the inner graph automatically appear on the parent subgraph node. + +### See Also + +* **Input**: For defining inputs to your graph. +* **Output**: For defining outputs from your graph. + +### Use Cases + +* **Reusable Components**: Create complex operations that can be reused across different parts of your design system. +* **Logical Grouping**: Organize related nodes into a single component to reduce visual complexity. +* **Abstraction**: Hide implementation details of complex calculations behind a simpler interface. diff --git a/graph-engine/available-nodes/generic/time.md b/graph-engine/available-nodes/generic/time.md new file mode 100644 index 0000000..58c7a8c --- /dev/null +++ b/graph-engine/available-nodes/generic/time.md @@ -0,0 +1,42 @@ +# Time + +### What It Does + +Provides the current timestamp in milliseconds, updating automatically every second while the graph is running. It acts as a timer or clock source for time-based operations. + +### Inputs + +| Name | Description | Type | Required | +| ------ | ----------- | ---- | -------- | +| (none) | | | | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------------------------- | ------ | +| value | Current time in milliseconds since Unix epoch | Number | + +![Time Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.33.21 PM (1).png>) + +### How to Use It + +1. Drag the Time node into your graph. +2. Connect its "value" output to nodes that need time information. +3. The node will automatically update every second when the graph is running. +4. Use with math operations to create timing patterns or schedules. + +### Tips + +* The time value is in milliseconds since January 1, 1970 (Unix epoch). +* Use the Math nodes to convert the timestamp to more usable formats like seconds or minutes. + +### See Also + +* **Delay**: For pausing execution for a specific duration. +* **Math Expression**: For converting timestamp to human-readable formats. + +### Use Cases + +* **Animation Timing**: Create time-based animations or transitions. +* **Scheduling**: Trigger events at specific times or intervals. +* **Timer Applications**: Build countdown timers or stopwatches for design prototyping. diff --git a/graph-engine/available-nodes/gradient/README.md b/graph-engine/available-nodes/gradient/README.md new file mode 100644 index 0000000..b8522c4 --- /dev/null +++ b/graph-engine/available-nodes/gradient/README.md @@ -0,0 +1,3 @@ +# Gradient + +Nodes for handling gradients. Creates stops or interpolates colors for use in backgrounds or multi-step color transitions. diff --git a/graph-engine/available-nodes/gradient/gradient-stop.md b/graph-engine/available-nodes/gradient/gradient-stop.md new file mode 100644 index 0000000..914ce65 --- /dev/null +++ b/graph-engine/available-nodes/gradient/gradient-stop.md @@ -0,0 +1,46 @@ +# Gradient Stop + +### What It Does + +Creates a gradient stop by pairing a color with a position value. Gradient stops are the building blocks of gradients, defining which colors appear at specific points along the gradient line or radius. + +### Inputs + +| Name | Description | Type | Required | +| -------- | ------------------------------------------ | ------ | -------- | +| color | The color at this position in the gradient | Color | Yes | +| position | The location of this color (typically 0-1) | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ------------ | ---------------------------------------------------- | ------------- | +| gradientStop | The combined gradient stop object (color + position) | Gradient Stop | + +![Gradient Stop Example](<../../../.gitbook/assets/Screenshot 2025-04-09 at 1.05.15 PM.png>) + +### How to Use It + +1. Drag the Gradient Stop node into your graph. +2. Connect a color (like `#3366FF`) to the "color" input. +3. Connect or enter a position value (like `0.5` for the middle of the gradient) to the "position" input. +4. Run the graph—your output will be a gradient stop that can be used in a gradient definition. +5. + +
+ +### Tips + +* Position values typically range from 0 (start of gradient) to 1 (end of gradient). +* Create multiple gradient stops and combine them to create a full gradient. + +### See Also + +* **Create Gradient**: For combining multiple gradient stops into a complete gradient. +* **Color Mix**: For creating intermediate colors that can be used in gradient stops. + +### Use Cases + +* **Custom Gradients**: Design multi-color gradients with precise control over color positions. +* **Color Transitions**: Define exact transition points between colors in a UI element. +* **Theming**: Create gradient definitions that can adapt to different color schemes. diff --git a/graph-engine/available-nodes/logic/README.md b/graph-engine/available-nodes/logic/README.md new file mode 100644 index 0000000..b7c69a1 --- /dev/null +++ b/graph-engine/available-nodes/logic/README.md @@ -0,0 +1,3 @@ +# Logic + +Nodes for conditional operations. Compares values, applies boolean logic, or switches paths based on defined conditions. diff --git a/graph-engine/available-nodes/logic/and.md b/graph-engine/available-nodes/logic/and.md new file mode 100644 index 0000000..d25862e --- /dev/null +++ b/graph-engine/available-nodes/logic/and.md @@ -0,0 +1,46 @@ +# And + +### What It Does + +Checks if all connected inputs are true and returns a single true/false result. It's perfect for combining multiple conditions that all need to be met before proceeding with an action. + +### Inputs + +| Name | Description | Type | Required | +| ------ | ---------------------------------------------------- | ---- | -------- | +| inputs | Multiple values to check (can add as many as needed) | Any | No | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------------------------------- | ------ | +| value | True if all inputs are true/truthy, false otherwise | Yes/No | + +
+ +### How to Use It + +1. Drag the Logical AND node into your graph. +2. Click the "+" button to add as many input connections as you need. +3. Connect boolean values or conditions to each input. +4. Run the graph—your output will be true only if all inputs are true. + +![Logical AND Example](screenshot-placeholder.png) + +
+ +### Tips + +* Non-boolean values are converted to boolean: empty values, zero, null, and undefined become false. +* An AND node with no inputs will return true (similar to mathematical product of an empty set). + +### See Also + +* **Logical OR**: For checking if at least one condition is true. +* **NOT**: For inverting a boolean value. + +### Use Cases + +* **Validation Rules**: Check if a color meets multiple criteria (high enough contrast AND within brand palette). +* **Complex Conditions**: Enable a feature only when multiple requirements are met. +* **Design States**: Apply a style only when an element is both hovered AND active. diff --git a/graph-engine/available-nodes/logic/compare.md b/graph-engine/available-nodes/logic/compare.md new file mode 100644 index 0000000..bec32c6 --- /dev/null +++ b/graph-engine/available-nodes/logic/compare.md @@ -0,0 +1,62 @@ +# Compare + +### What It Does + +Compares two values using one of several comparison operators. It evaluates the relationship between the inputs and outputs a boolean (true/false) result indicating whether the comparison is satisfied. + +### Inputs + +| Name | Description | Type | Required | +| -------- | ------------------------------------------------- | ---- | -------- | +| a | The first value to compare | Any | Yes | +| b | The second value to compare | Any | Yes | +| operator | The comparison operator to use (=, ≠, >, <, ≥, ≤) | Text | No | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------------------------------------------------------------------------- | ------ | +| value | The result of the comparison (true if the comparison is satisfied, false otherwise) | Yes/No | + +
+ +### How to Use It + +1. Drag the Compare node into your graph. +2. Connect the first value to compare to the "a" input. +3. Connect the second value to compare to the "b" input. +4. Select the desired operator from the dropdown (default is "equal"). +5. Run the graph—the output will be true if the comparison is satisfied, false otherwise. + + + +
+ +### Supported Operators + +| Operator | Symbol | Description | +| --------------------- | ------ | --------------------------------------- | +| Equal | = | True if a is equal to b | +| Not Equal | ≠ | True if a is not equal to b | +| Greater Than | > | True if a is greater than b | +| Less Than | < | True if a is less than b | +| Greater Than or Equal | ≥ | True if a is greater than or equal to b | +| Less Than or Equal | ≤ | True if a is less than or equal to b | + +### Tips + +* For string comparison, the operators follow JavaScript's string comparison rules. +* When comparing objects, "equal" means the same exact object, not just objects with the same properties. +* Mixing types in comparison may give unexpected results (e.g., comparing a string to a number). + +### See Also + +* **If**: For conditionally choosing between two values based on a boolean. +* **And**: For combining multiple conditions, requiring all to be true. +* **Or**: For combining multiple conditions, requiring at least one to be true. + +### Use Cases + +* **Conditional Logic**: Create branching logic based on value comparisons. +* **Data Validation**: Check if values meet specific criteria or thresholds. +* **Range Testing**: Verify if a value falls within or outside a specific range. diff --git a/graph-engine/available-nodes/logic/if.md b/graph-engine/available-nodes/logic/if.md new file mode 100644 index 0000000..de8ad2c --- /dev/null +++ b/graph-engine/available-nodes/logic/if.md @@ -0,0 +1,47 @@ +# If + +### What It Does + +Makes a choice between two values based on a condition. When the condition is true, it returns the first value; otherwise, it returns the second value. This is essential for creating dynamic content or responsive behaviors. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ------------------------------------------- | ------ | -------- | +| condition | The test that determines which value to use | Yes/No | Yes | +| a | The value to use when condition is true | Any | Yes | +| b | The value to use when condition is false | Any | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------------------------------- | ---- | +| value | Either value "a" or value "b" depending on the condition | Any | + +
+ +### How to Use It + +1. Drag the If node into your graph. +2. Connect a boolean (true/false) value to the "condition" input. +3. Connect your "true case" value to the "a" input. +4. Connect your "false case" value to the "b" input. +5. Run the graph—your output will be either value "a" or value "b". + +![If Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 2.57.42 PM.png>) + +### Tips + +* You can use any type of values for the inputs, but both "a" and "b" should be compatible types. +* Chain multiple If nodes together to create more complex conditional logic. + +### See Also + +* **Switch**: For selecting from more than two options based on a value. +* **AND/OR**: For combining multiple conditions. + +### Use Cases + +* **Responsive Design**: Choose different spacing or typography based on screen size. +* **Theme Switching**: Select different colors depending on light/dark mode. +* **State Management**: Display different values based on UI state (hover, pressed, disabled). diff --git a/graph-engine/available-nodes/logic/not.md b/graph-engine/available-nodes/logic/not.md new file mode 100644 index 0000000..3a30bb4 --- /dev/null +++ b/graph-engine/available-nodes/logic/not.md @@ -0,0 +1,44 @@ +# Not + +### What It Does + +Inverts a boolean value, turning true into false and false into true. This is useful for creating opposite conditions or toggling states in your design logic. + +### Inputs + +| Name | Description | Type | Required | +| ----- | --------------------------- | ---- | -------- | +| value | The boolean value to negate | Any | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------- | ------ | +| value | The opposite of the input value | Yes/No | + +
+ +### How to Use It + +1. Drag the Logical Not node into your graph. +2. Connect a boolean value (true/false) to the "value" input. +3. Run the graph—if you input true, you'll get false; if you input false, you'll get true. +4. Non-boolean values are converted to boolean before negation (e.g., 0 becomes false, then true). + +![Logical Not Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 3.29.06 PM.png>) + +### Tips + +* In JavaScript, values like 0, empty strings, null, and undefined are "falsy" and will be converted to true by the Not node. +* Use Not to create inverse conditions rather than duplicating logic with opposite rules. + +### See Also + +* **Logical AND**: For checking if multiple conditions are all true. +* **Logical OR**: For checking if at least one condition is true. + +### Use Cases + +* **Toggle States**: Invert a boolean state to toggle between two modes (e.g., light/dark theme). +* **Exclusion Rules**: Create rules for when something should not apply (e.g., "not mobile" for desktop-only features). +* **Alternate Paths**: Set up different design logic paths based on the negation of a condition. diff --git a/graph-engine/available-nodes/logic/or.md b/graph-engine/available-nodes/logic/or.md new file mode 100644 index 0000000..5dfce4a --- /dev/null +++ b/graph-engine/available-nodes/logic/or.md @@ -0,0 +1,44 @@ +# Or + +### What It Does + +Checks if at least one of the connected inputs is true and returns a single true/false result. This is useful for combining alternative conditions where any one being true is sufficient. + +### Inputs + +| Name | Description | Type | Required | +| ------ | ---------------------------------------------------- | ---- | -------- | +| inputs | Multiple values to check (can add as many as needed) | Any | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------------------- | ------ | +| value | True if any input is true/truthy, false otherwise | Yes/No | + +
+ +### How to Use It + +1. Drag the Logical OR node into your graph. +2. Click the "+" button to add as many input connections as you need. +3. Connect boolean values or conditions to each input. +4. Run the graph—your output will be true if at least one input is true. + +![Logical OR Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 3.33.50 PM.png>) + +### Tips + +* Non-boolean values are converted to boolean: most values become true except falsy values (0, "", null, undefined). +* An OR node with no inputs will return false (similar to mathematical sum of an empty set). + +### See Also + +* **Logical AND**: For checking if all conditions are true. +* **NOT**: For inverting a boolean value. + +### Use Cases + +* **Fallback Logic**: Apply a style if either the primary or backup condition is met. +* **Multi-Criteria Matching**: Match an item if it satisfies any one of several possible criteria. +* **State Detection**: Detect when a component is in any one of several active states (hover OR focus OR active). diff --git a/graph-engine/available-nodes/logic/switch.md b/graph-engine/available-nodes/logic/switch.md new file mode 100644 index 0000000..cb26bef --- /dev/null +++ b/graph-engine/available-nodes/logic/switch.md @@ -0,0 +1,45 @@ +# Switch + +### What It Does + +Selects a value from multiple inputs based on a condition string that matches an input name. It's like a multi-way IF statement, perfect for selecting between many alternative values. + +### Inputs + +| Name | Description | Type | Required | +| ---------------- | --------------------------------------------------------------- | ---- | -------- | +| condition | The name of the input to select | Text | Yes | +| default | The fallback value if no match is found | Any | Yes | +| \[custom inputs] | Additional named inputs you can add that match condition values | Any | No | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------------------------------------- | ---- | +| value | The value from the selected input (or default if no match) | Any | + +![Switch Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.18.47 PM.png>) + +### How to Use It + +1. Drag the Switch node into your graph. +2. Add custom inputs with names that match your possible conditions (e.g., "small", "medium", "large"). +3. Connect values to each input (different spacing values, colors, etc.). +4. Connect a text string to the "condition" input to determine which value is selected. +5. Run the graph—your output will be the value from the matched input name. + +### Tips + +* Make sure to set a meaningful default value for when the condition doesn't match any input name. +* You can add and remove inputs directly in the node UI to match your condition options. + +### See Also + +* **If**: For simpler true/false conditions with just two options. +* **AND/OR**: For creating complex conditions before a Switch. + +### Use Cases + +* **Responsive Breakpoints**: Select different sizing values based on a screen size name. +* **Theme Selection**: Choose between multiple theme values based on a theme name. +* **State Management**: Apply different styles based on a component state name (idle, hover, active, disabled). diff --git a/graph-engine/available-nodes/math/README.md b/graph-engine/available-nodes/math/README.md new file mode 100644 index 0000000..85d9c4f --- /dev/null +++ b/graph-engine/available-nodes/math/README.md @@ -0,0 +1,3 @@ +# Math + +Nodes for numerical calculations. Performs addition, multiplication, clamping, or interpolation—core tools for numeric processing. diff --git a/graph-engine/available-nodes/math/absolute.md b/graph-engine/available-nodes/math/absolute.md new file mode 100644 index 0000000..8770d96 --- /dev/null +++ b/graph-engine/available-nodes/math/absolute.md @@ -0,0 +1,44 @@ +# Absolute + +### What It Does + +Returns the absolute (positive) value of a number by removing its sign. This is useful for calculating sizes, distances, or any values where direction doesn't matter. + +### Inputs + +| Name | Description | Type | Required | +| ----- | --------------------------------------- | ------ | -------- | +| input | The number to convert to absolute value | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------------ | ------ | +| value | The absolute (positive) value of the input | Number | + +
+ +### How to Use It + +1. Drag the Absolute node into your graph. +2. Connect a number (like `-484.2`) to the "input". +3. Run the graph—your output will be `484`. +4. If you connect a positive number like `5`, it remains `5`. + +
+ +### Tips + +* Use this node when you need to ensure a value is positive, such as for sizes or distances. +* Absolute values are useful for calculating differences without caring about which value is larger. + +### See Also + +* [**Clamp**](../../../node-examples/math/clamp.md): For setting minimum and maximum bounds on a value. +* [**Difference**](difference.md): For calculating the absolute difference between two numbers. + +### Use Cases + +* **Error Calculations**: Find how far a value is from a target without regard to direction. +* **Asset Sizing**: Ensure measurements stay positive even after calculations might result in negative values. +* **Responsive Design**: Calculate size differences between breakpoints regardless of which is larger. diff --git a/graph-engine/available-nodes/math/add-node-variadic.md b/graph-engine/available-nodes/math/add-node-variadic.md new file mode 100644 index 0000000..78cc88b --- /dev/null +++ b/graph-engine/available-nodes/math/add-node-variadic.md @@ -0,0 +1,47 @@ +# Add Variadic + +### What It Does + +Adds two or more numbers together, summing up all the connected inputs. Unlike the basic Add node which has fixed inputs, this node can accept any number of values to add. + +### Inputs + +| Name | Description | Type | Required | +| ------ | ----------------------------------- | ---- | -------- | +| inputs | The list of numbers to add together | List | No | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------- | ------ | +| value | The sum of all input values | Number | + +
+ +### How to Use It + +1. Drag the Add Node (Variadic) into your graph. +2. Connect any number of numeric values to the "inputs" handle. +3. Each connected value will automatically be added to the inputs list. +4. Run the graph—the output will be the sum of all connected values. +5. For example, with inputs (3, 5, 7, 9), the output will be 24. + +
+ +### Tips + +* You can keep connecting more inputs as needed—there's no limit. +* If no inputs are connected, the output will be 0. +* This node is useful when you don't know in advance how many values you'll need to add. + +### See Also + +* [**Add**](../vector2/add.md): The standard addition node with two fixed inputs. +* [**Multiply Variadic**](multiply-variadic.md): For multiplying multiple values together. + +### Use Cases + +* **Flexible Calculations**: Perform addition with a variable number of inputs. +* **Dynamic Budgeting**: Add up expenses or income from multiple sources. +* **Cumulative Values**: Combine multiple metrics or measurements. +* **Configuration Sums**: Add together multiple customizable components of a value. diff --git a/graph-engine/available-nodes/math/add-variadic.md b/graph-engine/available-nodes/math/add-variadic.md new file mode 100644 index 0000000..3e5d301 --- /dev/null +++ b/graph-engine/available-nodes/math/add-variadic.md @@ -0,0 +1,2 @@ +# Add Variadic + diff --git a/graph-engine/available-nodes/math/add.md b/graph-engine/available-nodes/math/add.md new file mode 100644 index 0000000..4a82eea --- /dev/null +++ b/graph-engine/available-nodes/math/add.md @@ -0,0 +1,45 @@ +# Add + +### What It Does + +Adds two numbers together to produce their sum. It's a basic math operation useful for combining numeric values like spacing tokens or opacity percentages. + +### Inputs + +| Name | Description | Type | Required | +| ---- | ------------------------ | ------ | -------- | +| a | The first number to add | Number | Yes | +| b | The second number to add | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------ | ------ | +| value | The sum of a and b | Number | + +
+ +### How to Use It + +1. Drag the Add node into your graph. +2. Connect a number (like 3) to the "a" input. +3. Connect another number (like `3`) to the "b" input. +4. Run the graph—your output will be 6. + +
+ +### Tips + +* You can use the Add node with token references, like adding a base spacing value to an increment. +* For adding more than two numbers, chain multiple Add nodes together or use the Variadic Add node. + +### See Also + +* [**Subtract**](https://documentation.tokens.studio/graph-engine/available-nodes/math/subtract): For removing one number from another. +* [**Multiply**](https://documentation.tokens.studio/graph-engine/available-nodes/math/multiply): For multiplying numbers together. + +### Use Cases + +* **Spacing Calculations**: Add a base spacing unit (4px) to a multiplier to create consistent spacing increments in your design system. +* **Opacity Adjustments**: Add a percentage to a base opacity value to create a range of transparencies for different states. +* **Font Size Scaling**: Add a fixed increment to your base font size to create larger heading sizes. diff --git a/graph-engine/available-nodes/math/ceiling.md b/graph-engine/available-nodes/math/ceiling.md new file mode 100644 index 0000000..951b7de --- /dev/null +++ b/graph-engine/available-nodes/math/ceiling.md @@ -0,0 +1,44 @@ +# Ceiling + +### What It Does + +Rounds a number up to the nearest whole integer. This is useful for creating grid-based layouts, ensuring minimum sizes, or working with values that must be whole numbers. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ---------------------- | ------ | -------- | +| value | The number to round up | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------------------------- | ------ | +| value | The input number rounded up to the nearest integer | Number | + +
+ +### How to Use It + +1. Drag the Ceil node into your graph. +2. Connect a number (like `12.65764`) to the "value" input. +3. Run the graph—your output will be `13`. +4. If the input is already a whole number (like `7`), the output remains the same (`7`). + +
+ +### Tips + +* Use ceiling when you need to ensure a minimum number of items or size (like grid columns). +* Negative numbers are also rounded upward (e.g., -4.3 becomes -4). + +### See Also + +* [**Floor**](https://documentation.tokens.studio/graph-engine/available-nodes/math/floor): For rounding down to the nearest integer. +* [**Round**](https://documentation.tokens.studio/graph-engine/available-nodes/math/round): For rounding to the nearest integer (up or down). + +### Use Cases + +* **Grid Calculations**: Calculate how many grid cells are needed to fit content. +* **Pagination**: Determine the number of pages needed to display a set of items. +* **Sizing**: Ensure elements have at least a minimum pixel size, even with fractional calculations. diff --git a/graph-engine/available-nodes/math/clamp.md b/graph-engine/available-nodes/math/clamp.md new file mode 100644 index 0000000..9af4488 --- /dev/null +++ b/graph-engine/available-nodes/math/clamp.md @@ -0,0 +1,48 @@ +# Clamp + +### What It Does + +Restricts a value to stay within a specified minimum and maximum range. If the value is below the minimum, it returns the minimum; if it's above the maximum, it returns the maximum; otherwise, it returns the original value. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ------------------- | ------ | -------- | +| value | The number to clamp | Number | No | +| min | The lower boundary | Number | No | +| max | The upper boundary | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------ | ------ | +| value | The clamped result | Number | + +
+ +### How to Use It + +1. Drag the Clamp node into your graph. +2. Set "value" to the number you want to restrict (e.g., 12). +3. Set "min" to the lower bound (e.g., 5). +4. Set "max" to the upper bound (e.g., 10). +5. Run the graph—with the example values, your output will be 10 (since 12 exceeds the max). + +
+ +### Tips + +* Make sure min is less than max, or the clamp will always return the min value. +* Clamp is useful for ensuring values stay within valid ranges before passing to other nodes. +* For colors and other non-numeric values, use specialized constraint nodes instead. + +### See Also + +* [**Range Mapping**](https://documentation.tokens.studio/graph-engine/available-nodes/math/range-mapping): For transforming values from one range to another. + +### Use Cases + +* **Boundary Enforcement**: Ensure values stay within acceptable limits. +* **Input Validation**: Sanitize user inputs to prevent extreme values. +* **Responsive Sizing**: Limit element sizes between minimum and maximum constraints. +* **Animation Control**: Prevent objects from moving outside defined areas. diff --git a/graph-engine/available-nodes/math/closest-number.md b/graph-engine/available-nodes/math/closest-number.md new file mode 100644 index 0000000..c5975b0 --- /dev/null +++ b/graph-engine/available-nodes/math/closest-number.md @@ -0,0 +1,47 @@ +# Closest Number + +### What It Does + +The Closest Number node finds the number in a list that's nearest to a specified target value. It's useful for finding the best match in a set of predefined values, such as snapping to the closest size in a design system. + +### Inputs + +| Name | Description | Type | Required | +| ------- | --------------------------------------- | ------ | -------- | +| Numbers | Array of numbers to search through | List | No | +| Target | Target number to find closest match for | Number | No | + +### Outputs + +| Name | Description | Type | +| ---------- | ----------------------------------------------------- | ------ | +| Index | Index of the closest number in the array | Number | +| Value | The closest number found | Number | +| Difference | Absolute difference between target and closest number | Number | + +
+ +### How to Use It + +1. Drag the Closest Number node into your graph. +2. Connect an array of numbers (like `[5, 10, 15, 25, 30]`) to the "Numbers" input, or use the default `[1, 2, 3]`. +3. Connect your target value (like `17`) to the "Target" input, or use the default `2`. +4. The outputs will show the closest value (`15`), its index in the array (`2`), and the difference from your target (`2`). + +
+ +### Tips + +* The node returns the first occurrence when multiple numbers are equally close to the target. +* The input array must contain at least one number, or an error will be thrown. + +### See Also + +* [**Snap**](https://documentation.tokens.studio/graph-engine/available-nodes/math/snap): For rounding a value to specific increments. +* [**Linear Search**](https://documentation.tokens.studio/graph-engine/available-nodes/search/linear-search): For finding exact matches in an array. + +### Use Cases + +* **Design Token Selection**: Find the closest predefined spacing or font size in your design system. +* **Color Palettes**: Match a color to the nearest value in a restricted palette. +* **Responsive Breakpoints**: Determine which breakpoint is closest to the current viewport size. diff --git a/graph-engine/available-nodes/math/cosine.md b/graph-engine/available-nodes/math/cosine.md new file mode 100644 index 0000000..2a43ae3 --- /dev/null +++ b/graph-engine/available-nodes/math/cosine.md @@ -0,0 +1,44 @@ +# Cosine + +### What It Does + +The Cosine node calculates the cosine of an angle value (in radians). It's particularly useful for creating oscillating patterns, circular movements, and wave effects in design. + +### Inputs + +| Name | Description | Type | Required | +| ----- | -------------------- | ------ | -------- | +| Value | The angle in radians | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------------------- | ------ | +| Value | The cosine of the input angle | Number | + +
+ +### How to Use It + +1. Drag the Cosine node into your graph. +2. Connect a number to the "Value" input (e.g., 3.15) or use the default (0). +3. The output will be the cosine of the input angle, which ranges from -1 to 1. +4. Use this value for creating cyclic patterns and oscillations. + +
+ +### Tips + +* The output always ranges between -1 and 1. +* Use multiples of π (3.14159...) for common angles: 0 gives 1, π/2 gives 0, π gives -1. + +### See Also + +* [**Sine**](https://documentation.tokens.studio/graph-engine/available-nodes/math/sine): For calculating the sine function (phase-shifted cosine). +* [**Tangent**](https://documentation.tokens.studio/graph-engine/available-nodes/math/tangent): For calculating the tangent function. + +### Use Cases + +* **Circular Motion**: Create circular or elliptical movements in animations. +* **Wave Patterns**: Generate smooth wave patterns for transitions or visual effects. +* **Color Cycling**: Create natural color oscillations by driving color components with cosine values. diff --git a/graph-engine/available-nodes/math/count.md b/graph-engine/available-nodes/math/count.md new file mode 100644 index 0000000..5752eca --- /dev/null +++ b/graph-engine/available-nodes/math/count.md @@ -0,0 +1,46 @@ +# Count + +### What It Does + +Calculates the number of items in an array. It simply returns the length of the input array, regardless of what type of items the array contains. + +### Inputs + +| Name | Description | Type | Required | +| ----- | --------------------------- | ---- | -------- | +| value | The array to count items in | List | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------- | ------ | +| value | The number of items in the array | Number | + +
+ +### How to Use It + +1. Drag the Count node into your graph. +2. Connect an array (like `[4, 5, 6, 7]`) to the "value" input. +3. Run the graph—with the example array, your output will be 4. + +
+ +### Tips + +* Works with any type of array (numbers, strings, colors, mixed types, etc.). +* Empty arrays will return 0. +* This node counts only the top-level items; it doesn't count items in nested arrays. + +### See Also + +* [**Array Length**](https://documentation.tokens.studio/graph-engine/available-nodes/array/array-length): Alternative way to get the length of an array. +* [**Array Filter**](https://documentation.tokens.studio/graph-engine/available-nodes/array/array-filter): For counting only items that match specific criteria. +* [**Array Find**](https://documentation.tokens.studio/graph-engine/available-nodes/array/array-find): For locating specific items in an array. + +### Use Cases + +* **Validation**: Check if an array has any items or has a specific number of items. +* **Dynamic Layouts**: Adjust layouts based on the number of items to display. +* **Data Analysis**: Count the number of data points, colors, or other collection items. +* **Loop Control**: Use the count to determine how many iterations to perform. diff --git a/graph-engine/available-nodes/math/difference.md b/graph-engine/available-nodes/math/difference.md new file mode 100644 index 0000000..e7907d9 --- /dev/null +++ b/graph-engine/available-nodes/math/difference.md @@ -0,0 +1,47 @@ +# Difference + +### What It Does + +The Difference node calculates the absolute difference between two numbers. It's useful for measuring the gap between values while disregarding which is larger. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ----------------------------------- | ------ | -------- | +| A | First number in the comparison | Number | No | +| B | Second number in the comparison | Number | No | +| Precision | How many decimal places to round to | Number | No | + +### Outputs + +| Name | Description | Type | +| ---------- | --------------------------------------- | ------ | +| Difference | The absolute difference between A and B | Number | + +
+ +### How to Use It + +1. Drag the Difference node into your graph. +2. Connect your first number to the "A" input (e.g., `7.84`) or use the default (`0`). +3. Connect your second number to the "B" (e.g., `13`) input or use the default (`0`). +4. Optionally set the "Precision" input (defaults to 2 decimal places). +5. The output will be the absolute value of the difference between the two numbers (e.g., `5.16`) + +
+ +### Tips + +* The result is always positive, regardless of which input is larger. +* Use the precision input to control rounding (e.g., 0 for integers, 2 for cents). + +### See Also + +* [**Absolute**](https://documentation.tokens.studio/graph-engine/available-nodes/math/absolute): For getting the absolute value of a single number. +* [**Subtract**](https://documentation.tokens.studio/graph-engine/available-nodes/math/subtract): For getting the signed difference between numbers. + +### Use Cases + +* **Contrast Measurement**: Calculate the difference between foreground and background colors. +* **Error Margins**: Determine how far a value deviates from a target. +* **Spacing Consistency**: Check the difference between actual and intended spacing values. diff --git a/graph-engine/available-nodes/math/divide-variadic.md b/graph-engine/available-nodes/math/divide-variadic.md new file mode 100644 index 0000000..33a82e8 --- /dev/null +++ b/graph-engine/available-nodes/math/divide-variadic.md @@ -0,0 +1,48 @@ +# Divide Variadic + +### What It Does + +Performs sequential division of multiple numbers, starting with the first value and dividing by each subsequent value. Unlike the basic Divide node which has fixed inputs, this node can accept any number of values for division. + +### Inputs + +| Name | Description | Type | Required | +| ------ | ------------------------------------------ | ---- | -------- | +| inputs | The list of numbers to divide sequentially | List | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------- | ------ | +| value | The result of the sequential division | Number | + +
+ +### How to Use It + +1. Drag the Divide (Variadic) node into your graph. +2. Connect any number of numeric values to the "inputs" handle. +3. Each connected value will automatically be added to the inputs list. +4. Run the graph—the output will be the first value divided by all subsequent values. +5. For example, with inputs (`100, 5, 20`), the output will be `1` (`100÷5÷20`). + +
+ +### Tips + +* You need at least one value for the node to work properly. +* Division happens from left to right (first value divided by second, result divided by third, etc.). +* Be careful with zero divisors—dividing by zero will cause errors. + +### See Also + +* [**Divide**](divide.md): The standard division node with two fixed inputs. +* [**Multiply Variadic**](multiply-variadic.md): For multiplying multiple values together. +* [**Add Variadic**](add-node-variadic.md): For adding multiple values together. + +### Use Cases + +* **Ratio Calculations**: Compute ratios involving multiple factors. +* **Scaling**: Sequentially reduce a value by multiple divisors. +* **Unit Conversions**: Apply multiple conversion factors in sequence. +* **Proportional Distribution**: Calculate shares or portions from a total amount. diff --git a/graph-engine/available-nodes/math/divide.md b/graph-engine/available-nodes/math/divide.md new file mode 100644 index 0000000..2ccd9c6 --- /dev/null +++ b/graph-engine/available-nodes/math/divide.md @@ -0,0 +1,44 @@ +# Divide + +### What It Does + +Divides one number by another, producing their quotient. This basic math operation is useful for scaling, calculating proportions, or determining ratios between values. + +### Inputs + +| Name | Description | Type | Required | +| ---- | ----------------------------------- | ------ | -------- | +| a | The dividend (number being divided) | Number | Yes | +| b | The divisor (number to divide by) | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------------------- | ------ | +| value | The quotient (a divided by b) | Number | + +
+ +### How to Use It + +1. Drag the Divide node into your graph. +2. Connect a number (like `10`) to the "a" input. +3. Connect another number (like `2`) to the "b" input. +4. Run the graph—your output will be `5`. + +
+ +### Tips + +* Be careful with division by zero, which results in Infinity or NaN (not a number). +* Use division to create proportional relationships between values. + +### See Also + +* [**Multiply**](https://documentation.tokens.studio/graph-engine/available-nodes/math/multiply): For multiplying numbers together. + +### Use Cases + +* **Scale Calculation**: Convert between different measurement units (e.g., pixels to percentages). +* **Aspect Ratios**: Calculate width-to-height ratios for responsive elements. +* **Distribution**: Divide a total value evenly among multiple elements. diff --git a/graph-engine/available-nodes/math/evaluate-math.md b/graph-engine/available-nodes/math/evaluate-math.md new file mode 100644 index 0000000..160a9dc --- /dev/null +++ b/graph-engine/available-nodes/math/evaluate-math.md @@ -0,0 +1,37 @@ +# Evaluate math + +### What It Does +The Evaluate math node calculates the result of arbitrary mathematical expressions using variables. It lets you create complex formulas combining multiple values without needing multiple math nodes. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Expression | Mathematical formula to evaluate | Text | Yes | +| [Variables] | Custom inputs used in the expression | Number | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Value | The calculated result of the expression | Number | +| Expression | The expression that was evaluated | Text | + +### How to Use It +1. Drag the Evaluate math node into your graph. +2. Enter a mathematical expression like `"a * 2 + b"` in the "Expression" input. +3. Add input variables by name (in this case, connect values to inputs "a" and "b"). +4. The node will calculate the result based on your formula and connected values. + +![Evaluate Math Example](screenshot-placeholder.png) + +### Tips +- Supports standard operators (+, -, *, /, ^), functions (sin, cos, sqrt), and constants (pi, e). +- Variable names in your expression must match the input names you add to the node. + +### See Also +- **Add (Variadic)**: For simpler addition of multiple values. +- **Multiply (Variadic)**: For simpler multiplication of multiple values. + +### Use Cases +- **Complex Calculations**: Create custom formulas like `"width * 0.75 - padding * 2"` for layout logic. +- **Design Algorithms**: Implement specific design calculations such as contrast ratios. +- **Responsive Scaling**: Create expressions that adjust values based on multiple parameters. \ No newline at end of file diff --git a/graph-engine/available-nodes/math/exponentiation.md b/graph-engine/available-nodes/math/exponentiation.md new file mode 100644 index 0000000..f01723d --- /dev/null +++ b/graph-engine/available-nodes/math/exponentiation.md @@ -0,0 +1,42 @@ +# Exponentiation + +### What It Does + +The Exponentiation node calculates e (Euler's number, approximately 2.71828) raised to a specified power. This function creates exponential growth or decay and is particularly useful for natural growth patterns. + +### Inputs + +| Name | Description | Type | Required | +| -------- | ----------------------- | ------ | -------- | +| Exponent | The power to raise e to | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------ | ------ | +| Value | The result of e^exponent | Number | + +
+ +### How to Use It + +1. Drag the Exponentiation node into your graph. +2. Connect a number to the "Exponent" input. +3. The output will be e raised to the power of the input value. +4. Use this for creating natural exponential growth or decay patterns. + +
+ +### Tips + +* Positive exponents create exponential growth (faster than linear or polynomial). +* Negative exponents create exponential decay, approaching zero. +* An exponent of 0 always outputs 1. + +### See Also + +### Use Cases + +* **Natural Growth Patterns**: Model organic growth in design elements like spacing. +* **Decay Effects**: Create natural fading or transition effects. +* **Smooth Non-linear Scaling**: Generate values that change at an exponential rate. diff --git a/graph-engine/available-nodes/math/floor.md b/graph-engine/available-nodes/math/floor.md new file mode 100644 index 0000000..fb12fe3 --- /dev/null +++ b/graph-engine/available-nodes/math/floor.md @@ -0,0 +1,44 @@ +# Floor + +### What It Does + +Rounds a number down to the nearest whole integer. This is useful for creating grid-based layouts, calculating complete units, or working with values that must be whole numbers. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ------------------------ | ------ | -------- | +| value | The number to round down | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------------------------------- | ------ | +| value | The input number rounded down to the nearest integer | Number | + +
+ +### How to Use It + +1. Drag the Floor node into your graph. +2. Connect a number (like `4.8`) to the "value" input. +3. Run the graph—your output will be `4`. +4. If the input is already a whole number like `13`, the output remains the same `13`. + +
+ +### Tips + +* Use floor when you need to count only complete units or ensure you never exceed a maximum. +* Negative numbers are also rounded downward (e.g., -4.3 becomes -5). + +### See Also + +* **Ceil**: For rounding up to the nearest integer. +* **Round**: For rounding to the nearest integer (up or down). + +### Use Cases + +* **Page Indexing**: Calculate the current page number based on item count and items per page. +* **Complete Units**: Count only complete units (e.g., whole hours passed). +* **Max Constraints**: Ensure you never exceed a maximum by discarding fractional parts. diff --git a/graph-engine/available-nodes/math/fluid.md b/graph-engine/available-nodes/math/fluid.md new file mode 100644 index 0000000..84b028a --- /dev/null +++ b/graph-engine/available-nodes/math/fluid.md @@ -0,0 +1,41 @@ +# Fluid + +### What It Does +The Fluid node calculates responsive values that smoothly scale between minimum and maximum sizes based on the viewport width. It's perfect for creating fluid typography, spacing, and other responsive design elements. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| Min Size | Minimum size in pixels | Number | No | +| Max Size | Maximum size in pixels | Number | No | +| Min Viewport | Minimum viewport width in pixels | Number | No | +| Max Viewport | Maximum viewport width in pixels | Number | No | +| Viewport | Current viewport width in pixels | Number | No | +| Precision | Number of decimal places in the output | Number | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Value | The calculated fluid value | Number | + +### How to Use It +1. Drag the Fluid node into your graph. +2. Set your size range (defaults: Min Size 16px, Max Size 24px). +3. Set your viewport range (defaults: Min Viewport 320px, Max Viewport 1920px). +4. Connect a viewport width or use the default (768px). +5. The output will give you a proportionally scaled value between your min and max sizes. + +![Fluid Example](screenshot-placeholder.png) + +### Tips +- The value is automatically clamped to stay within your min and max size range. +- You can reverse the scaling effect by setting min size larger than max size. + +### See Also +- **Lerp**: For linear interpolation between two values. +- **Range Mapping**: For mapping values from one range to another. + +### Use Cases +- **Responsive Typography**: Create text that grows smoothly from mobile to desktop. +- **Fluid Spacing**: Scale spacing values based on screen size for consistent layouts. +- **Adaptive Components**: Design elements that resize proportionally to the viewport. \ No newline at end of file diff --git a/graph-engine/available-nodes/math/lerp.md b/graph-engine/available-nodes/math/lerp.md new file mode 100644 index 0000000..09aba94 --- /dev/null +++ b/graph-engine/available-nodes/math/lerp.md @@ -0,0 +1,41 @@ +# Lerp + +### What It Does +Performs linear interpolation between two values. It calculates a point that is a specified fraction of the way between two numbers, creating a smooth transition from one value to another. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| a | The starting value | Number | No | +| b | The ending value | Number | No | +| t | The interpolation factor (0-1) | Number | No | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| value | The interpolated result | Number | + +### How to Use It +1. Drag the Lerp node into your graph. +2. Set "a" to your starting value (e.g., 0). +3. Set "b" to your ending value (e.g., 100). +4. Set "t" to the interpolation factor between 0 and 1 (e.g., 0.5). +5. Run the graph—with the example values, your output will be 50 (halfway between 0 and 100). + +![Lerp Example](screenshot-placeholder.png) + +### Tips +- When t=0, the output equals a; when t=1, the output equals b. +- The t value is not limited to the 0-1 range. Values outside this range will extrapolate rather than interpolate. +- For color transitions, use the Color Mix node which performs color-aware interpolation. + +### See Also +- **Range Mapping**: For mapping a value from one range to another. +- **Sample Curve**: For non-linear interpolation using curves. +- **Color Mix**: For interpolating between colors. + +### Use Cases +- **Animations**: Calculate in-between values for smooth transitions. +- **Responsive Design**: Adjust values based on screen size or other parameters. +- **Data Visualization**: Generate intermediate values for graphs and charts. +- **Gradual Adjustments**: Create incremental changes between two states or values. \ No newline at end of file diff --git a/graph-engine/available-nodes/math/modulo.md b/graph-engine/available-nodes/math/modulo.md new file mode 100644 index 0000000..8eef251 --- /dev/null +++ b/graph-engine/available-nodes/math/modulo.md @@ -0,0 +1,37 @@ +# Modulo + +### What It Does +The Modulo node calculates the remainder when dividing one number by another. It's useful for creating cycles, determining if a number is divisible by another, and implementing wrap-around behaviors. + +### Inputs +| Name | Description | Type | Required | +|------|-------------|------|----------| +| A | The dividend (number being divided) | Number | Yes | +| B | The divisor (number to divide by) | Number | Yes | + +### Outputs +| Name | Description | Type | +|------|-------------|------| +| Value | The remainder of A ÷ B | Number | + +### How to Use It +1. Drag the Modulo node into your graph. +2. Connect your dividend to the "A" input. +3. Connect your divisor to the "B" input. +4. The output will be the remainder after division. + +![Modulo Example](screenshot-placeholder.png) + +### Tips +- The result is always less than the divisor (B). +- To check if a number is divisible by another, see if the modulo result is 0. +- Be careful when using negative numbers, as the result follows JavaScript's modulo behavior. + +### See Also +- **Divide**: For getting the quotient of division. +- **Floor**: Often used with division to get integer division results. + +### Use Cases +- **Cycling Patterns**: Create repeating patterns in design elements (every Nth item). +- **Alternating Styles**: Apply different styles based on element position (odd/even). +- **Constraint Ranges**: Keep values within a specific range by wrapping around. \ No newline at end of file diff --git a/graph-engine/available-nodes/math/multiply-variadic.md b/graph-engine/available-nodes/math/multiply-variadic.md new file mode 100644 index 0000000..1235192 --- /dev/null +++ b/graph-engine/available-nodes/math/multiply-variadic.md @@ -0,0 +1,48 @@ +# Multiply Variadic + +### What It Does + +Multiplies two or more numbers together, calculating the product of all connected inputs. Unlike the basic Multiply node which has fixed inputs, this node can accept any number of values to multiply. + +### Inputs + +| Name | Description | Type | Required | +| ------ | ---------------------------------------- | ---- | -------- | +| inputs | The list of numbers to multiply together | List | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------- | ------ | +| value | The product of all input values | Number | + +![Multiply (Variadic) Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 4.25.59 PM.png>) + +### How to Use It + +1. Drag the Multiply (Variadic) node into your graph. +2. Connect any number of numeric values to the "inputs" handle. +3. Each connected value will automatically be added to the inputs list. +4. Run the graph—the output will be the product of all connected values. +5. For example, with inputs \[2, 3, 4], the output will be 24. + +
+ +### Tips + +* You can keep connecting more inputs as needed—there's no limit. +* If no inputs are connected, the output will be 1 (the multiplicative identity). +* If any input is 0, the output will be 0 regardless of other values. + +### See Also + +* **Multiply**: The standard multiplication node with two fixed inputs. +* **Add Variadic**: For adding multiple values together. +* **Divide Variadic**: For dividing with multiple divisors. + +### Use Cases + +* **Scaling**: Apply multiple scaling factors to a base value. +* **Compound Effects**: Calculate the result of multiple percentage modifiers. +* **Dimensional Calculations**: Multiply length, width, and height for volume calculations. +* **Probability**: Calculate the combined probability of independent events. diff --git a/graph-engine/available-nodes/math/multiply.md b/graph-engine/available-nodes/math/multiply.md new file mode 100644 index 0000000..426a339 --- /dev/null +++ b/graph-engine/available-nodes/math/multiply.md @@ -0,0 +1,46 @@ +# Multiply + +### What It Does + +The Multiply node performs multiplication between two numbers. It's one of the fundamental math operations, useful for scaling values, calculating areas, and applying coefficients. + +### Inputs + +| Name | Description | Type | Required | +| ---- | --------------------------------------- | ------ | -------- | +| A | The first number in the multiplication | Number | Yes | +| B | The second number in the multiplication | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------- | ------ | +| Value | The product of A × B | Number | + +
+ +### How to Use It + +1. Drag the Multiply node into your graph. +2. Connect your first number to the "A" input. +3. Connect your second number to the "B" input. +4. The output will be the product of the two numbers. + +
+ +### Tips + +* Multiplication is commutative, so the order of A and B doesn't matter. +* To scale a value by a percentage, multiply by the percentage divided by 100. +* Multiplying by 0 always gives 0, and multiplying by 1 leaves the value unchanged. + +### See Also + +* [**Multiply (Variadic)**](multiply-variadic.md): For multiplying more than two numbers at once. +* [**Divide**:](divide.md) For the inverse operation of multiplication. + +### Use Cases + +* **Scaling**: Adjust the size or intensity of values by a factor. +* **Area Calculations**: Calculate areas by multiplying width and height. +* **Percentage Adjustments**: Apply percentage-based modifications to values. diff --git a/graph-engine/available-nodes/math/power.md b/graph-engine/available-nodes/math/power.md new file mode 100644 index 0000000..51c5adf --- /dev/null +++ b/graph-engine/available-nodes/math/power.md @@ -0,0 +1,48 @@ +# Power + +### What It Does + +The Power node raises a base number to the power of an exponent. It's useful for creating exponential growth, quadratic curves, and scaling values non-linearly. + +### Inputs + +| Name | Description | Type | Required | +| -------- | ---------------------------------- | ------ | -------- | +| Base | The number to be raised to a power | Number | Yes | +| Exponent | The power to raise the base to | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------- | ------ | +| Value | The result of base^exponent | Number | + +![Power Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 4.38.55 PM.png>) + +### How to Use It + +1. Drag the Power node into your graph. +2. Connect a number to the "Base" input. +3. Set the "Exponent" input (defaults to 2 if not connected). +4. The output will be the base raised to the power of the exponent. + + + +
+ +### Tips + +* An exponent of 2 (the default) calculates the square of the base. +* An exponent of 0.5 calculates the square root of the base. +* Negative exponents give reciprocal powers (1/base^|exponent|). + +### See Also + +* **Square Root**: For specifically calculating square roots. +* **Exp**: For calculating e (Euler's number) raised to a power. + +### Use Cases + +* **Non-linear Scaling**: Create exponential growth for spacing or sizing systems. +* **Emphasis Effects**: Use powers greater than 1 to emphasize differences between values. +* **Compression Effects**: Use powers between 0 and 1 to compress ranges of values. diff --git a/graph-engine/available-nodes/math/random.md b/graph-engine/available-nodes/math/random.md new file mode 100644 index 0000000..b5d4cf2 --- /dev/null +++ b/graph-engine/available-nodes/math/random.md @@ -0,0 +1,45 @@ +# Random + +### What It Does + +The Random node generates a random decimal number between 0 (inclusive) and 1 (exclusive). It's useful for creating variability, randomized designs, and simulating unpredictable behaviors. + +### Inputs + +| Name | Description | Type | Required | +| ------ | ------------------------- | ----- | -------- | +| _None_ | _This node has no inputs_ | _N/A_ | _N/A_ | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------- | ------ | +| Value | A random number between 0 and 1 | Number | + +
+ +### How to Use It + +1. Drag the Random node into your graph. +2. The node generates a random value when it's first created. +3. Connect the "Value" output to other nodes that need randomization. +4. Note that the value stays fixed after generation and doesn't change during execution. + +![Random Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 4.44.22 PM.png>) + +### Tips + +* To get a random range other than 0-1, use math nodes to scale and shift the output. +* For values like 0-100, multiply the random value by 100. +* For ranges like 20-50, multiply by 30 (the range) and add 20 (the minimum). + +### See Also + +* **Range Mapping**: For mapping the 0-1 output to other ranges. +* **Multiply**: For scaling the random value. + +### Use Cases + +* **Variation in Design**: Add controlled randomness to spacing, sizing, or colors. +* **Testing Edge Cases**: Simulate different possible values during system testing. +* **Jitter Effects**: Add natural-looking variation to regular patterns or layouts. diff --git a/graph-engine/available-nodes/math/range-mapping.md b/graph-engine/available-nodes/math/range-mapping.md new file mode 100644 index 0000000..49733b7 --- /dev/null +++ b/graph-engine/available-nodes/math/range-mapping.md @@ -0,0 +1,52 @@ +# Range Mapping + +### What It Does + +Transforms a value from one numeric range to another. It takes a value within a source range and finds the equivalent value in a target range, maintaining the same relative position. + +### Inputs + +| Name | Description | Type | Required | +| ---------- | -------------------------------------------------- | ------ | -------- | +| inputValue | The value to transform | Number | No | +| inputMin | The minimum of the source range | Number | No | +| inputMax | The maximum of the source range | Number | No | +| outputMin | The minimum of the target range | Number | No | +| outputMax | The maximum of the target range | Number | No | +| clamp | Whether to restrict the result to the output range | Yes/No | No | + +### Outputs + +| Name | Description | Type | +| ----------- | -------------------------------------- | ------ | +| mappedValue | The transformed value in the new range | Number | + +![Range Mapping Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.16.08 PM.png>) + +### How to Use It + +1. Drag the Range Mapping node into your graph. +2. Set "inputValue" to the number you want to transform (e.g., 50). +3. Define your source range with "inputMin" (e.g., 0) and "inputMax" (e.g., 100). +4. Define your target range with "outputMin" (e.g., 0) and "outputMax" (e.g., 1). +5. Choose whether to clamp the result to the output range. +6. Run the graph—with the example values, your output will be 0.5 (50% of the way between 0 and 1). + +### Tips + +* Ensure inputMin and inputMax are different values to avoid division by zero. +* The output range can be reversed (e.g., outputMin=1, outputMax=0) to invert the mapping. +* When clamp is enabled, the output will never exceed the output range boundaries. + +### See Also + +* **Lerp**: For linear interpolation between two values. +* **Clamp**: For restricting a value within a specific range. +* **Math Scale**: For applying a scaling factor to a value. + +### Use Cases + +* **Responsive Design**: Map screen dimensions to appropriate element sizes. +* **Data Visualization**: Convert raw data values to pixel coordinates for display. +* **Animation Control**: Transform timing values into position, opacity, or scale values. +* **Normalization**: Convert values from different scales into a common range (often 0-1). diff --git a/graph-engine/available-nodes/math/round.md b/graph-engine/available-nodes/math/round.md new file mode 100644 index 0000000..a41290e --- /dev/null +++ b/graph-engine/available-nodes/math/round.md @@ -0,0 +1,47 @@ +# Round + +### What It Does + +The Round node adjusts a floating-point number to the nearest integer or to a specified precision. It's essential for cleaning up decimal values and ensuring consistent precision in your calculations. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ----------------------------------- | ------ | -------- | +| Value | The number you want to round | Number | No | +| Precision | How many decimal places to round to | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------ | ------ | +| Value | The rounded number | Number | + +![Round Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 4.55.41 PM.png>) + +### How to Use It + +1. Drag the Round node into your graph. +2. Connect the number you want to round to the "Value" input. +3. Set the "Precision" input to specify how many decimal places to keep. +4. The output will be your number rounded to the specified precision. + +
+ +### Tips + +* A precision of 0 (the default) rounds to the nearest whole number. +* Positive precision values round to that many decimal places (e.g., 2 gives 0.01 precision). +* To round to the nearest 10, 100, etc., use negative precision values (-1, -2, etc.). + +### See Also + +* **Floor**: For always rounding down to the nearest integer. +* **Ceil**: For always rounding up to the nearest integer. +* **Snap**: For rounding to specific increments beyond simple decimal places. + +### Use Cases + +* **Clean Decimal Display**: Ensure values display with a consistent number of decimal places. +* **Financial Calculations**: Round currency values to 2 decimal places. +* **Measurement Precision**: Control the precision of physical measurements in design systems. diff --git a/graph-engine/available-nodes/math/sine.md b/graph-engine/available-nodes/math/sine.md new file mode 100644 index 0000000..4dba61b --- /dev/null +++ b/graph-engine/available-nodes/math/sine.md @@ -0,0 +1,45 @@ +# Sine + +### What It Does + +The Sine node calculates the sine of an angle value (in radians). It produces a smooth wave output that oscillates between -1 and 1, perfect for creating fluid animations and wave effects. + +### Inputs + +| Name | Description | Type | Required | +| ----- | -------------------- | ------ | -------- | +| Value | The angle in radians | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------- | ------ | +| Value | The sine of the input angle | Number | + +![Sine Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 5.27.24 PM.png>) + +### How to Use It + +1. Drag the Sine node into your graph. +2. Connect a number to the "Value" input or use the default (0). +3. The output will be the sine of the input angle, which ranges from -1 to 1. +4. Use this value for creating wave patterns and smooth oscillations. + +
+ +### Tips + +* The output always ranges between -1 and 1. +* For smooth wave patterns, feed the Sine node with continuously increasing values. +* Common angles: sin(0) = 0, sin(π/2) = 1, sin(π) = 0, sin(3π/2) = -1. + +### See Also + +* **Cosine**: For calculating the cosine function (90° phase-shifted sine). +* **Tangent**: For calculating the tangent function. + +### Use Cases + +* **Smooth Animations**: Create natural, organic motion for UI elements. +* **Wave Effects**: Generate wave patterns for backgrounds, borders, or dynamic layouts. +* **Periodic Value Generation**: Create cycling values for recurring patterns in design tokens. diff --git a/graph-engine/available-nodes/math/snap.md b/graph-engine/available-nodes/math/snap.md new file mode 100644 index 0000000..3cb2e42 --- /dev/null +++ b/graph-engine/available-nodes/math/snap.md @@ -0,0 +1,50 @@ +# Snap + +### What It Does + +The Snap node rounds a value to the nearest multiple of an increment, with an optional base offset. It's useful for creating grids, aligning values to specific intervals, and implementing design systems with consistent spacing. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ------------------------------------------------ | ------ | -------- | +| Value | The value to snap | Number | No | +| Increment | The step size to snap to | Number | No | +| Base | The starting point of the snap grid | Number | No | +| Method | How to round values: "round", "floor", or "ceil" | Text | No | + +### Outputs + +| Name | Description | Type | +| ------- | -------------------------------------------------------- | ------ | +| Snapped | The value snapped to the nearest increment from the base | Number | + +![Snap Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 5.36.32 PM.png>) + +### How to Use It + +1. Drag the Snap node into your graph. +2. Connect a number to the "Value" input, or use the default (3). +3. Set your desired "Increment" (default 2) and "Base" (default 0). +4. Choose a "Method" for rounding: round (nearest), floor (lower), or ceil (higher). +5. The output will be the value snapped to your defined grid. + +
+ +### Tips + +* Use "floor" to always snap down, "ceil" to always snap up, or "round" for nearest. +* For a grid starting at 0 with increment 8, values will snap to 0, 8, 16, 24, etc. +* With a base of 4 and increment 8, values will snap to 4, 12, 20, 28, etc. + +### See Also + +* **Round**: For simple rounding without custom increments. +* **Floor**: For always rounding down to the nearest integer. +* **Ceil**: For always rounding up to the nearest integer. + +### Use Cases + +* **Grid Alignment**: Snap positions to a grid for clean layouts. +* **Consistent Spacing**: Ensure spacing values follow your design system increments. +* **Value Quantization**: Convert continuous inputs to discrete steps (like music notes). diff --git a/graph-engine/available-nodes/math/square-root.md b/graph-engine/available-nodes/math/square-root.md new file mode 100644 index 0000000..1e1a919 --- /dev/null +++ b/graph-engine/available-nodes/math/square-root.md @@ -0,0 +1,45 @@ +# Square Root + +### What It Does + +The Square Root node calculates the square root of a number - the value which, when multiplied by itself, equals the original number. It's essential for geometric calculations and creating non-linear scaling. + +### Inputs + +| Name | Description | Type | Required | +| -------- | ------------------------------------- | ------ | -------- | +| Radicand | The number to find the square root of | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------------------------- | ------ | +| Value | The square root of the input number | Number | + +![Square Root Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 5.40.54 PM.png>) + +### How to Use It + +1. Drag the Square Root node into your graph. +2. Connect a positive number to the "Radicand" input. +3. The output will be the square root of the input. +4. Use this for creating non-linear scales or calculating geometric properties. + +
+ +### Tips + +* The input should be zero or positive for real number results. +* Using a negative input will result in NaN (Not a Number). +* Square root grows slower than linear functions, useful for compression effects. + +### See Also + +* **Pow**: For calculating powers, including the reverse operation of square root. +* **Abs**: For ensuring a value is positive before taking its square root. + +### Use Cases + +* **Non-linear Scaling**: Create spacing or sizing scales that grow more gradually. +* **Distance Calculations**: Compute distances in 2D or 3D space. +* **Visual Dampening**: Reduce extreme values while preserving smaller ones. diff --git a/graph-engine/available-nodes/math/subtract-variadic.md b/graph-engine/available-nodes/math/subtract-variadic.md new file mode 100644 index 0000000..6a5ea07 --- /dev/null +++ b/graph-engine/available-nodes/math/subtract-variadic.md @@ -0,0 +1,50 @@ +# Subtract Variadic + +### What It Does + +Performs sequential subtraction of multiple numbers, starting with the first value and subtracting each subsequent value. Unlike the basic Subtract node which has fixed inputs, this node can accept any number of values to subtract. + +### Inputs + +| Name | Description | Type | Required | +| ------ | -------------------------------------------- | ---- | -------- | +| inputs | The list of numbers to subtract sequentially | List | No | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------------------- | ------ | +| value | The result of the sequential subtraction | Number | + +![Subtract (Variadic) Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 5.51.47 PM.png>) + +### How to Use It + +1. Drag the Subtract (Variadic) node into your graph. +2. Connect any number of numeric values to the "inputs" handle. +3. Each connected value will automatically be added to the inputs list. +4. Run the graph—the output will be the first value minus all subsequent values. +5. For example, with inputs \[3, 2, 1], the output will be 0 (3-2-1). + + + +
+ +### Tips + +* You need at least one value for the node to work properly. +* Subtraction happens from left to right (first value minus second, result minus third, etc.). +* Order matters—the sequence \[10, 5, 2] gives a different result (3) than \[5, 10, 2] (-7). + +### See Also + +* **Subtract**: The standard subtraction node with two fixed inputs. +* **Add Variadic**: For adding multiple values together. +* **Difference**: For calculating the absolute difference between values. + +### Use Cases + +* **Budget Calculations**: Start with a total and subtract multiple expenses. +* **Time Intervals**: Calculate remaining time after subtracting multiple periods. +* **Inventory Management**: Track remaining stock after multiple withdrawals. +* **Resource Allocation**: Calculate remaining capacity after multiple allocations. diff --git a/graph-engine/available-nodes/math/subtract.md b/graph-engine/available-nodes/math/subtract.md new file mode 100644 index 0000000..f4257b3 --- /dev/null +++ b/graph-engine/available-nodes/math/subtract.md @@ -0,0 +1,45 @@ +# Subtract + +### What It Does + +Subtracts one number from another, producing their difference. This basic math operation is useful for finding gaps between values or reducing numeric values. + +### Inputs + +| Name | Description | Type | Required | +| ---- | ----------------------------------- | ------ | -------- | +| a | The first number (minuend) | Number | Yes | +| b | The number to subtract (subtrahend) | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------- | ------ | +| value | The difference (a minus b) | Number | + +![Subtract Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 5.45.31 PM.png>) + +### How to Use It + +1. Drag the Subtract node into your graph. +2. Connect a number (like `44`) to the "a" input. +3. Connect another number (like `33`) to the "b" input. +4. Run the graph—your output will be `10`. + +
+ +### Tips + +* Remember that subtraction is not commutative: a - b is not the same as b - a. +* For absolute differences (regardless of which is larger), pair this with an Absolute node. + +### See Also + +* **Add**: For adding numbers together. +* **Multiply**: For multiplying numbers together. + +### Use Cases + +* **Spacing Adjustment**: Calculate the difference between container width and content width. +* **Relative Positioning**: Determine offsets from a base position in layouts. +* **Token Derivation**: Create derived tokens by subtracting values from a base token. diff --git a/graph-engine/available-nodes/math/tangent.md b/graph-engine/available-nodes/math/tangent.md new file mode 100644 index 0000000..2cc4abd --- /dev/null +++ b/graph-engine/available-nodes/math/tangent.md @@ -0,0 +1,45 @@ +# Tangent + +### What It Does + +The Tan node calculates the tangent of an angle value (in radians). Unlike sine and cosine which range from -1 to 1, tangent can produce values from negative infinity to positive infinity, creating more extreme oscillations. + +### Inputs + +| Name | Description | Type | Required | +| ----- | -------------------- | ------ | -------- | +| Value | The angle in radians | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------ | ------ | +| Value | The tangent of the input angle | Number | + +![Tan Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 5.56.04 PM (2).png>) + +### How to Use It + +1. Drag the Tan node into your graph. +2. Connect a number to the "Value" input or use the default (0). +3. The output will be the tangent of the input angle. +4. Be aware that at certain values (like π/2, 3π/2, etc.), the output approaches infinity. + +
+ +### Tips + +* The tangent function has vertical asymptotes at odd multiples of π/2 (±π/2, ±3π/2, etc.). +* For stable results, avoid angles too close to these asymptotes. +* The tangent is mathematically equivalent to sine/cosine. + +### See Also + +* **Sine**: For a bounded oscillating value between -1 and 1. +* **Cosine**: For another bounded oscillating value with a 90° phase shift from sine. + +### Use Cases + +* **Sharp Transitions**: Create dramatic, rapid changes in values. +* **Non-linear Mapping**: Transform linear inputs into non-linear outputs with steep changes. +* **Mathematical Modeling**: Implement specialized mathematical functions that require tangent calculations. diff --git a/graph-engine/available-nodes/naming/README.md b/graph-engine/available-nodes/naming/README.md new file mode 100644 index 0000000..a4034d4 --- /dev/null +++ b/graph-engine/available-nodes/naming/README.md @@ -0,0 +1,3 @@ +# Naming + +Nodes for generating consistent names. Produces scales (numeric, alphabetic, etc.) for labeling tokens or structuring naming conventions. diff --git a/graph-engine/available-nodes/naming/alphabetic-scale.md b/graph-engine/available-nodes/naming/alphabetic-scale.md new file mode 100644 index 0000000..22d2ce2 --- /dev/null +++ b/graph-engine/available-nodes/naming/alphabetic-scale.md @@ -0,0 +1,50 @@ +# Alphabetic Scale + +### What It Does + +The Alphabetic Scale node generates alphabetic characters (A through Z) based on an index value. It can output uppercase or lowercase letters and allows for optional prefix and suffix strings to be added to the result. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ----------------------------------------------- | ------- | -------- | +| Index | Letter index (0 = A, 1 = B, etc.) | Number | Yes | +| Uppercase | Output in uppercase (true) or lowercase (false) | Boolean | No | +| Prefix | Optional text to add before the letter | String | No | +| Suffix | Optional text to add after the letter | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------------------------------------- | ------ | +| Value | The generated alphabetic value with optional prefix and suffix | String | + +
+ +### How to Use It + +1. Drag the Alphabetic Scale node into your graph. +2. Connect a number to the "Index" input or set it directly (0-25 for A-Z). +3. Configure the optional inputs: + * Set "Uppercase" to true for uppercase letters, false for lowercase. + * Add a "Prefix" and/or "Suffix" if needed. +4. The node will output the corresponding letter with any prefix and suffix applied. + +
+ +### Tips + +* The index is clamped between 0-25 (the length of the English alphabet). +* Use this node in combination with Count or Range nodes to generate sequential lettering. +* For multi-letter naming (AA, AB, etc.), you may need to use multiple nodes or custom logic. + +### See Also + +* [**Numeric Scale**](numeric-scale.md): For generating numeric sequences. +* [**T-shirt Size**](t-shirt-size.md): For generating t-shirt size scales (XS, S, M, L, XL). + +### Use Cases + +* **Variant Naming**: Create alphabetic variants for design elements (Option A, Option B, etc.). +* **Hierarchical Naming**: Generate alphabetic prefixes for hierarchical structures in designs. +* **Sequential Identification**: Create alphabetic identifiers for ordered elements in a design system. diff --git a/graph-engine/available-nodes/naming/alphanumeric-scale.md b/graph-engine/available-nodes/naming/alphanumeric-scale.md new file mode 100644 index 0000000..3b55dd0 --- /dev/null +++ b/graph-engine/available-nodes/naming/alphanumeric-scale.md @@ -0,0 +1,49 @@ +# Alphanumeric Scale + +### What It Does + +The Alphanumeric Scale node generates combined letter-number identifiers (like A1, B2, C3) based on provided indices. It's useful for creating hierarchical naming systems with both alphabetic and numeric components. + +### Inputs + +| Name | Description | Type | Required | +| ------------ | ------------------------------------------------------ | ------- | -------- | +| Letter Index | Letter index (0 = A, 1 = B, etc.) | Number | Yes | +| Number Index | Number index (0 = 1, 1 = 2, etc.) | Number | Yes | +| Uppercase | Output letter in uppercase (true) or lowercase (false) | Boolean | No | +| Prefix | Optional text to add before the alphanumeric value | String | No | +| Suffix | Optional text to add after the alphanumeric value | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------------------------------------------- | ------ | +| Value | The generated alphanumeric value with optional prefix and suffix | String | + +
+ +### How to Use It + +1. Drag the Alphanumeric Scale node into your graph. +2. Connect numbers to the "Letter Index" (for e.g., 0 for A) and "Number Index" inputs (for e.g., 0 for 1), or set them directly. +3. Configure optional inputs like case preference and prefix/suffix text. +4. The node will output a combined letter-number identifier (like "A1", "b2", etc.). + +
+ +### Tips + +* Letter indices are clamped to the English alphabet range (0-25). +* Number indices automatically have 1 added (so index 0 produces "1"). +* Combine with Count nodes to generate sequential alphanumeric identifiers. + +### See Also + +* [**Alphabetic Scale**](alphabetic-scale.md): For generating only alphabetic identifiers. +* [**Numeric Scale**](numeric-scale.md): For generating only numeric identifiers. + +### Use Cases + +* **Grid Systems**: Create cell identifiers for design grids (A1, A2, B1, B2). +* **Variant Naming**: Organize component variants with hierarchical identifiers. +* **Section Numbering**: Create section identifiers for design documentation. diff --git a/graph-engine/available-nodes/naming/greek-letter.md b/graph-engine/available-nodes/naming/greek-letter.md new file mode 100644 index 0000000..7d08c71 --- /dev/null +++ b/graph-engine/available-nodes/naming/greek-letter.md @@ -0,0 +1,47 @@ +# Greek Letter + +### What It Does + +The Greek Letter node generates Greek letter names (alpha through omega) based on an index value. It provides named steps for sequences where alphabetic or numeric scales aren't appropriate. + +### Inputs + +| Name | Description | Type | Required | +| ------ | -------------------------------------------- | ------ | -------- | +| Index | Letter index (0 = alpha, 1 = beta, etc.) | Number | Yes | +| Prefix | Optional text to add before the Greek letter | String | No | +| Suffix | Optional text to add after the Greek letter | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------------------------------------- | ------ | +| Value | The generated Greek letter with optional prefix and suffix | String | + +
+ +### How to Use It + +1. Drag the Greek Letter node into your graph. +2. Connect a number to the "Index" input or set it directly (0-23). +3. Optionally add prefix and suffix text if needed. +4. The node will output the corresponding Greek letter name (like "alpha", "beta", "gamma"). + +
+ +### Tips + +* The index is clamped between 0-23 (the 24 Greek letters from alpha to omega). +* Greek letters are useful for representing variables or iteration sequences. + +### See Also + +* [**Alphabetic Scale**](alphabetic-scale.md): For generating Latin alphabet sequences. +* [**Numeric Scale**](numeric-scale.md): For generating numeric sequences. +* [**T-shirt Size**](t-shirt-size.md): For generating t-shirt size scales (XS, S, M, L, XL). + +### Use Cases + +* **Mathematical Variables**: Create named variables for mathematical expressions in design systems. +* **Phase Naming**: Label design phases using Greek letters (alpha phase, beta phase). +* **Alternative Sequences**: Provide a different naming convention when alphabetic or numeric scales are already in use. diff --git a/graph-engine/available-nodes/naming/hierarchy-level.md b/graph-engine/available-nodes/naming/hierarchy-level.md new file mode 100644 index 0000000..883ec3a --- /dev/null +++ b/graph-engine/available-nodes/naming/hierarchy-level.md @@ -0,0 +1,46 @@ +# Hierarchy Level + +### What It Does + +The Hierarchy Level node generates hierarchical level names (primary, secondary, tertiary, etc.) based on an index value. It provides semantic naming for items in a hierarchical structure. + +### Inputs + +| Name | Description | Type | Required | +| ------ | ---------------------------------------------- | ------ | -------- | +| Index | Level index (0 = primary, 1 = secondary, etc.) | Number | Yes | +| Prefix | Optional text to add before the level name | String | No | +| Suffix | Optional text to add after the level name | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------------------------------------ | ------ | +| Value | The generated hierarchy level name with optional prefix and suffix | String | + +
+ +### How to Use It + +1. Drag the Hierarchy Level node into your graph. +2. Connect a number to the "Index" input or set it directly (0-9). +3. Optionally add prefix and suffix text if needed. +4. The node will output the corresponding hierarchy level name (like "primary", "secondary", "tertiary"). + +
+ +### Tips + +* The index is clamped between 0-9, supporting up to 10 hierarchy levels. +* Use these semantic names instead of numbers when creating hierarchical design systems. + +### See Also + +* [**T-shirt Size**:](t-shirt-size.md) For generating scale-based naming (XS, S, M, L, XL). +* [**Numeric Scale**:](numeric-scale.md) For generating numeric sequences. + +### Use Cases + +* **Button Hierarchy**: Define semantic levels for buttons (primary, secondary, tertiary). +* **Typography System**: Create named heading levels beyond h1-h6 nomenclature. +* **Color Importance**: Define a semantic color system based on hierarchical importance. diff --git a/graph-engine/available-nodes/naming/numeric-scale.md b/graph-engine/available-nodes/naming/numeric-scale.md new file mode 100644 index 0000000..c7f0bb0 --- /dev/null +++ b/graph-engine/available-nodes/naming/numeric-scale.md @@ -0,0 +1,51 @@ +# Numeric Scale + +### What It Does + +The Numeric Scale node generates numeric values based on an index, with options to apply a multiplier and add prefix/suffix text. It's designed to create numerical sequences for systematic naming in design token collections. + +### Inputs + +| Name | Description | Type | Required | +| ---------- | --------------------------------------------------------------------- | ------ | -------- | +| Index | Base index number for the scale (starting at 0) | Number | Yes | +| Multiplier | Value to multiply the index by (e.g., 100 for scale of 100, 200, 300) | Number | No | +| Prefix | Optional text to add before the number | String | No | +| Suffix | Optional text to add after the number | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------------------------------------------------- | ------ | +| Value | The generated numeric value with optional prefix and suffix | String | + +
+ +### How to Use It + +1. Drag the Numeric Scale node into your graph. +2. Connect a number to the "Index" input or set it directly (for e.g., 0 corresponding to 1). +3. Configure the optional inputs: + * Set "Multiplier" to control the spacing between numbers (default is 1), for e.g., 8. + * Add a "Prefix" and/or "Suffix" if needed. +4. The node will output a string with the calculated numeric value. + +
+ +### Tips + +* The node automatically adds 1 to the index before applying the multiplier, so index 0 produces the first number in the sequence. +* Use a multiplier of 100 to create standard design token scales (100, 200, 300). +* Connect this node to a Count node to generate a sequence of increasing numbers. + +### See Also + +* [**Alphabetic Scale**](alphabetic-scale.md): For generating alphabetic sequences. +* [**T-shirt Size**](t-shirt-size.md): For generating t-shirt size scales (XS, S, M, L, XL). + +### Use Cases + +* **Weight Scales**: Create systematic names for font weights or color intensity (100, 200, 300, etc.). +* **Spacing Systems**: Generate consistent spacing values at regular intervals. +* **Opacity Scales**: Create opacity values that follow a predictable pattern. +* **Elevation Systems**: Build systematic z-index or shadow elevation values. diff --git a/graph-engine/available-nodes/naming/t-shirt-size.md b/graph-engine/available-nodes/naming/t-shirt-size.md new file mode 100644 index 0000000..f92093c --- /dev/null +++ b/graph-engine/available-nodes/naming/t-shirt-size.md @@ -0,0 +1,53 @@ +# T-Shirt Size + +### What It Does + +The T-Shirt Size node generates standardized t-shirt size naming conventions (XS, S, M, L, XL, etc.) based on index values. It supports different naming schemas (default, short, or long) and allows for customization with prefixes and suffixes. + +### Inputs + +| Name | Description | Type | Required | +| ---------- | ----------------------------------------------------------------- | ------ | -------- | +| Index | Position relative to base index (negative for smaller sizes) | Number | Yes | +| Base Index | Index in the sequence that represents the base size (md/m/medium) | Number | No | +| Schema | Naming schema to use (default, short, or long) | String | No | +| Prefix | Optional text to add before the size | String | No | +| Suffix | Optional text to add after the size | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------------------------------------------- | ------ | +| Value | The generated t-shirt size value with optional prefix and suffix | String | + +
+ +### How to Use It + +1. Drag the T-Shirt Size node into your graph. +2. Connect a number to the "Index" input or set it directly. +3. Configure the optional inputs: + * Set "Base Index" to determine which index corresponds to the medium size. + * Choose a "Schema" (default: XS, S, M, L, XL; short: xs, s, m, l, xl; long: extra-small, small, medium, large, extra-large). + * Add a "Prefix" and/or "Suffix" if needed. +4. The node will output the corresponding t-shirt size as a string. + +
+ +### Tips + +* Use negative index values to get sizes smaller than the base size, and positive values for larger sizes. +* The node automatically clamps the result to the available sizes in the chosen schema. +* This naming convention is commonly used for spacing, component sizes, and breakpoints in design systems. + +### See Also + +* [**Alphabetic Scale**](alphabetic-scale.md): For generating alphabetic sequences. +* [**Numeric Scale**](numeric-scale.md): For generating numeric sequences. + +### Use Cases + +* **Component Size Variants**: Create consistent size naming for component variants (button-s, button-m, button-l). +* **Spacing Systems**: Establish a familiar naming convention for spacing tokens. +* **Breakpoint Definitions**: Define standardized breakpoint names for responsive layouts. +* **Typography Scales**: Create readable size classifications for typography tokens. diff --git a/graph-engine/available-nodes/preview/README.md b/graph-engine/available-nodes/preview/README.md new file mode 100644 index 0000000..2d2f18f --- /dev/null +++ b/graph-engine/available-nodes/preview/README.md @@ -0,0 +1,3 @@ +# Preview + +Nodes for visualizing outputs. Displays colors, scales, or curves directly in the graph for immediate feedback during editing. diff --git a/graph-engine/available-nodes/preview/color-compare.md b/graph-engine/available-nodes/preview/color-compare.md new file mode 100644 index 0000000..6821d5d --- /dev/null +++ b/graph-engine/available-nodes/preview/color-compare.md @@ -0,0 +1,45 @@ +# Color Compare + +### What It Does + +The Color Compare node displays two colors side-by-side for visual comparison. It helps you evaluate color combinations and contrast relationships. + +### Inputs + +| Name | Description | Type | Required | +| ------- | --------------------------- | ----- | -------- | +| Color A | The first color to compare | Color | No | +| Color B | The second color to compare | Color | No | + +### Outputs + +| Name | Description | Type | +| ------------ | -------------------------------------- | ---- | +| _No outputs_ | This node is for preview purposes only | - | + +![Color Compare Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 6.37.25 PM.png>) + +### How to Use It + +1. Drag the Color Compare node into your graph. +2. Connect a color value to the "Color A" input or use the default white (#BD2828). +3. Connect a color value to the "Color B" input or use the default black (#8b0e0e). +4. The node will display both colors side-by-side in the editor for visual comparison. + +
+ +### Tips + +* Use this node to visually check contrast between two colors. +* Preview both colors in context to evaluate their relationship. + +### See Also + +* [**Color Swatch**](color-swatch.md): For previewing a single color. +* [**Color Scale**](color-scale.md): For visualizing a range of colors. + +### Use Cases + +* **Contrast Checking**: Evaluate text and background color combinations for readability. +* **Color Harmony**: Compare colors to ensure they work well together in a palette. +* **Design Validation**: Verify that color choices match design requirements. diff --git a/graph-engine/available-nodes/preview/color-scale.md b/graph-engine/available-nodes/preview/color-scale.md new file mode 100644 index 0000000..32ee173 --- /dev/null +++ b/graph-engine/available-nodes/preview/color-scale.md @@ -0,0 +1,44 @@ +# Color Scale + +### What It Does + +The Color Scale node visualizes a sequence of colors as a gradient or palette. It provides a preview of color scales for design systems or data visualizations. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ----------------------------------------- | ---- | -------- | +| Value | The array of colors to display as a scale | List | Yes | + +### Outputs + +| Name | Description | Type | +| ------------ | -------------------------------------- | ---- | +| _No outputs_ | This node is for preview purposes only | - | + +![Color Scale Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 6.47.24 PM.png>) + +### How to Use It + +1. Drag the Color Scale node into your graph. +2. Connect an array of colors to the "Value" input. +3. The node will display the colors as a continuous scale or discrete swatches. +4. Use the preview to evaluate the visual progression of your color scale. + +
+ +### Tips + +* Include at least 3-5 colors for a meaningful scale preview. +* Use this to check both color ramps and discrete palettes for consistency. + +### See Also + +* [**Color Swatch**](color-swatch.md): For previewing a single color. +* [**Color Compare**](color-compare.md): For comparing two specific colors. + +### Use Cases + +* **Gradient Validation**: Visualize color gradients to ensure smooth transitions. +* **Palette Design**: Preview color palettes for cohesiveness and visual harmony. +* **Data Visualization**: Check color scales for data maps, charts, and graphs. diff --git a/graph-engine/available-nodes/preview/color-swatch.md b/graph-engine/available-nodes/preview/color-swatch.md new file mode 100644 index 0000000..0c7adc6 --- /dev/null +++ b/graph-engine/available-nodes/preview/color-swatch.md @@ -0,0 +1,44 @@ +# Color Swatch + +### What It Does + +The Color Swatch node displays a single color in a swatch format. It provides a visual preview of a color for design reference. + +### Inputs + +| Name | Description | Type | Required | +| ----- | -------------------------------- | ----- | -------- | +| Value | The color to display as a swatch | Color | Yes | + +### Outputs + +| Name | Description | Type | +| ------------ | -------------------------------------- | ---- | +| _No outputs_ | This node is for preview purposes only | - | + +![Color Swatch Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 7.01.39 PM.png>) + +### How to Use It + +1. Drag the Color Swatch node into your graph. +2. Connect a color value to the "Value" input. +3. The node will display the color as a swatch in the editor. +4. Use it to visually check the appearance of the color in your design system. + +
+ +### Tips + +* Add multiple Color Swatch nodes to visualize different colors simultaneously. +* Use this node at key points in your graph to monitor color transformations. + +### See Also + +* [**Color Compare**](color-compare.md): For comparing two colors side-by-side. +* [**Color Scale**](color-scale.md): For visualizing a sequence of colors. + +### Use Cases + +* **Color Verification**: Visually confirm the exact appearance of generated colors. +* **Design System Reference**: Display brand colors or theme colors for reference. +* **Color Transformation**: Monitor color changes after operations like lightening, darkening, or mixing. diff --git a/graph-engine/available-nodes/preview/math-expression.md b/graph-engine/available-nodes/preview/math-expression.md new file mode 100644 index 0000000..36e0f7e --- /dev/null +++ b/graph-engine/available-nodes/preview/math-expression.md @@ -0,0 +1,44 @@ +# Math Expression + +### What It Does + +The Math Expression node visualizes a mathematical expression as a graph. It allows you to see the behavior of formulas and equations in graphical form. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ---------------------------------------- | ---- | -------- | +| Value | The mathematical expression to visualize | Text | Yes | + +### Outputs + +| Name | Description | Type | +| ------------ | -------------------------------------- | ---- | +| _No outputs_ | This node is for preview purposes only | - | + +![Math Expression Example](<../../../.gitbook/assets/Screenshot 2025-04-09 at 12.51.28 PM.png>) + +### How to Use It + +1. Drag the Math Expression node into your graph. +2. Connect a string containing a valid mathematical expression to the "Value" input. +3. The node will display a graphical representation of the expression. +4. Use the visualization to understand the behavior and pattern of the expression. +5. + +
+ +### Tips + +* This node is deprecated and may be removed in future versions. +* Use the Evaluate Math node for calculations and PreviewCurve for visualizations instead. + +### See Also + +* [**Preview Curve**](preview-curve.md): For visualizing specific curve types. + +### Use Cases + +* **Formula Validation**: Visually confirm the behavior of custom mathematical formulas. +* **Function Exploration**: Explore the shapes of various mathematical functions. +* **Equation Preview**: Preview the graphical representation of design-related mathematical expressions. diff --git a/graph-engine/available-nodes/preview/number.md b/graph-engine/available-nodes/preview/number.md new file mode 100644 index 0000000..f9df274 --- /dev/null +++ b/graph-engine/available-nodes/preview/number.md @@ -0,0 +1,45 @@ +# Number + +### What It Does + +The Number node displays numeric values in a formatted way. It provides a visual preview of numbers with configurable precision. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ------------------------------------ | ------ | -------- | +| Value | The number to display | Number | No | +| Precision | The number of decimal places to show | Number | No | + +### Outputs + +| Name | Description | Type | +| ------------ | -------------------------------------- | ---- | +| _No outputs_ | This node is for preview purposes only | - | + +![Number Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 6.59.27 PM.png>) + +### How to Use It + +1. Drag the Number node into your graph. +2. Connect a numeric value to the "Value" input or use the default (12.27633). +3. Optionally set the "Precision" input to control decimal places (default is 2). +4. The node will display the formatted number for easy viewing (12.28). + +
+ +### Tips + +* Adjust the precision based on your needs—use higher values for more decimal places. +* Use this node to monitor calculated values at specific points in your graph. + +### See Also + +* [**Math Expression**](math-expression.md): For calculating mathematical expressions. +* [**Round**](../math/round.md): For rounding numbers to specific precisions. + +### Use Cases + +* **Value Monitoring**: Display important numeric values in your design system. +* **Calculation Verification**: Check intermediate or final calculation results. +* **Parameter Display**: Show current values of key parameters in your graph. diff --git a/graph-engine/available-nodes/preview/preview-curve.md b/graph-engine/available-nodes/preview/preview-curve.md new file mode 100644 index 0000000..982715d --- /dev/null +++ b/graph-engine/available-nodes/preview/preview-curve.md @@ -0,0 +1,44 @@ +# Preview Curve + +### What It Does + +The PreviewCurve node visualizes a curve or function as a graph. It helps you see the shape and behavior of mathematical curves for animation or interpolation. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ---------------------- | ----- | -------- | +| Value | The curve to visualize | Curve | Yes | + +### Outputs + +| Name | Description | Type | +| ------------ | -------------------------------------- | ---- | +| _No outputs_ | This node is for preview purposes only | - | + +![PreviewCurve Example](<../../../.gitbook/assets/Screenshot 2025-04-08 at 6.50.10 PM.png>) + +### How to Use It + +1. Drag the PreviewCurve node into your graph. +2. Connect a curve value (like a Bezier curve or other function curve) to the "Value" input. +3. The node will display a graphical representation of the curve's shape. +4. Use the visualization to understand the curve's progression and behavior. + +
+ +### Tips + +* Use this to verify the shape of easing curves for animations. +* Check transition curves to ensure they have the intended acceleration and deceleration. + +### See Also + +* [**Bezier Curve**](../curves/bezier-curve.md): For creating custom curves to preview. +* [**Preset Bezier Curves**](../curves/preset-bezier-curves.md): For selecting from common curve types. + +### Use Cases + +* **Animation Curves**: Visualize easing functions for animation timing. +* **Interpolation Preview**: See how values will transition between points. +* **Function Validation**: Verify that mathematical functions produce the expected curve shape. diff --git a/graph-engine/available-nodes/search/README.md b/graph-engine/available-nodes/search/README.md new file mode 100644 index 0000000..442a812 --- /dev/null +++ b/graph-engine/available-nodes/search/README.md @@ -0,0 +1,3 @@ +# Search + +Nodes for finding items in lists. Implements searches like first-match or linear scans to locate specific values or tokens. diff --git a/graph-engine/available-nodes/search/find-first-match.md b/graph-engine/available-nodes/search/find-first-match.md new file mode 100644 index 0000000..ccfffa0 --- /dev/null +++ b/graph-engine/available-nodes/search/find-first-match.md @@ -0,0 +1,47 @@ +# Find First Match + +### What It Does + +Searches through a list of numbers to find the first item that satisfies a specified comparison with a target value. It can find values greater than or less than a specified number and returns both the matching value and its position. + +### Inputs + +| Name | Description | Type | Required | +| -------- | --------------------------------------------------------------- | ------ | -------- | +| array | The list of numbers to search through | List | Yes | +| target | The comparison value to test against | Number | Yes | +| operator | The comparison type (">" for greater than or "<" for less than) | Text | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------------------------------------ | ------ | +| value | The first matching value found (undefined if none found) | Number | +| index | The position of the matching value in the array (-1 if none found) | Number | +| found | Whether a matching value was found | Yes/No | + +![Find First Match Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.05.06 PM.png>) + +### How to Use It + +1. Drag the Find First Match node into your graph. +2. Connect an array of numbers (like `[5, 10, 15, 20]`) to the "array" input. +3. Set a target number (like `12`) to the "target" input. +4. Choose an operator (like `>` to find values greater than the target). +5. Run the graph—with the example inputs, your output will be: value: `15`, index: `2`, found: `true`. + +### Tips + +* Always check the "found" output before using the value, as it may be undefined if no match was found. +* The search stops at the first matching item, even if multiple items would match. + +### See Also + +* **Array Find**: For more complex finding conditions using an inner graph. +* **Array Filter**: For getting all items that match a condition instead of just the first. + +### Use Cases + +* **Threshold Detection**: Find the first value that exceeds a minimum threshold. +* **Breakpoint Identification**: Locate the first screen width breakpoint that's smaller than the current viewport. +* **Financial Analysis**: Find the first data point where a value crosses above or below a critical level. diff --git a/graph-engine/available-nodes/search/linear-search.md b/graph-engine/available-nodes/search/linear-search.md new file mode 100644 index 0000000..e5b5c1b --- /dev/null +++ b/graph-engine/available-nodes/search/linear-search.md @@ -0,0 +1,45 @@ +# Linear Search + +### What It Does + +Performs a linear search on an array to find the index of a target value. It goes through each element in the array one by one, comparing it to the target value, and returns the index of the first matching element. + +### Inputs + +| Name | Description | Type | Required | +| ------ | --------------------------- | ---- | -------- | +| array | The array to search through | List | Yes | +| target | The value to search for | Any | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------------------------------------- | ------ | +| index | The index of the target value (-1 if not found) | Number | +| found | Whether the target value was found | Yes/No | + +![Linear Search Example](<../../../.gitbook/assets/Screenshot 2025-04-09 at 1.19.24 PM.png>) + +### How to Use It + +1. Drag the Linear Search node into your graph. +2. Connect any array (like `[10, "hello", true, {key: "value"}]`) to the "array" input. +3. Set the value you want to find (like `"hello"`) to the "target" input. +4. Run the graph—with the example inputs, your output will be: index: `1`, found: `true`. + +### Tips + +* Linear Search works with any data type, including objects and nested structures. +* The comparison is done using a deep equality check, so objects with the same properties will match even if they're different instances. +* For large arrays, consider using more optimized search nodes if your data is sorted. + +### See Also + +* **Find First Match**: For comparison-based searching (greater than, less than). +* **Array Find**: For more complex finding conditions using an inner graph. + +### Use Cases + +* **Data Retrieval**: Find specific items in unsorted lists or arrays of mixed types. +* **User Input Validation**: Check if a submitted value exists in a list of allowed values. +* **Simple Lookups**: When working with small arrays where performance isn't critical. diff --git a/graph-engine/available-nodes/series/README.md b/graph-engine/available-nodes/series/README.md new file mode 100644 index 0000000..70a4d2e --- /dev/null +++ b/graph-engine/available-nodes/series/README.md @@ -0,0 +1,3 @@ +# Series + +Nodes for generating sequences. Creates arithmetic, geometric, or other series for scales, spacings, or patterned data. diff --git a/graph-engine/available-nodes/series/alternating-series.md b/graph-engine/available-nodes/series/alternating-series.md new file mode 100644 index 0000000..96d9e8a --- /dev/null +++ b/graph-engine/available-nodes/series/alternating-series.md @@ -0,0 +1,48 @@ +# Alternating Series + +### What It Does + +Creates a sequence where values alternate according to a repeating pattern. It applies a pattern of multipliers to an input sequence, allowing you to create alternating positive and negative values or other repeating patterns. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ---------------------------------------------- | ------ | -------- | +| sequence | The base sequence of numbers to transform | List | No | +| pattern | The pattern of multipliers to apply cyclically | List | No | +| precision | Number of decimal places to round to | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------------- | ---- | +| array | The resulting alternating sequence | List | + +![Alternating Series Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 12.49.24 PM.png>) + +### How to Use It + +1. Drag the Alternating Series node into your graph. +2. Set the "sequence" to your base values (default is \[1, 2, 3, 4]). +3. Set the "pattern" to define how values alternate (default is \[1, -1]). +4. Set the "precision" for decimal rounding (default is 2). +5. Run the graph—with the default settings, your output will be \[1, -2, 3, -4]. + +### Tips + +* The default pattern \[1, -1] creates a classic alternating positive/negative sequence. +* Pattern values are not limited to 1 and -1; you can use any numbers to create custom patterns. +* If the sequence is longer than the pattern, the pattern repeats cyclically. + +### See Also + +* **Arithmetic Series**: For sequences with constant addition between terms. +* **Geometric Series**: For sequences with constant multiplication between terms. +* **Array Map**: For more complex transformations of arrays. + +### Use Cases + +* **Zigzag Patterns**: Create alternating visual layouts for tiles or elements. +* **Oscillating Effects**: Generate sequences for wave-like animations or transitions. +* **Signal Processing**: Create alternating patterns for signal manipulation. +* **Checkerboard Layouts**: Generate values for grid-based designs with alternating properties. diff --git a/graph-engine/available-nodes/series/arithmetic-series.md b/graph-engine/available-nodes/series/arithmetic-series.md new file mode 100644 index 0000000..6e9d9a9 --- /dev/null +++ b/graph-engine/available-nodes/series/arithmetic-series.md @@ -0,0 +1,47 @@ +# Arithmetic Series + +### What It Does + +The Arithmetic Series node generates a sequence of numbers where each value increases or decreases by a constant amount. It creates evenly-spaced numerical progressions for scales, grids, and other design patterns. + +### Inputs + +| Name | Description | Type | Required | +| ---------- | ------------------------------------------------ | ------ | -------- | +| Base | The central value of the series | Number | No | +| Steps Down | Number of steps to generate below the base value | Number | No | +| Steps Up | Number of steps to generate above the base value | Number | No | +| Increment | The constant value to add/subtract between steps | Number | No | +| Precision | Number of decimal places for the output values | Number | No | + +### Outputs + +| Name | Description | Type | +| ------- | ------------------------------------------------ | ---- | +| Array | The resulting sequence of numbers | List | +| Indexed | Array of objects with index and value properties | List | + +![Arithmetic Series Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 1.16.19 PM.png>) + +### How to Use It + +1. Drag the Arithmetic Series node into your graph. +2. Set the "Base " value `21` (default: 16) as the center point of your series. +3. Configure "Steps Down" (default: 0) and "Steps Up" (default: 1) to control series length. +4. Adjust the "Increment" (default: 1) to set spacing between values. + +### Tips + +* The "Steps Down" parameter generates values below your base (smaller values). +* The "Steps Up" parameter generates values above your base (larger values). + +### See Also + +* **Geometric Series**: For creating exponential progressions where values multiply by a ratio. +* **Linear Space**: For creating evenly spaced values between specific endpoints. + +### Use Cases + +* **Spacing Systems**: Create evenly-spaced size tokens for layout grids (4, 8, 12, 16, 20, 24). +* **Font Size Scales**: Generate linear type scales (12, 14, 16, 18, 20px). +* **Color Steps**: Define evenly-spaced opacity or intensity values (0.2, 0.4, 0.6, 0.8). diff --git a/graph-engine/available-nodes/series/exponential-decay.md b/graph-engine/available-nodes/series/exponential-decay.md new file mode 100644 index 0000000..a3bedb4 --- /dev/null +++ b/graph-engine/available-nodes/series/exponential-decay.md @@ -0,0 +1,49 @@ +# Exponential Decay + +### What It Does + +Generates a sequence of values that decrease according to the exponential decay formula P\*e^(-kx). This creates a curve that starts at an initial value and rapidly decreases at first, then tapers off gradually. + +### Inputs + +| Name | Description | Type | Required | +| ------------ | ------------------------------------ | ------ | -------- | +| initialValue | The starting value (P) | Number | No | +| length | Number of values to generate | Number | No | +| decayRate | The rate of decay (k) | Number | No | +| precision | Number of decimal places to round to | Number | No | + +### Outputs + +| Name | Description | Type | +| ------ | --------------------------------- | ---- | +| values | The sequence of decreasing values | List | + +![Exponential Decay Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 4.28.39 PM.png>) + +### How to Use It + +1. Drag the Exponential Decay node into your graph. +2. Set the "initialValue" (default is 100). +3. Set the "length" to specify how many values you want (default is 5). +4. Set the "decayRate" to control how quickly values decrease (default is 0.5). +5. Run the graph—with the default settings, your output will be \[100, 60.65, 36.79, 22.31, 13.53]. + +### Tips + +* Higher decay rates cause values to decrease more rapidly. +* The decay is most dramatic at the beginning and gradually levels off. +* The values will never reach zero, but will get increasingly close as the sequence continues. + +### See Also + +* **Geometric Series**: For a similar sequence where each term is a constant multiple of the previous. +* **Arithmetic Series**: For sequences that decrease by a constant value. +* **Power Series**: For sequences based on powers of a number. + +### Use Cases + +* **Animation Easing**: Create natural-looking deceleration effects. +* **Fade Out Effects**: Generate opacity or volume values that gradually fade away. +* **Diminishing Returns**: Model scenarios where additional inputs yield increasingly smaller outputs. +* **Physical Systems**: Simulate natural decay processes like radioactive half-life or cooling. diff --git a/graph-engine/available-nodes/series/fibonacci-series.md b/graph-engine/available-nodes/series/fibonacci-series.md new file mode 100644 index 0000000..325845a --- /dev/null +++ b/graph-engine/available-nodes/series/fibonacci-series.md @@ -0,0 +1,45 @@ +# Fibonacci Series + +### What It Does + +The Fibonacci Series node generates a sequence where each number is the sum of the two preceding ones. It creates a naturally occurring progression that appears in many design patterns and natural forms. + +### Inputs + +| Name | Description | Type | Required | +| ------------ | -------------------------------------------------- | ------ | -------- | +| Length | Total number of values to generate in the sequence | Number | No | +| Start First | The first value in the sequence | Number | No | +| Start Second | The second value in the sequence | Number | No | +| Precision | Number of decimal places for the output values | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------- | ---- | +| Array | The resulting Fibonacci sequence | List | + +![Fibonacci Series Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 4.31.48 PM.png>) + +### How to Use It + +1. Drag the Fibonacci Series node into your graph. +2. Set the "Length" (default: 8) to determine how many values to generate. +3. Optionally customize the "Start First" (default: 0) and "Start Second" (default: 1) values. +4. The node outputs the classic Fibonacci sequence by default: \[0, 1, 1, 2, 3, 5, 8, 13]. + +### Tips + +* The classic Fibonacci sequence uses 0 and 1 as starting values, but you can customize them. +* Each number in the sequence is approximately 1.618 (the golden ratio) times the preceding number. + +### See Also + +* **Arithmetic Series**: For creating linear progressions with constant differences. +* **Geometric Series**: For creating exponential progressions with constant ratios. + +### Use Cases + +* **Natural Scaling**: Create size progressions that mimic natural growth patterns. +* **Golden Ratio Layouts**: Design layouts using the aesthetically pleasing golden ratio. +* **Organic Size Systems**: Develop spacing systems with a more organic feel than linear scales. diff --git a/graph-engine/available-nodes/series/geometric-series.md b/graph-engine/available-nodes/series/geometric-series.md new file mode 100644 index 0000000..9335306 --- /dev/null +++ b/graph-engine/available-nodes/series/geometric-series.md @@ -0,0 +1,47 @@ +# Geometric Series + +### What It Does + +The Geometric Series node generates a sequence where each number is multiplied by a constant ratio. It creates exponential progressions perfect for scales that require accelerating or decelerating growth. + +### Inputs + +| Name | Description | Type | Required | +| ---------- | ------------------------------------------------ | ------ | -------- | +| Base | The central value of the series | Number | No | +| Steps Down | Number of steps to generate below the base value | Number | No | +| Steps Up | Number of steps to generate above the base value | Number | No | +| Ratio | The multiplier between consecutive values | Number | No | +| Precision | Number of decimal places for the output values | Number | No | + +### Outputs + +| Name | Description | Type | +| ------- | ------------------------------------------------ | ---- | +| Array | The resulting sequence of numbers | List | +| Indexed | Array of objects with index and value properties | List | + +### How to Use It + +1. Drag the Geometric Series node into your graph. +2. Set the "Base" value (default: 16) as the center point of your series. +3. Configure "Steps Down" (default: 0) and "Steps Up" (default: 1) to control series length. +4. Adjust the "Ratio" (default: 1.5) to set the multiplier between values. + +![Geometric Series Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 5.18.49 PM.png>) + +### Tips + +* With ratio > 1, values increase exponentially as you move up from the base. +* With ratio < 1 but > 0, values decrease exponentially as you move up from the base. + +### See Also + +* **Arithmetic Series**: For creating linear progressions with constant differences. +* **Power Series**: For creating progressions based on powers of a number. + +### Use Cases + +* **Type Scales**: Create font size systems with meaningful proportional relationships (8, 12, 18, 27, 40.5). +* **Spacing Systems**: Define spacing tokens with accelerating growth (4, 8, 16, 32, 64). +* **Visual Hierarchy**: Generate size scales that create clear visual distinctions between elements. diff --git a/graph-engine/available-nodes/series/harmonic-series.md b/graph-engine/available-nodes/series/harmonic-series.md new file mode 100644 index 0000000..1e70169 --- /dev/null +++ b/graph-engine/available-nodes/series/harmonic-series.md @@ -0,0 +1,54 @@ +# Harmonic Series + +### What It Does + +Generates a sequence based on harmonic proportions, where values follow a pattern related to musical harmonics. The node creates a progression where each value is calculated by raising a ratio to a fractional power determined by the index and number of notes. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ---------------------------------------------------- | ------ | -------- | +| base | The central value of the series | Number | No | +| stepsDown | Number of steps to generate below the base value | Number | No | +| stepsUp | Number of steps to generate above the base value | Number | No | +| notes | Number of steps that make up a complete octave/cycle | Number | No | +| ratio | The harmonic ratio (typically 2 for musical octaves) | Number | No | +| precision | Number of decimal places to round to | Number | No | + +### Outputs + +| Name | Description | Type | +| ------- | ---------------------------------------------------- | ---- | +| array | The sequence of values as a simple array | List | +| indexed | The values with their corresponding position indices | List | + +![Harmonic Series Example](<../../../.gitbook/assets/Screenshot 2025-04-17 at 5.22.59 PM.png>) + +### How to Use It + +1. Drag the Harmonic Series node into your graph. +2. Set the "base" value (default is 16). +3. Set how many steps you want below the base ("stepsDown", default is 0). +4. Set how many steps you want above the base ("stepsUp", default is 5). +5. Set the "notes" parameter to define the number of divisions in an octave (default is 5). +6. Set the "ratio" (default is 2, which creates a standard octave relationship). +7. Run the graph—with the default settings, your output will be a series that increases by harmonically related intervals. + +### Tips + +* With ratio=2 and notes=12, you'll get a chromatic musical scale (12 equal divisions of an octave). +* For musical applications, the base is typically a frequency value. +* The harmonic relationship creates a more natural-sounding progression than equal divisions. + +### See Also + +* **Geometric Series**: For sequences with constant multiplication between terms. +* **Arithmetic Series**: For sequences with constant addition between terms. +* **Exponential Decay**: For sequences that gradually decrease according to exponential decay. + +### Use Cases + +* **Musical Scales**: Generate frequencies for notes in various musical tuning systems. +* **Natural Proportions**: Create sequences that follow ratios found in nature. +* **Harmonic Typography**: Design type scales with proportional relationships between sizes. +* **Resonant Spacing**: Generate spacing values that have harmonic relationships for UI design. diff --git a/graph-engine/available-nodes/series/inverse-linear-mapping.md b/graph-engine/available-nodes/series/inverse-linear-mapping.md new file mode 100644 index 0000000..1914318 --- /dev/null +++ b/graph-engine/available-nodes/series/inverse-linear-mapping.md @@ -0,0 +1,54 @@ +# Inverse Linear Mapping + +### What It Does + +Maps a value from one numeric range to another, similar to range mapping. It takes a value within a source range and finds the equivalent value in a target range, maintaining the same relative position. + +### Inputs + +| Name | Description | Type | Required | +| --------- | -------------------------------------------------- | ------ | -------- | +| value | The value to transform | Number | No | +| inMin | The minimum of the source range | Number | No | +| inMax | The maximum of the source range | Number | No | +| outMin | The minimum of the target range | Number | No | +| outMax | The maximum of the target range | Number | No | +| clamp | Whether to restrict the result to the output range | Yes/No | No | +| precision | Number of decimal places to round to | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------------- | ------ | +| value | The transformed value in the new range | Number | + +![Inverse Linear Mapping Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.07.36 PM.png>) + +### How to Use It + +1. Drag the Inverse Linear Mapping node into your graph. +2. Set "value" to the number you want to transform (e.g., 0.5). +3. Define your source range with "inMin" (e.g., 0) and "inMax" (e.g., 1). +4. Define your target range with "outMin" (e.g., 0) and "outMax" (e.g., 100). +5. Choose whether to clamp the result to the output range. +6. Set the "precision" for decimal rounding (default is 2). +7. Run the graph—with the example values, your output will be 50. + +### Tips + +* Ensure inMin and inMax are different values to avoid division by zero. +* The output range can be reversed (e.g., outMin=100, outMax=0) to invert the mapping. +* When clamp is enabled, the output will never exceed the output range boundaries. + +### See Also + +* **Range Mapping**: A similar node in the Math category with the same functionality. +* **Lerp**: For linear interpolation between two values. +* **Clamp**: For restricting a value within a specific range. + +### Use Cases + +* **Responsive Design**: Map screen dimensions to appropriate element sizes. +* **Data Visualization**: Convert raw data values to pixel coordinates for display. +* **Animation Control**: Transform timing values into position, opacity, or scale values. +* **Normalization**: Convert values from different scales into a common range (often 0-1). diff --git a/graph-engine/available-nodes/series/linear-space.md b/graph-engine/available-nodes/series/linear-space.md new file mode 100644 index 0000000..3b61015 --- /dev/null +++ b/graph-engine/available-nodes/series/linear-space.md @@ -0,0 +1,50 @@ +# Linear Space + +### What It Does + +Generates a sequence of evenly spaced numbers between a start and end value. It divides the interval into equal steps, creating a uniform progression from the first to the last value. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ------------------------------------ | ------ | -------- | +| start | The first value in the sequence | Number | No | +| stop | The last value in the sequence | Number | No | +| length | The number of values to generate | Number | No | +| precision | Number of decimal places to round to | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------ | ---- | +| array | The sequence of evenly spaced values | List | + +### How to Use It + +1. Drag the Linear Space node into your graph. +2. Set the "start" value (default is 0). +3. Set the "stop" value (default is 1). +4. Set the "length" to specify how many values you want (default is 5). +5. Set the "precision" for decimal rounding (default is 2). +6. Run the graph—with the default settings, your output will be \[0, 0.25, 0.5, 0.75, 1]. + +![Linear Space Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.11.24 PM.png>) + +### Tips + +* The sequence always includes both the start and stop values. +* For reversed sequences, set start higher than stop. +* If length is 1, the output will be an array with just the start value. + +### See Also + +* **Arithmetic Series**: For sequences defined by a base value and increment. +* **Range Mapping**: For mapping a single value from one range to another. +* **Array Map**: For transforming each element in an array with a function. + +### Use Cases + +* **Gradients**: Create evenly distributed color stops. +* **Animation Keyframes**: Generate evenly spaced keyframe values. +* **Data Visualization**: Create axis divisions or data sampling points. +* **Layout Systems**: Generate evenly spaced position values for elements. diff --git a/graph-engine/available-nodes/series/power-series.md b/graph-engine/available-nodes/series/power-series.md new file mode 100644 index 0000000..b29c67c --- /dev/null +++ b/graph-engine/available-nodes/series/power-series.md @@ -0,0 +1,48 @@ +# Power Series + +### What It Does + +Generates a sequence of numbers by raising a base value to different powers. It creates values like base^power1, base^power2, etc., allowing you to create exponential progressions like powers of 2 (2⁰, 2¹, 2², 2³...). + +### Inputs + +| Name | Description | Type | Required | +| --------- | -------------------------------------- | ------ | -------- | +| base | The number to be raised to powers | Number | No | +| powers | List of exponents to apply to the base | List | No | +| precision | Number of decimal places to round to | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------- | ---- | +| array | The sequence of power values | List | + +![Power Series Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.13.10 PM.png>) + +### How to Use It + +1. Drag the Power Series node into your graph. +2. Set the "base" value (default is 2). +3. Set the "powers" array to define the exponents (default is \[0, 1, 2, 3]). +4. Set the "precision" for decimal rounding (default is 2). +5. Run the graph—with the default settings, your output will be \[1, 2, 4, 8]. + +### Tips + +* The powers don't need to be integers—you can use fractions for roots (e.g., 0.5 for square root). +* Powers can be negative to get reciprocals (e.g., 2^-1 = 0.5). +* For binary progressions, use base=2; for decimal, use base=10. + +### See Also + +* **Geometric Series**: For sequences with constant multiplication between terms. +* **Math Pow**: For calculating a single power expression. +* **Exponential Decay**: For sequences with exponential decrease. + +### Use Cases + +* **Binary Scales**: Create powers of 2 (1, 2, 4, 8, 16, 32...) for memory or binary-related values. +* **Logarithmic Scales**: Generate exponential progressions for non-linear scales. +* **Growth Modeling**: Model exponential growth patterns. +* **Data Storage**: Generate size values for storage units (KB, MB, GB, TB). diff --git a/graph-engine/available-nodes/string/README.md b/graph-engine/available-nodes/string/README.md new file mode 100644 index 0000000..97252e9 --- /dev/null +++ b/graph-engine/available-nodes/string/README.md @@ -0,0 +1,3 @@ +# String + +Nodes for text operations. Converts case, replaces substrings, or applies patterns—useful for formatting labels or token strings. diff --git a/graph-engine/available-nodes/string/case-convert.md b/graph-engine/available-nodes/string/case-convert.md new file mode 100644 index 0000000..0b8f6ad --- /dev/null +++ b/graph-engine/available-nodes/string/case-convert.md @@ -0,0 +1,46 @@ +# Case Convert + +### What It Does + +Transforms text between different case formats like camelCase, snake\_case, kebab-case, and PascalCase. It intelligently converts any string to your chosen case style. + +### Inputs + +| Name | Description | Type | Required | +| ---------- | -------------------------------------- | ------ | -------- | +| string | The text to convert | String | Yes | +| type | The target case format | String | No | +| delimiters | Characters to treat as word separators | String | No | + +### Outputs + +| Name | Description | Type | +| ------ | --------------------------------- | ------ | +| string | The converted text in chosen case | String | + +
+ +### How to Use It + +1. Drag the Case Convert node into your graph. +2. Connect the text you want to convert to the "string" input. +3. Select the desired case format from the "type" dropdown (camel, snake, kebab, or pascal). +4. Optionally specify custom delimiters if needed (default is "-\_."). + +
+ +### Tips + +* The node intelligently handles existing camelCase and PascalCase by adding spaces before capital letters. +* Custom delimiters let you control what characters are treated as word separators. + +### See Also + +* [**Uppercase**](uppercase.md): For converting text to ALL CAPS format. +* [**Lowercase**](lowercase.md): For converting text to all lowercase format. + +### Use Cases + +* **Design Token Naming**: Standardize variable names when generating design tokens for different platforms. +* **Code Generation**: Convert between naming conventions for different programming languages or frameworks. +* **API Integration**: Transform data fields between different naming conventions for API payloads. diff --git a/graph-engine/available-nodes/string/interpolation.md b/graph-engine/available-nodes/string/interpolation.md new file mode 100644 index 0000000..287f4ac --- /dev/null +++ b/graph-engine/available-nodes/string/interpolation.md @@ -0,0 +1,46 @@ +# Interpolation + +### What It Does + +Replaces placeholder variables in a string template with actual values. It allows you to create dynamic text by inserting variable content into a predefined template. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ------------------------------------------------- | ------ | -------- | +| template | The string template with placeholders like {name} | String | Yes | +| (dynamic) | Values to insert into the template | Any | No | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------- | ------ | +| value | The final string with replaced values | String | + +
+ +### How to Use It + +1. Drag the Interpolation node into your graph. +2. Connect your template string with placeholders in curly braces like "color.{base}.500" to the "template" input. Here the placeholder is "base". +3. Add custom inputs by right-clicking the node and adding inputs with names matching your placeholders. +4. Connect values to each named input to replace the corresponding placeholders. Like "red". +5. The output of the node is "color.red.500", the placeholder "base" is replaced by the named input "red". + +
+ +### Tips + +* Input names must exactly match the placeholder names in your template (without the curly braces). +* Placeholders that don't have a matching input will remain unchanged in the output. + +### See Also + +* [**Join**](join.md): For combining multiple strings into one without using a template. +* [**Replace**](replace.md): For simpler find-and-replace text operations. + +### Use Cases + +* **Message Generation**: Create personalized messages by injecting names or other dynamic content. +* **URL Construction**: Build dynamic URLs by inserting variable parameters into a template. +* **Naming Patterns**: Generate consistent naming patterns for design tokens with variable components. diff --git a/graph-engine/available-nodes/string/join.md b/graph-engine/available-nodes/string/join.md new file mode 100644 index 0000000..4da32f3 --- /dev/null +++ b/graph-engine/available-nodes/string/join.md @@ -0,0 +1,43 @@ +# Join Array + +### What It Does + +Combines all items in a list into a single text string, with a specified character or string between each item. This is useful for creating comma-separated lists, space-separated words, or any delimited text. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ----------------------------------------------- | ------ | -------- | +| array | The list of items to join together | List | Yes | +| delimiter | The character or string to insert between items | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------------------- | ------ | +| value | The combined text string with delimiters | String | + +
+ +### How to Use It + +1. Drag the Join Array node into your graph. +2. Connect a list (like `["red", "green", "blue"]`) to the "array" input. +3. Set the "delimiter" to the character you want between items (like `", "`). +4. Run the graph—your output will be a single string with the items joined (`"red, green, blue"`). + +
+ +### Tips + +* The default delimiter is a hyphen (`-`), but you can use any string, including spaces, commas, or even multi-character strings. +* Non-string items in the array will be converted to strings automatically. + +### See Also + +* [**Split String**](split.md): For the reverse operation—breaking a string into an array of parts. + +### Use Cases + +* **CSV Generation**: Create comma-separated values for data export. +* **UI Display**: Format lists of items for display in a user interface. diff --git a/graph-engine/available-nodes/string/lowercase.md b/graph-engine/available-nodes/string/lowercase.md new file mode 100644 index 0000000..8951e67 --- /dev/null +++ b/graph-engine/available-nodes/string/lowercase.md @@ -0,0 +1,44 @@ +# Lowercase + +### What It Does + +Converts all characters in a text string to lowercase (small letters). This helps create consistent text formatting or normalize user input for comparisons. + +### Inputs + +| Name | Description | Type | Required | +| ----- | -------------------------------- | ------ | -------- | +| value | The text to convert to lowercase | String | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------- | ------ | +| value | The converted lowercase text | String | + +
+ +### How to Use It + +1. Drag the Lowercase node into your graph. +2. Connect a text string (like `"Hello World"`) to the "value" input. +3. Run the graph—your output will be `"hello world"`. +4. Special characters and numbers remain unchanged. + +
+ +### Tips + +* Lowercase is particularly useful for normalizing text for case-insensitive comparisons. +* It's often used for body text, URLs, and email addresses in design systems. + +### See Also + +* [**Uppercase**](uppercase.md): For converting text to all capital letters. +* [**Case Convert**](case-convert.md): For more text casing options like title case or camel case. + +### Use Cases + +* **Text Normalization**: Standardize text from different sources for consistent display. +* **Search Terms**: Process search inputs for case-insensitive matching. +* **Design System Text**: Ensure consistent casing for body copy, captions, or labels. diff --git a/graph-engine/available-nodes/string/normalize.md b/graph-engine/available-nodes/string/normalize.md new file mode 100644 index 0000000..d73bf3b --- /dev/null +++ b/graph-engine/available-nodes/string/normalize.md @@ -0,0 +1,46 @@ +# Normalize + +### What It Does + +Standardizes text by applying Unicode normalization and optionally removing diacritical marks (accents). It ensures consistent text representation regardless of how characters were originally encoded. + +### Inputs + +| Name | Description | Type | Required | +| ------------- | ----------------------------------------- | ------ | -------- | +| string | The text to normalize | String | Yes | +| form | The Unicode normalization form | String | No | +| removeAccents | Whether to remove accents from characters | Yes/No | No | + +### Outputs + +| Name | Description | Type | +| ------ | ------------------- | ------ | +| string | The normalized text | String | + +
+ +### How to Use It + +1. Drag the Normalize node into your graph. +2. Connect the text you want to normalize to the "string" input. +3. Select the desired normalization form (NFC, NFD, NFKC, or NFKD). +4. Set "removeAccents" to true if you want to remove diacritical marks from characters. + +
+ +### Tips + +* Use NFC (default) for most general text normalization needs. +* Setting "removeAccents" to true will convert characters like "é" to "e" while preserving the base character. + +### See Also + +* [**Case Convert**](case-convert.md): For changing between different text case formats. +* [**Regex**](regex.md): For more advanced text transformations using regular expressions. + +### Use Cases + +* **Search Optimization**: Normalize text for more accurate searching across accented and non-accented versions. +* **Internationalization**: Standardize user input from different languages and character sets. +* **URL Generation**: Create clean, accent-free slugs for web addresses from international text. diff --git a/graph-engine/available-nodes/string/pad.md b/graph-engine/available-nodes/string/pad.md new file mode 100644 index 0000000..cf7fd3c --- /dev/null +++ b/graph-engine/available-nodes/string/pad.md @@ -0,0 +1,48 @@ +# Pad + +### What It Does + +Adds characters to the beginning or end of a string until it reaches the desired length. This is useful for aligning text, creating fixed-width formats, or visual styling. + +### Inputs + +| Name | Description | Type | Required | +| --------- | --------------------------------------- | ------ | -------- | +| string | The text to pad | String | Yes | +| length | The target length for the padded string | Number | Yes | +| character | The character to pad with | String | Yes | +| position | Where to add padding (start or end) | String | No | + +### Outputs + +| Name | Description | Type | +| ------ | --------------- | ------ | +| string | The padded text | String | + +
+ +### How to Use It + +1. Drag the Pad node into your graph. +2. Connect the text you want to pad to the "string" input. For e.g., `name`. +3. Set the desired "length" for the final string. For e.g., `10`. +4. Specify the "character" to use for padding (only the first character will be used). +5. Select the "position" to add padding (start or end). + +
+ +### Tips + +* If your string is already longer than the specified length, it won't be truncated. +* Only the first character of the "character" input will be used for padding. + +### See Also + +* [**Case Convert**](case-convert.md): For changing text case format. +* [**Normalize**](normalize.md): For standardizing text representation. + +### Use Cases + +* **UI Display**: Create fixed-width elements for consistent visual alignment. +* **Code Formatting**: Format code identifiers with consistent spacing. +* **Data Export**: Prepare fixed-width fields for legacy systems or data exchange formats. diff --git a/graph-engine/available-nodes/string/regex.md b/graph-engine/available-nodes/string/regex.md new file mode 100644 index 0000000..4b0b5c1 --- /dev/null +++ b/graph-engine/available-nodes/string/regex.md @@ -0,0 +1,60 @@ +# Regex + +### What It Does + +Performs regular expression search and replace operations on text. It finds patterns in your input string and replaces them according to your specified replacement pattern. + +### Inputs + +| Name | Description | Type | Required | +| ------- | ----------------------------------------------------------- | ------ | -------- | +| input | The text to process | String | Yes | +| match | The regular expression pattern to find | String | No | +| flags | Regex flags (like "g" for global, "i" for case-insensitive) | String | No | +| replace | The replacement pattern | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------------- | ------ | +| value | The text after pattern replacement | String | + +
+ +### How to Use It + +1. Drag the Regex node into your graph. +2. Connect the text you want to process to the "input" input. For e.g., `color.red.100`. +3. Set the "match" value to the regular expression pattern you want to find (without the slashes). For e.g., `Color`. +4. Set any "flags" you need for the regex operation (e.g., "i" to make it case insensitive). +5. Define the "replace" pattern to substitute for matched text (e.g., `brand`). +6. The output will be a string `brand.red.100`, where `color` is replaced with `brand`. + +
+ +### Tips + +* Don't include the slash delimiters in your match pattern - just the pattern itself. +* Use the "g" flag to replace all occurrences rather than just the first match. +* Regex flags: + * `i` : Ignore case, case-insensitive matching. + * `m` : Multi-line, multi-line matching. + * `s` : Dotall, dot matches any char including newline. + * `a` : ASCII, ASCII-only matching. + * `x` : Verbose, ignore whitespace and comments. +* You can combine these flags in any order. For example: + * `i` - Case insensitive matching + * `im` - Case insensitive and multiline matching + * `is` - Case insensitive and dot matches newline + * `imsx` - Multiple flags combined + +### See Also + +* [**Replace**](replace.md): For simple string replacement without regular expressions. +* [**Normalize**](normalize.md): For standardizing text representation. + +### Use Cases + +* **Text Cleanup**: Remove or replace unwanted patterns or characters in text. +* **Format Conversion**: Transform text patterns from one format to another. +* **Data Extraction**: Isolate specific patterns from larger text blocks for token creation. diff --git a/graph-engine/available-nodes/string/replace.md b/graph-engine/available-nodes/string/replace.md new file mode 100644 index 0000000..3236a99 --- /dev/null +++ b/graph-engine/available-nodes/string/replace.md @@ -0,0 +1,48 @@ +# Replace + +### What It Does + +Finds and replaces all occurrences of a search string with a replacement string. This is useful for removing, substituting, or modifying specific parts of text. + +### Inputs + +| Name | Description | Type | Required | +| ------- | -------------------------------------------------- | ------ | -------- | +| string | The original text to perform replacements on | String | Yes | +| search | The text pattern to find and replace | String | Yes | +| replace | The new text to insert in place of the search text | String | No | + +### Outputs + +| Name | Description | Type | +| ------ | ----------------------------------------- | ------ | +| string | The resulting text after all replacements | String | + +
+ +### How to Use It + +1. Drag the Replace node into your graph. +2. Connect your source text to the "string" input (like `"Hello World"`). +3. Set the "search" input to the text you want to replace (like `"World"`). +4. Set the "replace" input to the replacement text (like `"Universe"`). +5. The output will be `"Hello Universe"`. + +
+ +### Tips + +* To remove text entirely, leave the "replace" input empty or set it to an empty string. +* This node replaces all occurrences, not just the first match. +* This node is case sensitive. + +### See Also + +* [**Split**](split.md): For breaking text into parts based on a separator. +* [**Regex**:](regex.md) For more advanced pattern matching and replacement. + +### Use Cases + +* **Text Cleaning**: Remove unwanted characters or fix common typos in text. +* **Token Formatting**: Convert token references like `{spacing.sm}` to their actual values. +* **Content Variations**: Create different text versions by replacing key terms or phrases. diff --git a/graph-engine/available-nodes/string/split.md b/graph-engine/available-nodes/string/split.md new file mode 100644 index 0000000..05cf241 --- /dev/null +++ b/graph-engine/available-nodes/string/split.md @@ -0,0 +1,45 @@ +# Split String + +### What It Does + +Divides a text string into smaller parts based on a separator character or string. This is useful for breaking comma-separated lists, space-separated words, or any delimited text into individual items. + +### Inputs + +| Name | Description | Type | Required | +| --------- | ------------------------------------------------- | ------ | -------- | +| value | The text to split into parts | String | Yes | +| separator | The character or string that marks where to split | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------------------- | ---- | +| value | An array containing the separated parts | List | + +
+ +### How to Use It + +1. Drag the Split String node into your graph. +2. Connect a text string (like `"red,green,blue"`) to the "value" input. +3. Set the "separator" to the character that divides your items (like `","`). +4. The output will be a list of individual items (`["red", "green", "blue"]`). + +
+ +### Tips + +* The default separator is a comma (`,`). +* If the separator is not found in the input string, the output will be an array with just the original string. + +### See Also + +* [**Join Array**](join.md): For the reverse operation—combining array items into a single string. +* [**Array Find**](../array/array-find.md): For searching through the resulting array of items. + +### Use Cases + +* **Tag Processing**: Split a list of tags into individual items for filtering or display. +* **Data Parsing**: Extract individual values from formatted text like CSV data. +* **Path Handling**: Break file paths or URLs into their component parts. diff --git a/graph-engine/available-nodes/string/stringify.md b/graph-engine/available-nodes/string/stringify.md new file mode 100644 index 0000000..4f8682e --- /dev/null +++ b/graph-engine/available-nodes/string/stringify.md @@ -0,0 +1,43 @@ +# Stringify + +### What It Does + +Converts any value type into a text string representation. This is useful for displaying non-text values or combining different data types into text format. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ---------------------------- | ---- | -------- | +| value | The value to convert to text | Any | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------------------- | ------ | +| value | The string representation of the input | String | + +
+ +### How to Use It + +1. Drag the Stringify node into your graph. +2. Connect any value (number, boolean, object, etc.) to the "value" input. +3. The node will convert the input to its string representation. + +
+ +### Tips + +* This node performs a simple conversion to string (equivalent to adding an empty string to a value). +* For more complex object serialization, consider using other tools to format the data. + +### See Also + +* [**Interpolation**](interpolation.md): For embedding values into a template string. +* [**Join Array**](join.md): For combining multiple strings into one. + +### Use Cases + +* **Display Formatting**: Convert numeric design tokens to string format for display. +* **Data Combination**: Convert values to strings before concatenating them with other text. +* **Type Conversion**: Ensure values are in string format before passing to string-only operations. diff --git a/graph-engine/available-nodes/string/uppercase.md b/graph-engine/available-nodes/string/uppercase.md new file mode 100644 index 0000000..82668ec --- /dev/null +++ b/graph-engine/available-nodes/string/uppercase.md @@ -0,0 +1,44 @@ +# Uppercase + +### What It Does + +Converts all characters in a text string to uppercase (capital letters). This is useful for creating consistent text formatting, headers, or emphasizing text. + +### Inputs + +| Name | Description | Type | Required | +| ----- | -------------------------------- | ------ | -------- | +| value | The text to convert to uppercase | String | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------- | ------ | +| value | The converted uppercase text | String | + +
+ +### How to Use It + +1. Drag the Uppercase node into your graph. +2. Connect a text string (like `"Hello World"`) to the "value" input. +3. Run the graph—your output will be `"HELLO WORLD"`. +4. Special characters and numbers remain unchanged. + +
+ +### Tips + +* Uppercase is useful for creating consistent formatting regardless of input casing. +* Consider accessibility implications when using all caps, as it can be harder to read. + +### See Also + +* [**Lowercase**](lowercase.md): For converting text to all lowercase letters. +* [**Case Convert**](case-convert.md): For more text casing options like title case or camel case. + +### Use Cases + +* **Button Labels**: Convert text to uppercase for button labels in a design system. +* **Headings & Titles**: Create standardized uppercase headings. +* **Acronyms**: Ensure acronyms and initialisms are consistently displayed in caps. diff --git a/graph-engine/available-nodes/typing/README.md b/graph-engine/available-nodes/typing/README.md new file mode 100644 index 0000000..8c2984c --- /dev/null +++ b/graph-engine/available-nodes/typing/README.md @@ -0,0 +1,3 @@ +# Typing + +Nodes for managing data types. Validates, converts, or adds units to ensure inputs match expected formats. diff --git a/graph-engine/available-nodes/typing/assert-defined.md b/graph-engine/available-nodes/typing/assert-defined.md new file mode 100644 index 0000000..4994a19 --- /dev/null +++ b/graph-engine/available-nodes/typing/assert-defined.md @@ -0,0 +1,42 @@ +# Assert Defined + +### What It Does + +The Assert defined node checks if a value is defined and throws an error if it's undefined. It helps enforce data requirements in your graph by stopping execution when required values are missing. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ------------------------------------ | ---- | -------- | +| Value | The value to check for being defined | Any | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------- | ---- | +| Value | The original input value (if defined) | Any | + +![Assert defined Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 5.53.12 PM.png>) + +### How to Use It + +1. Drag the Assert defined node into your graph. +2. Connect any value to the "Value" input. +3. If the value is defined, it passes through to the output. +4. If the value is undefined, the node throws an error and stops graph execution. + +### Tips + +* Use this node to validate required inputs early in your graph. +* This creates a clear failure point rather than propagating undefined values. + +### See Also + +* **Has Value**: For checking if a value is defined without throwing an error. +* **If**: For conditionally executing different paths based on value existence. + +### Use Cases + +* **Input Validation**: Ensure required parameters have values before processing. +* **Error Prevention**: Stop graph execution early if critical data is missing. +* **API Response Validation**: Verify that expected properties exist in data responses. diff --git a/graph-engine/available-nodes/typing/has-value.md b/graph-engine/available-nodes/typing/has-value.md new file mode 100644 index 0000000..ce6c2d1 --- /dev/null +++ b/graph-engine/available-nodes/typing/has-value.md @@ -0,0 +1,43 @@ +# Has Value + +### What It Does + +The Has Value node checks if a value is defined and outputs a boolean result. It evaluates whether the input is null or undefined, returning true if the value is missing and false if it exists. + +### Inputs + +| Name | Description | Type | Required | +| ----- | -------------------------------- | ---- | -------- | +| Value | The value to check for existence | Any | Yes | + +### Outputs + +| Name | Description | Type | +| ------ | ------------------------------------------------------- | ------- | +| Result | True if the value is undefined or null, false otherwise | Boolean | + +![Has Value Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 5.55.40 PM.png>) + +### How to Use It + +1. Drag the Has Value node into your graph. +2. Connect any value to the "Value" input. +3. The node outputs true if the value is null or undefined. +4. Use the boolean output to control conditional logic in your graph. + +### Tips + +* This node is useful for handling optional inputs gracefully. +* Combine with the If node to create fallback logic when values are missing. + +### See Also + +* **Assert defined**: For throwing an error when a value is undefined. +* **If**: For creating conditional branches based on the result. +* **Parse Number**: For checking if a value can be parsed as a number. + +### Use Cases + +* **Default Value Selection**: Check if a value exists before deciding to use a fallback. +* **Optional Parameter Handling**: Gracefully work with inputs that might not be provided. +* **Data Validation**: Verify the presence of data before processing it. diff --git a/graph-engine/available-nodes/typing/parse-number.md b/graph-engine/available-nodes/typing/parse-number.md new file mode 100644 index 0000000..f88f4f6 --- /dev/null +++ b/graph-engine/available-nodes/typing/parse-number.md @@ -0,0 +1,45 @@ +# Parse Number + +### What It Does + +The Parse Number node converts a string representation of a number into an actual number value. If the conversion fails (resulting in NaN), the node throws an error. + +### Inputs + +| Name | Description | Type | Required | +| ----- | --------------------------------- | ------ | -------- | +| Value | The string to convert to a number | String | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------- | ------ | +| Value | The converted number value | Number | + +![Parse Number Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 5.56.46 PM.png>) + +### How to Use It + +1. Drag the Parse Number node into your graph. +2. Connect a string value to the "Value" input. +3. The node attempts to convert the string to a number. +4. If successful, the number is output. +5. If the string cannot be parsed as a number, an error is thrown. + +### Tips + +* This node is stricter than JavaScript's built-in parsing as it throws an error on invalid input. +* Use this node when you need to ensure numerical operations will work correctly. +* Consider using a Try/Catch node to handle potential parsing errors gracefully. + +### See Also + +* **Parse unit**: For extracting both the number and unit from a value. +* **Pass unit**: For adding a unit to a number. +* **Number To String**: For converting in the opposite direction. + +### Use Cases + +* **User Input Validation**: Convert user-provided string inputs to numbers for calculations. +* **Data Cleaning**: Ensure values from external sources are proper numbers before processing. +* **Configuration Parameter Processing**: Convert string configuration values to numbers for use in calculations. diff --git a/graph-engine/available-nodes/typing/parse-unit.md b/graph-engine/available-nodes/typing/parse-unit.md new file mode 100644 index 0000000..ede214b --- /dev/null +++ b/graph-engine/available-nodes/typing/parse-unit.md @@ -0,0 +1,47 @@ +# Parse Unit + +### What It Does + +The Parse unit node separates a value with units (like "10px" or "2rem") into its numeric value and unit components. It extracts both the number and the unit from a string input. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ---------------------------------------------------------- | ------ | -------- | +| Value | The string containing a number with a unit | String | Yes | +| Unit | A fallback unit value (not used in current implementation) | String | No | + +### Outputs + +| Name | Description | Type | +| ------ | ------------------------------------------- | ------ | +| Number | The extracted numeric value | Number | +| Unit | The extracted unit (e.g., "px", "rem", "%") | String | + +![Parse unit Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 5.58.01 PM.png>) + +### How to Use It + +1. Drag the Parse unit node into your graph. +2. Connect a string containing a value with a unit (e.g., "10px", "2rem", "50%") to the "Value" input. +3. The node outputs the separated number and unit as distinct outputs. +4. If parsing fails, the node defaults to 0 for the number and an empty string for the unit. + +### Tips + +* This node is useful for design token manipulation and CSS value processing. +* Can be used to perform calculations on values while preserving their units. +* If the input doesn't contain a unit, the unit output will be an empty string. + +### See Also + +* **Pass unit**: For adding a unit to a numeric value. +* **Parse Number**: For converting strings to numbers without unit handling. +* **Arithmetic nodes**: For performing calculations on the numeric component. + +### Use Cases + +* **Design Token Manipulation**: Extract values from design tokens for calculations. +* **CSS Value Processing**: Manipulate CSS values while preserving units. +* **Unit Conversion**: Extract numerical values to convert between different units. +* **Responsive Design**: Process relative units to calculate absolute values. diff --git a/graph-engine/available-nodes/typing/pass-unit.md b/graph-engine/available-nodes/typing/pass-unit.md new file mode 100644 index 0000000..3100e48 --- /dev/null +++ b/graph-engine/available-nodes/typing/pass-unit.md @@ -0,0 +1,48 @@ +# Pass Unit + +### What It Does + +The Pass unit node adds a unit to a value if it doesn't already have one. It ensures that string values representing measurements have the appropriate unit suffix. + +### Inputs + +| Name | Description | Type | Required | +| -------- | -------------------------------------------------------- | ------ | -------- | +| Value | The value to which a unit should be added | String | Yes | +| Fallback | The unit to add if no unit is present (defaults to "px") | String | No | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------------- | ------ | +| Value | The value with unit attached | String | + +![Pass unit Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 5.58.01 PM (1).png>) + +### How to Use It + +1. Drag the Pass unit node into your graph. +2. Connect a string value to the "Value" input. +3. Optionally, specify a fallback unit (defaults to "px"). +4. The node checks if the value already has a unit. +5. If it does, the value is passed through unchanged. +6. If it doesn't, the fallback unit is appended to the value. + +### Tips + +* This node ensures consistent unit formatting in design tokens and CSS values. +* Useful for handling raw number inputs that should have specific units. +* The node won't add a unit to values that already contain one. + +### See Also + +* **Parse unit**: For extracting the number and unit from a value. +* **Parse Number**: For converting strings to numbers. +* **Stringify**: For converting any value to a string. + +### Use Cases + +* **Design Token Standardization**: Ensure all size values have appropriate units. +* **CSS Value Generation**: Add units to numeric values for CSS properties. +* **Unit Normalization**: Standardize values by ensuring they all have units. +* **Design System Implementation**: Enforce consistent unit usage across token values. diff --git a/graph-engine/available-nodes/typography/README.md b/graph-engine/available-nodes/typography/README.md new file mode 100644 index 0000000..2a5999c --- /dev/null +++ b/graph-engine/available-nodes/typography/README.md @@ -0,0 +1,3 @@ +# Typography + +Nodes for typography-related tasks. Calculates base font sizes (e.g., per DIN 1450) or defines text properties for type systems. diff --git a/graph-engine/available-nodes/typography/base-font-size.md b/graph-engine/available-nodes/typography/base-font-size.md new file mode 100644 index 0000000..9dd7c09 --- /dev/null +++ b/graph-engine/available-nodes/typography/base-font-size.md @@ -0,0 +1,51 @@ +# Base Font Size + +### What It Does + +Calculates an optimal base font size according to DIN 1450 standards, considering factors like viewing distance, screen properties, and visual acuity. This is useful for creating accessible typography that's properly sized for your specific use case. + +### Inputs + +| Name | Description | Type | Required | +| ----------------- | ------------------------------------------------------------ | ------ | -------- | +| visualAcuity | Visual acuity factor (typical human vision is around 0.7) | Number | No | +| correctionFactor | Adjustment factor for calculation (default is 13) | Number | No | +| lightingCondition | Factor representing lighting conditions (bright to dim, 0-1) | Number | No | +| distance | Viewing distance in centimeters | Number | No | +| xHeightRatio | Ratio of x-height to font size in the typeface you're using | Number | No | +| ppi | Pixels per inch of the display | Number | No | +| pixelDensity | Pixel density factor (higher for retina/high DPI displays) | Number | No | +| precision | Decimal precision of the result | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------------------------- | ------ | +| value | The calculated base font size in pixels | Number | + +![Base Font Size Example](<../../../.gitbook/assets/Screenshot 2025-04-09 at 7.28.02 PM.png>) + +### How to Use It + +1. Drag the Base Font Size node into your graph. +2. Adjust the input values to match your specific scenario (device, viewing distance, etc.). +3. For most inputs, the default values work well for typical screen reading. +4. Connect the output to your typography system or use directly as a font size. + +
+ +### Tips + +* The x-height ratio varies by font; common values are 0.5-0.55 for most typefaces. +* For accessibility, you may want to increase the result slightly beyond the calculated minimum. + +### See Also + +* **Font Size**: For directly setting font sizes or creating a scale. +* **Typography Style**: For creating complete text styles with multiple properties. + +### Use Cases + +* **Accessibility Compliance**: Ensure text meets readability standards for different devices. +* **Responsive Typography**: Calculate appropriate font sizes based on device characteristics. +* **Design Systems**: Create a scientifically-backed foundation for your typography scale. diff --git a/graph-engine/available-nodes/vector2/README.md b/graph-engine/available-nodes/vector2/README.md new file mode 100644 index 0000000..5a89e13 --- /dev/null +++ b/graph-engine/available-nodes/vector2/README.md @@ -0,0 +1,3 @@ +# Vector2 + +Nodes for 2D vector operations. Creates, adds, or normalizes vectors for handling coordinates in layouts or animations. diff --git a/graph-engine/available-nodes/vector2/add.md b/graph-engine/available-nodes/vector2/add.md new file mode 100644 index 0000000..59d0a2c --- /dev/null +++ b/graph-engine/available-nodes/vector2/add.md @@ -0,0 +1,47 @@ +--- +hidden: true +--- + +# Add + +### What It Does + +Adds two 2D vectors together by combining their x and y components independently. This is useful for combining positions, velocities, or any pair of values that can be represented as 2D coordinates. + +### Inputs + +| Name | Description | Type | Required | +| ---- | ----------------- | ------- | -------- | +| a | The first vector | Vector2 | Yes | +| b | The second vector | Vector2 | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------- | ------- | +| value | The sum of vectors a and b | Vector2 | + +### How to Use It + +1. Drag the Add Vector2 node into your graph. +2. Connect a vector (like `[10, 20]`) to the "a" input. +3. Connect another vector (like `[5, 10]`) to the "b" input. +4. Run the graph—your output will be `[15, 30]`, the sum of both vectors. + +![Add Vector2 Example](screenshot-placeholder.png) + +### Tips + +* Vector addition is commutative—the order of a and b doesn't matter. +* Use this for combining positions, offsets, dimensions, or any paired numeric values. + +### See Also + +* **Subtract Vector2**: For finding the difference between two vectors. +* **Scale Vector2**: For multiplying a vector by a scalar value. + +### Use Cases + +* **Position Calculation**: Combine a base position with an offset. +* **Motion Physics**: Add velocity and acceleration vectors together. +* **Layout Design**: Combine width/height dimensions with margin/padding values. diff --git a/graph-engine/available-nodes/vector2/create.md b/graph-engine/available-nodes/vector2/create.md new file mode 100644 index 0000000..f84f7bd --- /dev/null +++ b/graph-engine/available-nodes/vector2/create.md @@ -0,0 +1,43 @@ +# Create + +### What It Does + +Creates a 2D vector from x and y coordinate values. A 2D vector represents both direction and magnitude, useful for positions, dimensions, or movements in a 2D space. + +### Inputs + +| Name | Description | Type | Required | +| ---- | -------------------------------------- | ------ | -------- | +| x | The horizontal component of the vector | Number | Yes | +| y | The vertical component of the vector | Number | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | --------------------- | ------- | +| value | The created 2D vector | Vector2 | + +![Create Vector2 Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.01.06 PM.png>) + +### How to Use It + +1. Drag the Create Vector2 node into your graph. +2. Connect or enter a number for the "x" input. +3. Connect or enter a number for the "y" input. +4. Run the graph—your output will be a 2D vector containing both values. + +### Tips + +* Vectors are represented as \[x, y] arrays but have special properties when used with vector operations. +* Use this node when you need to work with positions, directions, or sizes in 2D space. + +### See Also + +* **Vector2 Add**: For combining two vectors together. +* **Vector2 Destructure**: For breaking a vector into its x and y components. + +### Use Cases + +* **Position Calculations**: Create position vectors for layout algorithms. +* **Size Definition**: Define width and height as a vector for aspect ratio calculations. +* **Direction Vectors**: Create normalized direction vectors for animations or gradients. diff --git a/graph-engine/available-nodes/vector2/destructure.md b/graph-engine/available-nodes/vector2/destructure.md new file mode 100644 index 0000000..a345b72 --- /dev/null +++ b/graph-engine/available-nodes/vector2/destructure.md @@ -0,0 +1,43 @@ +# Destructure + +### What It Does + +Splits a 2D vector into its individual X and Y components. This allows you to access and use the separate coordinate values of a vector. + +### Inputs + +| Name | Description | Type | Required | +| ----- | ------------------------- | ------- | -------- | +| value | The vector to destructure | Vector2 | Yes | + +### Outputs + +| Name | Description | Type | +| ---- | ----------------------------- | ------ | +| x | The X component of the vector | Number | +| y | The Y component of the vector | Number | + +![Destructure vector2 Example](<../../../.gitbook/assets/Screenshot 2025-04-22 at 6.02.35 PM.png>) + +### How to Use It + +1. Drag the Destructure vector2 node into your graph. +2. Connect a Vector2 value to the "value" input. +3. The node will output the X component to the "x" output and the Y component to the "y" output. +4. Connect these outputs to other nodes that require individual number values. + +### Tips + +* This node is useful when you need to perform different operations on each component of a vector. +* Vector2 values are stored as arrays in the format \[x, y], so the first value becomes the x output and the second value becomes the y output. + +### See Also + +* **Create**: For creating a new Vector2 from individual x and y values. +* **Add**: For vector addition without needing to work with individual components. + +### Use Cases + +* **Component Manipulation**: Process the X and Y components of a vector separately for different scaling or calculations. +* **Layout Calculations**: Extract position coordinates to use in spacing or alignment formulas. +* **Data Visualization**: Break down vector data into components for different visual representations. diff --git a/graph-engine/available-nodes/vector2/dot-product.md b/graph-engine/available-nodes/vector2/dot-product.md new file mode 100644 index 0000000..7b7e4ef --- /dev/null +++ b/graph-engine/available-nodes/vector2/dot-product.md @@ -0,0 +1,47 @@ +--- +hidden: true +--- + +# Dot Product + +### What It Does + +The Dot Product Vector2 node calculates the scalar product of two 2D vectors. It's useful for determining the angle between vectors or projecting one vector onto another. + +### Inputs + +| Name | Description | Type | Required | +| ---- | ---------------- | ------- | -------- | +| A | First 2D vector | Vector2 | Yes | +| B | Second 2D vector | Vector2 | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ---------------------- | ------ | +| Value | The dot product result | Number | + +### How to Use It + +1. Drag the Dot Product Vector2 node into your graph. +2. Connect your first vector to the "A" input. +3. Connect your second vector to the "B" input. +4. The output will be the dot product, calculated as A.x \* B.x + A.y \* B.y. + +![Dot Product Vector2 Example](screenshot-placeholder.png) + +### Tips + +* A dot product of 0 means the vectors are perpendicular (at 90° to each other). +* The dot product is positive when vectors point in similar directions, negative when they point in opposite directions. + +### See Also + +* **Length**: For calculating the magnitude of a vector. +* **Normalize**: For converting a vector to a unit vector while preserving direction. + +### Use Cases + +* **Direction Comparison**: Determine if vectors are pointing in similar or opposite directions. +* **Projection Calculations**: Find the component of one vector in the direction of another. +* **Angle Detection**: Use in conjunction with vector lengths to determine the angle between vectors. diff --git a/graph-engine/available-nodes/vector2/length.md b/graph-engine/available-nodes/vector2/length.md new file mode 100644 index 0000000..8a336cd --- /dev/null +++ b/graph-engine/available-nodes/vector2/length.md @@ -0,0 +1,46 @@ +--- +hidden: true +--- + +# Length + +### What It Does + +The Vector2 Length node calculates the magnitude (absolute length) of a 2D vector. It's essential for measuring distances and normalizing vectors. + +### Inputs + +| Name | Description | Type | Required | +| ------ | ------------------------ | ------- | -------- | +| Vector | The 2D vector to measure | Vector2 | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------------------------ | ------ | +| Value | The length (magnitude) of the vector | Number | + +### How to Use It + +1. Drag the Vector2 Length node into your graph. +2. Connect a 2D vector (like `[3, 4]`) to the "Vector" input. +3. The output will be the vector's length (for `[3, 4]`, the result would be `5`). +4. Use this value for distance measurements or to prepare for vector normalization. + +![Vector2 Length Example](screenshot-placeholder.png) + +### Tips + +* The length is always positive, regardless of vector direction. +* For performance in comparisons, consider using the squared length (x² + y²) without the square root. + +### See Also + +* **Normalize**: For creating a unit vector (length of 1) from any vector. +* **Dot Product Vector2**: For calculating the scalar product of two vectors. + +### Use Cases + +* **Distance Calculation**: Measure the length of a displacement vector between two points. +* **Collision Detection**: Determine if objects are within a certain radius of each other. +* **Visual Scaling**: Size visual elements based on the magnitude of a vector property. diff --git a/graph-engine/available-nodes/vector2/normalize.md b/graph-engine/available-nodes/vector2/normalize.md new file mode 100644 index 0000000..484f00e --- /dev/null +++ b/graph-engine/available-nodes/vector2/normalize.md @@ -0,0 +1,46 @@ +--- +hidden: true +--- + +# Normalize + +### What It Does + +The Normalize Vector2 node converts a 2D vector to a unit vector (magnitude of 1) while preserving its direction. It's essential for working with direction vectors in animations and layouts. + +### Inputs + +| Name | Description | Type | Required | +| ------ | -------------------------- | ------- | -------- | +| Vector | The 2D vector to normalize | Vector2 | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | -------------------------- | ------- | +| Value | The normalized unit vector | Vector2 | + +### How to Use It + +1. Drag the Normalize Vector2 node into your graph. +2. Connect a 2D vector (like `[3, 4]`) to the "Vector" input. +3. The output will be a vector pointing in the same direction but with length 1 (e.g., `[0.6, 0.8]`). +4. Use this for direction-only operations where magnitude should be consistent. + +![Normalize Vector2 Example](screenshot-placeholder.png) + +### Tips + +* If the input vector is `[0, 0]` (zero vector), the output will also be `[0, 0]` since it has no direction. +* Normalizing before scaling gives you precise control over vector magnitude. + +### See Also + +* **Vector2 Length**: For calculating the magnitude of a vector. +* **Scale Vector2**: For adjusting the magnitude of a vector. + +### Use Cases + +* **Direction Vectors**: Create consistent direction indicators for UI elements. +* **Movement Controls**: Normalize input vectors to ensure consistent movement speed. +* **Visual Indicators**: Generate evenly-sized directional markers or arrows. diff --git a/graph-engine/available-nodes/vector2/scale.md b/graph-engine/available-nodes/vector2/scale.md new file mode 100644 index 0000000..10f7055 --- /dev/null +++ b/graph-engine/available-nodes/vector2/scale.md @@ -0,0 +1,48 @@ +--- +hidden: true +--- + +# Scale + +### What It Does + +The Scale Vector2 node multiplies a 2D vector by a scalar value, changing its length while preserving its direction. It's useful for resizing vectors or adjusting their magnitude. + +### Inputs + +| Name | Description | Type | Required | +| ------ | ------------------------- | ------- | -------- | +| Vector | The 2D vector to scale | Vector2 | Yes | +| Scalar | The multiplication factor | Number | No | + +### Outputs + +| Name | Description | Type | +| ----- | ----------------- | ------- | +| Value | The scaled vector | Vector2 | + +### How to Use It + +1. Drag the Scale Vector2 node into your graph. +2. Connect a 2D vector (like `[10, 20]`) to the "Vector" input. +3. Set the "Scalar" input to your desired scale factor (like `0.5` or `2`) or use the default (`1`). +4. The output will be a vector with each component multiplied by the scalar (e.g., `[5, 10]` or `[20, 40]`). + +![Scale Vector2 Example](screenshot-placeholder.png) + +### Tips + +* A scalar value of 1 leaves the vector unchanged. +* Negative scalar values reverse the vector's direction. +* Combine with Normalize to create vectors of exact length. + +### See Also + +* **Normalize Vector2**: For creating a unit vector from any vector. +* **Vector2 Length**: For measuring the magnitude of a vector. + +### Use Cases + +* **Responsive Design**: Scale dimensions based on screen size or container proportions. +* **Animation**: Adjust movement vectors for speed control. +* **Visual Adjustments**: Resize vector-based graphics while preserving proportions. diff --git a/graph-engine/available-nodes/vector2/subtract.md b/graph-engine/available-nodes/vector2/subtract.md new file mode 100644 index 0000000..edbb77c --- /dev/null +++ b/graph-engine/available-nodes/vector2/subtract.md @@ -0,0 +1,47 @@ +--- +hidden: true +--- + +# Subtract + +### What It Does + +The Subtract Vector2 node calculates the difference between two 2D vectors. It's useful for finding displacement vectors between points or reversing vector operations. + +### Inputs + +| Name | Description | Type | Required | +| ---- | -------------------------------------- | ------- | -------- | +| A | First vector (minuend) | Vector2 | Yes | +| B | Second vector to subtract (subtrahend) | Vector2 | Yes | + +### Outputs + +| Name | Description | Type | +| ----- | ------------------- | ------- | +| Value | The result of A - B | Vector2 | + +### How to Use It + +1. Drag the Subtract Vector2 node into your graph. +2. Connect your first vector to the "A" input. +3. Connect your second vector to the "B" input. +4. The output will be the vector difference (\[A.x - B.x, A.y - B.y]). + +![Subtract Vector2 Example](screenshot-placeholder.png) + +### Tips + +* Subtracting vector B from A gives you the displacement vector from B to A. +* The order matters: A - B is not the same as B - A (they point in opposite directions). + +### See Also + +* **Add Vector2**: For combining two vectors. +* **Scale Vector2**: For multiplying a vector by a scalar value. + +### Use Cases + +* **Displacement Calculation**: Find the vector needed to move from one point to another. +* **Relative Positioning**: Calculate positions relative to reference points. +* **Motion Adjustment**: Compensate for existing movement by applying an opposing vector. diff --git a/graph-engine/creating-a-graph-based-set/README.md b/graph-engine/creating-a-graph-based-set/README.md new file mode 100644 index 0000000..261ea5a --- /dev/null +++ b/graph-engine/creating-a-graph-based-set/README.md @@ -0,0 +1,54 @@ +# Creating a Graph Based Set + +In Studio, you can create different types of sets to manage your design tokens effectively. This guide walks you through the process of creating a **graph-based set**. + + + +{% stepper %} +{% step %} +### **Navigate to the Tokens Module** + +* Open Studio. +* In the **left panel**, click on the **Tokens module**. + +
+{% endstep %} + +{% step %} +### **Access the Sets Panel** + +* Here, you will see the existing token sets in your project. +* Click on **Create New Set**. +{% endstep %} + +{% step %} +### **Choose the Set Type** + +* A dialog will appear, prompting you to choose between: + * [**Static Set** ](../../platform/tokens/token-sets.md#static-sets)(manually managed tokens). + * [**Graph-Based Set**](../../platform/tokens/token-sets.md#graph-based-sets) (dynamic token relationships using graph logic). +* Select **Graph-Based Sets.** +{% endstep %} + +{% step %} +### **Configure Your Graph-Based Set** + +* **Enter a Name** for the set. +* _(Optional)_ Add a **Description** to clarify its purpose. +{% endstep %} + +{% step %} +### **Create the Set** + +* Click **Create**, and your graph-based set will be generated. + +
+{% endstep %} + +{% step %} +### **Next Steps** + +* The newly created graph-based set is now available in the UI. +* You can now start defining relationships, nodes, and logic within the graph editor. +{% endstep %} +{% endstepper %} diff --git a/graph-engine/creating-a-graph-based-set/generating-a-token-set.md b/graph-engine/creating-a-graph-based-set/generating-a-token-set.md new file mode 100644 index 0000000..597482e --- /dev/null +++ b/graph-engine/creating-a-graph-based-set/generating-a-token-set.md @@ -0,0 +1,61 @@ +--- +description: How to export a design token set through the Graph Editor. +--- + +# Generating a Token Set + +Similar to static token sets, a graph-based set needs to define what tokens to be included, and what their values are. + +To define the tokens of the token set, we need to generate a token set and set it as the output of the graph. + +## What is a token set? + +A token set is an object that contains the definitions of a single, or multiple design tokens. For example, a set of tokens that contain hex values, or font-size values. + +## Basic Example + +{% stepper %} +{% step %} +### Create a design token + +To create a design token that will be included in a token set, use the [create-design-token.md](../available-nodes/design-tokens/create-design-token.md "mention") node. Here, you can give your token a name, set the type and apply a value to it. You can set the values of each input manually, or use other nodes such as [interpolation.md](../available-nodes/string/interpolation.md "mention") or [constant.md](../available-nodes/generic/constant.md "mention"). + +{% hint style="info" %} +There are of course many ways to generate the value of a token, and creating a design token may happen elsewhere in the flow, but the intention is the same. +{% endhint %} + +

Defining a design token using the Create Design Token node.

+{% endstep %} + +{% step %} +### Create an array of design tokens + +To turn a token, or many, into a token set, first we need to build an array with them. Using the [arrify.md](../available-nodes/array/arrify.md "mention") node, you can build an array by defining your design tokens as the input. + +
+{% endstep %} + +{% step %} +### Convert Array to Token Set + +Now that you have an array of tokens, we need to turn it into a Token Set that we can output. Use the [array-to-set.md](../available-nodes/design-tokens/array-to-set.md "mention") node to turn the output of the Arrify node (currently an array of tokens), into a Token Set. You'll see that the output of the node is an object in the token format. + +
+{% endstep %} + +{% step %} +### Output your Token Set + +To capture the output of the graph and generate a tokenset, add an input named "tokenSet" and set the type to `any` . This will allow you to generate a token set, and export it directly. + +

An output node with an input set to "tokenSet" and the type set to "any".

+ +Next, connect the output of the [array-to-set.md](../available-nodes/design-tokens/array-to-set.md "mention") node to your new tokenSet input + +

Our entire graph where we create design tokens, group them in an array, turn the array into a set and then output them.

+ +You'll now see your tokens presented with their resolved values in the table view of the set. + +

Our outputted tokens in the table view of a Graph-Based set.

+{% endstep %} +{% endstepper %} diff --git a/graph-engine/editing.md b/graph-engine/editing.md new file mode 100644 index 0000000..3c72780 --- /dev/null +++ b/graph-engine/editing.md @@ -0,0 +1,75 @@ +# Editing + +The Graph Engine’s node editor is designed for flexibility and ease, letting you build and tweak graphs with simple actions. Here’s how to edit your workflows efficiently. + +### Adding & Moving Nodes + +Add nodes to your canvas in three ways, each with a handy description to guide you: + +* **From the Nodes Panel**: + * Open the Nodes Panel (usually on the left), find a node (e.g., "Add" or "Color to String"), and drag it onto the canvas. + * **Hover Tip**: Pause over a node in the panel to see its description (e.g., "Adds two numbers together"). +* **Through Shift + K Menu**: + * Press **Shift + K** to open a searchable menu. + * Type to filter nodes (e.g., "color" for color-related nodes), select one, and hit Enter to add it where your cursor is. + * **Bonus**: Each node shows a description in the menu for quick reference. +* **From the Top Action Bar**: + * Click the **Nodes Icon** in the toolbar (top of the screen), pick a node from the dropdown, and it lands on the canvas. +* **Moving Nodes**: Click and drag any node to reposition it. + +### Connecting Nodes + +Link nodes to flow data between them using two methods: + +* **Drag Method**: Click an output port (right side), drag to a matching input port (left side), and release. A blue edge appears if the types match; a red edge means they don’t. +* **Click Method**: Click an output port, then click an input port. The editor auto-draws a blue edge if compatible. **Tip**: Hover over ports to check types (e.g., "color", "number") if "Port Types" is enabled. + +### Disconnecting Nodes + +Break connections easily: + +* Click an edge (the line between ports), then press **Delete**. The edge vanishes, and data stops flowing. + +### Split Connections (Pass Through) + +Insert a node into an existing connection to modify the flow: + +* **Double-Click Method**: Double-click an edge, pick a node from the menu that pops up (e.g., "Log Value"), and it splits the edge, wiring the new node between the original two. + +### Duplicate + +Make an exact copy without clipboard fuss: + +* Right-click a node (or selected nodes) and choose **Duplicate** from the menu. The copy appears nearby, with settings intact but no edges. + +### Grouping Nodes + +Keep your graph organized visually: + +* Select multiple nodes (click or drag a box), right-click, and choose Create Group. +* What Happens: A colored background wraps the nodes, making them a visual unit without changing their logic (unlike a Subgraph). +* Manage Groups: Right-click the group to Ungroup (removes the background) or Delete (removes the group and all nodes inside). + +### Testing Your Graph + +See your work come to life as you edit: + +* Live Updates: The Output Panel and Inline Values (if enabled) update instantly as you connect or tweak nodes. +* Preview Nodes: Connect an output to a specialized Preview Node for a polished view: + * Color Scale Node: Shows a full color palette as swatches, neatly organized. + * Color Swatch: Renders a single color with its value. + * More preview options are in the Nodes Panel under "Preview Nodes". + +Example: Connect a color array output to a Color Scale Node to see all swatches at once while you adjust inputs. + +### **Extra Editing Tools** + +* **Zoom & Pan**: Scroll the mouse wheel to zoom in/out, or drag the canvas to pan—great for navigating big graphs. + +### Saving & Sharing + +Keep and share your graphs easily: + +* Download/Upload: Export your graph as a .json file via the toolbar’s Save icon, then upload it later with the Import option. +* Team Collaboration: In Studio, your team can access and edit your graphs directly—perfect for collaborative projects. +* Coming Soon: A community marketplace to exchange graphs and full design system projects. Stay tuned! diff --git a/graph-engine/editor.md b/graph-engine/editor.md new file mode 100644 index 0000000..d3a42a5 --- /dev/null +++ b/graph-engine/editor.md @@ -0,0 +1,100 @@ +# Editor + +## Overview + +The Graph Engine UI provides an intuitive interface for creating, managing, and visualizing nodes and their connections. This guide walks you through the core components of the interface to help you navigate and utilize its features efficiently. + +[Read more about creating Graph Based sets.](creating-a-graph-based-set/) + +## **Main Interface Sections** + +The Graph Engine UI consists of several panels and tools that help you manage nodes, edges, and settings. + +### **Nodes Panel** + +* Displays all the available nodes categorized into sections and segments. +* Search and drag nodes onto the canvas. + +
+ +### **Center Panel (Graph Canvas)** + +* This is the main workspace where you arrange and connect nodes. +* Navigation controls: + + * **Zoom In/Out** – Similar to Figma. + * **Pan & Drag** – Move around the canvas freely. + + + +
+ +### **Graph Elements** + +* **Nodes**: Represent individual operations or data points. +* **Edges**: Connections between nodes that define relationships. +* **Port:** Ports are the connection points on a **node** that allow data to flow in and out. They define how nodes interact with each other by transmitting values, logic, or actions. Each node has one or more ports, categorized as **inputs** and **outputs**. + +
+ +### **Top Action Bar** + +Provides quick actions for managing the graph. + +* **Add Node**– Browse and insert nodes. +* **Zoom Level Control** – Adjust zoom percentage of the canvas. +* **Node Alignment** – Align and distribute nodes systematically. +* **Layout Customization** – Show/hide active panels. +* **Graph Settings**: + * **Show Inline Types** – Helps understand node data types. + * **Show Inline Values** – Displays real-time values at node ports. + * **Use delayed interaction** - Forces a user to click save to update port. + * **Click to connect** - Allows you to quick connect nodes by clicking on the 2 ports. + * **Show execution time** - Shows how long it takes for a node to process. + * **Show Minimap** - Shows the minimap in the graph editing area. + * **Enable Context Menus** - Provides right click context menus. + * **Edge Type** - Choose from Bezier, Smooth Step, Straight, Simple Bezier to customise how the connected edges appear. + * **Layout Type** - Choose from Dagre, Elk - Force, Elk - Rect, Elk - Layered, Elk - Stressed to align your nodes when using the Node Alignment option. +* **Help & Support**: + * Submit feedback via Featurebase. + * Access documentation. + * Access Tokens Studio Youtube channel. + * Access support and community on Slack. +* **Download** - Download your graph as a .json file. +* **Upload** - Upload any graph file. + +
+ +### **Right Panel** + +Used to manage inputs and outputs. + +#### **Inputs Section** + +* Displays all inputs for the selected node (left side of the node). +* Allows to modify values if not connected to another node. + +
+ +#### **Outputs Section** + +* Displays all outputs for the selected node (right side of the node). +* Visualizes computed values from the node. + +
+ +### Graph set options + +* **Save** - Allows you to save the progress of your graph. +* **Table view** - Allows you to view the design tokens created by the graph in a table view. The design tokens will not be editable in this view as they are generated by the graph. +* **Graph view** - The main view for editing the graph. + +
+ +### **Customising the layout** + +The Graph engine UI allows you to rearrange the layout by dragging all the panels. You can either have them floating on the canvas or dock them using the arrow options that appear while dragging the panel. \ +To drag and reposition panels use the icon on the top right corner of each panel next to the close icon.\ +All the panels can be closed if not needed and can be accessed from the [Top Action Bar > Layout Customisation.](editor.md#top-action-bar) + +
diff --git a/graph-engine/introduction.md b/graph-engine/introduction.md new file mode 100644 index 0000000..018a566 --- /dev/null +++ b/graph-engine/introduction.md @@ -0,0 +1,17 @@ +# Introduction + +
+ +## What’s a Node Editor? + +A node editor is a visual tool where you build workflows by connecting **nodes**—little blocks of functionality—together with **edges** (lines). Think of it like a flowchart for design logic: each node does something specific (e.g., converts a color to a hex string), and the edges show how data flows between them. In Studio's Graph Engine, this editor lets you create, tweak, and scale design systems without writing code manually. It’s built to be intuitive, combining the visual ease of tools like Figma with the procedural power of something like Blender’s node system. Whether you’re a designer organizing tokens or a design engineer generating outputs for developers, it’s your playground for visual logic. + +## What Can You Do With It? + +The Graph Engine transforms how you manage design systems by letting you define logic visually. Here’s what you can achieve: + +* **Generate Design Tokens Dynamically**: Create tokens (e.g., colors, sizes) based on rules, not static lists—like generating a full color scale from a single base color using math and color theory. +* **Automate Multi-Brand Systems**: Switch between brand themes (e.g., Light vs. Dark) instantly by adjusting inputs, perfect for companies managing multiple products. +* **Scale Complex Designs**: Use subgraphs to reuse workflows (e.g., a button styling recipe) across projects, or map arrays to process lists (e.g., converting 10 colors to hex codes at once). +* **Bridge Design and Code**: Output agnostic JSON tokens or even CSS variables that developers can use directly, reducing handoff friction. +* **Experiment Freely**: Test ideas—like creating a type scale with a multiplier—without breaking your system, thanks to non-destructive editing. **Example**: Imagine you need a color palette for a brand. Start with a base color (#FF5733), use nodes to adjust its lightness for variants (e.g., +10%, -20%), and output a set of hex codes—all in real-time, synced to Figma variables if you want diff --git a/graph-engine/nodes.md b/graph-engine/nodes.md new file mode 100644 index 0000000..812c539 --- /dev/null +++ b/graph-engine/nodes.md @@ -0,0 +1,66 @@ +# Nodes + +### Introduction + +Every node in the Graph Engine follows a consistent design, making them predictable and easy to use. They’re the building blocks of your graph, each handling a specific task—like adding numbers or merging objects—and passing data along to the next step. + +### Parts of a Node + +* **Title**: Tells you what the node does (e.g., "Add" or "Color Scale Generator"), shown at the top. +* **Inputs**: Ports on the left where data comes in. You can: + * Enter values manually in the **Input Panel** (e.g., type "10" or "#FF5733"). + * Connect an output from another node to feed data dynamically. +* **Outputs**: Ports on the right where results come out. These can: + * Connect to other nodes’ inputs. + * Show results in the **Output Panel** for inspection (e.g., see "30" after adding 10 + 20). +* **Inline Values (Optional)**: If turned on, displays the current value at each port (e.g., "#FF5733" next to a color output). This can be turned on from the Top Action Bar > Graph settings > Show Inline values. +* **Port Types (Optional)**: If enabled, shows the data type (e.g., "number", "color") next to each port for clarity. This can be turned on from the Top Action Bar > Graph settings > Show Inline types. + +
+ +### Types of Nodes + +**Overview** + +Nodes range from simple helpers (e.g., adding two numbers) to powerful tools (e.g., generating token sets). They’re grouped into categories to keep things organized, covering math, data manipulation, design-specific tasks, and more. + +### **Node Categories** + +* **Token Sets**: Gives access to existing static token sets in the project. +* **Design Token Nodes**: Build or tweak tokens (e.g., "Create Design Token" creates a Design Token from inputs). +* **Naming Nodes**: Generates dynamic names (e.g., "Numeric Scale" generates numeric scale with optional prefix, suffix, and multiplier). +* **Tokens Studio:** Specific to Tokens Studio (e.g., "Themes" retrieves a list of all themes and their options). +* **Figma Nodes:** Specific to Figma to allow better integration (e.g., "Scope Color" defines color variable scopes for Figma). +* **Accessibility Nodes**: Specialized nodes designed to enhance inclusivity and compliance with accessibility standards in digital products (e.g., "Color Blindness" converts provided colors to the colors as perceived by the specified color blindness type). +* **Array Nodes**: Process lists (e.g., "Array Map" applies a graph to each item in an array). +* **Color Nodes:** Manage and manipulate colors, enabling generation, blending, conversion, and validation of color values (e.g., "Scale colors" creates a scale/ramp of colors based on a given color by specifying the number of steps up and down). +* **CSS Nodes:** Generate, modify, and output CSS properties (e.g., "CSS Map" exposes all the css properties. You can link the input of any other node to the any property that is there in the css map node). +* **Curve Nodes:** (e.g., Bezier Curve creates a bezier curve from two control points) +* **Generic Nodes:** These nodes help with input/output management, debugging, data structuring, and control flow (e.g., Input allows you to provide initial values for the whole graph). +* **Gradient Nodes:** Handles the creation, manipulation, and interpolation of gradient colors (e.g., Gradient Stop creates a gradient stop). +* **Logic Nodes**: Make decisions (e.g., "If" checks conditions like "is this number > 5?"). +* **Math Nodes**: Handle calculations (e.g., "Add" sums numbers, "Multiply" scales values). +* **Preview Nodes:** Provide a visual representation of the node’s output (e.g., "Color Scale" previews a color scale). +* **Search Nodes: F**indins specific values within lists or datasets (e.g., "Linear Search" performs a linear search on an array to find the index of a target value). +* **Series Nodes:** Generates and manipulates mathematical sequences (e.g., "Geometric Series" generates a geometric series f(n)= c \* (f(n-1)) of numbers based on the base value, steps down, steps and increment). +* **String Nodes:** Handles text-based operations, enabling manipulation, formatting, and analysis of string data (e.g., "Lowercase" converts a string to lowercase). +* **Typing Nodes:** Ensures data integrity by validating, converting, and managing data types (e.g., "Pass unit" adds a unit to a value if it doesn't already have one). +* **Typography Nodes:** Handles text styling, font properties, and typographic calculations (e.g., "Base Font Size" calculate the base font size with DIN 1450. The output is a number representing the font size in pixels.) +* **Vector2 Nodes:** Deals with **2D vector operations**, enabling calculations, transformations, and manipulations of two-dimensional coordinate-based data (e.g., "Create vector2" allows you to create a vector2). + +
+ +### **Subgraph & Array Map Nodes** + +These are nodes with big-picture concepts: + +* **Subgraph Node**: + * **What It Does**: Groups multiple nodes into one reusable node, showing only the key inputs and outputs. + * **How**: Select nodes, right-click, and choose "Create Subgraph". Click on **Subgraph Explorer** to edit inside. +* **Array Map Node**: + * **What It Does**: Runs a graph on each item in an array and collects the results. + * **Example**: Input an array of colors (\["#FF5733", "#33FF57"]), use an internal graph to convert each to HSL, and output \["hsl(14, 100%, 60%)", "hsl(150, 100%, 60%)"]. + * **How**: Drag in an Array Map node, define its internal graph, and connect an array to its input. + +
+ diff --git a/graph-engine/types.md b/graph-engine/types.md new file mode 100644 index 0000000..3923495 --- /dev/null +++ b/graph-engine/types.md @@ -0,0 +1,70 @@ +# Types + +Every node port in the Graph Engine, whether it's an input or output, is **strongly typed**. This means that each port is designed to work with only one specific kind of data. + +### What does "Strongly Typed" mean? + +Think of a port like a specialized container - a `number` input can only accept numerical values (like 12, 42.5, 0.432, etc.), while a `color` port is specifically designed for color values (hex, rgba, hsl, p3, etc.). Trying to connect incompatible types, such as sending a color to a number input, won't work. + +#### Benefits of Strong Typing + +This approach keeps your graphs reliable by: + +* **Preventing common mistakes** - The Graph Engine stops you from making connections that don't make sense (like trying to perform math operations on text) +* **Ensuring consistent outputs** - Your design tokens and generated code remain predictable +* **Simplifying troubleshooting** - When something goes wrong, it's easier to find where the problem is + +## Supported Types You'll Encounter + +
NameDescriptionExample
NumberIntegers or decimals5, 3.14, 0.025
StringText strings, special characters or text with spaces."bold", "#FF5733"
ColorColor objects such as RGB, HSL etc. formats.rgb(76, 190, 66), hsl(67, 96, 65)
ArrayLists of values (contains multiple items of the same type)[10, 20, 30], ["#263724", "#ED8DF0"]
ObjectCollections of related values with names in the format of "key" : "value".{ "foreground": "#177BF7"}
BooleanTrue or False. Useful for decisions to your logic with the logic node.true, false
CurveA
TokenA design token that meets the DTCG format.
Token SetA special type for design token collections
AnyAn agnostic type value that you probably don't want to use.
+ +## How to Identify Port Types in the Graph Engine + +Ports use both colors and shapes to indicate what type of data they accept or output: + +### Color Coding + +Each type has a distinct color associated with it: + +| Color | Data Type | +| -------- | --------- | +| Blue | Number | +| Green | String | +| Red | Color | +| Orange | Boolean | +| Magenta | Curve | +| Teal | Object | +| Yellow | Array | +| Purple | Any | + +### **Shape Indicators** + +Ports also use shapes to indicate whether they handle single values or collections: + +* **Circle/Dot** (●): Accepts or outputs a single value (e.g., one color, one number) +* **Square** (■): Accepts or outputs an array/list of values (e.g., a list of colors) + +{% hint style="info" %} +Hovering over a port shows its type label (e.g., "color") if "Port Types" is enabled in settings. +{% endhint %} + +## Displaying Labels for Port Types + +You can display the labels for all ports to easily identify the type. This can be done from clicking the "Settings" icon on the Top Bar and enabling Show Inline Types. + +
+ +## Converting Types + +Mismatched types block connections, but conversion nodes fix this: + +* **Why It’s Needed**: + * Example: A "Color Generator" outputs a color object, but a "Create Design Token" needs a hex string. They won’t connect directly. +* **How to Convert**: + * **Scenario**: Convert a color to a hex string. + 1. Connect the "Create Color" output (color) to a "Color to String" node’s input. + 2. The node outputs a hex string (e.g., "#FF5733"). + 3. Plug this into the "Create Design Token" input, which now works. + * **Other Conversions**: "Stringify" (e.g., 10 → "10"). + +
diff --git a/guides/azure.md b/guides/azure.md new file mode 100644 index 0000000..24bff61 --- /dev/null +++ b/guides/azure.md @@ -0,0 +1,7 @@ +--- +hidden: true +--- + +# Azure + +TBD diff --git a/guides/integrating-with-github-actions.md b/guides/integrating-with-github-actions.md new file mode 100644 index 0000000..b09c14b --- /dev/null +++ b/guides/integrating-with-github-actions.md @@ -0,0 +1,184 @@ +--- +description: >- + Pull tokens directly from Tokens Studio into your Github Actions to compliment + your build pipeline. +--- + +# Integrating with Github Actions + +Github Actions provides tooling to create workflows for bundling assets, running tests, building for production and more. Tokens Studio fits in well with that process, allowing teams to pull the latest tokens directly from Tokens Studio into your projects. + +#### Prerequisites + +* [api-keys.md](../settings/api-keys.md "mention") +* [tokens-studio-cli.md](../connect-studio-to-code/tokens-studio-cli.md "mention") +* Working knowledge of Github and Git + +## Example Workflow + +Let's walk through a basic example of setting up a Github Action that will pull the latest updates from Tokens Studio using the [Tokens Studio CLI](../connect-studio-to-code/tokens-studio-cli.md). + +{% stepper %} +{% step %} +### Get your API Key + +Create a new API Key in Tokens Studio. You can follow our guide to creating one - [#creating-a-new-api-key](../settings/api-keys.md#creating-a-new-api-key "mention"). Be sure to keep it safe and close by as we will need it. +{% endstep %} + +{% step %} +### Save the API Key to your Github repo + +
+ +Inside the Github repository that contains your code, click the **Settings tab** in the top bar. + +Next, expand the **Secrets and variables** option in the sidebar to view **Actions** + +{% hint style="warning" %} +**Don't see these options?** + +You may need to get permissions adjusted from the Github admin within your organization. +{% endhint %} + +Click the **New repository secret** button to open the form to add your token. + +
+ +In the form, add a **name** of `TOKENS_STUDIO_API_KEY` and paste the API token you created in the **Secret** field. Click **Add secret** to save it. +{% endstep %} + +{% step %} +### Install the Tokens Studio CLI to your project + +In your project, install the Tokens Studio SDK package from NPM using your package manager of choice. + +```bash +npm install @tokens-studio/sdk +``` + +You can see the full instructions here - [#installing-the-cli](../connect-studio-to-code/tokens-studio-cli.md#installing-the-cli "mention") +{% endstep %} + +{% step %} +### Set up your project with Tokens Studio + +Once installed, you will need to configure the SDK to work with your account. + +In your terminal run `npx tokensstudio setup --host graphql.prod.tokens.studio` + +You will be asked to enter the API Token you created above and will have the ability to configure the organization you'd like to pull from. Once completed, there will be a `.tokensstudio.json` file created. Be sure to include this when you push your updates to Github. + +You can find full instructions on how to set this up at [#using-the-cli](../connect-studio-to-code/tokens-studio-cli.md#using-the-cli "mention"). +{% endstep %} + +{% step %} +### Create an Node script to run the SDK + +Since we're going to be asking Github's tooling to run scripts on our behalf, we need to set up a script in our package.json that Github can run. + +This may be unique depending on your project needs, but for this example, we'll just pull tokens into our project. + +In your package.json file, add a task to your `scripts` object named `tokens:sync` + +``` +{ + ..., + "scripts": { + ..., + "tokens:sync": "npx tokensstudio pull --host graphql.prod.tokens.studio" + }, + ... +} +``` + +{% hint style="info" %} +You can name the task whatever you'd like of course, we're just fans of declarative naming. +{% endhint %} +{% endstep %} + +{% step %} +### Set up your Github action + +At the root of your project, create a folder named `.github` with a subfolder named `workflows` + +Create a file named `pull-tokens.yml` and include the contents below in it. + +You'll notice that step 4 asks for a TOKENS\_STUDIO\_API\_KEY. This will use the key we saved in Github earlier. + +{% hint style="info" %} +This is an example of course. You may need to use different versions of Node or change the process as needed. You can read more about Github Actions in their documentation - [https://docs.github.com/en/actions](https://docs.github.com/en/actions) +{% endhint %} + +``` +# .github/workflows/pull-tokens.yml + +name: "Sync & Build Design Tokens" + +on: + workflow_dispatch: + +jobs: + sync-and-build-tokens: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + + steps: + # 1. Check out the repository code + - name: Checkout repository + uses: actions/checkout@v4 + + # 2. Set up Node.js + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + cache: "npm" + + # 3. Install project dependencies + - name: Install dependencies + run: npm install + + # 4. Run the complete token sync process + - name: Sync, Build, and Format Tokens + run: npm run tokens:pull + env: + TOKENS_STUDIO_API_KEY: ${{ secrets.TOKENS_STUDIO_API_KEY }} + + # 5. Commit files and create PR + - name: Commit and Create PR + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + if ! git diff --quiet; then + echo "Changes detected. Creating a new branch and PR." + + BRANCH_NAME="tokens/update-$(date +%s)" + git checkout -b $BRANCH_NAME + + git add . + git commit -m "chore(tokens): Sync and build design tokens" + git push -u origin $BRANCH_NAME + + gh pr create \ + --title "🎨 Sync & Build Design Tokens" \ + --body "This PR was automatically generated and contains the latest token updates from Tokens Studio." \ + --base ${{ github.ref_name }} \ + --head $BRANCH_NAME + else + echo "No changes to commit." + fi +``` +{% endstep %} + +{% step %} +### Commit and Push your changes to Github + +Once everything is completed locally, be sure to add these files to git, commit and push. +{% endstep %} +{% endstepper %} + diff --git a/guides/integrating-with-nextjs.md b/guides/integrating-with-nextjs.md new file mode 100644 index 0000000..1e10a25 --- /dev/null +++ b/guides/integrating-with-nextjs.md @@ -0,0 +1,6 @@ +--- +hidden: true +--- + +# Integrating with NextJS + diff --git a/guides/migrating-from-tokens-studio-for-figma-plugin-to-the-tokens-studio-platform.md b/guides/migrating-from-tokens-studio-for-figma-plugin-to-the-tokens-studio-platform.md new file mode 100644 index 0000000..3c9d31c --- /dev/null +++ b/guides/migrating-from-tokens-studio-for-figma-plugin-to-the-tokens-studio-platform.md @@ -0,0 +1,89 @@ +--- +description: >- + How to move your tokens from the Tokens Studio for Figma Plugin to the Tokens + Studio platform +--- + +# Migrating from Tokens Studio for Figma Plugin to the Tokens Studio Platform + +## Prerequisites + +* A studio account with an active subscription + +## Migration Steps + +{% stepper %} +{% step %} +### Export your tokens from Tokens Studio for Figma + +Within the Tokens Studio for Figma Plugin, click on the "Tools" icon button on the bottom left of the plugin. Within the menu, select "Export to file/folder". + +![](<../.gitbook/assets/2025-08-14 at 14.35.39 - Screengrab@2x.png>) +{% endstep %} + +{% step %} +### Choose "Multiple Files" for the export + +You'll be given an option to export your tokens to a single file, or multiple files. To maintain a similar structure within Studio, a multiple file export will ensure that your token sets, themes and configuration are maintained. + +When exported, you will be asked to save a Tokens.zip to your system. + +
+{% endstep %} + +{% step %} +### Create a new project with Studio + +In your browser, navigate to [https://app.prod.tokens.studio](https://app.prod.tokens.studio/org). Once logged in, create a new project from the dashboard of your organization to upload the tokens to. + +
+{% endstep %} + +{% step %} +### Open the upload tokens modal + +Once your project has been created, you will be navigated to the dashboard screen of the project. There is a banner on the top of this screen with an button to "Upload tokens". + +
+ +Once clicked, this will open the modal and allow you to upload the zip file from the previous step. + +
+{% endstep %} + +{% step %} +### Add the exported zip file to upload + +Drag the zip file from your system, or click the modal area to open a file picker. + +Add the zip file and the upload will begin. + +
+ + +{% endstep %} + +{% step %} +### Verify the tokens were uploaded correctly + +Once the upload is completed, you can close the modal and see your token sets created with the themes present in the theme switcher below. + +
+{% endstep %} +{% endstepper %} + +## Next steps + +Now that you've got your tokens migrated from Figma to Studio, you have a single source of truth that you can use. That means that you can now pull tokens from Studio into your Figma using our companion plugin, or integrate the CLI into your pipelines. + +{% content-ref url="../connect-studio-to-figma/using-companion-by-tokens-studio.md" %} +[using-companion-by-tokens-studio.md](../connect-studio-to-figma/using-companion-by-tokens-studio.md) +{% endcontent-ref %} + +{% content-ref url="../connect-studio-to-code/tokens-studio-cli.md" %} +[tokens-studio-cli.md](../connect-studio-to-code/tokens-studio-cli.md) +{% endcontent-ref %} + +{% content-ref url="integrating-with-github-actions.md" %} +[integrating-with-github-actions.md](integrating-with-github-actions.md) +{% endcontent-ref %} diff --git a/guides/react-native-and-expo.md b/guides/react-native-and-expo.md new file mode 100644 index 0000000..1e3e16f --- /dev/null +++ b/guides/react-native-and-expo.md @@ -0,0 +1,7 @@ +--- +hidden: true +--- + +# React Native & Expo + +TBD diff --git a/migrate-to-studio.md b/migrate-to-studio.md new file mode 100644 index 0000000..76a028b --- /dev/null +++ b/migrate-to-studio.md @@ -0,0 +1,6 @@ +--- +hidden: true +--- + +# Migrate to Studio + diff --git a/node-examples/README.md b/node-examples/README.md new file mode 100644 index 0000000..6db60a6 --- /dev/null +++ b/node-examples/README.md @@ -0,0 +1,6 @@ +--- +hidden: true +--- + +# Node Examples + diff --git a/node-examples/accessibility/README.md b/node-examples/accessibility/README.md new file mode 100644 index 0000000..5700c1c --- /dev/null +++ b/node-examples/accessibility/README.md @@ -0,0 +1,2 @@ +# Accessibility + diff --git a/node-examples/math/README.md b/node-examples/math/README.md new file mode 100644 index 0000000..f2a38dc --- /dev/null +++ b/node-examples/math/README.md @@ -0,0 +1,2 @@ +# Math + diff --git a/node-examples/math/absolute.md b/node-examples/math/absolute.md new file mode 100644 index 0000000..1b28238 --- /dev/null +++ b/node-examples/math/absolute.md @@ -0,0 +1,25 @@ +# Absolute + +The **Absolute node** is a **Math node**. You can find it under the **Math Nodes** category. You can also search for the node using the top search bar in the **Nodes panel** or use the keyboard shortcut **Shift + K**. + +#### Using the Absolute Node + +The **Absolute node** takes a single number as input and returns its **absolute value**, which means it removes any negative sign and outputs a non-negative number. + +1. **Drag the Absolute node** into the canvas. +2. **Check the input panel** – the node takes **one number** as input. +3. **Check the output panel** – it outputs a **non-negative number**, which is the absolute value of the input. +4. **Enable inline types and values** to see the data flowing through the node. + +
+ +#### Example Usage + +1. Drag an **Absolute node** onto the canvas. +2. Drag a **Constant node** onto the canvas. +3. In the **Constant node's** input panel, set the type to **Number** and enter a negative value, e.g., **-100**. +4. Connect the **output** of the Constant node to the input of the Absolute node. +5. Check the **output panel** of the Absolute node – it should display 100 (the absolute value of -100). +6. Drag a **Preview > Number node** and connect the input to the output of the **Absolute node**, it will display 100. + +
diff --git a/node-examples/math/add-variadic.md b/node-examples/math/add-variadic.md new file mode 100644 index 0000000..f6e74df --- /dev/null +++ b/node-examples/math/add-variadic.md @@ -0,0 +1,33 @@ +# Add (Variadic) + +The **Add (Variadic) node** is a **Math node** that allows you to sum multiple numbers dynamically. You can find it under the **Math Nodes** category. You can also search for the node using the top search bar in the **Nodes panel** or use the keyboard shortcut **Shift + K**. + +### Using the Add (Variadic) Node + +Unlike the standard **Add node**, which only accepts two inputs, the **Add (Variadic) node** supports multiple inputs, making it useful for summing multiple values in a single operation. + +1. **Drag the Add (Variadic) node** into the canvas. +2. **Check the input panel** – it allows you to add multiple number inputs dynamically. +3. **Check the output panel** – it outputs a **single number**, which is the sum of all input values. +4. **Enable inline types and values** to visualize the values passing through the node. + +
+ +### Example Usage + +1. Drag an **Add (Variadic) node** onto the canvas. +2. Drag four **Constant nodes** onto the canvas. +3. In each **Constant node’s** input panel, set the type to **Number** and enter values, e.g., 3, **5, 7, and 9**. +4. Connect the **outputs** of all four Constant nodes to the inputs of the **Add (Variadic) node**. +5. The **output panel** of the Add (Variadic) node should display **24** (3 + 5 + 7 + 9). + +
+ +### Adding More Inputs + +* By default, the node has a number array as the input port. +* Connecting an edge to the input port adds additional input slots as needed. +* The sum updates automatically as more inputs are added. + +
+ diff --git a/node-examples/math/add.md b/node-examples/math/add.md new file mode 100644 index 0000000..3ae79f3 --- /dev/null +++ b/node-examples/math/add.md @@ -0,0 +1,29 @@ +# Add + +The **Add node** is a **Math node**. You can find it under the **Math Nodes** category. You can also search for the node using the top search bar in the **Nodes panel** or use the keyboard shortcut **Shift + K**. + +### Using the Add Node + +To see the **Add node** in action: + +1. **Drag the Add node** into the canvas. +2. **Check the input panel** – the node takes **two numbers** as input. +3. **Check the output panel** – it outputs a **number**, which is the sum of the two input values. +4. **Enable inline types and values** to see what types the ports accept and the values passing through them. + +
+ +### Example Usage + +1. Drag an **Add node** onto the canvas. +2. Drag a **Constant node** onto the canvas. +3. In the **Constant node's** input panel, set the type to **Number** and enter a value, e.g., **10**. +4. Connect the **output** of the Constant node to one of the inputs of the Add node. +5. Drag another **Constant node** onto the canvas. +6. Set its type to **Number** and enter another value, e.g., **20**. +7. Connect the **output** of the second Constant node to the second input of the Add node. +8. Check the **output panel** of the Add node – it should display **30** (10 + 20). +9. Add a **Preview > Number node**, connect to the output of the **Add node** and see the value. + +
+ diff --git a/node-examples/math/ceil.md b/node-examples/math/ceil.md new file mode 100644 index 0000000..ac24209 --- /dev/null +++ b/node-examples/math/ceil.md @@ -0,0 +1,24 @@ +# Ceil + +The **Ceil node** is a **Math node** that rounds a number **up** to the nearest whole number. You can find it under the **Math Nodes** category. You can also search for the node using the top search bar in the **Nodes panel** or use the keyboard shortcut **Shift + K**. + +### Using the Ceil Node + +The **Ceil node** takes a single number as input and returns the smallest integer that is greater than or equal to the input value. + +1. **Drag the Ceil node** into the canvas. +2. **Check the input panel** – it accepts a **single number**. +3. **Check the output panel** – it returns the **rounded-up whole number**. +4. **Enable inline types and values** to visualize the values passing through the node. + +
+ +### Example Usage + +1. Drag a **Ceil node** onto the canvas. +2. Drag a **Constant node** onto the canvas. +3. In the **Constant node’s** input panel, set the type to **Number** and enter a decimal value, e.g., **12.65764**. +4. Connect the **output** of the Constant node to the input of the Ceil node. +5. The **output panel** of the Ceil node should display 13 (since 12.65764 is rounded up to 13). + +
diff --git a/node-examples/math/clamp.md b/node-examples/math/clamp.md new file mode 100644 index 0000000..cba8967 --- /dev/null +++ b/node-examples/math/clamp.md @@ -0,0 +1,41 @@ +# Clamp + +The **Clamp node** is a **Math node** that restricts a number within a specified range. You can find it under the **Math Nodes** category. You can also search for the node using the top search bar in the **Nodes panel** or use the keyboard shortcut **Shift + K**. + +### Using the Clamp Node + +The **Clamp node** takes three inputs: + +* **Value** – the number to be clamped. +* **Min** – the lower bound of the range. +* **Max** – the upper bound of the range. + +It outputs the input value if it falls within the range. If the value is lower than **Min**, it returns **Min**. If the value is higher than **Max**, it returns **Max**. + +1. **Drag the Clamp node** into the canvas. +2. **Check the input panel** – it requires a **value**, a **min** limit, and a **max** limit. +3. **Check the output panel** – it returns the clamped value. +4. **Enable inline types and values** to visualize the data flow. + +
+ +### Example Usage + +1. Drag a **Clamp node** onto the canvas. +2. Drag three **Constant nodes** onto the canvas. +3. In the first **Constant node**, set the type to **Number** and enter a test value, e.g., **12**. +4. In the second **Constant node**, set the type to **Number** and enter the **Min** value, e.g., **5**. +5. In the third **Constant node**, set the type to **Number** and enter the **Max** value, e.g., **10**. +6. Connect the outputs of the three Constant nodes to the corresponding inputs of the **Clamp node**. +7. The **output panel** of the Clamp node should display **10**, since 12 exceeds the maximum limit of 10. + +
+ +8. In the first **Constant node** change the value from **12** to **8**. +9. The output panel of the **Clamp node** should display **8**, since **8** falls in between the limits. + +
+ +### When to Use + +The **Clamp node** is useful when working with dynamic values where you need to ensure they stay within a valid range. diff --git a/node-examples/math/closest-number.md b/node-examples/math/closest-number.md new file mode 100644 index 0000000..fe311f3 --- /dev/null +++ b/node-examples/math/closest-number.md @@ -0,0 +1,39 @@ +# Closest Number + +The **Closest Number node** is a **Math node** that finds the closest value in an array of numbers to a given target number. You can find it under the **Math Nodes** category. You can also search for the node using the top search bar in the **Nodes panel** or use the keyboard shortcut **Shift + K**. + +### Inputs + +* **Array of Numbers** – A list of numbers to compare against. +* **Target Number** – The number for which the closest match is to be found. + +### Outputs + +* **Index** – The position of the closest number in the array. +* **Value** – The closest number from the array. +* **Difference** – The difference between the target number and the closest value. + +
+ +### Using the Closest Number Node + +1. **Drag the Closest Number node** onto the canvas. +2. **Check the input panel** – it requires an **array of numbers** and a **target number**. +3. **Check the output panel** – it provides the **index**, **closest value**, and **difference**. +4. **Enable inline types and values** to see the data passing through the node. + +### Example Usage + +1. Drag a **Closest Number node** onto the canvas. +2. Drag an **Arithmetic Series node** onto the canvas to generate an array of numbers. +3. Set the **base value**, **step down, step up, increment and precision** in the Arithmetic Series node (e.g., start at **5**, step down 0, step up 5, increment by 5, precision 0 will generate **10 numbers** → output: `[5, 10, 15, 20, 25, 30, 35]`). +4. Connect the **output** of the Arithmetic Series node to the **Array of Numbers** input of the Closest Number node. +5. Drag a **Constant node**, set its type to **Number**, and enter a target number, e.g., **17**. +6. Connect the **output** of the Constant node to the **Target Number** input of the Closest Number node. +7. The **output panel** of the Closest Number node should display: + * **Index:** `2` (since `15` is at index 2 in the array) + * **Value:** `15` (the closest number to 17) + * **Difference:** `2` (difference between 17 and 15) + +
+ diff --git a/node-examples/math/cosine.md b/node-examples/math/cosine.md new file mode 100644 index 0000000..9ae7a62 --- /dev/null +++ b/node-examples/math/cosine.md @@ -0,0 +1,36 @@ +# Cosine + +The **Cosine node** is a **Math node** that calculates the cosine of an input angle. You can find it under the **Math Nodes** category. You can also search for the node using the top search bar in the **Nodes panel** or use the keyboard shortcut **Shift + K**. + +### Inputs + +* **Angle (Number)** – The angle in **radians** for which to compute the cosine. + +### Output + +* **Cosine Value (Number)** – The result of the cosine function, ranging from `-1` to `1`. + +
+ +### Using the Cosine Node + +1. **Drag the Cosine node** onto the canvas. +2. **Check the input panel** – it requires an **angle** in radians. +3. **Check the output panel** – it returns the **cosine of the input angle**. +4. **Enable inline types and values** to visualize the data passing through the node. + +### Example Usage + +1. Drag a **Cosine node** onto the canvas. +2. Drag a **Constant node** onto the canvas. +3. In the **Constant node’s** input panel, set the type to **Number** and enter a value in radians, e.g., **3.14** (π radians). +4. Connect the **output** of the Constant node to the **Angle** input of the Cosine node. +5. The **output panel** of the Cosine node should display **-1**, since `cos(π) = -1`. + +
+ +### Converting Degrees to Radians + +If you have an angle in degrees, use a **Multiply node** to convert it to radians: + +* Multiply the degree value by `π / 180` to convert it to radians before feeding it into the **Cosine node**. diff --git a/node-examples/math/count.md b/node-examples/math/count.md new file mode 100644 index 0000000..e0de4d8 --- /dev/null +++ b/node-examples/math/count.md @@ -0,0 +1,31 @@ +# Count + +The **Count node** is a node that counts the number of elements in an array. You can find it under the **Utility Nodes** category. You can also search for the node using the top search bar in the **Nodes panel** or use the keyboard shortcut **Shift + K**. + +#### Inputs + +* **Array (Any Type)** – An array of any type (numbers, strings, objects, etc.). + +#### Output + +* **Count (Number)** – The total number of elements in the array. + +#### Using the Count Node + +1. **Drag the Count node** onto the canvas. +2. **Check the input panel** – it requires an **array** as input. +3. **Check the output panel** – it returns the **number of elements in the array**. +4. **Enable inline types and values** to visualize the data passing through the node. + +#### Example Usage + +1. Drag a **Count node** onto the canvas. +2. Drag an **Array node** onto the canvas and populate it with values, e.g., `[5, 10, 15, 20]`. +3. Connect the **output** of the Array node to the **input** of the Count node. +4. The **output panel** of the Count node should display **4**, since there are four elements in the array. + + + +{% hint style="info" %} +Use the count node to count the number of items in a list. +{% endhint %} diff --git a/node-examples/math/multiply.md b/node-examples/math/multiply.md new file mode 100644 index 0000000..a6f6b39 --- /dev/null +++ b/node-examples/math/multiply.md @@ -0,0 +1,27 @@ +# Multiply + +The Multiply node is a Math node. You can find it under the **Math Nodes** category. You can also search for the node using the top search bar in the Nodes panel or use the keyboard shortcut **Shift + K**. + +### Using the Multiply Node + +To see the Multiply node in action: + +1. **Add the Multiply node** to the canvas by dragging it from the Nodes panel. +2. **Check the input panel** – the node takes **two numbers** as input. +3. **Check the output panel** – it outputs a **number**, which is the result of multiplying the two input values. +4. **Enable inline types and values** to better understand the data flow. + +
+ +### Example Usage + +1. Drag a **Multiply node** onto the canvas. +2. Drag a **Constant node** onto the canvas. +3. In the **Constant node's** input panel, set the type to **Number** and enter a value, e.g., **5**. +4. Connect the **output** of the Constant node to one of the inputs of the Multiply node. +5. Drag another **Constant node** onto the canvas. +6. Set its type to **Number** and enter another value, e.g., **3**. +7. Connect the **output** of the second Constant node to the second input of the Multiply node. +8. Check the **output panel** of the Multiply node – it should display **15** (5 × 3). + +
diff --git a/platform/activity-log.md b/platform/activity-log.md new file mode 100644 index 0000000..ebf42b6 --- /dev/null +++ b/platform/activity-log.md @@ -0,0 +1,19 @@ +--- +description: Understand the actions that have been taken on your organization account. +--- + +# Activity Log + +The activity log allows users to see the events and actions completed within an organization. + +This may be useful for teams who have legal and compliance requirements around security, or teams that want to manage records of access and settings. + +
+ +## Accessing the Activity Log + +You can access the activity log by clicking on the **Legal & Compliance** link in the main sidebar. + +Once within, you can select the **Compliance Log** tab. + +In the Compliance Log tab, you'll see a list of events that detail the actions users have taken in your organization. Some examples include creating subscription updates, user role management and more. diff --git a/platform/configuration.md b/platform/configuration.md new file mode 100644 index 0000000..9a2a3e8 --- /dev/null +++ b/platform/configuration.md @@ -0,0 +1,117 @@ +--- +description: >- + The Configuration Module in Studio allows you to generate one or more output + files for your tokens—leveraging Style Dictionary under the hood. +--- + +# Configuration + +
+ +By creating multiple configurations, you can target different platforms (Android, Web, iOS, etc.) and formats (CSS, XML, JSON). Each configuration can include one or more themes, apply custom transforms, and expand complex tokens. This page walks through how to set up, preview, and manage these configurations. + +### Watch the video walkthrough + +{% embed url="https://www.youtube.com/watch?v=b6fwh-KUTpY" %} + +## Overview + +1. Configurations List (Left Pane) +2. You can create and manage multiple configurations. For example, you might have one configuration for Android (XML output), another for Web (CSS output), etc.\ + + +
+3. Configuration Details (Center Pane) + * Name: The name of your configuration (e.g., “Android”, “CSS”, “Web-Mobile”). + * Included Themes: Select which theme groups (e.g., “Color Mode”, “Breakpoint”) should be processed in this configuration. Studio will generate separate output files for each theme permutation if you use the `{theme}` placeholder in your destination paths.\ + + +
+ * Configuration (Visual or Code): Switch between a user-friendly UI or a code editor. In code view, you can add [Style Dictionary](https://amzn.github.io/style-dictionary/) transforms, custom functions, and advanced filtering.\ + + +
+ * Files & Output: Define multiple files within a single configuration—each with its own output path, transforms, and format.\ + + +
+4. Preview & Output (Right Pane) + * Preview Theme Permutations: Toggle between each theme combination (e.g., “light” and “dark” in your CSS config) to preview the generated file. + * Copy or Download: Quickly copy the generated code or download all output files. + * Code Preview: A read-only preview of the final file (e.g., `.css`, `.xml`, etc.).\ + + +
+ +### Creating or Editing a Configuration + +1. Add a New Configuration + * Click Add configuration in the left pane. + * Give it a Name. + * Pick themes from the list of theme groups you wish to include. Each chosen group can create multiple permutations (e.g., light/dark, web/mobile).\ + + +
+2. Visual Editor vs. Code View + +#### Visual Editor: + +* Add an Output File (e.g., `css {theme}.css` or `{theme}.xml`). +* Choose one or more Transform Groups or single transforms (e.g., `name/pascal`, `tokens-studio`). +* Pick the Format (e.g., `css/variables`, `android/resources`). +* Specify the build path (folder where files will be generated). +* Optionally add a prefix to your token names.\ + + +
+ +#### Code View: + +* Exposes the underlying Style Dictionary configuration JSON. +* You can write custom transforms or custom filter functions if needed. +* Refer to the Style Dictionary documentation for examples of advanced usage.\ + + +
+ +### Expanding Complex Tokens + +* Under Expand tokens, select which “composition” tokens (typography, border, shadow, etc.) should be decomposed into separate properties. +* For example, a typography token could be expanded into separate font size, line height, and font family properties.\ + + +
+ +### Saving + +* Click Save changes to persist your configuration. The configuration can now be used in: +* Releases: Generate final output from the Releases page. +* CLI: Pull or generate tokens in your build pipeline (CLI Documentation). + +### Previewing and Downloading Output + +In the right pane, you’ll see a preview of each generated file: + +* Theme Permutations: Use the dropdown to switch among the different permutations created by your selected themes (e.g., `web_light`, `web_dark`, `mobile_light`, `mobile_dark`). +* File Content: Shows the actual code or XML/JSON structure that Style Dictionary produces. +* Copy & Download: Quickly copy the content or download all files at once.\ + + +
+ +### Deleting a Configuration + +If you no longer need a particular configuration: + +1. Select the configuration in the left pane. +2. Scroll to the bottom of the center pane and click Delete config. +3. Confirm the deletion. + +### Next Steps + +* Run your configuration in the Releases module to package and version your outputs. +* Use our CLI or SDKs to automate token export in your build pipeline. +* Explore Style Dictionary further for custom transforms, attribute definitions, and filter logic. + +With the Configuration Module, you can seamlessly produce multiple platform-specific outputs from the same token sets—fully integrated with your themes and custom logic + diff --git a/platform/plans-and-billing.md b/platform/plans-and-billing.md new file mode 100644 index 0000000..1c33ab3 --- /dev/null +++ b/platform/plans-and-billing.md @@ -0,0 +1,6 @@ +--- +hidden: true +--- + +# Plans and Billing + diff --git a/platform/releases/README.md b/platform/releases/README.md new file mode 100644 index 0000000..e040b0e --- /dev/null +++ b/platform/releases/README.md @@ -0,0 +1,62 @@ +# Releases + +The **Releases** feature in Tokens Studio allows you to create structured versions of your design tokens, enabling version control similar to Git workflows. With this feature, you can manage changes, track updates, and export token configurations for seamless integration with your projects. + +### Creating a Release + +Before you create a release, ensure that: + +* Your design tokens are set up. +* Your themes are set up. +* Your export configurations (e.g., web, mobile, etc.) are defined. + +To create a release: + +1. Navigate to the **Releases** module in the left panel. +2. You will see a list of previously created releases. +3. Click **Create New Release**. + +
+ +### Defining a Release Version + +When creating a new release, you can select a versioning type: + +* **Patch Version** – For minor fixes or adjustments. +* **Minor Version** – For small feature updates. +* **Major Version** – For significant changes or breaking updates. +* **Canary Version** – For testing purposes before full deployment. + +
+ +Additionally, you can: + +* Add **Release Notes** to document changes. +* Choose to **Export Style Dictionary Configurations**, which include all predefined configurations for various platforms. + +### Publishing a Release + +1. Review and select the desired configuration. +2. Click **Publish Release**. +3. The newly created release will now be visible in the Releases list. + +### Reviewing and Downloading Releases + +Once a release is published: + +* Click on the release to view details, including: + * Release notes + * Date of publication + * Publisher details + * **Artifacts** (exportable files) + +The release artifacts include: + +* **Tokens (.json)** – A downloadable ZIP file containing all design tokens. +* **Style Dictionary Configuration** – A structured JSON file that defines token relationships and export settings. + +
+ +For more details, explore [**Configuration**](../configuration.md) and [**Tokens**](../tokens/).\ +\ +&#xNAN;_This is the first iteration of the Releases module. Help shape its future by sharing your feedback on the roadmap_ [_here_](https://studio.featurebase.app/p/releases)_._ diff --git a/platform/releases/integrate-release-to.md b/platform/releases/integrate-release-to.md new file mode 100644 index 0000000..00ce4a0 --- /dev/null +++ b/platform/releases/integrate-release-to.md @@ -0,0 +1,6 @@ +--- +hidden: true +--- + +# Integrate Release to + diff --git a/platform/support.md b/platform/support.md new file mode 100644 index 0000000..836804f --- /dev/null +++ b/platform/support.md @@ -0,0 +1,6 @@ +--- +hidden: true +--- + +# Support + diff --git a/platform/themes/README.md b/platform/themes/README.md new file mode 100644 index 0000000..25b70b4 --- /dev/null +++ b/platform/themes/README.md @@ -0,0 +1,89 @@ +# Themes + +## Overview + +The **Themes Module** in Studio allows you to configure and manage T**heme groups** and T**heme options**, which directly impact the [**Tokens Module**](../tokens/) and [**Configuration Module**](../configuration.md). This ensures a structured approach to managing design variations such as **light mode, dark mode**, or brand-specific themes. + +
+ +## Accessing the Themes Module + +1. **Navigate to Themes Module:** + * From the **left panel**, click on **Themes** to enter the module. +2. **Understanding the Layout:** + + * The **left panel** displays a list of existing **theme groups** and their corresponding **theme options**.\ + + + + +
+ + + + * Each theme option shows: + * **Number of token sets configured** + * **Number of variables connected to the option**\ + + +
+ +## Creating and Managing Theme Groups + +### **Create a New Theme Group** + +* Click on **Create Group**. +* Enter a **name** for the theme group. +* Click **Create** to save. + + + +
+ + + +### **Adding Theme Options** + +* Select a **theme group**. +* Click **Add Option** to create a new theme option. +* Save the changes.\ + + +
+ +## Configuring Token Sets for Theme Options + +1. **Select a Theme Option** from the **left panel**. +2. You will see all available **token sets**. +3. Assign token sets using one of the following states: + * **Disabled:** The token set is not included in the theme option. + * **Enabled:** All tokens in the set are included. + * **Source:** This is primarily for **Figma Variables**, ensuring references between collections remain intact. + +
+ +### How Themes Reflect in the Tokens Module + +* Once you set up **theme groups** and **theme options**, they appear in the **Tokens Module**. +* Located at the **bottom left navigation**, you can see: + * **Theme Groups** (e.g., Brand, Theme) + * **Theme Options** (e.g., Light, Dark) + +
+ +## Themes in the Configuration Page + +* Theme groups are used in the **Configuration Page** to ensure **token resolution** functions correctly across themes.s +* When Tokens Studio is **linked to the** [**Companion plugin**](../../../connect-studio-to-figma/using-companion-by-tokens-studio.md) **or** [**Tokens Studio for Figma**](../../../connect-studio-to-figma/using-tokens-studio-for-figma.md), theme groups translates as **Figma Variable collections**. +* Theme **options** translate as **Modes** in **Figma Collections**. + +### How Themes Reflect as Figma Variables + +* Once you connect Studio to Figma via [**Tokens Studio for Figma plugin**](../../../connect-studio-to-figma/using-tokens-studio-for-figma.md) or [**Companion by Tokens Studio**](../../../connect-studio-to-figma/using-companion-by-tokens-studio.md)**,** you can create Figma variables using your design tokens. +* Theme groups are created as Collections in Figma variables (e.g., Brand, Theme). +* Theme options are created as Modes inside the variable Collection (e.g., Light, Dark).\ + + +
+ +
diff --git a/platform/themes/theme-groups-and-theme-options.md b/platform/themes/theme-groups-and-theme-options.md new file mode 100644 index 0000000..076ec16 --- /dev/null +++ b/platform/themes/theme-groups-and-theme-options.md @@ -0,0 +1,166 @@ +# Theme Groups and Theme Options + +Studio's theming system lets you create and manage multiple design variations using **Theme Groups** and [**Theme Options**](#user-content-fn-1)[^1]. This system helps you create the routing for how different styles, modes, and variations of your design tokens can be packaged with tooling. + +## What Are Themes and Why Do You Need Them? + +Imagine you're building a product that needs to support both light and dark modes. You have design tokens like `primary.background` and `content`, but these need different values depending on the mode: + +**Light Mode:** + +* `primary.background` = `#a3e635`(lime) +* `content` = `#0a0a0a` (dark gray) + +**Dark Mode:** + +* `primary.background` = `#3b82f6` (dark lime) +* `content` = `#f5f5f5` (light gray) + +Without themes, you'd need to manually manage separate token files for each variation, or create completely separate design systems. + +### **The Power of Themes** + +Using themes, you can define how to package your tokens for export. For example, with light and dark themes, you can output separate files like `light.css` and `dark.css`, with each file containing only the tokens from the enabled token sets for that theme, including all the correct references resolved. Your developers get clean, specific token files while you maintain everything from a single source of truth. + +## How Themes Work + +### **Token Set** + +A collection of design tokens. You might have separate token sets for different variations (e.g., `light`, `dark`). + +
+ + [You can read more about Token Sets here.](theme-groups-and-theme-options.md#token-set) + +### **Theme Group** + +A container that holds related design variations. Think of it as a category for organizing similar theme choices (e.g., "Color Mode"). + +
+ +### **Theme Option** + +A specific variation within a theme group. These are the actual themes you can switch between (e.g., "Light" or "Dark"). + +
+ +When you export your Light theme, you get a clean `light.css` file with all the right token values. When you export your Dark theme, you get a separate `dark.css` file with the dark values. Both files use the same token names like primary.background, but the exported values are different - and all token references are automatically resolved for you. + +#### Examples + +* **Theme Group**: "Color Mode" → **Options**: "Light", "Dark" +* **Theme Group**: "Breakpoints" → **Options**: "Mobile (320px)", "Desktop (1440px)" +* **Theme Group**: "Brand Variants" → **Options**: "Primary Brand", "Partner Brand" + +{% hint style="info" %} +Curious how these relate to Figma? + +* Each **Theme Group** will create one **Figma Collection** +* Each **Theme Option** will create one **Figma Mode** within that collection +{% endhint %} + +## **Setting up Theme Groups** + +### **Creating a Theme Group** + +
+ +1. Click the "Themes" link in the navigation sidebar +2. Click **Create New Theme Group** +3. Enter a descriptive name (e.g., "Color Mode") +4. Add your first theme option (e.g., "Light") +5. Click **Save** + +### Adding Theme Options + +
+ +1. Inside your theme group, click **Add Option** +2. Name the option clearly (e.g., "Light Mode") +3. Add a description if helpful (optional) +4. Click **Save** + +{% hint style="info" %} +**Important**: While you can create more than four theme options, only four will work in Figma if you're on the Organization plan (Enterprise plans support more). +{% endhint %} + +## Connecting Token Sets to Theme Options + +Each theme option needs to know which token set (JSON file) to pull its values from. This is how you tell the system "when Light theme is active, use the values from the colorMode/light token set". + +### How to Set Up Token Sets + +
+ +Each **Theme Option** can have different token sets assigned to it. This defines which tokens are active when the theme is selected. + +1. Select a theme option (e.g., "Light Mode") +2. Enable your main token set (e.g., "Light Token Set") +3. Enable any token sets that contain referenced tokens as sources (e.g., "Primitives Set") +4. Repeat for each theme option + +### Referencing other Token Sets + +You may have Token Sets that reference another Token Sets. For example, a light and dark token sets may reference the primitive colors or other token sets. Both themes might have `primary.background` tokens that reference `lime.600` and `lime.400` respectively, from a shared primitives set. + +When you export your light theme to `light.css`, those references to `lime.600` need to be resolved to actual color values. If the primitives set isn't included, you'll get broken references instead of working CSS. + +To achieve this, enable primitive sets as "sources" so they get included in your exports and all references resolve properly. + +#### Example Setup with Sources + +Let's say your **colorMode/Light** Token Set contains semantic tokens like `primary.background` that reference primitive tokens like `lime.400` from a **Primitives** Token Set: + +* **Light Mode** → enables "Light Token Set" + "Primitives Set" (as source) +* **Dark Mode** → enables "Dark Token Set" + "Primitives Set" (as source) + +#### **Result** + +When you export your Light theme, you get a clean `light.css` file where `button.background.primary` shows the actual hex value from `blue.400`, not a broken reference. The primitives are automatically included and resolved. + +{% hint style="info" %} +#### **Don't forget to set your sources in all theme options** + +When your theme's tokens reference tokens from other sets, those referenced sets need to be enabled as sources in all options that need them. In the example above, both Light and Dark token sets reference `lime.400`, from the Primitives Set, so the Primitives Set must be enabled as a source for both themes to work properly. +{% endhint %} + +*** + +## Using your Themes + +### Switching Between Themes + +
+ +1. Look for the **Active Theme Selector** at the bottom-left of the Tokens Module +2. Choose your desired theme combination (e.g., "Default + Light" or "Default + Dark") +3. The interface will update to show the selected theme's token values + +### Managing Existing Themes + +* **Delete a Theme Group**: Go to Themes panel → Select group → Click Delete +* **Remove a Theme Option**: Navigate to the group → Select option → Delete + +*** + +## Common Use Cases + +Theme Groups work well for organizing: + +* **Light/Dark modes** for accessibility and user preference +* **Brand variations** when supporting multiple brands or partners +* **Responsive breakpoints** for different screen sizes +* **Accessibility themes** like high contrast modes +* **Seasonal themes** or special event styling +* **A/B testing variations** for design experiments + +### Key Benefits + +* **Centralized management**: All your design variations in one place +* **Easy switching**: Test different themes without manual token changes +* **Figma integration**: Automatically syncs with Figma's variable collections +* **Scalable organization**: Add new variations without restructuring existing work + + + +[^1]: diff --git a/platform/tokens/README.md b/platform/tokens/README.md new file mode 100644 index 0000000..a4a0333 --- /dev/null +++ b/platform/tokens/README.md @@ -0,0 +1,157 @@ +--- +description: >- + This page walks you through the main elements of the interface—navigating + sets, creating or uploading tokens, and working within the tokens table. +--- + +# Tokens + +
+ +The Tokens Module in Studio is where you manage and organize your design tokens. It references other existing sections of the documentation where relevant, so you can easily connect to broader workflows (for example, [Import from Tokens Studio for Figma](../../getting-started/setting-up-studio/import-from-tokens-studio-for-figma.md) or [Themes](../themes/)). + +## Video walkthrough + +{% embed url="https://www.youtube.com/watch?v=qHpHf3LAMeE" %} + +## Page Structure + +When you open the Tokens Module in a Studio project, the layout is divided into two main parts: + +1. **Left Pane** – Displays your token sets and any organizational folders. +2. **Right Pane** – Shows detailed views for whichever folder or set you have selected—usually referred to as the Tokens Table. + +
+ +You’ll also find: + +* A top bar with search capabilities and actions like Create new set, Upload tokens, or Download tokens. +* A theme selector at the bottom of the left pane, letting you choose which theme context is active (see more in [Themes](../themes/)). + +## Navigating Sets and Folders + +On the left side, you’ll see a structure consisting of Sets and Folders: + +* **Sets**: Contain actual tokens (e.g., colors, typography, spacing). You can rename, duplicate, or delete them. +* **Folders**: Virtual groupings that help organize multiple sets. They don’t contain tokens directly but let you cluster sets logically. + +{% hint style="info" %} +#### You can rename, duplicate and delete sets and folders. When deleting a folder, you will delete all sets within. Be sure to confirm that any relationships aren't broken. +{% endhint %} + +
+ +When clicking on a folder, you'll see a list of sub-folders and sets within. You can see a timestamp stating when it was last edited timestamp and number of tokens for each set. + +## Creating a New Set + +{% stepper %} +{% step %} +Click **New Set** in the top navigation bar. + +This will open a modal window where you'll be asked to add a Name and Description (optional) + +If you'd like to create a folder for the set to appear in, you can provide the folder name followed by a forward-slash. eg. `global/color` + +{% hint style="danger" %} +Avoid using spaces in your naming as references will be difficult to resolve +{% endhint %} +{% endstep %} + +{% step %} +### Choose a static or graph based set. + +If you're tokens are simple values that don't have complex rules for generation, a Static set is the best tool. + +For complex relationships and algorithmic token generation, choose **Graph-based set.** You can learn more about creating [Graph-based sets here](../../graph-engine/introduction.md). + +You can learn more about the benefits of each option in [token-sets.md](token-sets.md "mention") +{% endstep %} +{% endstepper %} + +
+ +### Uploading Tokens + +When creating a new set, you can directly upload tokens from JSON files. + +For details on uploading tokens from Figma, see [Import from Tokens Studio for Figma](../../getting-started/setting-up-studio/import-from-tokens-studio-for-figma.md) or [Import from Figma Variables](../../getting-started/setting-up-studio/import-from-figma-variables.md). + +## Features of the Tokens Table + +Selecting a set from the left pane will switch the right side to Tokens Table view. This view is familiar to a spreadsheet, enabling quick, inline editing of values and properties. + +### Table Columns + +Each row in a table displays: + +* **Token Type** – e.g., color, typography, dimension, etc. +* **Name** – The name used to refer to the token (can include hierarchical naming conventions). +* **Value** – the token’s raw or referenced value. eg. `{radii.none}` or `#ff00ff` +* **Resolved Value** – the final, resolved value taking references into account. If you have set the value to refer to a token in another set, the resolved value will be the result. This may change if you use [themes](../themes/ "mention"). +* **Description** – an optional field to clarify the token’s purpose or usage. + +
+ +### Inline Editing + +* Enter – switches a cell into edit mode (for simpler tokens like color, dimension, number). +* Space – opens a more detailed editor for more complex tokens (e.g., typography or shadow) where multiple attributes need configuration. + +
+ +### Referencing and Resolved Value + +If a token’s value references another token, you’ll see a badge indicating whether the reference is valid in the **Value** column, and the resolved value displayed. + +
+ +### Visualizing Token Flows + +Each token row has a checkbox on the far left. Selecting one or more tokens enables extra actions. One notable action is **Show Token Flow**, which provides a visualization of how tokens reference each other—where a token’s value originates and which tokens depend on it. + +
+ +### Bulk Actions + +When you select multiple tokens (by checking rows), you can apply bulk actions such as renaming, duplicating, changing the type of token, changing the values, moving and deleting. + +
+ +### Folder and File Controls + +At the top of the Tokens Table, you’ll see breadcrumbs showing your current folder path and file (set) name. + +Clicking on the pencil icon button, you can open a context menu that will allow you to rename the file (set) name in place and update the description. + +Clicking on the three dots will open a context menu that , download the set as JSON, Duplicate the set and delete it entirely. + +
+ +### Searching Token Sets + +On the top-right of the table there are tools to allow you to filter by token type + +* Filter by token type +* Search tokens by name +* Adjust nesting level (helpful for sets with hierarchical token naming) +* Add Token (also available at the bottom of the table in quick-edit mode) + +
+ +### Theming Context + +At the bottom of the left panel, you can pick or create Theme Groups and Theme Options. Choosing a theme changes how references resolve across your tokens.\ +To learn more about theming, see [Themes](../themes/). + +
+ +## Next Steps + +* Import tokens from existing sources: + * [Import from Figma variables](../../getting-started/setting-up-studio/import-from-figma-variables.md) + * [Import from Tokens Studio for Figma](../../getting-started/setting-up-studio/import-from-tokens-studio-for-figma.md) +* Configure or refine your themes: [Themes](https://chatgpt.com/g/platform/features/themes.md) +* Leverage advanced references with Graph-based sets + +By combining sets, folders, and robust theming, the Tokens Module provides an efficient way to organize your design tokens and keep them updated across different contexts and outputs. If you need more details on advanced usage, head to our [SDKs](../../development/sdks.md) or [CLI](../../development/cli.md) docs to learn about integrating tokens into your codebase. diff --git a/platform/tokens/token-flow.md b/platform/tokens/token-flow.md new file mode 100644 index 0000000..bc488b6 --- /dev/null +++ b/platform/tokens/token-flow.md @@ -0,0 +1,73 @@ +--- +description: >- + Token Flow in Tokens Studio provides a visual way to understand the + relationships between tokens. +--- + +# Token flow + +### Overview + +Token Flow allows you to track references, dependencies, and how tokens are connected across different sets and themes. This feature helps in managing design tokens efficiently and ensuring consistency across your design system. + +## Benefits of Token Flow + +* **Improved visibility**: Easily see how tokens are structured and related. +* **Efficient debugging**: Quickly identify and resolve issues with token dependencies. +* **Seamless theming**: Understand how token values change dynamically across different themes. + + + +## Accessing Token Flow + +{% stepper %} +{% step %} +### **Navigate to the Tokens Module** + +
+ +Open **Tokens Studio** and go to the **Tokens** module from the left-hand panel. Here, you will see a list of [Token Sets](token-sets.md). +{% endstep %} + +{% step %} +### **Select a Token Set** + +
+ +Click on any **Token Set** to view all the tokens it contains. +{% endstep %} + +{% step %} +### **View Token Flow** + +Select a token by clicking the checkbox next to it. At the bottom of the screen, the option to open **Token Flow** will appear. Click to open the Token Flow visualization panel and see the references and connections. +{% endstep %} +{% endstepper %} + +## Understanding Token Relationships + +

Opening Token Flow to understand token relationships.

+ +Using Token Flow you can: + +* **View token references**: See where the token is being referenced across different sets. This is helpful to understand the inheritance model and complexity of references +* **Check dependency paths**: Identify which other tokens rely on the selected token. +* **Explore theme-based variations**: Understand how token values change across different themes. For example, the value of a token may be dependent on + +### Example Use Case + +1. Select a token, such as a color token. +2. In **Token Flow**, observe: + * Which other tokens reference it. + * Whether it pulls values from another token (e.g., from a dark or light theme). + * How changing the theme affects the resolved token value. +3. If you switch the theme from **Light** to **Dark**, you will see: + * The reference update from the light token set to the dark token set. + * The resolved token value changing accordingly. + +## Navigating Between Token Sets + +* You can click on any referenced token within Token Flow to jump directly to its token set. +* This makes it easier to track how tokens interact across different sets. + +
diff --git a/platform/tokens/token-sets.md b/platform/tokens/token-sets.md new file mode 100644 index 0000000..40bc4b5 --- /dev/null +++ b/platform/tokens/token-sets.md @@ -0,0 +1,44 @@ +# Token Sets + +## Static and Graph-Based Sets + +Studio supports two distinct types of token sets. Understanding the differences between **Static Sets** and **Graph-Based Sets** is key to optimizing your token management workflow. + +### Static Sets + +Static sets are the traditional token sets you are familiar with. They have the following characteristics: + +* **Editable in Table View:** Static sets are displayed in a table editor, where each token is represented in a JSON format behind the scenes. +* **Manual Token Management:** You directly edit token values and metadata—ideal for straightforward token collections that do not require dynamic logic. +* **Predictable Structure:** Since the values are manually set, static sets offer consistency without additional computation. + +
+ +> **Tip:** Use static sets for standard tokens that do not need dynamic calculations. + +### Graph-Based Sets + +Graph-based sets leverage our powerful graph engine to build logic-driven token structures: + +* **Logic-Based Calculations:** Instead of directly editing tokens, you define a logical decision tree using nodes. These nodes perform dynamic calculations (for example, building color or type scales) that generate a static output token set. +* **Dynamic Output:** The result is a dynamically generated token set, which you can view in both the graph view and the table view. +* **Foundational Usage Only:** Graph-based sets should only be used on the foundational layer. They are designed to drive core logic, and you should avoid referencing a graph-based set on top of another logic-driven set. This limitation is due to current constraints in consuming platforms (such as Figma or CSS) regarding the translation of complex logics. + +
+ +> **Note:** For advanced dynamic calculations like semantic scaling or automated color adjustments, graph-based sets offer powerful capabilities. However, keep them simple to ensure compatibility when the tokens are consumed in different platforms. + +### Switching Between Views + +In graph-based sets, you have the flexibility to switch between: + +* **Graph View:** Where you build and modify the logical structure of your token set. +* **Table View:** Where you can inspect the final output of your dynamic calculations in a familiar tabular format. + +
+ +### Best Practices + +* **Use Static Sets** when your tokens require minimal or no dynamic logic. +* **Employ Graph-Based Sets** for foundational layers where dynamic calculations (such as generating color or type scales) are necessary. +* **Avoid Nesting Graph-Based Sets:** Do not reference one graph-based set inside another, as this can complicate logic translation to consuming platforms. diff --git a/plugins/companion-by-tokens-studio.md b/plugins/companion-by-tokens-studio.md new file mode 100644 index 0000000..7b7202d --- /dev/null +++ b/plugins/companion-by-tokens-studio.md @@ -0,0 +1,69 @@ +# Companion by Tokens Studio + +**Companion by Tokens Studio** is a Figma plugin designed to seamlessly sync and consume design tokens from Tokens Studio as variables in Figma. It ensures your design tokens are always structured and accessible within your Figma files, reflecting updates made in Studio. + +
+ +### Setting Up Companion by Tokens Studio + +{% stepper %} +{% step %} +#### Install and Launch the Plugin + +* Open your Figma design file. +* Navigate to **Plugins > Companion by Tokens Studio** and run the plugin. +{% endstep %} + +{% step %} +#### Syncing Tokens from Tokens Studio + +To set up the connection and sync your tokens: + +1. **Configure the API Key**: + * Refer to the Tokens Studio [API Keys](https://tokens.studio/platform) section to generate an API key. + * Paste the API key into the Companion plugin interface. + * Select your organization and project to complete the connection. +2. **View Tokens**: + * Once synced, all design tokens created in Tokens Studio will be visible in the Companion plugin. + * Tokens are organized by **collections** and **modes** (modes) which corresponds to Theme Groups and Theme Options in Studio. + +
+{% endstep %} + +{% step %} +#### Creating Variables in Figma + +1. In your Figma file, navigate to the bottom of the Companion plugin interface and click **Create**. +2. Variables will be generated in Figma, replicating the structure of your tokens in Studio: + * Theme Groups as Collections. + * Theme options structured as modes. + +
+{% endstep %} +{% endstepper %} + +### Updating and Monitoring Tokens + +#### Fetching Updates from Studio + +* If changes are made in Studio, click **Fetch from Studio** in the plugin to sync the updates. +* Click **Create** again to generate the updated variables in Figma. Only the differential updates will be applied. + +
+ +#### Watch Mode + +* Activate **Watch Mode** by clicking the **Watch Icon** in the plugin. + * This minimizes the plugin but monitors changes in Studio. + * Every 5 seconds, updates in Studio are automatically fetched and applied in Figma. +* To stop Watch Mode, simply deactivate it by clicking the cancel button. + +
+ +### Managing Variables + +* **Delete Variables**: Use the **Delete Variables** button to remove all variables created through the plugin in the current Figma file. + +### Watch the video walkthrough + +{% embed url="https://www.youtube.com/watch?v=SXd-FUb985Y" %} diff --git a/plugins/tokens-studio-for-figma-plugin.md b/plugins/tokens-studio-for-figma-plugin.md new file mode 100644 index 0000000..36ea60a --- /dev/null +++ b/plugins/tokens-studio-for-figma-plugin.md @@ -0,0 +1,7 @@ +# Tokens Studio for Figma Plugin + +**Tokens Studio for Figma** is a [Figma Plugin](https://jansix.at/resources/figma-tokens) allowing you to integrate Tokens into your Figma designs. + +
+ +Read the official documentation [here.](https://docs.tokens.studio/) diff --git a/plugins/tokens-studio-for-framer-plugin.md b/plugins/tokens-studio-for-framer-plugin.md new file mode 100644 index 0000000..39c3d5f --- /dev/null +++ b/plugins/tokens-studio-for-framer-plugin.md @@ -0,0 +1,68 @@ +# Tokens Studio for Framer Plugin + +**Tokens Studio** **for Framer** is a Framer plugin designed to allow teams to export their design tokens to Framer Styles. It ensures your design tokens are always structured and accessible within your Framer files, reflecting updates made in Studio. + +
+ +### Setting up Tokens Studio for Framer + +{% stepper %} +{% step %} +### Install and launch the plugin + +* Go to your Framer project. +* Click on **Plugins** option. +* Search for **Tokens Studio for Framer**. +* Click on the plugin to launch it. + +
+{% endstep %} + +{% step %} +### Syncing Design Tokens from Studio + +* On launching the plugin, it will ask for the API key from Studio. +* Follow the steps [here](../settings/api-keys.md) to generate an API key on Studio. +* Enter the API key in the required field to connect to Studio. + +
+ +* Select the Organisation and Project that you want to connect. + +
+ +* The themes will be available in the plugin. + +
+{% endstep %} + +{% step %} +### Creating Framer styles + +* Select the main theme that you want to export. +* Framer styles currently supports color and typography design tokens. Framer also supports light and dark themes at the moment. +* Select the theme that map will map to light and dark themes in Framer. +* Select other modes that will be static. +* Click on Create button. The color and typography styles will be created. + +
+{% endstep %} + +{% step %} +### Checking the themes + +* Apply the color styles and typography in your designs. +* Switch to dark mode to see your designs in dark mode. + +
+{% endstep %} + +{% step %} +### Exporting other modes + +* To export other modes, open the Tokens Studio plugin. +* Select another mode and click create. + +
+{% endstep %} +{% endstepper %} diff --git a/readme.md b/readme.md index 8b13789..5188f59 100644 --- a/readme.md +++ b/readme.md @@ -1 +1,40 @@ +# Why Studio? +## Welcome to Studio + +Studio is your central hub for managing design tokens across your entire organization. We help bridge the gap between design and development, making it easier to maintain consistent, scalable design systems. + +### Why choose Studio? + +#### Seamless design-to-code workflow + +Transform your design tokens from Figma directly into production-ready code. No more manual updates or synchronization issues between design and development teams. + +#### Single source of truth + +Maintain all your design tokens in one place. Whether you're working with colors, typography, spacing, or other design elements, everything stays synchronized across your entire design system. + +#### Built for scale + +From small teams to large enterprises, our platform grows with you. Manage multiple themes, versions, and environments while maintaining complete control over your design system. + +#### Team collaboration + +Enable designers and developers to work together seamlessly. With built-in version control and clear documentation, everyone stays on the same page. + +### Getting started + +Ready to transform your design system workflow? Follow our step-by-step guide: + +1. [Start your journey](getting-started.md) - Create your account and first project +2. [Connect to Figma](connect-studio-to-figma/) - Sync your design tokens +3. [Connect to code](connect-studio-to-code.md) - Integrate with your development workflow + +### Key features + +* [**Token Management**](platform/features/tokens/) - Create, organize, and maintain your design tokens +* [**Theming**](platform/features/themes/) - Build and manage multiple themes with ease +* **Version Control** - Track changes and manage releases +* [**Team Management**](platform/platform/organisation.md) - Collaborate with your team effectively + +Join the growing number of teams using Tokens Studio to create more consistent, efficient design systems. diff --git a/settings/accounts.md b/settings/accounts.md new file mode 100644 index 0000000..34ef06e --- /dev/null +++ b/settings/accounts.md @@ -0,0 +1,73 @@ +--- +description: >- + The Accounts Menu in Studio provides you with the tools to manage your + profile, API Keys for connecting Studio to design tools and plugins, and UI + theme preferences. +--- + +# Accounts + +## Where to find the Accounts Menu + +
+ +Within Studio, you will see your _name_ and _email address_ in the **bottom-left corner of the UI**. Click to open a popup menu with the following options: + +* **Edit Profile** – Modify personal details such as name, description, and avatar. +* **API Keys** – Manage personal access tokens for authentication and integration. +* **Share Feedback** – Redirects to the **feature request** and feedback submission platform. +* **Switch to Dark Mode** – Toggle between **light** and **dark** themes. +* **Sign Out** – Log out of your account securely. + +*** + +## Editing Your Profile + +
+ +1. Click **Edit Profile** in the accounts menu. +2. Modify your **name** or add a short **description**. +3. Upload an **optional avatar** if desired. +4. Click **Save** to confirm changes. + +*** + +## Managing API Keys + +
+ +Access the [**API Keys**](api-keys.md) page. Where you can: + +* Generate new API keys. +* View and manage existing API keys. +* Copy keys for integration with Studio plugins. + +{% hint style="warning" %} +**Important:** API keys are only shown once upon creation—ensure you store them securely. If you lose track of the key, you'll need to generate a new one. +{% endhint %} + +*** + +## Providing Feedback + +Selecting **Share Feedback** will redirect you to the **Tokens Studio feedback platform**, where you can submit feature requests and report issues. + +*** + +## Changing the Theme + +
+ +You can toggle between Dark and Light Mode directly from the account menu to adjust their interface preferences. The selected value will be stored locally in your browser and persisted for future visits. + +*** + +## Signing Out + +Click **Sign Out** to securely log out of Studio and your current session. + +*** + +### Related + +* [api-keys.md](api-keys.md "mention") diff --git a/settings/api-keys.md b/settings/api-keys.md new file mode 100644 index 0000000..e07860c --- /dev/null +++ b/settings/api-keys.md @@ -0,0 +1,132 @@ +--- +description: >- + API keys provide a secure way to connect Studio to external platforms like + Figma. These keys enable seamless integration while ensuring secure + authentication. +--- + +# API keys + +## Accessing the API Key Page + +There are multiple ways to navigate to the **API Keys** page: + +### From the Project Dashboard + +
+ +1. Open your **Project Dashboard**. +2. Click on **Create an API Key** to access the API Key management page. + +### From the User Panel + +
+ +1. Locate the **left-side panel** of the interface. +2. Click on the **API Keys** option to navigate directly to the API management page. + +### Using a Keyboard Shortcut + +
+ +1. Press **Cmd + K** (Mac) or **Ctrl + K** (Windows) to open the **Quick Menu**. +2. Type **"API Key"** in the search bar. +3. Select **Manage API Keys** to be redirected to the API Key page. + +*** + +## Creating a New API Key + +
+ +{% hint style="danger" %} +🚨 **Important:** Once created, the API key will only be shown **once**. Make sure to copy and store it securely. +{% endhint %} + +To generate a new API Key: + +{% stepper %} +{% step %} +Navigate to the **API Keys** page. + +
+ +Click on **Create New Token** + +
+{% endstep %} + +{% step %} +Enter a **name** for your API key. + +This should something easily identifiable for future reference. +{% endstep %} + +{% step %} +Set the expiration period for the key. + +For additional security, you can choose to have the token become non-functional after a set period of time. +{% endstep %} + +{% step %} +Set the scope of the key. + +
+ +Choose the data and actions that users and tools using the token can access and perform. + +{% hint style="success" %} +If you're using the [tokens-studio-for-figma-plugin.md](../plugins/tokens-studio-for-figma-plugin.md "mention") or the [companion-by-tokens-studio.md](../plugins/companion-by-tokens-studio.md "mention") plugin, you'll need to enable `project:read` , `project:write` and `actor_tokens:create` +{% endhint %} + +| Scope | Description | +| --------------------------- | --------------------------------------------------- | +| `me:read` | Read account data for the currently logged in user. | +| `organizations:read` | Read data about the organization | +| `organizations:write` | Update data and settings for the organization | +| `organizations:admin` | Administer organization data | +| `organizations:user:read` | Read data regarding the users in an organization | +| `organizations:user:invite` | Can invite users to an organizations | +| `organizations:user:write` | Can update user data in an organization | +| `projects:read` | Read project data directly | +| `projects:write` | Update project data | +| `projects:admin` | Administer Projects | +| `actor_tokens:create` | Create actor tokens for the user | +{% endstep %} +{% endstepper %} + +*** + +## Managing API Keys + +* The **API Keys** page displays a list of previously created keys. +* You can **delete** old keys when they are no longer needed. +* For security, API keys **cannot be viewed again** after creation. + +
+ +*** + +## Using API Keys + +* API keys can be used to authenticate connections between **Studio** and **Figma** (or other external platforms). +* They are tied to your **user account**, meaning they grant access to all organizations and projects you are part of. + +For more details on using API keys for **Figma integration**, refer to the [Connecting Studio to Figma](../connect-studio-to-figma/) guide. + +*** + +### Security Best Practices + +* Store API keys in a **secure password manager**. +* Avoid sharing API keys publicly or committing them to version control. +* Regularly **rotate** keys to maintain security. + +*** + +### Related + +* [connect-studio-to-figma](../connect-studio-to-figma/ "mention") +* [connect-studio-to-code](../connect-studio-to-code/ "mention") +* [using-tokens-studio-for-figma.md](../connect-studio-to-figma/using-tokens-studio-for-figma.md "mention") +* [using-companion-by-tokens-studio.md](../connect-studio-to-figma/using-companion-by-tokens-studio.md "mention") diff --git a/settings/organisation/README.md b/settings/organisation/README.md new file mode 100644 index 0000000..f930eb4 --- /dev/null +++ b/settings/organisation/README.md @@ -0,0 +1,105 @@ +--- +description: >- + Studio supports multi-organization management, allowing user accounts to + access projects across of organizations. +--- + +# Organizations + +This feature enables seamless collaboration across different teams and projects while maintaining control over access and policies. + +## Creating a New Organization + +
+ +If you need to create a new organization: + +{% stepper %} +{% step %} +Click the name of the current organization on the top-left panel to open the context menu. + + +{% endstep %} + +{% step %} +Click Switch Organization to navigate to the **Create a New Organization** form. + + +{% endstep %} + +{% step %} +Click on Create Organization to open the create form. + +You'll be asked to provide a name for the organization, and an optional icon. +{% endstep %} + +{% step %} +After creating the organization, you will be directed to set up your first project within it. + + +{% endstep %} +{% endstepper %} + + + +## Accessing Organizations + +
+ +### Managing Organizations + +1. Click the name of the current organization on the top-left panel to open the context menu. +2. At the bottom of the dropdown, you will see: + * **Organization Settings** – to manage settings and policies. + * **Switch Organization** – to move between different organizations. + +## Organization Settings + +
+ +The **Organization Settings** page provides an overview of your organization and various management options: + +* **Organization Details** – Update your organization's name and website +* **Organization Icon -** Change the icon for your organization that is displayed throughout Token Studio +* **Users & Groups** – View active users, manage invitations, and organize users into groups. +* **Legal Documents -** Manage your organization legal documents and consent agreements +* **Compliance Log** – View your organization activity log for compliance purposes + + + +### Managing Users + +
+ +The **Users** tab provides a list of active users and pending invitations. + +* To **invite a new user**: + 1. Click **Invite Users**. + 2. Enter the user's email. + 3. Select the appropriate group for the user. + 4. Click **Send Invite**. +* You can also see **pending invitations** and resend them if needed. + +### Managing Groups + +
+ +Groups allow you to assign policies to multiple users efficiently. + +* To **create a new group**: + 1. Click **Create Group**. + 2. Enter a **group name**. + 3. Select an associated **policy**. + 4. Click **Create**. + +## Switching Between Organizations + +
+ +To switch between organizations: + +1. Open the **organization dropdown** at the top of the left panel. +2. Click **Switch Organization**. +3. A list of all the organizations you are part of will appear. +4. Click on an organization to switch to it. + diff --git a/settings/organisation/inviting-members.md b/settings/organisation/inviting-members.md new file mode 100644 index 0000000..d0d511a --- /dev/null +++ b/settings/organisation/inviting-members.md @@ -0,0 +1,38 @@ +--- +description: You can invite additional team members to your organization. +--- + +# Inviting members + +{% stepper %} +{% step %} +### Under your project name, you'll find a small menu. + +
+{% endstep %} + +{% step %} +### Click on 'Invite members. + +This will open a page. + +
+{% endstep %} + +{% step %} +### Here you see all the current members. + +Via the button 'Invite users' you will be able to invite new members + +
+{% endstep %} + +{% step %} +### Just drop the mail address and hit the button! + +An invite will be sent to the email address. + +
+{% endstep %} +{% endstepper %} + diff --git a/settings/project.md b/settings/project.md new file mode 100644 index 0000000..c31d830 --- /dev/null +++ b/settings/project.md @@ -0,0 +1,76 @@ +--- +description: >- + Studio supports managing multiple projects within an organization, allowing + teams to work on separate design systems or initiatives efficiently. +--- + +# Projects + +This guide walks you through viewing, creating, and managing projects within an organization. + +## Creating a New Project + +
+ +{% stepper %} +{% step %} +Click the dropdown at the top of the interface, next to the current project name. + + +{% endstep %} + +{% step %} +Select Create New Project + + +{% endstep %} + +{% step %} +Enter Project Details + +In the popup modal: + +* Enter a project name. +* (Optional) Choose a project icon. +* Select a starter template or begin with a blank project. +{% endstep %} +{% endstepper %} + +## Starter Templates + +
+ +Tokens Studio provides starter templates for popular frameworks: + +* **Tailwind** +* **Radix UI** +* **Chakra UI** +* **Open Color** + +Choose a template that matches your design system needs, or opt for a blank setup to create your project from scratch. + +Once the project is created, you’ll be redirected to the **Project Dashboard**. + +## Viewing Your Projects + +To view your projects, navigate to the **Projects** section in the side panel. Here, you'll see a list of all the projects associated with your organization. + +* Switch between projects by selecting the desired project from the list. +* Access **Project Settings** directly from this panel. + +### Accessing Project Settings + +Each project has a dedicated settings page, where you can: + +* **View project details** such as the project name and icon. +* **Update the project icon** to better reflect the project identity. +* **Delete the project** if it's no longer needed. + +To open project settings: + +1. Click the project name in the side panel. +2. Select **Settings** from the dropdown menu. + +Alternatively, access **Project Settings** from the side panel. + +
diff --git a/style-dictionary/page-2.md b/style-dictionary/page-2.md new file mode 100644 index 0000000..1dbccb1 --- /dev/null +++ b/style-dictionary/page-2.md @@ -0,0 +1,2 @@ +# Page 2 +