+
-
-
+
+
+
+
-
+
+ Random port:
+
+
+
+
+ {getPort()}
+
+
+
+
+
+
+
+
+
+
);
diff --git a/packages/app/src/modules/tools/definitions/token-generator/token-generator.page.tsx b/packages/app/src/modules/tools/definitions/token-generator/token-generator.page.tsx
index aa896e2d..f8cafada 100644
--- a/packages/app/src/modules/tools/definitions/token-generator/token-generator.page.tsx
+++ b/packages/app/src/modules/tools/definitions/token-generator/token-generator.page.tsx
@@ -1,7 +1,12 @@
+import { CopyButton } from '@/modules/shared/copy/copy-button';
+import { createRefreshableSignal } from '@/modules/shared/signals';
+import { Button } from '@/modules/ui/components/button';
+import { Card, CardContent, CardFooter, CardHeader, CardTitle } from '@/modules/ui/components/card';
import { Switch, SwitchControl, SwitchLabel, SwitchThumb } from '@/modules/ui/components/switch';
import { TextArea } from '@/modules/ui/components/textarea';
import { TextFieldRoot } from '@/modules/ui/components/textfield';
import { type Component, createSignal } from 'solid-js';
+import { ToolHeader } from '../../components/tool-header';
import { useCurrentTool } from '../../tools.provider';
import defaultDictionary from './locales/en.json';
import { createToken } from './token-generator.models';
@@ -13,57 +18,90 @@ const TokenGeneratorTool: Component = () => {
const [getUseSpecialCharacters, setUseSpecialCharacters] = createSignal(false);
const [getLength] = createSignal(64);
- const { t } = useCurrentTool({ defaultDictionary });
+ const { t, getTool } = useCurrentTool({ defaultDictionary });
- const getToken = () => createToken({
+ const [getToken, refreshToken] = createRefreshableSignal(() => createToken({
withUppercase: getUseUpperCase(),
withLowercase: getUseLowerCase(),
withNumbers: getUseNumbers(),
withSymbols: getUseSpecialCharacters(),
length: getLength(),
- });
+ }));
return (
-
-
-
-
-
-
- {t('uppercase')}
-
-
+
+
-
-
-
-
-
- {t('lowercase')}
-
-
+
+
+
+
+ Configuration
+
+
-
-
-
-
-
- {t('numbers')}
-
-
+
+
+
+
+
+
+ {t('uppercase')}
+
+
-
-
-
-
-
- {t('symbols')}
-
-
+
+
+
+
+
+ {t('lowercase')}
+
+
-
-
-
+
+
+
+
+
+ {t('numbers')}
+
+
+
+
+
+
+
+
+ {t('symbols')}
+
+
+
+
+
+
+
+
+
+ Your token
+
+
+
+
+
+
+
+
+
+
+ {getToken()}
+
+
+
+
);
};
diff --git a/packages/app/src/modules/tools/pages/tool.page.tsx b/packages/app/src/modules/tools/pages/tool.page.tsx
index fdc9e59e..f72db886 100644
--- a/packages/app/src/modules/tools/pages/tool.page.tsx
+++ b/packages/app/src/modules/tools/pages/tool.page.tsx
@@ -7,7 +7,7 @@ import { getToolDefinitionBySlug } from '../tools.registry';
export const ToolPage: Component = () => {
const params = useParams();
- const { getLocale } = useI18n();
+ const { getLocale, t } = useI18n();
const toolDefinition = getToolDefinitionBySlug({ slug: params.toolSlug });
const ToolComponent = lazy(toolDefinition.entryFile);
@@ -25,7 +25,16 @@ export const ToolPage: Component = () => {
return (
{toolLocaleDict => (
-
+ ({
+ icon: toolDefinition.icon,
+ dirName: toolDefinition.dirName,
+ createdAt: toolDefinition.createdAt,
+ name: t(`tools.${toolDefinition.slug}.name` as any),
+ description: t(`tools.${toolDefinition.slug}.description` as any),
+ })}
+ >
)}
diff --git a/packages/app/src/modules/tools/tools.provider.tsx b/packages/app/src/modules/tools/tools.provider.tsx
index 2667fcf2..aedf92e2 100644
--- a/packages/app/src/modules/tools/tools.provider.tsx
+++ b/packages/app/src/modules/tools/tools.provider.tsx
@@ -1,10 +1,12 @@
import type { Accessor, ParentComponent } from 'solid-js';
+import type { ToolDefinition } from './tools.types';
import { flatten, translator } from '@solid-primitives/i18n';
import { merge } from 'lodash-es';
import { createContext, useContext } from 'solid-js';
type ToolProviderContext = {
toolLocaleDict: Accessor>;
+ tool: Accessor & { name: string; description: string }>;
};
const CurrentToolContext = createContext();
@@ -16,8 +18,11 @@ export function useCurrentTool({ defaultDictionary }: { defaultDictionary: T
throw new Error('useCurrentTool must be used within a CurrentToolProvider');
}
+ const { toolLocaleDict, tool } = context;
+
return {
- t: translator(() => flatten(merge({}, defaultDictionary, context.toolLocaleDict()))),
+ t: translator(() => flatten(merge({}, defaultDictionary, toolLocaleDict()))),
+ getTool: tool,
};
}
diff --git a/packages/app/src/modules/tools/tools.types.ts b/packages/app/src/modules/tools/tools.types.ts
index 96842a88..49e81a28 100644
--- a/packages/app/src/modules/tools/tools.types.ts
+++ b/packages/app/src/modules/tools/tools.types.ts
@@ -1,3 +1,6 @@
import type { Flatten, Translator } from '@solid-primitives/i18n';
+import type { defineTool } from './tools.models';
export type ToolI18nFactory = >(args: { defaultDictionary: T }) => { t: Translator> };
+
+export type ToolDefinition = ReturnType;