dirk-cfx-react 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/colorWithAlpha.ts","../src/components/BorderedIcon.tsx","../src/components/Motion.tsx","../src/components/Counter.tsx","../src/components/FloatingParticles.tsx","../src/components/Icon.tsx","../src/components/InfoBox.tsx","../src/components/InputContainer.tsx","../src/hooks/useAudio/store.ts","../src/utils/misc.ts","../src/utils/fetchNui.ts","../src/utils/internalEvent.ts","../src/utils/locales.ts","../src/components/SegmentedControl.tsx","../src/components/Navigation.tsx","../src/components/SegmentedProgress.tsx","../src/components/Title.tsx","../src/hooks/useNuiEvent.ts","../src/theme.ts","../src/providers/DirkProvider.tsx"],"names":["theme","FontAwesomeIcon","jsx","motion","useMantineTheme","Flex","Text","jsxs","create","useRef","useEffect","Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,IAAM,UAAA,GAAa;AAAA,EACjB,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC7B,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,EAC1B,gBAAgB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC3B,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACpC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAC9B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EACnC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACnC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EAC/B,gBAAgB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAChC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC7B,UAAU,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC/B,UAAU,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACvC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,WAAW,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAChC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EACpC,gBAAgB,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACvC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EACnC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACpC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,EAC9B,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,eAAe,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACtC,eAAe,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EACrC,eAAe,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EACnC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EAClC,aAAa,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,YAAY,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAClC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,aAAa,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACpC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAChC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC7B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACnC,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/B,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC5B,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACrC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAClC,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC9B,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAClC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,sBAAsB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/C,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,eAAe,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,gBAAgB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,gBAAgB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC3B,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EAClC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAChC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA;AAAA,EAC7B,kBAAkB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC3C,YAAY,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EACjC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACtC,cAAc,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACvC,gBAAgB,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,iBAAiB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC1C,mBAAmB,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC1C,iBAAiB,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACzC,iBAAiB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACzC,cAAc,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACrC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC3B,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC9B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACnC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC/B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,EACjC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACxC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EAC9B,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/B,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/B,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC/B,eAAe,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACvC,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,EAC1B,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EACpC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACpC,UAAU,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,EACjC,UAAU,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAC/B,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,GAAA,EAAI;AAAA,EACnC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,MAAM,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC/B,aAAa,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACpC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC9B,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAC7B,SAAS,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAClC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA,EAAG;AAAA,EAC/B,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACnC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACjC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EAChC,YAAY,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACrC,QAAQ,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,EAC/B,aAAa,EAAE,CAAA,EAAG,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,EAAA;AACpC,CAAA;AAKO,SAAS,cAAA,CAAe,OAAe,KAAA,EAAuB;AACnE,EAAA,MAAM,eAAA,GAAkB,MAAM,WAAA,EAAY;AAE1C,EAAA,IAAI,UAAA,CAAW,eAAe,CAAA,EAAG;AAC/B,IAAA,MAAM,GAAA,GAAM,WAAW,eAAe,CAAA;AACtC,IAAA,OAAO,CAAA,KAAA,EAAQ,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAA;AAAA,EACpD;AAGA,EAAA,IAAI,qBAAA,CAAsB,IAAA,CAAK,KAAK,CAAA,EAAG;AACrC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AACzB,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AAC/B,IAAA,MAAM,CAAA,GAAK,UAAU,EAAA,GAAM,GAAA;AAC3B,IAAA,MAAM,CAAA,GAAK,UAAU,CAAA,GAAK,GAAA;AAC1B,IAAA,MAAM,IAAI,MAAA,GAAS,GAAA;AACnB,IAAA,OAAO,QAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,EAAK,CAAC,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,EACxC;AAGA,EAAA,IAAI,0CAAA,CAA2C,IAAA,CAAK,KAAK,CAAA,EAAG;AAC1D,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,0CAA0C,CAAA;AACrE,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,CAAA,KAAA,EAAQ,MAAA,CAAO,CAAC,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAC,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,IAChE;AAAA,EACF;AAGA,EAAA,OAAO,KAAA;AACT;AC/JO,SAAS,aAAa,KAAA,EAAyB;AACpD,EAAA,MAAMA,SAAQ,eAAA,EAAgB;AAC9B,EAAA,uBACE,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,cAAA,CAAe,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,QAAQA,MAAAA,CAAM,MAAA,CAAOA,MAAAA,CAAM,YAAY,EAAEA,MAAAA,CAAM,YAAsB,GAAG,KAAA,CAAM,OAAA,GAAU,MAAK,GAAG,CAAA;AAAA,MAC1I,KAAA,EAAO;AAAA;AAAA,QAEL,eAAA,EAAiB,oBAAA;AAAA,QAEjB,OAAA,EAAS,KAAA,CAAM,CAAA,IAAKA,MAAAA,CAAM,OAAA,CAAQ,EAAA;AAAA,QAClC,UAAA,EAAY,sBAAA;AAAA,QACZ,WAAA,EAAa,KAAA;AAAA,QACb,QAAA,EAAU,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,QAAA,GAAU,OAAA;AAAA,QAC3C,YAAA,EAAcA,OAAM,MAAA,CAAO,EAAA;AAAA;AAAA,QAE3B,OAAA,EAAS,CAAA,YAAA,EAAe,cAAA,CAAe,KAAA,CAAM,QAAQ,KAAA,CAAM,KAAA,GAAQA,MAAAA,CAAM,MAAA,CAAOA,OAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,QAC5G,SAAA,EAAW,CAAA,cAAA,EAAiB,cAAA,CAAe,KAAA,CAAM,QAAQ,KAAA,CAAM,KAAA,GAAQA,MAAAA,CAAM,MAAA,CAAOA,OAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA;AAClH;AAAA,GACF;AAEJ;AChCO,IAAM,UAAA,GAAa,OAAO,IAAI;AAG9B,IAAM,UAAA,GAAa,OAAO,IAAI;AAE9B,IAAM,UAAA,GAAa,OAAOC,eAAe;AAGzC,IAAM,WAAA,GAAc,OAAO,KAAK;ACXhC,SAAS,QAAQ,KAAA,EAAwC;AAC9D,EAAA,uBACEC,GAAAA,CAAC,eAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,KAAA,GAAQ,qBACbA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MAEC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MAEnB,EAAA,EAAG,QAAA;AAAA,MACH,CAAA,EAAE,QAAA;AAAA,MACF,OAAA,EAAS,QAAA;AAAA,MACT,KAAA,EAAM,QAAA;AAAA,MACN,EAAA,EAAI,MAAM,KAAA,IAAS,qBAAA;AAAA,MACnB,KAAA,EAAO;AAAA,QACL,YAAA,EAAc,KAAA;AAAA,QACd,WAAA,EAAa,KAAA;AAAA,QACb,YAAA,EAAc,OAAA;AAAA,QACd,UAAA,EAAY,cAAA;AAAA,QACZ,SAAA,EAAW;AAAA,OACb;AAAA,MAEC,QAAA,EAAA,KAAA,CAAM;AAAA,KAAA;AAAA,IAlBH;AAAA,GAmBN,EAEJ,CAAA;AAGJ;ACFO,IAAM,oBAAsD,CAAC;AAAA,EAClE,QAAQ,EAAC;AAAA,EACT,aAAA,GAAgB,EAAA;AAAA,EAChB,KAAA,GAAQ,WAAA;AAAA,EACR,IAAA,GAAO,EAAA;AAAA,EACP,KAAA,GAAQ,MAAA;AAAA,EACR,OAAA,GAAU,GAAA;AAAA,EACV,QAAQ,EAAC;AAAA,EACT,kBAAA,GAAqB,GAAA;AAAA,EACrB,kBAAA,GAAqB,EAAA;AAAA,EACrB,eAAA,GAAkB;AACpB,CAAA,KAAM;AACJ,EAAA,MAAM,YAAA,GAAe,OAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,QAAA,CAA0B,EAAE,CAAA;AAE9D,EAAA,MAAM,MAAA,GAAS,eAAe,CAAC,CAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,eAAe,CAAC,CAAA;AAE/B,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,IAAA,EAAM,EAAE,IAAA,EAAM,EAAA,EAAI,UAAU,EAAA,EAAG;AAAA,IAC/B,MAAA,EAAQ,EAAE,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA,EAAC;AAAA,IAC9B,IAAA,EAAM,EAAE,IAAA,EAAM,CAAA,EAAG,UAAU,CAAA;AAAE,GAC/B;AAEA,EAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAElC,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAAiB;AACrC,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,GAAI,GAAA;AAC3B,IAAA,OAAO,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAE3B,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,qBAAA,EAAsB;AAE1D,IAAA,MAAM,YAAA,GAAgC,CAAC,GAAG,KAAA,CAAM,aAAa,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AAC5E,MAAA,MAAM,QAAQ,CAAA,GAAI,OAAA;AAClB,MAAA,MAAM,QAAQ,CAAA,GAAI,OAAA;AAClB,MAAA,MAAM,eAAe,CAAA,GAAI,OAAA;AAEzB,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA,CAAO,KAAA;AAC3C,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA,CAAO,MAAA;AAE3C,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,CAAA;AAAA,QACJ,KAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA,EAAU,KAAA;AAAA,QACV,QAAA,EAAU,KAAA;AAAA,QACV,IAAA,EAAM,MAAM,MAAA,GAAS,CAAA,GAAI,MAAM,CAAA,GAAI,KAAA,CAAM,MAAM,CAAA,GAAI,IAAA;AAAA,QACnD,mBAAmB,QAAA,CAAS,IAAA,GAAO,YAAA,CAAa,YAAY,IAAI,QAAA,CAAS;AAAA,OAC3E;AAAA,IACF,CAAC,CAAA;AAED,IAAA,YAAA,CAAa,YAAY,CAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,aAAA,EAAe,KAAA,CAAM,QAAQ,QAAA,CAAS,IAAA,EAAM,QAAA,CAAS,QAAQ,CAAC,CAAA;AAElE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAE3B,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAkB;AACzC,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAS,qBAAA,EAAsB;AAC3D,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,IAAA;AAC7B,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,GAAA;AAE7B,MAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AACZ,MAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AAEZ,MAAA,YAAA;AAAA,QAAa,CAAA,aAAA,KACX,aAAA,CAAc,GAAA,CAAI,CAAA,QAAA,KAAY;AAC5B,UAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,KAAA;AACxB,UAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,KAAA;AACxB,UAAA,MAAM,WAAW,IAAA,CAAK,IAAA,CAAK,EAAA,GAAK,EAAA,GAAK,KAAK,EAAE,CAAA;AAE5C,UAAA,IAAI,QAAA,GAAW,kBAAA,IAAsB,QAAA,GAAW,CAAA,EAAG;AACjD,YAAA,MAAM,KAAA,GAAA,CAAS,qBAAqB,QAAA,IAAY,kBAAA;AAChD,YAAA,MAAM,MAAA,GAAU,EAAA,GAAK,QAAA,GAAY,KAAA,GAAQ,kBAAA,GAAqB,EAAA;AAC9D,YAAA,MAAM,MAAA,GAAU,EAAA,GAAK,QAAA,GAAY,KAAA,GAAQ,kBAAA,GAAqB,EAAA;AAE9D,YAAA,OAAO;AAAA,cACL,GAAG,QAAA;AAAA,cACH,QAAA,EAAU,SAAS,KAAA,GAAQ,MAAA;AAAA,cAC3B,QAAA,EAAU,SAAS,KAAA,GAAQ;AAAA,aAC7B;AAAA,UACF,CAAA,MAAO;AACL,YAAA,OAAO;AAAA,cACL,GAAG,QAAA;AAAA,cACH,UAAU,QAAA,CAAS,KAAA;AAAA,cACnB,UAAU,QAAA,CAAS;AAAA,aACrB;AAAA,UACF;AAAA,QACF,CAAC;AAAA,OACH;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,mBAAmB,MAAM;AAC7B,MAAA,YAAA;AAAA,QAAa,CAAA,aAAA,KACX,aAAA,CAAc,GAAA,CAAI,CAAA,QAAA,MAAa;AAAA,UAC7B,GAAG,QAAA;AAAA,UACH,UAAU,QAAA,CAAS,KAAA;AAAA,UACnB,UAAU,QAAA,CAAS;AAAA,SACrB,CAAE;AAAA,OACJ;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAY,YAAA,CAAa,OAAA;AAC/B,IAAA,SAAA,CAAU,gBAAA,CAAiB,aAAa,eAAe,CAAA;AACvD,IAAA,SAAA,CAAU,gBAAA,CAAiB,cAAc,gBAAgB,CAAA;AAEzD,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,mBAAA,CAAoB,aAAa,eAAe,CAAA;AAC1D,MAAA,SAAA,CAAU,mBAAA,CAAoB,cAAc,gBAAgB,CAAA;AAAA,IAC9D,CAAA;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,MAAA,EAAQ,kBAAA,EAAoB,kBAAkB,CAAC,CAAA;AAE3D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAE3B,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,qBAAA,EAAsB;AAE1D,MAAA,YAAA;AAAA,QAAa,CAAA,aAAA,KACX,aAAA,CAAc,GAAA,CAAI,CAAC,UAAU,CAAA,KAAM;AACjC,UAAA,MAAM,KAAA,GAAQ,CAAA,GAAI,OAAA,GAAU,MAAA,CAAO,KAAA;AACnC,UAAA,MAAM,KAAA,GAAQ,CAAA,GAAI,OAAA,GAAU,MAAA,CAAO,MAAA;AAEnC,UAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA,CAAO,KAAA;AAC9C,UAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA,CAAO,MAAA;AAE9C,UAAA,OAAO;AAAA,YACL,GAAG,QAAA;AAAA,YACH,KAAA,EAAO,QAAA;AAAA,YACP,KAAA,EAAO,QAAA;AAAA,YACP,QAAA,EAAU,QAAA;AAAA,YACV,QAAA,EAAU;AAAA,WACZ;AAAA,QACF,CAAC;AAAA,OACH;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAC9C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,YAAY,CAAA;AAAA,EAChE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,UAAA;AAAA,QACV,QAAA,EAAU,QAAA;AAAA,QACV,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,EAAA;AAAA,QAER,eAAA;AAAA,QACA,GAAG;AAAA,OACL;AAAA,MAEA,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,UAAU,UAAA,EAAY,KAAA,EAAO,CAAA,EAAG,aAAA,EAAe,QAAO,EACjE,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,6BACdA,GAAAA;AAAA,QAACC,MAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UAEC,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,UAAA;AAAA,YACV,KAAA,EAAO,IAAA;AAAA,YACP,MAAA,EAAQ,IAAA;AAAA,YACR,KAAA;AAAA,YACA,OAAA;AAAA,YACA,IAAA,EAAM,CAAA;AAAA,YACN,GAAA,EAAK;AAAA,WACP;AAAA,UACA,OAAA,EAAS;AAAA,YACP,GAAG,QAAA,CAAS,QAAA;AAAA,YACZ,GAAG,QAAA,CAAS,QAAA;AAAA,YACZ,KAAA,EAAO,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,YACrB,SAAS,CAAC,OAAA,GAAU,GAAA,EAAK,OAAA,EAAS,UAAU,GAAG,CAAA;AAAA;AAAA,YAE/C,MAAA,EAAQ,QAAA,CAAS,EAAA,GAAK,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA,EAAG,GAAG,CAAA,GAAI,CAAC,GAAA,EAAK,CAAC;AAAA,WACpD;AAAA,UACA,UAAA,EAAY;AAAA,YACV,GAAG,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA,EAAG;AAAA,YACjD,GAAG,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA,EAAG;AAAA,YACjD,MAAA,EAAQ;AAAA,cACN,UAAU,QAAA,CAAS,iBAAA;AAAA,cACnB,MAAA,EAAQ,QAAA;AAAA,cACR,IAAA,EAAM;AAAA,aAER;AAAA,YACA,KAAA,EAAO;AAAA,cACL,UAAU,QAAA,CAAS,iBAAA;AAAA,cACnB,MAAA,EAAQ,QAAA;AAAA,cACR,KAAA,EAAO,YAAA,CAAa,QAAA,CAAS,EAAA,GAAK,OAAO,CAAA,GAAI,CAAA;AAAA,cAC7C,IAAA,EAAM;AAAA,aACR;AAAA,YACA,OAAA,EAAS;AAAA,cACP,UAAU,QAAA,CAAS,iBAAA;AAAA,cACnB,MAAA,EAAQ,QAAA;AAAA,cACR,KAAA,EAAO,YAAA,CAAa,QAAA,CAAS,EAAA,GAAK,OAAO,CAAA,GAAI,CAAA;AAAA,cAC7C,IAAA,EAAM;AAAA;AACR,WACF;AAAA,UAEC,QAAA,EAAA,QAAA,CAAS,IAAA,mBACRD,GAAAA,CAAC,SAAI,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAQ,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,UAAU,cAAA,EAAgB,QAAA,EAAS,EAC3G,QAAA,kBAAAA,GAAAA,CAACD,eAAAA,EAAA,EAAgB,IAAA,EAAM,SAAS,IAAA,EAAa,KAAA,EAAO,EAAE,KAAA,EAAO,OAAO,MAAA,EAAQ,KAAA,EAAM,EAAG,CAAA,EACvF,oBAEAC,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,MAAA;AAAA,gBACP,MAAA,EAAQ,MAAA;AAAA,gBACR,YAAA,EAAc,KAAA;AAAA,gBACd,eAAA,EAAiB;AAAA;AACnB;AAAA;AACF,SAAA;AAAA,QArDG,QAAA,CAAS;AAAA,OAwDjB,CAAA,EACH;AAAA;AAAA,GACF;AAEJ;ACrPO,SAAS,KAAK,KAAA,EAAkB;AACrC,EAAA,uBAAOA,IAAA,QAAA,EAAA,EAAE,CAAA;AACX;ACFO,SAAS,QAAQ,KAAA,EAAqB;AAC3C,EAAA,MAAMF,SAAQI,eAAAA,EAAgB;AAG9B,EAAA,uBACE,IAAA;AAAA,IAACC,IAAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,aAAA;AAAA,MACF,CAAA,EAAE,aAAA;AAAA,MACF,KAAA,EAAO;AAAA,QACL,YAAA,EAAcL,OAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,QAAA,EAAU,QAAA;AAAA,QACV,MAAA,EAAQ,CAAA,8BAAA;AAAA,OACV;AAAA,MACA,KAAA,EAAM,QAAA;AAAA,MAEN,QAAA,EAAA;AAAA,wBAAAE,GAAAA;AAAA,UAACG,IAAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAI,KAAA;AAAA,YACJ,CAAA,EAAE,KAAA;AAAA,YACF,EAAA,EAAG,oBAAA;AAAA,YACH,SAAA,EAAU,QAAA;AAAA,YACV,OAAA,EAAQ,QAAA;AAAA,YACR,KAAA,EAAM,QAAA;AAAA,YAEN,QAAA,kBAAAH,GAAAA;AAAA,cAACI,IAAAA;AAAA,cAAA;AAAA,gBAAK,CAAA,EAAE,WAAA;AAAA,gBAAY,IAAA,EAAK,KAAA;AAAA,gBACvB,KAAA,EAAO;AAAA,kBACL,UAAA,EAAY,cAAA;AAAA,kBACZ,aAAA,EAAe,QAAA;AAAA,kBACf,aAAA,EAAe;AAAA,iBACjB;AAAA,gBAAI,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AAAS;AAAA,SACvB;AAAA,wBAEAJ,GAAAA;AAAA,UAACG,IAAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,KAAA;AAAA,YACF,IAAA,EAAM,CAAA;AAAA,YACN,GAAA,EAAI,KAAA;AAAA,YACJ,EAAA,EAAG,oBAAA;AAAA,YACH,SAAA,EAAU,QAAA;AAAA,YACV,KAAA,EAAM,QAAA;AAAA,YACN,OAAA,EAAQ,QAAA;AAAA,YAER,QAAA,kBAAAH,GAAAA;AAAA,cAACI,IAAAA;AAAA,cAAA;AAAA,gBAAK,CAAA,EAAE,WAAA;AAAA,gBAAY,IAAA,EAAK,KAAA;AAAA,gBACvB,KAAA,EAAO;AAAA,kBACL,UAAA,EAAY,cAAA;AAAA,kBACZ,aAAA,EAAe,QAAA;AAAA,kBACf,aAAA,EAAe;AAAA,iBACjB;AAAA,gBACA,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AAAU;AAAA;AACpB;AAAA;AAAA,GAEF;AAEJ;AC1CO,SAAS,eAAe,KAAA,EAA2B;AACxD,EAAA,MAAMN,SAAQI,eAAAA,EAAgB;AAC9B,EAAA,uBACEG,IAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAG,MAAM,CAAA,IAAK,MAAA;AAAA,MACd,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAA,EAAU,QAAA;AAAA,MACV,GAAG,KAAA,CAAM,CAAA;AAAA,MACT,GAAA,EAAK,KAAA,CAAM,KAAA,GAAQ,IAAA,GAAO,CAAA;AAAA,MAC1B,EAAA,EAAI,MAAM,EAAA,IAAM,wBAAA;AAAA,MAChB,CAAA,EAAE,IAAA;AAAA,MACF,KAAA,EAAO;AAAA,QACL,YAAA,EAAcP,OAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,SAAA,EAAWA,OAAM,OAAA,CAAQ,EAAA;AAAA,QACzB,QAAA,EAAU,QAAA;AAAA,QACV,OAAA,EAAS,KAAA,CAAM,KAAA,GAAQ,CAAA,kCAAA,CAAA,GAAuC;AAAA,OAChE;AAAA,MACA,UAAU,KAAA,CAAM,QAAA;AAAA,MAGhB,QAAA,EAAA;AAAA,wBAAAO,IAAAA;AAAA,UAACF,IAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,QAAA;AAAA,YACN,GAAA,EAAI,IAAA;AAAA,YAGJ,QAAA,EAAA;AAAA,8BAAAE,IAAAA;AAAA,gBAACF,IAAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,QAAA;AAAA,kBACX,GAAA,EAAI,KAAA;AAAA,kBAEH,QAAA,EAAA;AAAA,oBAAA,KAAA,CAAM,yBACLH,GAAAA;AAAA,sBAACI,IAAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAK,IAAA;AAAA,wBACL,KAAA,EAAO;AAAA,0BACL,UAAA,EAAY,QAAA;AAAA,0BACZ,UAAA,EAAY,cAAA;AAAA,0BACZ,aAAA,EAAe,QAAA;AAAA,0BACf,aAAA,EAAe;AAAA,yBACjB;AAAA,wBACA,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,qBAAM;AAAA,oBAEf,KAAA,CAAM,+BACLJ,GAAAA;AAAA,sBAACI,IAAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAK,IAAA;AAAA,wBACL,CAAA,EAAE,0BAAA;AAAA,wBACF,EAAA,EAAI,GAAA;AAAA,wBACJ,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AAAY;AAAA;AAAA,eAGxB;AAAA,cACC,KAAA,CAAM,yBACLJ,GAAAA;AAAA,gBAACI,IAAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,IAAA;AAAA,kBACL,CAAA,EAAGN,MAAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA;AAAA,kBACrB,EAAA,EAAI,GAAA;AAAA,kBACJ,EAAA,EAAG,MAAA;AAAA,kBACH,EAAA,EAAG,KAAA;AAAA,kBAEF,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,eACT;AAAA,8BAEFE,GAAAA;AAAA,gBAACG,IAAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,MAAA;AAAA,kBAEF,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT;AAAA;AAAA,SACF;AAAA,QACC,KAAA,CAAM;AAAA;AAAA;AAAA,GACT;AAEJ;ACxEO,IAAM,QAAA,GAAW,OAAyB,MAAM;AACrD,EAAA,MAAM,YAA8C,EAAC;AAGrD,EAAA,MAAM,MAAA,GAAiC;AAAA,IACrC,KAAA,EAAO,aAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAGA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC/C,IAAA,SAAA,CAAU,GAAG,CAAA,GAAI,IAAI,KAAA,CAAM,GAAG,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAC,KAAA,KAAU;AACf,MAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,EAAO,OAAO,QAAQ,IAAA,CAAK,CAAA,OAAA,EAAU,KAAK,CAAA,YAAA,CAAc,CAAA;AAC7D,MAAA,KAAA,CAAM,WAAA,GAAc,CAAA;AACpB,MAAA,KAAA,CAAM,MAAA,GAAS,GAAA;AACf,MAAA,KAAA,CAAM,IAAA,EAAK;AAAA,IACb,CAAA;AAAA,IACA,IAAA,EAAM,CAAC,KAAA,KAAU;AACf,MAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,EAAO,OAAO,QAAQ,IAAA,CAAK,CAAA,OAAA,EAAU,KAAK,CAAA,YAAA,CAAc,CAAA;AAC7D,MAAA,KAAA,CAAM,KAAA,EAAM;AACZ,MAAA,KAAA,CAAM,WAAA,GAAc,CAAA;AAAA,IACtB;AAAA,GACF;AACF,CAAC,CAAA;;;AC1CM,IAAM,YAAA,GAAe,MAAe,CAAE,MAAA,CAAe;AAGrD,IAAM,OAAO,MAAM;AAAC;AAEpB,IAAM,aAAA,GAAgB,CAAC,QAAA,KAAoB;AAChD,EAAA,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,GAAI,QAAA,CAAS,MAAM,GAAG,CAAA;AAC5C,EAAA,IAAI,CAAC,UAAU,CAAC,OAAA,SAAgB,EAAC,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,UAAA,EAAU;AACnE,EAAA,OAAO,EAAC,QAAQ,OAAA,EAAO;AACzB;AAEO,IAAM,aAAA,GAAgB,CAAC,GAAA,KAAe;AAC3C,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAA,EAAK,IAAA,EAAM,OAAO,IAAA,EAAM,GAAA,EAAK,MAAM,KAAA,EAAO,MAAA,EAAQ,MAAM,GAAA,EAAK,IAAA,EAAM,OAAO,MAAA,EAAQ,KAAA,EAAO,MAAM,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,IAAI,CAAA;AACzJ,EAAA,OAAO,cAAc,GAAG,CAAA;AAC1B;AAEO,IAAM,eAAA,GAAkB,CAAC,IAAA,KAAgB;AAC9C,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAC5C,EAAA,EAAA,CAAG,KAAA,GAAQ,IAAA;AACX,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,EAAE,CAAA;AAC5B,EAAA,EAAA,CAAG,MAAA,EAAO;AACV,EAAA,QAAA,CAAS,YAAY,MAAM,CAAA;AAC3B,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,EAAE,CAAA;AAC9B;AAEO,IAAM,QAAA,GAAW,CAAC,GAAA,KAAe;AACtC,EAAA,IAAI,cAAa,EAAG;AAClB,IAAA,MAAA,CAAO,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,EAC3B,CAAA,MAAO;AAEL,IAAA,MAAA,CAAO,YAAA,CAAa,YAAY,GAAG,CAAA;AAAA,EACrC;AACF;;;AClBA,eAAsB,QAAA,CACpB,SAAA,EACA,IAAA,EACA,QAAA,EACY;AACZ,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,GAC3B;AACA,EAAA,OAAA,CAAQ,GAAA,CAAI,cAAc,QAAQ,CAAA;AAClC,EAAA,OAAA,CAAQ,GAAA,CAAI,iBAAA,EAAmB,YAAA,EAAc,CAAA;AAC7C,EAAA,IAAI,YAAA,EAAa,IAAK,QAAA,KAAa,MAAA,EAAW,OAAO,QAAA;AAErD,EAAA,MAAM,YAAA,GAAgB,MAAA,CAAe,qBAAA,GAChC,MAAA,CAAe,uBAAsB,GACtC,eAAA;AAEJ,EAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,CAAA,QAAA,EAAW,YAAY,CAAA,CAAA,EAAI,SAAS,IAAI,OAAO,CAAA;AAExE,EAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,IAAA,EAAK;AAEtC,EAAA,OAAO,aAAA;AACT;AASO,SAAS,WAAA,CACd,SAAA,EACA,IAAA,EACA,QAAA,EACY;AAEZ,EAAA,OAAO,SAAY,SAAA,EAAW,IAAA,EAAM,QAAQ,CAAA,CACzC,KAAA,CAAM,CAAC,GAAA,KAAQ;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,yBAAA,EAA4B,SAAS,CAAA,CAAA,CAAA,EAAK,GAAG,CAAA;AAC3D,IAAA,MAAM,GAAA;AAAA,EACR,CAAC,CAAA;AACL;AAGO,IAAM,aAAA,GAAgB,CAAI,SAAA,KAAsB,MAAM;AAC3D,EAAA,IAAI,cAAa,EAAG;AAClB,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,EAAO,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,QAAA,CAAY,eAAA,EAAiB,EAAE,SAAA,EAAW,CAAA;AACnD;;;ACrDO,IAAM,aAAA,GAAgB,CAAI,MAAA,EAA4B,KAAA,GAAQ,GAAA,KAAe;AAClF,EAAA,IAAI,cAAa,EAAG;AAClB,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,MAAA,CAAO,aAAA;AAAA,UACL,IAAI,aAAa,SAAA,EAAW;AAAA,YAC1B,IAAA,EAAM;AAAA,cACJ,QAAQ,KAAA,CAAM,MAAA;AAAA,cACd,MAAM,KAAA,CAAM;AAAA;AACd,WACD;AAAA,SACH;AAAA,MACF,GAAG,KAAK,CAAA;AAAA,IACV;AAAA,EACF;AACF;ACbO,IAAM,WAAA,GAAcG,MAAAA,CAAyB,CAAC,GAAA,EAAK,GAAA,KAAQ;AAChE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP,eAAA,EAAiB;AAAA,KACnB;AAAA,IACA,MAAA,EAAQ,CAAC,GAAA,EAAA,GAAgB,IAAA,KAAoC;AAC3D,MAAA,MAAM,MAAA,GAAS,GAAA,EAAI,CAAE,OAAA,CAAQ,GAAG,CAAA;AAKhC,MAAA,IAAI,cAAc,MAAA,IAAU,GAAA;AAC5B,MAAA,IAAI,KAAK,MAAA,EAAQ;AAIf,QAAA,WAAA,GAAc,WAAA,CAAY,QAAQ,KAAA,EAAO,MAAM,OAAO,IAAA,CAAK,KAAA,EAAM,IAAK,EAAE,CAAC,CAAA;AAAA,MAC3E;AACA,MAAA,OAAO,WAAA;AAAA,IACT;AAAA,GACF;AACF,CAAC;AAGM,IAAM,MAAA,GAAS,WAAA,CAAY,QAAA,EAAS,CAAE;AAE7C,WAAA,CAA0B,aAAa,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AACtD,EAAA,WAAA,CAAY,QAAA,CAAS,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AACxC,CAAC,CAAA;ACjBM,SAAS,iBAAiB,KAAA,EAA8B;AAC7D,EAAA,MAAMR,SAAQI,eAAAA,EAAgB;AAC9B,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,CAAC,KAAA,KAAU,MAAM,IAAI,CAAA;AAE3C,EAAA,MAAM,YAAA,GAAe,CAAC,QAAA,KAAgC;AACpD,IAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,IAAA,CAAK,OAAO,CAAA;AAC9B,IAAA,IAAI,MAAM,QAAA,EAAU;AAClB,MAAA,KAAA,CAAM,SAAS,QAAQ,CAAA;AAAA,IACzB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEF,GAAAA;AAAA,IAACG,IAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAG,uBAAA;AAAA,MACH,CAAA,EAAG,MAAM,CAAA,IAAK,aAAA;AAAA,MACd,KAAA,EAAO;AAAA,QACL,YAAA,EAAcL,OAAM,MAAA,CAAO,EAAA;AAAA,QAC3B,QAAA,EAAU;AAAA,OACZ;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,gBAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,0BACtBE,GAAAA;AAAA,QAACC,MAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UAEC,OAAA,EAAS,EAAE,CAAA,EAAG,IAAA,EAAM,SAAS,CAAA,EAAE;AAAA,UAC/B,OAAA,EAAS,EAAE,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,UAC5B,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,OAAO,KAAA,GAAQ,GAAA,EAAK,MAAM,WAAA,EAAY;AAAA,UAEnE,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,KAAA;AAAA,YACf,UAAA,EAAY,QAAA;AAAA,YACZ,IAAA,EAAM;AAAA,WACR;AAAA,UAEA,QAAA,kBAAAD,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cAEC,OAAO,IAAA,CAAK,KAAA;AAAA,cACZ,OAAO,IAAA,CAAK,KAAA;AAAA,cACZ,MAAM,IAAA,CAAK,IAAA;AAAA,cACX,cAAc,IAAA,CAAK,YAAA;AAAA,cACnB,IAAI,KAAA,CAAM,EAAA;AAAA,cACV,UAAU,CAAC,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,UAAU,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,MAAM,KAAK,CAAA,IAAK,MAAM,KAAA,CAAM,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,cACnH,SAAS,MAAM;AAEb,gBAAA,IAAI,MAAM,KAAA,EAAO;AACf,kBAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,GACtC,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA,GAC7B,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,IAAA,CAAK,KAAK,CAAA,GAC1C,CAAC,GAAG,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,KAAK,CAAA,GAC7B,CAAC,KAAK,KAAK,CAAA;AAEf,kBAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,gBACvB,CAAA,MAAO;AACL,kBAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,gBACzB;AAAA,cACF;AAAA,aAAA;AAAA,YApBK,IAAA,CAAK;AAAA;AAqBZ,SAAA;AAAA,QAlCK;AAAA,OAoCR;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,QAAQ,KAAA,EAIrB;AACD,EAAA,MAAMF,SAAQI,eAAAA,EAAgB;AAE9B,EAAA,uBACEG,IAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,CAAA,EAAE,MAAA;AAAA,MACF,SAAA,EAAU,QAAA;AAAA,MACV,KAAA,EAAM,QAAA;AAAA,MAEN,CAAA,EAAE,MAAA;AAAA,MACF,EAAA,EAAI,KAAA,CAAM,QAAA,GAAW,cAAA,CAAeP,MAAAA,CAAM,MAAA,CAAOA,MAAAA,CAAM,YAAY,CAAA,CAAEA,MAAAA,CAAM,YAAsB,CAAA,EAAG,GAAG,CAAA,GAAI,aAAA;AAAA,MAC3G,GAAA,EAAI,UAAA;AAAA,MACJ,KAAA,EAAO;AAAA;AAAA,QAEL,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,OAAA,EAAS,QAAA;AAAA,MACT,UAAA,EAAY,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MAC1B,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MAExB,QAAA,EAAA;AAAA,wBAAAO,IAAAA;AAAA,UAACF,IAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,QAAA;AAAA,YACN,GAAA,EAAI,IAAA;AAAA,YAEJ,CAAA,EAAE,IAAA;AAAA,YAGD,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,wBACLH,GAAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,MAAM,KAAA,CAAM,IAAA;AAAA,kBAEZ,OAAA,EAAS;AAAA,oBACP,KAAA,EAAO,MAAM,QAAA,GAAWF,MAAAA,CAAM,OAAOA,MAAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA,mBAChE;AAAA,kBACA,OAAA,EAAS;AAAA,oBACP,KAAA,EAAO,MAAM,QAAA,GAAWA,MAAAA,CAAM,OAAOA,MAAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA,mBAChE;AAAA,kBACA,IAAA,EAAM;AAAA,oBACJ,KAAA,EAAO;AAAA,mBACT;AAAA,kBACA,KAAA,EAAO;AAAA,oBACL,QAAA,EAAUA,OAAM,SAAA,CAAU,EAAA;AAAA,oBAC1B,YAAA,EAAc;AAAA;AAChB;AAAA,eACF;AAAA,8BAEFE,GAAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAM,MAAM,EAAA,IAAM,IAAA;AAAA,kBAClB,OAAA,EAAS;AAAA,oBACP,KAAA,EAAO,MAAM,QAAA,GAAWF,MAAAA,CAAM,OAAOA,MAAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA,mBAChE;AAAA,kBACA,OAAA,EAAS;AAAA,oBACP,KAAA,EAAO,MAAM,QAAA,GAAWA,MAAAA,CAAM,OAAOA,MAAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,GAAI;AAAA,mBAChE;AAAA,kBACA,IAAA,EAAM;AAAA,oBACJ,KAAA,EAAO;AAAA,mBACT;AAAA,kBACA,KAAA,EAAO;AAAA,oBACL,UAAA,EAAY,cAAA;AAAA,oBACZ,aAAA,EAAe,OAAA;AAAA,oBACf,aAAA,EAAe;AAAA,mBACjB;AAAA,kBACA,QAAA,EAAA,KAAA,CAAM,MAAM,WAAA;AAAY;AAAA,eAAE;AAAA,cAC3B,KAAA,CAAM;AAAA;AAAA;AAAA,SACT;AAAA,wBAGAE,GAAAA;AAAA,UAACC,MAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS,KAAA;AAAA,YACT,OAAA,EAAS;AAAA,cACP,MAAA,EAAQ,KAAA,CAAM,QAAA,GAAW,CAAA,GAAI,CAAA;AAAA,cAC7B,OAAA,EAAS,KAAA,CAAM,QAAA,GAAW,CAAA,GAAI;AAAA,aAChC;AAAA,YACA,UAAA,EAAY;AAAA,cACV,QAAA,EAAU,GAAA;AAAA,cACV,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,KAAK,CAAC;AAAA;AAAA,aACvB;AAAA,YACA,KAAA,EAAO;AAAA,cACL,QAAA,EAAU,UAAA;AAAA,cACV,MAAA,EAAQ,CAAA;AAAA,cACR,IAAA,EAAM,CAAA;AAAA,cACN,KAAA,EAAO,CAAA;AAAA,cACP,MAAA,EAAQ,OAAA;AAAA,cACR,iBAAiBH,MAAAA,CAAM,MAAA,CAAOA,MAAAA,CAAM,YAAY,EAAE,CAAC,CAAA;AAAA,cACnD,eAAA,EAAiB;AAAA;AACnB;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;ACjLO,IAAM,iBAAA,GAAoB,cAAgD,IAAI;AAE9E,SAAS,cAAiB,QAAA,EAAwC;AACvE,EAAA,MAAM,UAAA,GAAa,WAAW,iBAAiB,CAAA;AAC/C,EAAA,IAAG,CAAC,UAAA,EAAW;AACb,IAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,EAC1E;AACA,EAAA,OAAO,QAAA,CAAS,YAAY,QAAQ,CAAA;AACtC;AAGO,SAAS,kBAAA,GAAoB;AAClC,EAAA,MAAM,UAAA,GAAa,WAAW,iBAAiB,CAAA;AAC/C,EAAA,IAAG,CAAC,UAAA,EAAW;AACb,IAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,EAC/E;AACA,EAAA,OAAO,UAAA;AACT;AAEO,SAAS,kBAAA,CAAmB,EAAE,QAAA,EAAU,WAAA,EAAY,EAAuD;AAChH,EAAA,MAAM,QAAA,GAAWS,MAAAA;AAAA,IACfD,OAAwB,OAAO;AAAA,MAC7B,QAAQ,WAAA,IAAe;AAAA,KACzB,CAAE;AAAA,GACJ;AAEA,EAAA,uBACEN,IAAC,iBAAA,CAAkB,QAAA,EAAlB,EAA2B,KAAA,EAAO,QAAA,CAAS,SACzC,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,OAAO,KAAA,EAErB;AACA,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,CAAC,KAAA,KAAU,MAAM,MAAM,CAAA;AACpD,EAAA,MAAM,QAAQ,kBAAA,EAAmB;AAEjC,EAAA,uBACEA,GAAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAM,IAAA;AAAA,MACN,CAAA,EAAE,MAAA;AAAA,MACF,KAAA,EAAO,MAAA;AAAA,MACP,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,QAAA,KAAA,CAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,KAAA,EAAiB,CAAA;AAAA,MAC5C;AAAA;AAAA,GACF;AAEJ;ACjDA,IAAM,iBAAA,GAA8B;AAAA,EAClC,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACrB,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,CAAA;AAAA,IACT,UAAA,EAAY;AAAA,MACV,eAAA,EAAiB,GAAA;AAAA,MACjB,aAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,CAAA;AAAA,IACT,UAAA,EAAY;AAAA,MACV,eAAA,EAAiB,IAAA;AAAA,MACjB,gBAAA,EAAkB;AAAA;AACpB;AAEJ,CAAA;AAGA,IAAM,YAAA,GAAyB;AAAA,EAC7B,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,EAAA;AAAA,IACH,KAAA,EAAO;AAAA,GACT;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,CAAA;AAAA,IACH,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY;AAAA,MACV,IAAA,EAAM,QAAA;AAAA,MACN,SAAA,EAAW,GAAA;AAAA,MACX,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,GAAA;AAAA,IACH,KAAA,EAAO,IAAA;AAAA,IACP,UAAA,EAAY;AAAA,MACV,QAAA,EAAU;AAAA;AACZ;AAEJ,CAAA;AAIO,SAAS,kBAAkB,KAAA,EAAsB;AACtD,EAAA,MAAM,kBAAA,GAAqB,MAAM,KAAA,CAAM,QAAA;AACvC,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,WAAW,kBAAkB,CAAA;AACrE,EAAA,MAAM,WAAA,GAAe,KAAA,CAAM,QAAA,GAAW,kBAAA,GAAsB,kBAAA;AAE5D,EAAA,uBACEA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,MAAA;AAAA,MACF,CAAA,EAAG,MAAM,IAAA,IAAQ,KAAA;AAAA,MACjB,GAAA,EAAI,IAAA;AAAA,MACJ,OAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAQ,SAAA;AAAA,MACR,QAAA,EAAU,iBAAA;AAAA,MAET,QAAA,EAAA,CAAC,GAAG,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,KAAU;AAC5C,QAAA,MAAM,WAAW,KAAA,GAAQ,cAAA;AACzB,QAAA,MAAM,YAAY,KAAA,KAAU,cAAA;AAE5B,QAAA,uBACEA,GAAAA;AAAA,UAACC,MAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YAEC,QAAA,EAAU,YAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,KAAA,EAAO,CAAA,EAAG,GAAA,GAAM,KAAA,CAAM,QAAQ,CAAA,CAAA,CAAA;AAAA;AAAA,cAC9B,MAAA,EAAQ,MAAA;AAAA,cACR,UAAA,EAAY,QAAA,GACR,0BAAA,GACA,SAAA,GACA,CAAA,mDAAA,EAAsD,cAAc,GAAG,CAAA,4BAAA,EAA+B,WAAA,GAAc,GAAG,CAAA,EAAA,CAAA,GACvH,0BAAA;AAAA,cACJ,UAAA,EAAY;AAAA;AACd,WAAA;AAAA,UAXK;AAAA,SAYP;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ;ACnEO,SAAS,MAAM,KAAA,EAAmB;AAEvC,EAAA,MAAMH,SAAQI,eAAAA,EAAgB;AAC9B,EAAA,uBACEF,GAAAA;AAAA,IAACG,IAAAA;AAAA,IAAA;AAAA,MACC,IAAI,KAAA,CAAM,EAAA;AAAA,MACV,SAAA,EAAU,QAAA;AAAA,MAEV,EAAA,EAAI,MAAM,EAAA,IAAM,aAAA;AAAA,MAChB,GAAA,EAAI,IAAA;AAAA,MAIJ,CAAA,EAAG,MAAM,CAAA,IAAK,MAAA;AAAA,MAId,CAAA,EAAG,MAAM,CAAA,IAAK,GAAA;AAAA,MACd,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,MAAA;AAAA,QACZ,cAAc,KAAA,CAAM,YAAA,GAAe,MAAA,GAAS,CAAA,YAAA,EAAe,MAAM,WAAA,IAAe,cAAA,CAAeL,MAAAA,CAAM,MAAA,CAAOA,OAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,OAC1I;AAAA,MAEA,QAAA,kBAAAO,IAAAA;AAAA,QAACF,IAAAA;AAAA,QAAA;AAAA,UAEC,KAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,QAAA;AAAA,UAGT,QAAA,EAAA;AAAA,4BAAAE,IAAAA;AAAA,cAACF,IAAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,QAAA;AAAA,gBACN,GAAA,EAAI,IAAA;AAAA,gBACJ,EAAA,EAAG,IAAA;AAAA,gBAEH,QAAA,EAAA;AAAA,kCAAAH,GAAAA;AAAA,oBAAC,YAAA;AAAA,oBAAA;AAAA,sBACC,MAAM,KAAA,CAAM,IAAA;AAAA,sBACZ,QAAA,EAAUF,OAAM,SAAA,CAAU,EAAA;AAAA,sBAC1B,OAAO,KAAA,CAAM;AAAA;AAAA,mBACf;AAAA,kCACAO,IAAAA;AAAA,oBAACF,IAAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,QAAA;AAAA,sBACV,GAAA,EAAI,QAAA;AAAA,sBAGJ,QAAA,EAAA;AAAA,wCAAAH,IAACI,IAAAA,EAAA,EAAK,GAAE,GAAA,EAAI,IAAA,EAAK,MAAK,KAAA,EAAO;AAAA,0BAC3B,UAAA,EAAYN,OAAM,SAAA,CAAU,EAAA;AAAA,0BAC5B,UAAA,EAAY,cAAA;AAAA,0BACZ,aAAA,EAAe,QAAA;AAAA,0BACf,aAAA,EAAe;AAAA,yBACjB,EAAI,gBAAM,KAAA,EAAM,CAAA;AAAA,wCAChBE,GAAAA;AAAA,0BAACI,IAAAA;AAAA,0BAAA;AAAA,4BACC,IAAA,EAAK,IAAA;AAAA,4BACL,CAAA,EAAE,MAAA;AAAA,4BACF,KAAA,EAAO,EAAE,UAAA,EAAY,QAAA,EAAU,UAAU,YAAA,EAAa;AAAA,4BACtD,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AAAY;AAAA;AAAA;AACtB;AAAA;AAAA,aAGF;AAAA,4BAEAJ,GAAAA;AAAA,cAACG,IAAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,MAAA;AAAA,gBACH,KAAA,EAAM,QAAA;AAAA,gBACN,GAAA,EAAI,IAAA;AAAA,gBAEH,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;AC1EO,IAAM,WAAA,GAAc,CACzB,MAAA,EACA,OAAA,KACG;AACH,EAAA,MAAM,YAAA,GAAyDI,OAAO,IAAI,CAAA;AAG1E,EAAAC,UAAU,MAAM;AACd,IAAA,YAAA,CAAa,OAAA,GAAU,OAAA;AAAA,EACzB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAAA,UAAU,MAAM;AACd,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAA2C;AAChE,MAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAa,IAAA,KAAS,KAAA,CAAM,IAAA;AAE5C,MAAA,IAAI,aAAa,OAAA,EAAS;AACxB,QAAA,IAAI,gBAAgB,MAAA,EAAQ;AAC1B,UAAA,YAAA,CAAa,QAAS,IAAI,CAAA;AAAA,QAC5B;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAEhD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,EAClE,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACb;AC9CA,IAAM,QAAQ,WAAA,CAAY;AAAA,EACxB,YAAA,EAAc,MAAA;AAAA,EACd,YAAA,EAAc,CAAA;AAAA,EACd,aAAA,EAAe,KAAA;AAAA,EACf,UAAA,EAAY,6BAAA;AAAA,EAEZ,MAAA,EAAO;AAAA,IACL,GAAA,EAAK,OAAA;AAAA,IACL,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,QAAA;AAAA,IACJ,EAAA,EAAI,KAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,KAAA;AAAA,IACJ,GAAA,EAAK;AAAA,GACP;AAAA,EAEA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,OAAA;AAAA,IACL,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,GAAA,EAAK;AAAA,GACP;AAAA,EAEA,OAAA,EAAQ;AAAA,IACN,GAAA,EAAK,OAAA;AAAA,IACL,EAAA,EAAI,QAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,KAAA;AAAA,IACJ,EAAA,EAAI,KAAA;AAAA,IACJ,EAAA,EAAI,KAAA;AAAA,IACJ,GAAA,EAAK;AAAA,GACP;AAAA,EAEA,UAAA,EAAW;AAAA,IACT,QAAA,EAAS;AAAA,MACP,MAAA,EAAO;AAAA,QACL,IAAA,EAAK;AAAA,UACH,eAAA,EAAiB;AAAA;AACnB;AAEF,KACF;AAAA,IAEA,MAAA,EAAO;AAAA,MACL,MAAA,EAAO;AAAA,QACL,QAAA,EAAS;AAAA,UACP,YAAA,EAAc;AAAA,SAChB;AAAA,QACA,KAAA,EAAM;AAAA,UACJ,OAAA,EAAS;AAAA,SACX;AAAA,QACA,IAAA,EAAK;AAAA,UAEH,YAAA,EAAc;AAAA,SAChB;AAAA,QACA,OAAA,EAAQ;AAAA,UAEN,YAAA,EAAc;AAAA,SAChB;AAAA,QACA,MAAA,EAAO;AAAA,UACL,YAAA,EAAc;AAAA;AAChB;AAEF,KACF;AAAA,IACA,WAAA,EAAY;AAAA,MACV,MAAA,EAAO;AAAA,QACL,QAAA,EAAS;AAAA,UACP,YAAA,EAAc;AAAA,SAChB;AAAA,QACA,IAAA,EAAK;AAAA,UACH,YAAA,EAAc;AAAA,SAChB;AAAA,QACA,IAAA,EAAK;AAAA,UACH,YAAA,EAAc;AAAA,SAChB;AAAA,QACA,OAAA,EAAQ;AAAA,UACN,YAAA,EAAc;AAAA,SAChB;AAAA,QACA,MAAA,EAAO;AAAA,UACL,YAAA,EAAc;AAAA;AAChB;AAEF,KACF;AAAA,IACA,SAAA,EAAU;AAAA,MACR,MAAA,EAAO;AAAA,QACL,OAAA,EAAQ;AAAA,UACN,WAAA,EAAa;AAAA,SACf;AAAA,QAEA,KAAA,EAAM;AAAA,UACJ,OAAA,EAAS;AAAA;AACX;AAIF;AACF,GACF;AAAA,EAEA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAK;AAAA,MACH,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,IAAA,EAAK;AAAA,MACH,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC,CAAA;AAGD,IAAO,aAAA,GAAQ,KAAA;AC1Hf,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAOlB,IAAM,WAAA,GAAcF,MAAAA,CAKxB,CAAC,GAAA,MAAS;AAAA,EACX,IAAA,EAAM,MAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,YAAA,EAAc,CAAA;AAAA,EACd,aAAa;AACf,CAAA,CAAE;AAEK,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAqB,WAAA,CAAY,CAAC,IAAA,KAAS,KAAK,YAAY;AAC5D,EAAqB,WAAA,CAAY,CAAC,IAAA,KAAS,KAAK,YAAY;AAC5D,EAAoB,WAAA,CAAY,CAAC,IAAA,KAAS,KAAK,WAAW;AA4B1D,EAAA,uBACEN,GAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAO,aAAA,EAAO,kBAAA,EAAmB,MAAA,EAChD,QAAA,kBAAAA,GAAAA,CAAC,OAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,QAAA,EACT,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,OAAA,CAAQ,EAAE,QAAA,EAAS,EAAkC;AAC5D,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,CAAC,IAAA,KAAS,KAAK,IAAI,CAAA;AAC5C,EAAA,OAAO,YAAA,qBACLA,GAAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MAAgB,CAAA,EAAE,OAAA;AAAA,MAAQ,CAAA,EAAE,OAAA;AAAA,MAAQ,KAAA,EAAO,EAAC,QAAA,EAAS,QAAA,EAAQ;AAAA,MAC5D,GAAA,EAAK,IAAA,KAAS,OAAA,GACZ,sDAAA,GACE,iJAAA;AAAA,MAEH;AAAA;AAAA,GACH,mBAEAA,GAAAA,CAAAS,QAAAA,EAAA,EAAG,QAAA,EAAS,CAAA;AAEhB","file":"index.js","sourcesContent":["\r\nconst colorNames = {\r\n AliceBlue: { r: 240, g: 248, b: 255 },\r\n AntiqueWhite: { r: 250, g: 235, b: 215 },\r\n Aqua: { r: 0, g: 255, b: 255 },\r\n Aquamarine: { r: 127, g: 255, b: 212 },\r\n Azure: { r: 240, g: 255, b: 255 },\r\n Beige: { r: 245, g: 245, b: 220 },\r\n Bisque: { r: 255, g: 228, b: 196 },\r\n Black: { r: 0, g: 0, b: 0 },\r\n BlanchedAlmond: { r: 255, g: 235, b: 205 },\r\n Blue: { r: 0, g: 0, b: 255 },\r\n BlueViolet: { r: 138, g: 43, b: 226 },\r\n Brown: { r: 165, g: 42, b: 42 },\r\n BurlyWood: { r: 222, g: 184, b: 135 },\r\n CadetBlue: { r: 95, g: 158, b: 160 },\r\n Chartreuse: { r: 127, g: 255, b: 0 },\r\n Chocolate: { r: 210, g: 105, b: 30 },\r\n Coral: { r: 255, g: 127, b: 80 },\r\n CornflowerBlue: { r: 100, g: 149, b: 237 },\r\n Cornsilk: { r: 255, g: 248, b: 220 },\r\n Crimson: { r: 220, g: 20, b: 60 },\r\n Cyan: { r: 0, g: 255, b: 255 },\r\n DarkBlue: { r: 0, g: 0, b: 139 },\r\n DarkCyan: { r: 0, g: 139, b: 139 },\r\n DarkGoldenRod: { r: 184, g: 134, b: 11 },\r\n DarkGray: { r: 169, g: 169, b: 169 },\r\n DarkGreen: { r: 0, g: 100, b: 0 },\r\n DarkKhaki: { r: 189, g: 183, b: 107 },\r\n DarkMagenta: { r: 139, g: 0, b: 139 },\r\n DarkOliveGreen: { r: 85, g: 107, b: 47 },\r\n DarkOrange: { r: 255, g: 140, b: 0 },\r\n DarkOrchid: { r: 153, g: 50, b: 204 },\r\n DarkRed: { r: 139, g: 0, b: 0 },\r\n DarkSalmon: { r: 233, g: 150, b: 122 },\r\n DarkSeaGreen: { r: 143, g: 188, b: 143 },\r\n DarkSlateBlue: { r: 72, g: 61, b: 139 },\r\n DarkSlateGray: { r: 47, g: 79, b: 79 },\r\n DarkTurquoise: { r: 0, g: 206, b: 209 },\r\n DarkViolet: { r: 148, g: 0, b: 211 },\r\n DeepPink: { r: 255, g: 20, b: 147 },\r\n DeepSkyBlue: { r: 0, g: 191, b: 255 },\r\n DimGray: { r: 105, g: 105, b: 105 },\r\n DodgerBlue: { r: 30, g: 144, b: 255 },\r\n FireBrick: { r: 178, g: 34, b: 34 },\r\n FloralWhite: { r: 255, g: 250, b: 240 },\r\n ForestGreen: { r: 34, g: 139, b: 34 },\r\n Fuchsia: { r: 255, g: 0, b: 255 },\r\n Gainsboro: { r: 220, g: 220, b: 220 },\r\n GhostWhite: { r: 248, g: 248, b: 255 },\r\n Gold: { r: 255, g: 215, b: 0 },\r\n GoldenRod: { r: 218, g: 165, b: 32 },\r\n Gray: { r: 128, g: 128, b: 128 },\r\n Green: { r: 0, g: 128, b: 0 },\r\n GreenYellow: { r: 173, g: 255, b: 47 },\r\n HoneyDew: { r: 240, g: 255, b: 240 },\r\n HotPink: { r: 255, g: 105, b: 180 },\r\n IndianRed: { r: 205, g: 92, b: 92 },\r\n Indigo: { r: 75, g: 0, b: 130 },\r\n Ivory: { r: 255, g: 255, b: 240 },\r\n Khaki: { r: 240, g: 230, b: 140 },\r\n Lavender: { r: 230, g: 230, b: 250 },\r\n LavenderBlush: { r: 255, g: 240, b: 245 },\r\n LawnGreen: { r: 124, g: 252, b: 0 },\r\n LemonChiffon: { r: 255, g: 250, b: 205 },\r\n LightBlue: { r: 173, g: 216, b: 230 },\r\n LightCoral: { r: 240, g: 128, b: 128 },\r\n LightCyan: { r: 224, g: 255, b: 255 },\r\n LightGoldenRodYellow: { r: 250, g: 250, b: 210 },\r\n LightGray: { r: 211, g: 211, b: 211 },\r\n LightGreen: { r: 144, g: 238, b: 144 },\r\n LightPink: { r: 255, g: 182, b: 193 },\r\n LightSalmon: { r: 255, g: 160, b: 122 },\r\n LightSeaGreen: { r: 32, g: 178, b: 170 },\r\n LightSkyBlue: { r: 135, g: 206, b: 250 },\r\n LightSlateGray: { r: 119, g: 136, b: 153 },\r\n LightSteelBlue: { r: 176, g: 196, b: 222 },\r\n LightYellow: { r: 255, g: 255, b: 224 },\r\n Lime: { r: 0, g: 255, b: 0 },\r\n LimeGreen: { r: 50, g: 205, b: 50 },\r\n Linen: { r: 250, g: 240, b: 230 },\r\n Magenta: { r: 255, g: 0, b: 255 },\r\n Maroon: { r: 128, g: 0, b: 0 }, // Maroon\r\n MediumAquaMarine: { r: 102, g: 205, b: 170 },\r\n MediumBlue: { r: 0, g: 0, b: 205 },\r\n MediumOrchid: { r: 186, g: 85, b: 211 },\r\n MediumPurple: { r: 147, g: 112, b: 219 },\r\n MediumSeaGreen: { r: 60, g: 179, b: 113 },\r\n MediumSlateBlue: { r: 123, g: 104, b: 238 },\r\n MediumSpringGreen: { r: 0, g: 250, b: 154 },\r\n MediumTurquoise: { r: 72, g: 209, b: 204 },\r\n MediumVioletRed: { r: 199, g: 21, b: 133 },\r\n MidnightBlue: { r: 25, g: 25, b: 112 },\r\n MintCream: { r: 245, g: 255, b: 250 },\r\n MistyRose: { r: 255, g: 228, b: 225 },\r\n Moccasin: { r: 255, g: 228, b: 181 },\r\n NavajoWhite: { r: 255, g: 222, b: 173 },\r\n Navy: { r: 0, g: 0, b: 128 },\r\n OldLace: { r: 253, g: 245, b: 230 },\r\n Olive: { r: 128, g: 128, b: 0 },\r\n OliveDrab: { r: 107, g: 142, b: 35 },\r\n Orange: { r: 255, g: 165, b: 0 },\r\n OrangeRed: { r: 255, g: 69, b: 0 },\r\n Orchid: { r: 218, g: 112, b: 214 },\r\n PaleGoldenRod: { r: 238, g: 232, b: 170 },\r\n PaleGreen: { r: 152, g: 251, b: 152 },\r\n PaleTurquoise: { r: 175, g: 238, b: 238 },\r\n PaleVioletRed: { r: 219, g: 112, b: 147 },\r\n PapayaWhip: { r: 255, g: 239, b: 213 },\r\n PeachPuff: { r: 255, g: 218, b: 185 },\r\n Peru: { r: 205, g: 133, b: 63 },\r\n Pink: { r: 255, g: 192, b: 203 },\r\n Plum: { r: 221, g: 160, b: 221 },\r\n PowderBlue: { r: 176, g: 224, b: 230 },\r\n Purple: { r: 128, g: 0, b: 128 },\r\n RebeccaPurple: { r: 102, g: 51, b: 153 },\r\n Red: { r: 255, g: 0, b: 0 },\r\n RosyBrown: { r: 188, g: 143, b: 143 },\r\n RoyalBlue: { r: 65, g: 105, b: 225 },\r\n SaddleBrown: { r: 139, g: 69, b: 19 },\r\n Salmon: { r: 250, g: 128, b: 114 },\r\n SandyBrown: { r: 244, g: 164, b: 96 },\r\n SeaGreen: { r: 46, g: 139, b: 87 },\r\n SeaShell: { r: 255, g: 245, b: 238 },\r\n Sienna: { r: 160, g: 82, b: 45 },\r\n Silver: { r: 192, g: 192, b: 192 },\r\n SkyBlue: { r: 135, g: 206, b: 235 },\r\n SlateBlue: { r: 106, g: 90, b: 205 },\r\n SlateGray: { r: 112, g: 128, b: 144 },\r\n Snow: { r: 255, g: 250, b: 250 },\r\n SpringGreen: { r: 0, g: 255, b: 127 },\r\n SteelBlue: { r: 70, g: 130, b: 180 },\r\n Tan: { r: 210, g: 180, b: 140 },\r\n Teal: { r: 0, g: 128, b: 128 },\r\n Thistle: { r: 216, g: 191, b: 216 },\r\n Tomato: { r: 255, g: 99, b: 71 },\r\n Turquoise: { r: 64, g: 224, b: 208 },\r\n Violet: { r: 238, g: 130, b: 238 },\r\n Wheat: { r: 245, g: 222, b: 179 },\r\n White: { r: 255, g: 255, b: 255 },\r\n WhiteSmoke: { r: 245, g: 245, b: 245 },\r\n Yellow: { r: 255, g: 255, b: 0 },\r\n YellowGreen: { r: 154, g: 205, b: 50 }\r\n};\r\n\r\n\r\n\r\n\r\nexport function colorWithAlpha(color: string, alpha: number): string {\r\n const lowerCasedColor = color.toLowerCase() as keyof typeof colorNames;\r\n \r\n if (colorNames[lowerCasedColor]) {\r\n const rgb = colorNames[lowerCasedColor];\r\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\r\n }\r\n \r\n // If color is in hex format (#RRGGBB)\r\n if (/^#([A-Fa-f0-9]{6})$/.test(color)) {\r\n const hex = color.slice(1);\r\n const bigint = parseInt(hex, 16);\r\n const r = (bigint >> 16) & 255;\r\n const g = (bigint >> 8) & 255;\r\n const b = bigint & 255;\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n }\r\n \r\n // If color is in rgb format (rgb(r, g, b))\r\n if (/^rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)$/.test(color)) {\r\n const result = color.match(/^rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)$/);\r\n if (result) {\r\n return `rgba(${result[1]}, ${result[2]}, ${result[3]}, ${alpha})`;\r\n }\r\n }\r\n \r\n // Default to original color if format is not recognized\r\n return color;\r\n}","import { IconName } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useMantineTheme } from \"@mantine/core\";\r\nimport {colorWithAlpha} from \"@/utils/colorWithAlpha\";\r\n\r\n\r\n\r\nexport type BorderedIconProps = {\r\n icon: string;\r\n color?: string;\r\n fontSize?: string;\r\n hovered?: boolean;\r\n hoverable?: boolean;\r\n radius?: string;\r\n p?: string;\r\n}\r\n\r\nexport function BorderedIcon(props: BorderedIconProps){\r\n const theme = useMantineTheme();\r\n return (\r\n <FontAwesomeIcon\r\n icon={props.icon as IconName}\r\n color={colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][theme.primaryShade as number], props.hovered ? 0.9: 0.9)}\r\n style={{\r\n // backgroundColor: colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][7 as number], (props.hoverable ? (props.hovered ? 0.3 : 0.2) : 0.2)),\r\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\r\n \r\n padding: props.p || theme.spacing.xs,\r\n transition: 'all 0.2s ease-in-out',\r\n aspectRatio: '1/1', \r\n fontSize: props.fontSize ? props.fontSize: '2.5vh',\r\n borderRadius: theme.radius.xs,\r\n // border: `2px solid var(--mantine-primary-color-9)`,\r\n outline: `0.2vh solid ${colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][9], 0.8)}`,\r\n boxShadow: `inset 0 0 2vh ${colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][7], 0.5)}`\r\n }}\r\n />\r\n )\r\n}","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { Flex, Image, Text } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport React from \"react\";\r\n\r\n// @ts-expect-error ts-migrate(7006) FIXME: Parameter 'Flex' implicitly has an 'any' type.\r\nexport const MotionFlex = motion(Flex) as React.ComponentType<any>;\r\n\r\n// @ts-expect-error ts-migrate(7006) FIXME: Parameter 'Text' implicitly has an 'any' type.\r\nexport const MotionText = motion(Text) as React.ComponentType<any>;\r\n\r\nexport const MotionIcon = motion(FontAwesomeIcon) as React.ComponentType<any>;\r\n\r\n// @ts-expect-error ts-migrate(7006) FIXME: Parameter 'Image' implicitly has an 'any' type.\r\nexport const MotionImage = motion(Image) as React.ComponentType<any>;\r\n\r\n","import { AnimatePresence } from \"framer-motion\";\r\nimport { MotionFlex } from \"./Motion\";\r\n\r\nexport function Counter(props: {count: number, color?: string}) {\r\n return (\r\n <AnimatePresence>\r\n {props.count > 0 && (\r\n <MotionFlex\r\n key='counter'\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n\r\n fz='1.25vh'\r\n h='1.75vh'\r\n justify={'center'}\r\n align='center'\r\n bg={props.color || 'rgba(0, 0, 0, 0.51)'}\r\n style={{\r\n borderRadius: '50%',\r\n aspectRatio: '1/1',\r\n marginBottom: '0.3vh',\r\n fontFamily: 'Akrobat Bold',\r\n boxShadow: '0 0 5px rgba(0, 0, 0, 0.3)',\r\n }}\r\n >\r\n {props.count}\r\n </MotionFlex> \r\n )}\r\n </AnimatePresence>\r\n\r\n )\r\n}","import React, { useRef, useEffect, useState } from 'react';\r\nimport { motion, useMotionValue } from 'framer-motion';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nexport type FloatingParticlesProps = {\r\n icons?: React.ReactNode[];\r\n particleCount?: number;\r\n color?: string;\r\n size?: number;\r\n speed?: 'slow' | 'medium' | 'fast';\r\n opacity?: number;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n mouseRepelDistance?: number;\r\n mouseRepelStrength?: number;\r\n backgroundColor?: string;\r\n}\r\n\r\nexport type ParticleState = {\r\n id: number;\r\n baseX: number;\r\n baseY: number;\r\n currentX: number;\r\n currentY: number;\r\n icon: React.ReactNode | null;\r\n animationDuration: number;\r\n}\r\n\r\n\r\n\r\nexport const FloatingParticles: React.FC<FloatingParticlesProps> = ({\r\n icons = [],\r\n particleCount = 55,\r\n color = '#00a552ff',\r\n size = 32,\r\n speed = 'slow',\r\n opacity = 0.3,\r\n style = {},\r\n mouseRepelDistance = 150,\r\n mouseRepelStrength = 50,\r\n backgroundColor = 'transparent',\r\n}) => {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const [particles, setParticles] = useState<ParticleState[]>([]);\r\n \r\n const mouseX = useMotionValue(0);\r\n const mouseY = useMotionValue(0);\r\n\r\n const durationMap = {\r\n slow: { base: 10, variance: 10 },\r\n medium: { base: 2, variance: 2},\r\n fast: { base: 4, variance: 2 },\r\n };\r\n\r\n const duration = durationMap[speed];\r\n\r\n const seededRandom = (seed: number) => {\r\n const x = Math.sin(seed) * 10000;\r\n return x - Math.floor(x);\r\n };\r\n\r\n useEffect(() => {\r\n if (!containerRef.current) return;\r\n\r\n const bounds = containerRef.current.getBoundingClientRect();\r\n\r\n const newParticles: ParticleState[] = [...Array(particleCount)].map((_, i) => {\r\n const seedX = i * 123.456;\r\n const seedY = i * 789.012;\r\n const seedDuration = i * 345.678;\r\n \r\n const baseX = seededRandom(seedX) * bounds.width;\r\n const baseY = seededRandom(seedY) * bounds.height;\r\n \r\n return {\r\n id: i,\r\n baseX,\r\n baseY,\r\n currentX: baseX,\r\n currentY: baseY,\r\n icon: icons.length > 0 ? icons[i % icons.length] : null,\r\n animationDuration: duration.base + seededRandom(seedDuration) * duration.variance,\r\n };\r\n });\r\n\r\n setParticles(newParticles);\r\n }, [particleCount, icons.length, duration.base, duration.variance]);\r\n\r\n useEffect(() => {\r\n if (!containerRef.current) return;\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n const bounds = containerRef.current!.getBoundingClientRect();\r\n const x = e.clientX - bounds.left;\r\n const y = e.clientY - bounds.top;\r\n \r\n mouseX.set(x);\r\n mouseY.set(y);\r\n\r\n setParticles(prevParticles => \r\n prevParticles.map(particle => {\r\n const dx = x - particle.baseX;\r\n const dy = y - particle.baseY;\r\n const distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n if (distance < mouseRepelDistance && distance > 0) {\r\n const force = (mouseRepelDistance - distance) / mouseRepelDistance;\r\n const repelX = (dx / distance) * force * mouseRepelStrength * -1;\r\n const repelY = (dy / distance) * force * mouseRepelStrength * -1;\r\n\r\n return {\r\n ...particle,\r\n currentX: particle.baseX + repelX,\r\n currentY: particle.baseY + repelY,\r\n };\r\n } else {\r\n return {\r\n ...particle,\r\n currentX: particle.baseX,\r\n currentY: particle.baseY,\r\n };\r\n }\r\n })\r\n );\r\n };\r\n\r\n const handleMouseLeave = () => {\r\n setParticles(prevParticles =>\r\n prevParticles.map(particle => ({\r\n ...particle,\r\n currentX: particle.baseX,\r\n currentY: particle.baseY,\r\n }))\r\n );\r\n };\r\n\r\n const container = containerRef.current;\r\n container.addEventListener('mousemove', handleMouseMove);\r\n container.addEventListener('mouseleave', handleMouseLeave);\r\n\r\n return () => {\r\n container.removeEventListener('mousemove', handleMouseMove);\r\n container.removeEventListener('mouseleave', handleMouseLeave);\r\n };\r\n }, [mouseX, mouseY, mouseRepelDistance, mouseRepelStrength]);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n if (!containerRef.current) return;\r\n \r\n const bounds = containerRef.current.getBoundingClientRect();\r\n \r\n setParticles(prevParticles =>\r\n prevParticles.map((particle, i) => {\r\n const seedX = i * 123.456 + bounds.width;\r\n const seedY = i * 789.012 + bounds.height;\r\n \r\n const newBaseX = seededRandom(seedX) * bounds.width;\r\n const newBaseY = seededRandom(seedY) * bounds.height;\r\n \r\n return {\r\n ...particle,\r\n baseX: newBaseX,\r\n baseY: newBaseY,\r\n currentX: newBaseX,\r\n currentY: newBaseY,\r\n };\r\n })\r\n );\r\n };\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n\r\n return (\r\n <div \r\n ref={containerRef}\r\n style={{\r\n position: 'absolute',\r\n overflow: 'hidden',\r\n width: '100%',\r\n height: '100%',\r\n zIndex: -1,\r\n \r\n backgroundColor,\r\n ...style,\r\n }}\r\n >\r\n <div style={{ position: 'absolute', inset: 0, pointerEvents: 'none' }}>\r\n {particles.map((particle) => (\r\n <motion.div\r\n key={particle.id}\r\n style={{\r\n position: 'absolute',\r\n width: size,\r\n height: size,\r\n color,\r\n opacity,\r\n left: 0,\r\n top: 0,\r\n }}\r\n animate={{\r\n x: particle.currentX,\r\n y: particle.currentY,\r\n scale: [0.8, 1.1, 0.8],\r\n opacity: [opacity * 0.5, opacity, opacity * 0.5],\r\n // random rotate between 0 and 360 so that not all particles rotate the same\r\n rotate: particle.id % 2 === 0 ? [0, 360] : [360, 0],\r\n }}\r\n transition={{\r\n x: { type: \"spring\", stiffness: 150, damping: 20 },\r\n y: { type: \"spring\", stiffness: 150, damping: 20 },\r\n rotate: {\r\n duration: particle.animationDuration,\r\n repeat: Infinity,\r\n ease: 'linear',\r\n \r\n },\r\n scale: {\r\n duration: particle.animationDuration,\r\n repeat: Infinity,\r\n delay: seededRandom(particle.id * 111.222) * 5,\r\n ease: 'easeInOut',\r\n },\r\n opacity: {\r\n duration: particle.animationDuration,\r\n repeat: Infinity,\r\n delay: seededRandom(particle.id * 333.444) * 5,\r\n ease: 'easeInOut',\r\n },\r\n }}\r\n >\r\n {particle.icon ? (\r\n <div style={{ width: '100%', height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\r\n <FontAwesomeIcon icon={particle.icon as any} style={{ width: '70%', height: '70%' }} />\r\n </div>\r\n ) : (\r\n <div\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n borderRadius: '50%',\r\n backgroundColor: color,\r\n }}\r\n />\r\n )}\r\n </motion.div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n","export type IconProps = {\r\n type: 'fontawesome' | 'lucid';\r\n icon: string;\r\n size?: string | number;\r\n}\r\n\r\n// Option for both and wrap in motion for motion effects\r\nexport function Icon(props: IconProps) {\r\n return <></>\r\n}","import { useMantineTheme, Flex, Text } from \"@mantine/core\";\r\n\r\nexport type InfoBoxProps = {\r\n leftSide: string;\r\n rightSide: string;\r\n};\r\n\r\nexport function InfoBox(props: InfoBoxProps) {\r\n const theme = useMantineTheme();\r\n\r\n\r\n return (\r\n <Flex\r\n w='fit-content'\r\n h='fit-content'\r\n style={{\r\n borderRadius: theme.radius.xs,\r\n overflow: 'hidden',\r\n border: `0.2vh solid rgba(77,77,77,0.3)`\r\n }}\r\n align='center'\r\n >\r\n <Flex\r\n miw='4vh'\r\n p='xxs'\r\n bg='rgba(77,77,77,0.2)'\r\n direction='column'\r\n justify='center'\r\n align='center'\r\n >\r\n <Text c='lightgrey' size='xxs'\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n }}>{props.leftSide}</Text>\r\n </Flex>\r\n\r\n <Flex\r\n p='xxs'\r\n flex={1}\r\n miw='4vh'\r\n bg='rgba(77,77,77,0.5)'\r\n direction='column'\r\n align='center'\r\n justify='center'\r\n >\r\n <Text c='lightgrey' size='xxs'\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n }}\r\n >{props.rightSide}</Text>\r\n </Flex>\r\n\r\n </Flex>\r\n );\r\n}\r\n","import { useMantineTheme, Flex, Text } from \"@mantine/core\";import { Variants } from \"framer-motion\";\r\nimport { MotionFlex } from \"./Motion\";\r\n\r\nexport type InputContainerProps = {\r\n title?:string;\r\n error?: string;\r\n description?:string;\r\n children?:React.ReactNode;\r\n w?:string | number;\r\n flex?:number | string;\r\n h?:string | number;\r\n bg?:string;\r\n variants?: Variants;\r\n rightSection?:React.ReactNode;\r\n}\r\n\r\nexport function InputContainer(props:InputContainerProps) {\r\n const theme = useMantineTheme()\r\n return (\r\n <MotionFlex\r\n w={props.w || '100%'}\r\n flex={props.flex}\r\n direction='column'\r\n h={props.h}\r\n gap={props.title ? 'xs' : 0}\r\n bg={props.bg || 'rgba(69, 69, 69, 0.42)'}\r\n p='sm'\r\n style={{\r\n borderRadius: theme.radius.xs,\r\n boxShadow: theme.shadows.sm,\r\n overflow: 'hidden',\r\n outline: props.error ? `1px solid rgba(255, 100, 100, 0.8)` : 'none', \r\n }}\r\n variants={props.variants}\r\n >\r\n\r\n <Flex\r\n align='center'\r\n gap='xs'\r\n \r\n >\r\n <Flex\r\n direction={'column'}\r\n gap='xxs'\r\n >\r\n {props.title && (\r\n <Text\r\n size=\"sm\"\r\n style={{\r\n lineHeight: '1.25vh',\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n }}\r\n >{props.title}</Text> \r\n )}\r\n {props.description && (\r\n <Text\r\n size='xs'\r\n c='rgba(255, 255, 255, 0.8)'\r\n fw={400}\r\n >{props.description}</Text> \r\n )}\r\n\r\n </Flex>\r\n {props.error && (\r\n <Text\r\n size='xs'\r\n c={theme.colors.red[9]}\r\n fw={600}\r\n mb='auto'\r\n lh='0.8'\r\n >\r\n {props.error}\r\n </Text> \r\n )}\r\n <Flex\r\n ml='auto'\r\n >\r\n {props.rightSection}\r\n </Flex>\r\n </Flex>\r\n {props.children} \r\n </MotionFlex>\r\n )\r\n}","import { create } from 'zustand';\r\n\r\n// Import sounds as URLs (TypeScript-safe)\r\nimport clickSoundUrl from './click_sound.mp3';\r\nimport hoverSoundUrl from './hover_sound.mp3';\r\n\r\n// Define a type for the store state and actions\r\ntype AudioPlayerStore = {\r\n play: (sound: string) => void;\r\n stop: (sound: string) => void;\r\n};\r\n\r\n// Create the store using Zustand\r\nexport const useAudio = create<AudioPlayerStore>(() => {\r\n const audioRefs: Record<string, HTMLAudioElement> = {};\r\n\r\n // Predefined sounds\r\n const sounds: Record<string, string> = {\r\n click: clickSoundUrl,\r\n hover: hoverSoundUrl,\r\n };\r\n\r\n // Initialize audio elements for each sound\r\n for (const [key, src] of Object.entries(sounds)) {\r\n audioRefs[key] = new Audio(src);\r\n }\r\n\r\n return {\r\n play: (sound) => {\r\n const audio = audioRefs[sound];\r\n if (!audio) return console.warn(`Sound '${sound}' not found.`);\r\n audio.currentTime = 0;\r\n audio.volume = 0.1;\r\n audio.play();\r\n },\r\n stop: (sound) => {\r\n const audio = audioRefs[sound];\r\n if (!audio) return console.warn(`Sound '${sound}' not found.`);\r\n audio.pause();\r\n audio.currentTime = 0;\r\n },\r\n };\r\n});\r\n","export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { isEnvBrowser } from \"./misc\";\r\n\r\n/**\r\n * Simple wrapper around fetch API tailored for CEF/NUI use. This abstraction\r\n * can be extended to include AbortController if needed or if the response isn't\r\n * JSON. Tailor it to your needs.\r\n *\r\n * @param eventName - The endpoint eventname to target\r\n * @param data - Data you wish to send in the NUI Callback\r\n * @param mockData - Mock data to be returned if in the browser\r\n *\r\n * @return returnData - A promise for the data sent back by the NuiCallbacks CB argument\r\n */\r\n\r\nexport async function fetchNui<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const options = {\r\n method: \"post\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n console.log('Mock Data:', mockData);\r\n console.log('Is Env Browser:', isEnvBrowser());\r\n if (isEnvBrowser() && mockData !== undefined) return mockData;\r\n\r\n const resourceName = (window as any).GetParentResourceName\r\n ? (window as any).GetParentResourceName()\r\n : \"nui-frame-app\";\r\n\r\n const resp = await fetch(`https://${resourceName}/${eventName}`, options);\r\n\r\n const respFormatted = await resp.json();\r\n\r\n return respFormatted;\r\n}\r\n\r\n/**\r\n * fetchOnLoad — triggers fetchNui immediately when called.\r\n * Can safely be used anywhere (even top-level, outside React).\r\n *\r\n * Usage:\r\n * fetchOnLoad<MyType>(\"getData\").then(data => myStore.setState({ data }));\r\n */\r\nexport function fetchOnLoad<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T\r\n): Promise<T> {\r\n // just call it directly\r\n return fetchNui<T>(eventName, data, mockData)\r\n .catch((err) => {\r\n console.error(`[fetchOnLoad] Failed for ${eventName}:`, err);\r\n throw err;\r\n });\r\n}\r\n\r\n\r\nexport const fetchLuaTable = <T>(tableName: string) => () => {\r\n if (isEnvBrowser()) {\r\n return Promise.resolve({} as T);\r\n }\r\n return fetchNui<T>('GET_LUA_TABLE', { tableName });\r\n};\r\n\r\n","import { isEnvBrowser } from \"./misc\";\r\n\r\nexport interface InternalEvent<T = unknown> {\r\n action: string;\r\n data?: T;\r\n}\r\n\r\n/**\r\n * Emulates dispatching an event using SendNuiMessage in the lua scripts.\r\n * This is used when developing in browser\r\n *\r\n * @param events - The event you want to cover\r\n * @param timer - How long until it should trigger (ms)\r\n */\r\nexport const internalEvent = <P>(events: InternalEvent<P>[], timer = 1000): void => {\r\n if (isEnvBrowser()) {\r\n for (const event of events) {\r\n setTimeout(() => {\r\n window.dispatchEvent(\r\n new MessageEvent(\"message\", {\r\n data: {\r\n action: event.action,\r\n data: event.data,\r\n },\r\n }),\r\n );\r\n }, timer);\r\n }\r\n }\r\n};\r\n","import { create } from \"zustand\";\r\nimport { fetchOnLoad } from \"../utils/fetchNui\";\r\n\r\n\r\ntype localeType = (key: string, ...args: string[]) => string;\r\n\r\ntype LocalesProps = {\r\n [key: string]: string;\r\n}\r\n\r\ntype LocaleStoreProps = {\r\n locale: localeType;\r\n locales: LocalesProps;\r\n};\r\n\r\n\r\nexport const localeStore = create<LocaleStoreProps>((set, get) => {\r\n return {\r\n locales: {\r\n \"OccupantsDesc\": \"Here you can view and manage the occupants of your traphouse. These occupants can be used mainly for selling drugs to the NPCs surrounding your traphouse. However they have other uses to so be careful who you add as an occupant.\", \r\n },\r\n locale: (key: string, ...args: (string|number)[]): string => {\r\n const exists = get().locales[key];\r\n if (!exists){\r\n // add to a jsonfile called missing_locales.json within src of project \r\n \r\n }\r\n let translation = exists || key;\r\n if (args.length) {\r\n // convert the arg to a string and replace the %s in the translation\r\n \r\n\r\n translation = translation.replace(/%s/g, () => String(args.shift() || ''));\r\n }\r\n return translation;\r\n },\r\n };\r\n});\r\n\r\n// export locale as a standalone function \r\nexport const locale = localeStore.getState().locale;\r\n\r\nfetchOnLoad<LocalesProps>('GET_LOCALES').then((data) => {\r\n localeStore.setState({ locales: data });\r\n});\r\n","import { useAudio } from \"@/hooks/useAudio/store\";\r\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { Flex, FlexProps, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { motion } from \"framer-motion\";\r\nimport { MotionFlex, MotionIcon, MotionText } from \"./Motion\";\r\nimport { colorWithAlpha } from \"@/utils\";\r\n\r\n\r\nexport type SegmentProps = {\r\n label: string;\r\n value: string;\r\n icon?: string; // Optional icon for the segment\r\n rightSection?: React.ReactNode;\r\n}\r\n\r\nexport type SegmentedControlProps = {\r\n w?: string; // Width of the entire control\r\n multi?: boolean; // Optional prop to allow multiple selections\r\n value?: string | string[]; // Controlled value, if provided\r\n onChange?: (value: string | string[]) => void; // Callback for value change\r\n fz?: string; // Font size for the segments\r\n justify?: FlexProps['justify']; \r\n items: SegmentProps[];\r\n sounds?: boolean;\r\n} & FlexProps;\r\n\r\nexport function SegmentedControl(props: SegmentedControlProps) {\r\n const theme = useMantineTheme();\r\n const play = useAudio((state) => state.play);\r\n\r\n const handleChange = (newValue: string | string[]) => {\r\n if (props.sounds) play('click');\r\n if (props.onChange) {\r\n props.onChange(newValue);\r\n }\r\n };\r\n\r\n return (\r\n <Flex\r\n bg='rgba(33, 33, 33, 0.6)'\r\n w={props.w || 'fit-content'}\r\n style={{\r\n borderRadius: theme.radius.xs,\r\n overflow: 'hidden',\r\n }}\r\n {...props}\r\n >\r\n {props.items.map((item, index) => (\r\n <motion.div\r\n key={index}\r\n initial={{ x: -100, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n transition={{ duration: 0.3, delay: index * 0.1, ease: 'easeInOut' }}\r\n\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n flex: 1,\r\n }}\r\n >\r\n <Segment\r\n key={item.value}\r\n label={item.label}\r\n value={item.value}\r\n icon={item.icon}\r\n rightSection={item.rightSection}\r\n fz={props.fz}\r\n selected={!props.multi ? props.value === item.value : Array.isArray(props.value) && props.value.includes(item.value)}\r\n onClick={() => {\r\n\r\n if (props.multi) {\r\n const newValue = Array.isArray(props.value)\r\n ? props.value.includes(item.value)\r\n ? props.value.filter((v) => v !== item.value)\r\n : [...props.value, item.value]\r\n : [item.value];\r\n\r\n handleChange(newValue);\r\n } else {\r\n handleChange(item.value);\r\n }\r\n }}\r\n />\r\n </motion.div>\r\n ))}\r\n </Flex>\r\n )\r\n}\r\n\r\nexport function Segment(props: SegmentProps & {\r\n selected: boolean;\r\n onClick: () => void;\r\n fz?: string;\r\n}) {\r\n const theme = useMantineTheme();\r\n\r\n return (\r\n <MotionFlex\r\n onClick={props.onClick}\r\n w='100%'\r\n direction=\"column\"\r\n align=\"center\"\r\n // p='xs'\r\n h='100%'\r\n bg={props.selected ? colorWithAlpha(theme.colors[theme.primaryColor][theme.primaryShade as number], 0.2) : 'transparent'}\r\n pos=\"relative\"\r\n style={{\r\n // position: \"relative\",\r\n cursor: \"pointer\",\r\n }}\r\n justify={'center'}\r\n whileHover={{ scale: 1.05 }}\r\n whileTap={{ scale: 0.95 }}\r\n >\r\n <Flex\r\n align='center'\r\n gap='xs'\r\n // bg='red'\r\n p='xs'\r\n >\r\n \r\n {props.icon && \r\n <MotionIcon\r\n icon={props.icon as IconProp}\r\n // size='sm'\r\n initial={{\r\n color: props.selected ? theme.colors[theme.primaryColor][5] : 'inherit', \r\n }}\r\n animate={{\r\n color: props.selected ? theme.colors[theme.primaryColor][5] : 'inherit', \r\n }}\r\n exit={{\r\n color: 'inherit',\r\n }}\r\n style={{\r\n fontSize: theme.fontSizes.xs,\r\n marginBottom: '0.2vh',\r\n }}\r\n />\r\n }\r\n <MotionText\r\n size={props.fz || 'xs'}\r\n initial={{\r\n color: props.selected ? theme.colors[theme.primaryColor][5] : 'inherit', \r\n }}\r\n animate={{\r\n color: props.selected ? theme.colors[theme.primaryColor][5] : 'inherit', \r\n }}\r\n exit={{\r\n color: 'inherit',\r\n }}\r\n style={{\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.1em',\r\n textTransform: 'uppercase',\r\n }}\r\n >{props.label.toUpperCase()}</MotionText>\r\n {props.rightSection}\r\n </Flex>\r\n\r\n {/* Enhanced bottom border with smooth animation */}\r\n <motion.div\r\n initial={false}\r\n animate={{\r\n scaleX: props.selected ? 1 : 0,\r\n opacity: props.selected ? 1 : 0,\r\n }}\r\n transition={{\r\n duration: 0.3,\r\n ease: [0.4, 0, 0.2, 1], // Custom easing curve for smooth feel\r\n }}\r\n style={{\r\n position: 'absolute',\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n height: '0.2vh',\r\n backgroundColor: theme.colors[theme.primaryColor][5],\r\n transformOrigin: 'center',\r\n }}\r\n />\r\n </MotionFlex>\r\n );\r\n}","import { createContext, useContext, useRef } from \"react\";\r\nimport { create, StoreApi, useStore } from \"zustand\";\r\nimport {SegmentedControl, SegmentProps} from \"./SegmentedControl\";\r\n\r\nexport type NavigationStore = {\r\n pageId: string;\r\n}\r\n\r\nexport const NavigationContext = createContext<StoreApi<NavigationStore> | null>(null);\r\n\r\nexport function useNavigation<T>(selector: (state: NavigationStore) => T){\r\n const navigation = useContext(NavigationContext);\r\n if(!navigation){\r\n throw new Error('useNavigation must be used within a NavigationProvider');\r\n }\r\n return useStore(navigation, selector);\r\n}\r\n\r\n// Hook to get the store API for setting state\r\nexport function useNavigationStore(){\r\n const navigation = useContext(NavigationContext);\r\n if(!navigation){\r\n throw new Error('useNavigationStore must be used within a NavigationProvider');\r\n }\r\n return navigation;\r\n}\r\n\r\nexport function NavigationProvider({ children, defaultPage }: { children: React.ReactNode, defaultPage?: string }){\r\n const storeRef = useRef<StoreApi<NavigationStore>>(\r\n create<NavigationStore>(() => ({\r\n pageId: defaultPage || 'home',\r\n }))\r\n );\r\n\r\n return (\r\n <NavigationContext.Provider value={storeRef.current}>\r\n {children}\r\n </NavigationContext.Provider>\r\n );\r\n}\r\n\r\nexport function NavBar(props: {\r\n items: SegmentProps[];\r\n}){\r\n const pageId = useNavigation((state) => state.pageId);\r\n const store = useNavigationStore();\r\n \r\n return (\r\n <SegmentedControl\r\n sounds\r\n w='100%'\r\n value={pageId}\r\n items={props.items}\r\n onChange={(value) => {\r\n store.setState({ pageId: value as string });\r\n }}\r\n />\r\n )\r\n}","import { motion, Variants } from \"framer-motion\";\r\nimport { MotionFlex } from \"./Motion\";\r\n\r\nexport type ProgressProps = {\r\n progress: number; // 0 - 100 range\r\n segments: number; // Number of segments (e.g., 5, 10, etc.)\r\n size?: string | number;\r\n};\r\n\r\nconst containerVariants: Variants = {\r\n hidden: { opacity: 0 },\r\n visible: {\r\n opacity: 1,\r\n transition: {\r\n staggerChildren: 0.1,\r\n delayChildren: 0.05,\r\n }\r\n },\r\n exit: {\r\n opacity: 0,\r\n transition: {\r\n staggerChildren: 0.05,\r\n staggerDirection: -1,\r\n }\r\n }\r\n};\r\n\r\n// Child item variants\r\nconst itemVariants: Variants = {\r\n hidden: { \r\n opacity: 0, \r\n x: 20,\r\n scale: 0.95,\r\n },\r\n visible: {\r\n opacity: 1,\r\n x: 0,\r\n scale: 1,\r\n transition: {\r\n type: \"spring\",\r\n stiffness: 300,\r\n damping: 24,\r\n }\r\n },\r\n exit: {\r\n opacity: 0,\r\n x: -10,\r\n scale: 0.95,\r\n transition: {\r\n duration: 0.2,\r\n }\r\n }\r\n};\r\n\r\n\r\n\r\nexport function SegmentedProgress(props: ProgressProps) {\r\n const progressPerSegment = 100 / props.segments; // Percentage per segment\r\n const filledSegments = Math.floor(props.progress / progressPerSegment);\r\n const partialFill = (props.progress % progressPerSegment) / progressPerSegment; // 0 to 1 range for partial fill\r\n\r\n return (\r\n <MotionFlex \r\n w=\"100%\" \r\n h={props.size || '1vh'}\r\n gap='xs'\r\n initial='hidden'\r\n animate='visible'\r\n variants={containerVariants}\r\n >\r\n {[...Array(props.segments)].map((_, index) => {\r\n const isFilled = index < filledSegments;\r\n const isPartial = index === filledSegments;\r\n\r\n return (\r\n <motion.div\r\n key={index}\r\n variants={itemVariants}\r\n style={{\r\n width: `${100 / props.segments}%`, // Ensures equal width distribution\r\n height: \"100%\",\r\n background: isFilled\r\n ? \"rgba(255, 255, 255, 0.8)\"\r\n : isPartial\r\n ? `linear-gradient(to right, rgba(255, 255, 255, 0.8) ${partialFill * 100}%, rgba(255, 255, 255, 0.2) ${partialFill * 100}%)`\r\n : \"rgba(255, 255, 255, 0.2)\",\r\n transition: \"background 0.3s ease\",\r\n }}\r\n />\r\n );\r\n })}\r\n </MotionFlex>\r\n );\r\n}","import { colorWithAlpha } from \"@/utils\";\r\nimport { IconName } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { Flex, Text, useMantineTheme } from \"@mantine/core\";\r\nimport { BorderedIcon } from \"./BorderedIcon\";\r\n\r\n\r\nexport type ButtonProps = {\r\n icon: string;\r\n onClick?: () => void;\r\n};\r\n\r\nexport type TitleProps = {\r\n title: string\r\n description: string;\r\n icon: string;\r\n iconColor?: string;\r\n mt?: string;\r\n bg?: string;\r\n w?: string;\r\n removeBorder?: boolean;\r\n borderColor?: string;\r\n p?: string;\r\n rightSection?: React.ReactNode;\r\n};\r\n\r\n\r\nexport function Title(props: TitleProps) {\r\n \r\n const theme = useMantineTheme();\r\n return (\r\n <Flex\r\n mt={props.mt}\r\n direction='column'\r\n // align='center'\r\n bg={props.bg || 'transparent'}\r\n gap='xs'\r\n // flex={1}\r\n // w='90%'\r\n\r\n w={props.w || '100%'}\r\n \r\n // pb={props.removeBorder ? '0' : 'xs'}\r\n // pl={!props.removeBorder ? 'xs' : '0'}\r\n p={props.p || '0'}\r\n style={{\r\n userSelect: 'none',\r\n borderBottom: props.removeBorder ? 'none' : `0.2vh solid ${props.borderColor || colorWithAlpha(theme.colors[theme.primaryColor][9], 0.5)}`\r\n }}\r\n >\r\n <Flex\r\n \r\n align='center'\r\n justify={'center'}\r\n >\r\n\r\n <Flex\r\n align='center'\r\n gap='sm'\r\n pr='xs' \r\n >\r\n <BorderedIcon\r\n icon={props.icon as IconName}\r\n fontSize={theme.fontSizes.md}\r\n color={props.iconColor}\r\n />\r\n <Flex\r\n direction='column'\r\n gap='0.25vh'\r\n // w='30%'\r\n >\r\n <Text p='0' size='sm' style={{\r\n lineHeight: theme.fontSizes.md,\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n }}>{props.title}</Text>\r\n <Text \r\n size='xs'\r\n c='grey'\r\n style={{ whiteSpace: 'normal', wordWrap: 'break-word' }}\r\n >{props.description}</Text>\r\n </Flex>\r\n\r\n\r\n </Flex>\r\n\r\n <Flex\r\n ml='auto'\r\n align='center'\r\n gap='xs'\r\n >\r\n {props.rightSection}\r\n </Flex>\r\n </Flex>\r\n </Flex>\r\n );\r\n}\r\n","import { MutableRefObject, useEffect, useRef } from \"react\";\r\nimport { noop } from \"../utils/misc\";\r\n\r\ninterface NuiMessageData<T = unknown> {\r\n action: string;\r\n data: T;\r\n}\r\n\r\ntype NuiHandlerSignature<T> = ( data: T) => void;\r\n\r\n/**\r\n * A hook that manage events listeners for receiving data from the client scripts\r\n * @param action The specific `action` that should be listened for.\r\n * @param handler The callback function that will handle data relayed by this hook\r\n *\r\n * @example\r\n * useNuiEvent<{visibility: true, wasVisible: 'something'}>('setVisible', (data) => {\r\n * // whatever logic you want\r\n * })\r\n *\r\n **/\r\n\r\nexport const useNuiEvent = <T = unknown>(\r\n action: string,\r\n handler: ( data: T) => void,\r\n) => {\r\n const savedHandler: MutableRefObject<NuiHandlerSignature<T>> = useRef(noop);\r\n\r\n // Make sure we handle for a reactive handler\r\n useEffect(() => {\r\n savedHandler.current = handler;\r\n }, [handler]);\r\n\r\n useEffect(() => {\r\n const eventListener = (event: MessageEvent<NuiMessageData<T>>) => {\r\n const { action: eventAction, data } = event.data;\r\n\r\n if (savedHandler.current) {\r\n if (eventAction === action) {\r\n savedHandler.current( data);\r\n }\r\n }\r\n };\r\n\r\n window.addEventListener(\"message\", eventListener);\r\n // Remove Event Listener on component dirkup\r\n return () => window.removeEventListener(\"message\", eventListener);\r\n }, [action]);\r\n};\r\n","import { createTheme } from \"@mantine/core\";\r\n\r\nconst theme = createTheme({\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n defaultRadius: \"xxs\",\r\n fontFamily: \"Akrobat Regular, sans-serif\",\r\n\r\n radius:{\r\n xxs: '0.2vh',\r\n xs: '0.4vh',\r\n sm: '0.75vh',\r\n md: '1vh',\r\n lg: '1.5vh',\r\n xl: '2vh',\r\n xxl: '3vh',\r\n },\r\n\r\n fontSizes: {\r\n xxs: '1.2vh',\r\n xs: '1.5vh',\r\n sm: '1.8vh',\r\n md: '2.2vh',\r\n lg: '2.8vh',\r\n xl: '3.3vh',\r\n xxl: '3.8vh',\r\n },\r\n\r\n spacing:{\r\n xxs: '0.5vh',\r\n xs: '0.75vh',\r\n sm: '1.5vh',\r\n md: '2vh',\r\n lg: '3vh',\r\n xl: '4vh',\r\n xxl: '5vh',\r\n },\r\n\r\n components:{\r\n Progress:{\r\n styles:{\r\n root:{\r\n backgroundColor: 'rgba(77, 77, 77, 0.4)',\r\n },\r\n \r\n }\r\n },\r\n\r\n Select:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n item:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n MultiSelect:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n pill:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n item:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n TextInput:{\r\n styles:{\r\n section:{\r\n marginRight: '0.2vh',\r\n },\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n\r\n \r\n \r\n }\r\n },\r\n },\r\n\r\n colors: {\r\n dark:[\r\n \"#ffffff\",\r\n \"#e2e2e2\",\r\n \"#c6c6c6\",\r\n \"#aaaaaa\",\r\n \"#8d8d8d\",\r\n \"#717171\",\r\n \"#555555\",\r\n \"#393939\",\r\n \"#1c1c1c\",\r\n \"#000000\",\r\n ],\r\n dirk:[\r\n \"#ffffff\",\r\n \"#f3fce9\",\r\n \"#dbf5bd\",\r\n \"#c3ee91\",\r\n \"#ace765\",\r\n \"#94e039\",\r\n \"#7ac61f\",\r\n \"#5f9a18\",\r\n \"#29420a\",\r\n \"#446e11\",\r\n ],\r\n },\r\n});\r\n\r\n\r\nexport default theme;","import '@mantine/notifications/styles.css';\r\nimport '@mantine/core/styles.css';\r\nimport '@/styles/niceFont.css';\r\nimport '@/styles/scrollBar.css';\r\n\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { BackgroundImage, MantineProvider } from '@mantine/core';\r\nimport { isEnvBrowser } from '@/utils';\r\nimport { create } from 'zustand';\r\nimport theme from '@/theme';\r\nlibrary.add(fas, far, fab);\r\n\r\nexport type DirkProviderProps = {\r\n fakeBackground?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const useSettings = create<{\r\n game: 'rdr3' | 'fivem';\r\n primaryColor: string;\r\n primaryShade: number;\r\n customTheme: Record<string, string[]>;\r\n}>((set) => ({\r\n game: 'rdr3',\r\n primaryColor: 'teal',\r\n primaryShade: 6,\r\n customTheme: {},\r\n}));\r\n\r\nexport function DirkProvider(props: DirkProviderProps) {\r\n const primaryColor = useSettings((data) => data.primaryColor);\r\n const primaryShade = useSettings((data) => data.primaryShade);\r\n const customTheme = useSettings((data) => data.customTheme);\r\n \r\n // Ensure the theme is updated when the settings change\r\n\r\n // useEffect(() => {\r\n // const updatedTheme = {\r\n // ...theme, // Start with the existing theme object\r\n // colors: {\r\n // ...theme.colors, // Copy the existing colors\r\n // custom: customTheme\r\n // },\r\n // };\r\n \r\n // setCurTheme(updatedTheme);\r\n // // set primary color\r\n // setCurTheme({\r\n // ...updatedTheme,\r\n // primaryColor: primaryColor,\r\n // primaryShade: primaryShade,\r\n // });\r\n\r\n // }, [primaryColor, primaryShade, customTheme]);\r\n\r\n // useEffect(() => {\r\n // // fetchSettings();\r\n // runInitialFetches();\r\n // }, []);\r\n\r\n return (\r\n <MantineProvider theme={theme} defaultColorScheme='dark'>\r\n <Wrapper>\r\n {props.children}\r\n </Wrapper>\r\n </MantineProvider>\r\n );\r\n}\r\n\r\nfunction Wrapper({ children }: { children: React.ReactNode }) {\r\n const game = useSettings((data) => data.game);\r\n return isEnvBrowser() ? ( \r\n <BackgroundImage w='100vw' h='100vh' style={{overflow:'hidden'}}\r\n src={game === 'fivem' ?\r\n \"https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg\"\r\n : \"https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg\"}\r\n > \r\n {children}\r\n </BackgroundImage>\r\n ) : (\r\n <>{children}</>\r\n )\r\n}\r\n\r\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- require('@mantine/notifications/styles.css');
4
3
  require('@mantine/core/styles.css');
5
- require('@/styles/niceFont.css');
6
- require('@/styles/scrollBar.css');
4
+ require('@mantine/notifications/styles.css');
5
+ require('./styles/niceFont.css');
6
+ require('./styles/scrollBar.css');
7
7
  var fontawesomeSvgCore = require('@fortawesome/fontawesome-svg-core');
8
8
  var freeBrandsSvgIcons = require('@fortawesome/free-brands-svg-icons');
9
9
  var freeRegularSvgIcons = require('@fortawesome/free-regular-svg-icons');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/misc.ts","../../src/utils/fetchNui.ts","../../src/utils/locales.ts","../../src/theme.ts","../../src/providers/DirkProvider.tsx"],"names":["create","createTheme","library","fas","far","fab","jsx","MantineProvider","BackgroundImage"],"mappings":"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","file":"index.cjs","sourcesContent":["export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { isEnvBrowser } from \"./misc\";\r\n\r\n/**\r\n * Simple wrapper around fetch API tailored for CEF/NUI use. This abstraction\r\n * can be extended to include AbortController if needed or if the response isn't\r\n * JSON. Tailor it to your needs.\r\n *\r\n * @param eventName - The endpoint eventname to target\r\n * @param data - Data you wish to send in the NUI Callback\r\n * @param mockData - Mock data to be returned if in the browser\r\n *\r\n * @return returnData - A promise for the data sent back by the NuiCallbacks CB argument\r\n */\r\n\r\nexport async function fetchNui<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const options = {\r\n method: \"post\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n console.log('Mock Data:', mockData);\r\n console.log('Is Env Browser:', isEnvBrowser());\r\n if (isEnvBrowser() && mockData !== undefined) return mockData;\r\n\r\n const resourceName = (window as any).GetParentResourceName\r\n ? (window as any).GetParentResourceName()\r\n : \"nui-frame-app\";\r\n\r\n const resp = await fetch(`https://${resourceName}/${eventName}`, options);\r\n\r\n const respFormatted = await resp.json();\r\n\r\n return respFormatted;\r\n}\r\n\r\n/**\r\n * fetchOnLoad — triggers fetchNui immediately when called.\r\n * Can safely be used anywhere (even top-level, outside React).\r\n *\r\n * Usage:\r\n * fetchOnLoad<MyType>(\"getData\").then(data => myStore.setState({ data }));\r\n */\r\nexport function fetchOnLoad<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T\r\n): Promise<T> {\r\n // just call it directly\r\n return fetchNui<T>(eventName, data, mockData)\r\n .catch((err) => {\r\n console.error(`[fetchOnLoad] Failed for ${eventName}:`, err);\r\n throw err;\r\n });\r\n}\r\n\r\n\r\nexport const fetchLuaTable = <T>(tableName: string) => () => {\r\n if (isEnvBrowser()) {\r\n return Promise.resolve({} as T);\r\n }\r\n return fetchNui<T>('GET_LUA_TABLE', { tableName });\r\n};\r\n\r\n","import { create } from \"zustand\";\r\nimport { fetchOnLoad } from \"../utils/fetchNui\";\r\n\r\n\r\ntype localeType = (key: string, ...args: string[]) => string;\r\n\r\ntype LocalesProps = {\r\n [key: string]: string;\r\n}\r\n\r\ntype LocaleStoreProps = {\r\n locale: localeType;\r\n locales: LocalesProps;\r\n};\r\n\r\n\r\nexport const localeStore = create<LocaleStoreProps>((set, get) => {\r\n return {\r\n locales: {\r\n \"OccupantsDesc\": \"Here you can view and manage the occupants of your traphouse. These occupants can be used mainly for selling drugs to the NPCs surrounding your traphouse. However they have other uses to so be careful who you add as an occupant.\", \r\n },\r\n locale: (key: string, ...args: (string|number)[]): string => {\r\n const exists = get().locales[key];\r\n if (!exists){\r\n // add to a jsonfile called missing_locales.json within src of project \r\n \r\n }\r\n let translation = exists || key;\r\n if (args.length) {\r\n // convert the arg to a string and replace the %s in the translation\r\n \r\n\r\n translation = translation.replace(/%s/g, () => String(args.shift() || ''));\r\n }\r\n return translation;\r\n },\r\n };\r\n});\r\n\r\n// export locale as a standalone function \r\nexport const locale = localeStore.getState().locale;\r\n\r\nfetchOnLoad<LocalesProps>('GET_LOCALES').then((data) => {\r\n localeStore.setState({ locales: data });\r\n});\r\n","import { createTheme } from \"@mantine/core\";\r\n\r\nconst theme = createTheme({\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n defaultRadius: \"xxs\",\r\n fontFamily: \"Akrobat Regular, sans-serif\",\r\n\r\n radius:{\r\n xxs: '0.2vh',\r\n xs: '0.4vh',\r\n sm: '0.75vh',\r\n md: '1vh',\r\n lg: '1.5vh',\r\n xl: '2vh',\r\n xxl: '3vh',\r\n },\r\n\r\n fontSizes: {\r\n xxs: '1.2vh',\r\n xs: '1.5vh',\r\n sm: '1.8vh',\r\n md: '2.2vh',\r\n lg: '2.8vh',\r\n xl: '3.3vh',\r\n xxl: '3.8vh',\r\n },\r\n\r\n spacing:{\r\n xxs: '0.5vh',\r\n xs: '0.75vh',\r\n sm: '1.5vh',\r\n md: '2vh',\r\n lg: '3vh',\r\n xl: '4vh',\r\n xxl: '5vh',\r\n },\r\n\r\n components:{\r\n Progress:{\r\n styles:{\r\n root:{\r\n backgroundColor: 'rgba(77, 77, 77, 0.4)',\r\n },\r\n \r\n }\r\n },\r\n\r\n Select:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n item:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n MultiSelect:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n pill:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n item:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n TextInput:{\r\n styles:{\r\n section:{\r\n marginRight: '0.2vh',\r\n },\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n\r\n \r\n \r\n }\r\n },\r\n },\r\n\r\n colors: {\r\n dark:[\r\n \"#ffffff\",\r\n \"#e2e2e2\",\r\n \"#c6c6c6\",\r\n \"#aaaaaa\",\r\n \"#8d8d8d\",\r\n \"#717171\",\r\n \"#555555\",\r\n \"#393939\",\r\n \"#1c1c1c\",\r\n \"#000000\",\r\n ],\r\n dirk:[\r\n \"#ffffff\",\r\n \"#f3fce9\",\r\n \"#dbf5bd\",\r\n \"#c3ee91\",\r\n \"#ace765\",\r\n \"#94e039\",\r\n \"#7ac61f\",\r\n \"#5f9a18\",\r\n \"#29420a\",\r\n \"#446e11\",\r\n ],\r\n },\r\n});\r\n\r\n\r\nexport default theme;","import '@mantine/notifications/styles.css';\r\nimport '@mantine/core/styles.css';\r\nimport '@/styles/niceFont.css';\r\nimport '@/styles/scrollBar.css';\r\n\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { BackgroundImage, MantineProvider } from '@mantine/core';\r\nimport { isEnvBrowser } from '@/utils';\r\nimport { create } from 'zustand';\r\nimport theme from '@/theme';\r\nlibrary.add(fas, far, fab);\r\n\r\nexport type DirkProviderProps = {\r\n fakeBackground?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const useSettings = create<{\r\n game: 'rdr3' | 'fivem';\r\n primaryColor: string;\r\n primaryShade: number;\r\n customTheme: Record<string, string[]>;\r\n}>((set) => ({\r\n game: 'rdr3',\r\n primaryColor: 'teal',\r\n primaryShade: 6,\r\n customTheme: {},\r\n}));\r\n\r\nexport function DirkProvider(props: DirkProviderProps) {\r\n const primaryColor = useSettings((data) => data.primaryColor);\r\n const primaryShade = useSettings((data) => data.primaryShade);\r\n const customTheme = useSettings((data) => data.customTheme);\r\n \r\n // Ensure the theme is updated when the settings change\r\n\r\n // useEffect(() => {\r\n // const updatedTheme = {\r\n // ...theme, // Start with the existing theme object\r\n // colors: {\r\n // ...theme.colors, // Copy the existing colors\r\n // custom: customTheme\r\n // },\r\n // };\r\n \r\n // setCurTheme(updatedTheme);\r\n // // set primary color\r\n // setCurTheme({\r\n // ...updatedTheme,\r\n // primaryColor: primaryColor,\r\n // primaryShade: primaryShade,\r\n // });\r\n\r\n // }, [primaryColor, primaryShade, customTheme]);\r\n\r\n // useEffect(() => {\r\n // // fetchSettings();\r\n // runInitialFetches();\r\n // }, []);\r\n\r\n return (\r\n <MantineProvider theme={theme} defaultColorScheme='dark'>\r\n <Wrapper>\r\n {props.children}\r\n </Wrapper>\r\n </MantineProvider>\r\n );\r\n}\r\n\r\nfunction Wrapper({ children }: { children: React.ReactNode }) {\r\n const game = useSettings((data) => data.game);\r\n return isEnvBrowser() ? ( \r\n <BackgroundImage w='100vw' h='100vh' style={{overflow:'hidden'}}\r\n src={game === 'fivem' ?\r\n \"https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg\"\r\n : \"https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg\"}\r\n > \r\n {children}\r\n </BackgroundImage>\r\n ) : (\r\n <>{children}</>\r\n )\r\n}\r\n\r\n"]}
1
+ {"version":3,"sources":["../../src/utils/misc.ts","../../src/utils/fetchNui.ts","../../src/utils/locales.ts","../../src/theme.ts","../../src/providers/DirkProvider.tsx"],"names":["create","createTheme","library","fas","far","fab","jsx","MantineProvider","BackgroundImage"],"mappings":"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","file":"index.cjs","sourcesContent":["export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { isEnvBrowser } from \"./misc\";\r\n\r\n/**\r\n * Simple wrapper around fetch API tailored for CEF/NUI use. This abstraction\r\n * can be extended to include AbortController if needed or if the response isn't\r\n * JSON. Tailor it to your needs.\r\n *\r\n * @param eventName - The endpoint eventname to target\r\n * @param data - Data you wish to send in the NUI Callback\r\n * @param mockData - Mock data to be returned if in the browser\r\n *\r\n * @return returnData - A promise for the data sent back by the NuiCallbacks CB argument\r\n */\r\n\r\nexport async function fetchNui<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const options = {\r\n method: \"post\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n console.log('Mock Data:', mockData);\r\n console.log('Is Env Browser:', isEnvBrowser());\r\n if (isEnvBrowser() && mockData !== undefined) return mockData;\r\n\r\n const resourceName = (window as any).GetParentResourceName\r\n ? (window as any).GetParentResourceName()\r\n : \"nui-frame-app\";\r\n\r\n const resp = await fetch(`https://${resourceName}/${eventName}`, options);\r\n\r\n const respFormatted = await resp.json();\r\n\r\n return respFormatted;\r\n}\r\n\r\n/**\r\n * fetchOnLoad — triggers fetchNui immediately when called.\r\n * Can safely be used anywhere (even top-level, outside React).\r\n *\r\n * Usage:\r\n * fetchOnLoad<MyType>(\"getData\").then(data => myStore.setState({ data }));\r\n */\r\nexport function fetchOnLoad<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T\r\n): Promise<T> {\r\n // just call it directly\r\n return fetchNui<T>(eventName, data, mockData)\r\n .catch((err) => {\r\n console.error(`[fetchOnLoad] Failed for ${eventName}:`, err);\r\n throw err;\r\n });\r\n}\r\n\r\n\r\nexport const fetchLuaTable = <T>(tableName: string) => () => {\r\n if (isEnvBrowser()) {\r\n return Promise.resolve({} as T);\r\n }\r\n return fetchNui<T>('GET_LUA_TABLE', { tableName });\r\n};\r\n\r\n","import { create } from \"zustand\";\r\nimport { fetchOnLoad } from \"../utils/fetchNui\";\r\n\r\n\r\ntype localeType = (key: string, ...args: string[]) => string;\r\n\r\ntype LocalesProps = {\r\n [key: string]: string;\r\n}\r\n\r\ntype LocaleStoreProps = {\r\n locale: localeType;\r\n locales: LocalesProps;\r\n};\r\n\r\n\r\nexport const localeStore = create<LocaleStoreProps>((set, get) => {\r\n return {\r\n locales: {\r\n \"OccupantsDesc\": \"Here you can view and manage the occupants of your traphouse. These occupants can be used mainly for selling drugs to the NPCs surrounding your traphouse. However they have other uses to so be careful who you add as an occupant.\", \r\n },\r\n locale: (key: string, ...args: (string|number)[]): string => {\r\n const exists = get().locales[key];\r\n if (!exists){\r\n // add to a jsonfile called missing_locales.json within src of project \r\n \r\n }\r\n let translation = exists || key;\r\n if (args.length) {\r\n // convert the arg to a string and replace the %s in the translation\r\n \r\n\r\n translation = translation.replace(/%s/g, () => String(args.shift() || ''));\r\n }\r\n return translation;\r\n },\r\n };\r\n});\r\n\r\n// export locale as a standalone function \r\nexport const locale = localeStore.getState().locale;\r\n\r\nfetchOnLoad<LocalesProps>('GET_LOCALES').then((data) => {\r\n localeStore.setState({ locales: data });\r\n});\r\n","import { createTheme } from \"@mantine/core\";\r\n\r\nconst theme = createTheme({\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n defaultRadius: \"xxs\",\r\n fontFamily: \"Akrobat Regular, sans-serif\",\r\n\r\n radius:{\r\n xxs: '0.2vh',\r\n xs: '0.4vh',\r\n sm: '0.75vh',\r\n md: '1vh',\r\n lg: '1.5vh',\r\n xl: '2vh',\r\n xxl: '3vh',\r\n },\r\n\r\n fontSizes: {\r\n xxs: '1.2vh',\r\n xs: '1.5vh',\r\n sm: '1.8vh',\r\n md: '2.2vh',\r\n lg: '2.8vh',\r\n xl: '3.3vh',\r\n xxl: '3.8vh',\r\n },\r\n\r\n spacing:{\r\n xxs: '0.5vh',\r\n xs: '0.75vh',\r\n sm: '1.5vh',\r\n md: '2vh',\r\n lg: '3vh',\r\n xl: '4vh',\r\n xxl: '5vh',\r\n },\r\n\r\n components:{\r\n Progress:{\r\n styles:{\r\n root:{\r\n backgroundColor: 'rgba(77, 77, 77, 0.4)',\r\n },\r\n \r\n }\r\n },\r\n\r\n Select:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n item:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n MultiSelect:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n pill:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n item:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n TextInput:{\r\n styles:{\r\n section:{\r\n marginRight: '0.2vh',\r\n },\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n\r\n \r\n \r\n }\r\n },\r\n },\r\n\r\n colors: {\r\n dark:[\r\n \"#ffffff\",\r\n \"#e2e2e2\",\r\n \"#c6c6c6\",\r\n \"#aaaaaa\",\r\n \"#8d8d8d\",\r\n \"#717171\",\r\n \"#555555\",\r\n \"#393939\",\r\n \"#1c1c1c\",\r\n \"#000000\",\r\n ],\r\n dirk:[\r\n \"#ffffff\",\r\n \"#f3fce9\",\r\n \"#dbf5bd\",\r\n \"#c3ee91\",\r\n \"#ace765\",\r\n \"#94e039\",\r\n \"#7ac61f\",\r\n \"#5f9a18\",\r\n \"#29420a\",\r\n \"#446e11\",\r\n ],\r\n },\r\n});\r\n\r\n\r\nexport default theme;","import '@mantine/core/styles.css';\r\nimport '@mantine/notifications/styles.css';\r\nimport './styles/niceFont.css';\r\nimport './styles/scrollBar.css';\r\n\r\n\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { BackgroundImage, MantineProvider } from '@mantine/core';\r\nimport { isEnvBrowser } from '@/utils';\r\nimport { create } from 'zustand';\r\nimport theme from '@/theme';\r\nlibrary.add(fas, far, fab);\r\n\r\nexport type DirkProviderProps = {\r\n fakeBackground?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const useSettings = create<{\r\n game: 'rdr3' | 'fivem';\r\n primaryColor: string;\r\n primaryShade: number;\r\n customTheme: Record<string, string[]>;\r\n}>((set) => ({\r\n game: 'rdr3',\r\n primaryColor: 'teal',\r\n primaryShade: 6,\r\n customTheme: {},\r\n}));\r\n\r\nexport function DirkProvider(props: DirkProviderProps) {\r\n const primaryColor = useSettings((data) => data.primaryColor);\r\n const primaryShade = useSettings((data) => data.primaryShade);\r\n const customTheme = useSettings((data) => data.customTheme);\r\n \r\n // Ensure the theme is updated when the settings change\r\n\r\n // useEffect(() => {\r\n // const updatedTheme = {\r\n // ...theme, // Start with the existing theme object\r\n // colors: {\r\n // ...theme.colors, // Copy the existing colors\r\n // custom: customTheme\r\n // },\r\n // };\r\n \r\n // setCurTheme(updatedTheme);\r\n // // set primary color\r\n // setCurTheme({\r\n // ...updatedTheme,\r\n // primaryColor: primaryColor,\r\n // primaryShade: primaryShade,\r\n // });\r\n\r\n // }, [primaryColor, primaryShade, customTheme]);\r\n\r\n // useEffect(() => {\r\n // // fetchSettings();\r\n // runInitialFetches();\r\n // }, []);\r\n\r\n return (\r\n <MantineProvider theme={theme} defaultColorScheme='dark'>\r\n <Wrapper>\r\n {props.children}\r\n </Wrapper>\r\n </MantineProvider>\r\n );\r\n}\r\n\r\nfunction Wrapper({ children }: { children: React.ReactNode }) {\r\n const game = useSettings((data) => data.game);\r\n return isEnvBrowser() ? ( \r\n <BackgroundImage w='100vw' h='100vh' style={{overflow:'hidden'}}\r\n src={game === 'fivem' ?\r\n \"https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg\"\r\n : \"https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg\"}\r\n > \r\n {children}\r\n </BackgroundImage>\r\n ) : (\r\n <>{children}</>\r\n )\r\n}\r\n\r\n"]}
@@ -1,7 +1,7 @@
1
- import '@mantine/notifications/styles.css';
2
1
  import '@mantine/core/styles.css';
3
- import '@/styles/niceFont.css';
4
- import '@/styles/scrollBar.css';
2
+ import '@mantine/notifications/styles.css';
3
+ import './styles/niceFont.css';
4
+ import './styles/scrollBar.css';
5
5
  import { library } from '@fortawesome/fontawesome-svg-core';
6
6
  import { fab } from '@fortawesome/free-brands-svg-icons';
7
7
  import { far } from '@fortawesome/free-regular-svg-icons';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/misc.ts","../../src/utils/fetchNui.ts","../../src/utils/locales.ts","../../src/theme.ts","../../src/providers/DirkProvider.tsx"],"names":["create"],"mappings":"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","file":"index.js","sourcesContent":["export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { isEnvBrowser } from \"./misc\";\r\n\r\n/**\r\n * Simple wrapper around fetch API tailored for CEF/NUI use. This abstraction\r\n * can be extended to include AbortController if needed or if the response isn't\r\n * JSON. Tailor it to your needs.\r\n *\r\n * @param eventName - The endpoint eventname to target\r\n * @param data - Data you wish to send in the NUI Callback\r\n * @param mockData - Mock data to be returned if in the browser\r\n *\r\n * @return returnData - A promise for the data sent back by the NuiCallbacks CB argument\r\n */\r\n\r\nexport async function fetchNui<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const options = {\r\n method: \"post\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n console.log('Mock Data:', mockData);\r\n console.log('Is Env Browser:', isEnvBrowser());\r\n if (isEnvBrowser() && mockData !== undefined) return mockData;\r\n\r\n const resourceName = (window as any).GetParentResourceName\r\n ? (window as any).GetParentResourceName()\r\n : \"nui-frame-app\";\r\n\r\n const resp = await fetch(`https://${resourceName}/${eventName}`, options);\r\n\r\n const respFormatted = await resp.json();\r\n\r\n return respFormatted;\r\n}\r\n\r\n/**\r\n * fetchOnLoad — triggers fetchNui immediately when called.\r\n * Can safely be used anywhere (even top-level, outside React).\r\n *\r\n * Usage:\r\n * fetchOnLoad<MyType>(\"getData\").then(data => myStore.setState({ data }));\r\n */\r\nexport function fetchOnLoad<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T\r\n): Promise<T> {\r\n // just call it directly\r\n return fetchNui<T>(eventName, data, mockData)\r\n .catch((err) => {\r\n console.error(`[fetchOnLoad] Failed for ${eventName}:`, err);\r\n throw err;\r\n });\r\n}\r\n\r\n\r\nexport const fetchLuaTable = <T>(tableName: string) => () => {\r\n if (isEnvBrowser()) {\r\n return Promise.resolve({} as T);\r\n }\r\n return fetchNui<T>('GET_LUA_TABLE', { tableName });\r\n};\r\n\r\n","import { create } from \"zustand\";\r\nimport { fetchOnLoad } from \"../utils/fetchNui\";\r\n\r\n\r\ntype localeType = (key: string, ...args: string[]) => string;\r\n\r\ntype LocalesProps = {\r\n [key: string]: string;\r\n}\r\n\r\ntype LocaleStoreProps = {\r\n locale: localeType;\r\n locales: LocalesProps;\r\n};\r\n\r\n\r\nexport const localeStore = create<LocaleStoreProps>((set, get) => {\r\n return {\r\n locales: {\r\n \"OccupantsDesc\": \"Here you can view and manage the occupants of your traphouse. These occupants can be used mainly for selling drugs to the NPCs surrounding your traphouse. However they have other uses to so be careful who you add as an occupant.\", \r\n },\r\n locale: (key: string, ...args: (string|number)[]): string => {\r\n const exists = get().locales[key];\r\n if (!exists){\r\n // add to a jsonfile called missing_locales.json within src of project \r\n \r\n }\r\n let translation = exists || key;\r\n if (args.length) {\r\n // convert the arg to a string and replace the %s in the translation\r\n \r\n\r\n translation = translation.replace(/%s/g, () => String(args.shift() || ''));\r\n }\r\n return translation;\r\n },\r\n };\r\n});\r\n\r\n// export locale as a standalone function \r\nexport const locale = localeStore.getState().locale;\r\n\r\nfetchOnLoad<LocalesProps>('GET_LOCALES').then((data) => {\r\n localeStore.setState({ locales: data });\r\n});\r\n","import { createTheme } from \"@mantine/core\";\r\n\r\nconst theme = createTheme({\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n defaultRadius: \"xxs\",\r\n fontFamily: \"Akrobat Regular, sans-serif\",\r\n\r\n radius:{\r\n xxs: '0.2vh',\r\n xs: '0.4vh',\r\n sm: '0.75vh',\r\n md: '1vh',\r\n lg: '1.5vh',\r\n xl: '2vh',\r\n xxl: '3vh',\r\n },\r\n\r\n fontSizes: {\r\n xxs: '1.2vh',\r\n xs: '1.5vh',\r\n sm: '1.8vh',\r\n md: '2.2vh',\r\n lg: '2.8vh',\r\n xl: '3.3vh',\r\n xxl: '3.8vh',\r\n },\r\n\r\n spacing:{\r\n xxs: '0.5vh',\r\n xs: '0.75vh',\r\n sm: '1.5vh',\r\n md: '2vh',\r\n lg: '3vh',\r\n xl: '4vh',\r\n xxl: '5vh',\r\n },\r\n\r\n components:{\r\n Progress:{\r\n styles:{\r\n root:{\r\n backgroundColor: 'rgba(77, 77, 77, 0.4)',\r\n },\r\n \r\n }\r\n },\r\n\r\n Select:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n item:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n MultiSelect:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n pill:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n item:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n TextInput:{\r\n styles:{\r\n section:{\r\n marginRight: '0.2vh',\r\n },\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n\r\n \r\n \r\n }\r\n },\r\n },\r\n\r\n colors: {\r\n dark:[\r\n \"#ffffff\",\r\n \"#e2e2e2\",\r\n \"#c6c6c6\",\r\n \"#aaaaaa\",\r\n \"#8d8d8d\",\r\n \"#717171\",\r\n \"#555555\",\r\n \"#393939\",\r\n \"#1c1c1c\",\r\n \"#000000\",\r\n ],\r\n dirk:[\r\n \"#ffffff\",\r\n \"#f3fce9\",\r\n \"#dbf5bd\",\r\n \"#c3ee91\",\r\n \"#ace765\",\r\n \"#94e039\",\r\n \"#7ac61f\",\r\n \"#5f9a18\",\r\n \"#29420a\",\r\n \"#446e11\",\r\n ],\r\n },\r\n});\r\n\r\n\r\nexport default theme;","import '@mantine/notifications/styles.css';\r\nimport '@mantine/core/styles.css';\r\nimport '@/styles/niceFont.css';\r\nimport '@/styles/scrollBar.css';\r\n\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { BackgroundImage, MantineProvider } from '@mantine/core';\r\nimport { isEnvBrowser } from '@/utils';\r\nimport { create } from 'zustand';\r\nimport theme from '@/theme';\r\nlibrary.add(fas, far, fab);\r\n\r\nexport type DirkProviderProps = {\r\n fakeBackground?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const useSettings = create<{\r\n game: 'rdr3' | 'fivem';\r\n primaryColor: string;\r\n primaryShade: number;\r\n customTheme: Record<string, string[]>;\r\n}>((set) => ({\r\n game: 'rdr3',\r\n primaryColor: 'teal',\r\n primaryShade: 6,\r\n customTheme: {},\r\n}));\r\n\r\nexport function DirkProvider(props: DirkProviderProps) {\r\n const primaryColor = useSettings((data) => data.primaryColor);\r\n const primaryShade = useSettings((data) => data.primaryShade);\r\n const customTheme = useSettings((data) => data.customTheme);\r\n \r\n // Ensure the theme is updated when the settings change\r\n\r\n // useEffect(() => {\r\n // const updatedTheme = {\r\n // ...theme, // Start with the existing theme object\r\n // colors: {\r\n // ...theme.colors, // Copy the existing colors\r\n // custom: customTheme\r\n // },\r\n // };\r\n \r\n // setCurTheme(updatedTheme);\r\n // // set primary color\r\n // setCurTheme({\r\n // ...updatedTheme,\r\n // primaryColor: primaryColor,\r\n // primaryShade: primaryShade,\r\n // });\r\n\r\n // }, [primaryColor, primaryShade, customTheme]);\r\n\r\n // useEffect(() => {\r\n // // fetchSettings();\r\n // runInitialFetches();\r\n // }, []);\r\n\r\n return (\r\n <MantineProvider theme={theme} defaultColorScheme='dark'>\r\n <Wrapper>\r\n {props.children}\r\n </Wrapper>\r\n </MantineProvider>\r\n );\r\n}\r\n\r\nfunction Wrapper({ children }: { children: React.ReactNode }) {\r\n const game = useSettings((data) => data.game);\r\n return isEnvBrowser() ? ( \r\n <BackgroundImage w='100vw' h='100vh' style={{overflow:'hidden'}}\r\n src={game === 'fivem' ?\r\n \"https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg\"\r\n : \"https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg\"}\r\n > \r\n {children}\r\n </BackgroundImage>\r\n ) : (\r\n <>{children}</>\r\n )\r\n}\r\n\r\n"]}
1
+ {"version":3,"sources":["../../src/utils/misc.ts","../../src/utils/fetchNui.ts","../../src/utils/locales.ts","../../src/theme.ts","../../src/providers/DirkProvider.tsx"],"names":["create"],"mappings":"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","file":"index.js","sourcesContent":["export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { isEnvBrowser } from \"./misc\";\r\n\r\n/**\r\n * Simple wrapper around fetch API tailored for CEF/NUI use. This abstraction\r\n * can be extended to include AbortController if needed or if the response isn't\r\n * JSON. Tailor it to your needs.\r\n *\r\n * @param eventName - The endpoint eventname to target\r\n * @param data - Data you wish to send in the NUI Callback\r\n * @param mockData - Mock data to be returned if in the browser\r\n *\r\n * @return returnData - A promise for the data sent back by the NuiCallbacks CB argument\r\n */\r\n\r\nexport async function fetchNui<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const options = {\r\n method: \"post\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n console.log('Mock Data:', mockData);\r\n console.log('Is Env Browser:', isEnvBrowser());\r\n if (isEnvBrowser() && mockData !== undefined) return mockData;\r\n\r\n const resourceName = (window as any).GetParentResourceName\r\n ? (window as any).GetParentResourceName()\r\n : \"nui-frame-app\";\r\n\r\n const resp = await fetch(`https://${resourceName}/${eventName}`, options);\r\n\r\n const respFormatted = await resp.json();\r\n\r\n return respFormatted;\r\n}\r\n\r\n/**\r\n * fetchOnLoad — triggers fetchNui immediately when called.\r\n * Can safely be used anywhere (even top-level, outside React).\r\n *\r\n * Usage:\r\n * fetchOnLoad<MyType>(\"getData\").then(data => myStore.setState({ data }));\r\n */\r\nexport function fetchOnLoad<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T\r\n): Promise<T> {\r\n // just call it directly\r\n return fetchNui<T>(eventName, data, mockData)\r\n .catch((err) => {\r\n console.error(`[fetchOnLoad] Failed for ${eventName}:`, err);\r\n throw err;\r\n });\r\n}\r\n\r\n\r\nexport const fetchLuaTable = <T>(tableName: string) => () => {\r\n if (isEnvBrowser()) {\r\n return Promise.resolve({} as T);\r\n }\r\n return fetchNui<T>('GET_LUA_TABLE', { tableName });\r\n};\r\n\r\n","import { create } from \"zustand\";\r\nimport { fetchOnLoad } from \"../utils/fetchNui\";\r\n\r\n\r\ntype localeType = (key: string, ...args: string[]) => string;\r\n\r\ntype LocalesProps = {\r\n [key: string]: string;\r\n}\r\n\r\ntype LocaleStoreProps = {\r\n locale: localeType;\r\n locales: LocalesProps;\r\n};\r\n\r\n\r\nexport const localeStore = create<LocaleStoreProps>((set, get) => {\r\n return {\r\n locales: {\r\n \"OccupantsDesc\": \"Here you can view and manage the occupants of your traphouse. These occupants can be used mainly for selling drugs to the NPCs surrounding your traphouse. However they have other uses to so be careful who you add as an occupant.\", \r\n },\r\n locale: (key: string, ...args: (string|number)[]): string => {\r\n const exists = get().locales[key];\r\n if (!exists){\r\n // add to a jsonfile called missing_locales.json within src of project \r\n \r\n }\r\n let translation = exists || key;\r\n if (args.length) {\r\n // convert the arg to a string and replace the %s in the translation\r\n \r\n\r\n translation = translation.replace(/%s/g, () => String(args.shift() || ''));\r\n }\r\n return translation;\r\n },\r\n };\r\n});\r\n\r\n// export locale as a standalone function \r\nexport const locale = localeStore.getState().locale;\r\n\r\nfetchOnLoad<LocalesProps>('GET_LOCALES').then((data) => {\r\n localeStore.setState({ locales: data });\r\n});\r\n","import { createTheme } from \"@mantine/core\";\r\n\r\nconst theme = createTheme({\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n defaultRadius: \"xxs\",\r\n fontFamily: \"Akrobat Regular, sans-serif\",\r\n\r\n radius:{\r\n xxs: '0.2vh',\r\n xs: '0.4vh',\r\n sm: '0.75vh',\r\n md: '1vh',\r\n lg: '1.5vh',\r\n xl: '2vh',\r\n xxl: '3vh',\r\n },\r\n\r\n fontSizes: {\r\n xxs: '1.2vh',\r\n xs: '1.5vh',\r\n sm: '1.8vh',\r\n md: '2.2vh',\r\n lg: '2.8vh',\r\n xl: '3.3vh',\r\n xxl: '3.8vh',\r\n },\r\n\r\n spacing:{\r\n xxs: '0.5vh',\r\n xs: '0.75vh',\r\n sm: '1.5vh',\r\n md: '2vh',\r\n lg: '3vh',\r\n xl: '4vh',\r\n xxl: '5vh',\r\n },\r\n\r\n components:{\r\n Progress:{\r\n styles:{\r\n root:{\r\n backgroundColor: 'rgba(77, 77, 77, 0.4)',\r\n },\r\n \r\n }\r\n },\r\n\r\n Select:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n item:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n \r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n MultiSelect:{\r\n styles:{\r\n dropdown:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n pill:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n item:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n wrapper:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n option:{\r\n borderRadius: 'var(--mantine-radius-xxs)',\r\n },\r\n\r\n }\r\n },\r\n TextInput:{\r\n styles:{\r\n section:{\r\n marginRight: '0.2vh',\r\n },\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n\r\n \r\n \r\n }\r\n },\r\n },\r\n\r\n colors: {\r\n dark:[\r\n \"#ffffff\",\r\n \"#e2e2e2\",\r\n \"#c6c6c6\",\r\n \"#aaaaaa\",\r\n \"#8d8d8d\",\r\n \"#717171\",\r\n \"#555555\",\r\n \"#393939\",\r\n \"#1c1c1c\",\r\n \"#000000\",\r\n ],\r\n dirk:[\r\n \"#ffffff\",\r\n \"#f3fce9\",\r\n \"#dbf5bd\",\r\n \"#c3ee91\",\r\n \"#ace765\",\r\n \"#94e039\",\r\n \"#7ac61f\",\r\n \"#5f9a18\",\r\n \"#29420a\",\r\n \"#446e11\",\r\n ],\r\n },\r\n});\r\n\r\n\r\nexport default theme;","import '@mantine/core/styles.css';\r\nimport '@mantine/notifications/styles.css';\r\nimport './styles/niceFont.css';\r\nimport './styles/scrollBar.css';\r\n\r\n\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { BackgroundImage, MantineProvider } from '@mantine/core';\r\nimport { isEnvBrowser } from '@/utils';\r\nimport { create } from 'zustand';\r\nimport theme from '@/theme';\r\nlibrary.add(fas, far, fab);\r\n\r\nexport type DirkProviderProps = {\r\n fakeBackground?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const useSettings = create<{\r\n game: 'rdr3' | 'fivem';\r\n primaryColor: string;\r\n primaryShade: number;\r\n customTheme: Record<string, string[]>;\r\n}>((set) => ({\r\n game: 'rdr3',\r\n primaryColor: 'teal',\r\n primaryShade: 6,\r\n customTheme: {},\r\n}));\r\n\r\nexport function DirkProvider(props: DirkProviderProps) {\r\n const primaryColor = useSettings((data) => data.primaryColor);\r\n const primaryShade = useSettings((data) => data.primaryShade);\r\n const customTheme = useSettings((data) => data.customTheme);\r\n \r\n // Ensure the theme is updated when the settings change\r\n\r\n // useEffect(() => {\r\n // const updatedTheme = {\r\n // ...theme, // Start with the existing theme object\r\n // colors: {\r\n // ...theme.colors, // Copy the existing colors\r\n // custom: customTheme\r\n // },\r\n // };\r\n \r\n // setCurTheme(updatedTheme);\r\n // // set primary color\r\n // setCurTheme({\r\n // ...updatedTheme,\r\n // primaryColor: primaryColor,\r\n // primaryShade: primaryShade,\r\n // });\r\n\r\n // }, [primaryColor, primaryShade, customTheme]);\r\n\r\n // useEffect(() => {\r\n // // fetchSettings();\r\n // runInitialFetches();\r\n // }, []);\r\n\r\n return (\r\n <MantineProvider theme={theme} defaultColorScheme='dark'>\r\n <Wrapper>\r\n {props.children}\r\n </Wrapper>\r\n </MantineProvider>\r\n );\r\n}\r\n\r\nfunction Wrapper({ children }: { children: React.ReactNode }) {\r\n const game = useSettings((data) => data.game);\r\n return isEnvBrowser() ? ( \r\n <BackgroundImage w='100vw' h='100vh' style={{overflow:'hidden'}}\r\n src={game === 'fivem' ?\r\n \"https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg\"\r\n : \"https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg\"}\r\n > \r\n {children}\r\n </BackgroundImage>\r\n ) : (\r\n <>{children}</>\r\n )\r\n}\r\n\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dirk-cfx-react",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",