Compare commits
No commits in common. "fork-main" and "dev-backup" have entirely different histories.
fork-main
...
dev-backup
16
.babelrc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"env": {
|
||||||
|
"test": {
|
||||||
|
"presets": [
|
||||||
|
[
|
||||||
|
"@babel/preset-env",
|
||||||
|
{
|
||||||
|
"targets": {
|
||||||
|
"node": "current"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,5 +0,0 @@
|
|||||||
node_modules
|
|
||||||
playwright-report
|
|
||||||
coverage
|
|
||||||
dist
|
|
||||||
test-results
|
|
||||||
13
.editorconfig
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# editorconfig.org
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
@ -1,291 +0,0 @@
|
|||||||
{
|
|
||||||
"globals": {
|
|
||||||
"Component": true,
|
|
||||||
"ComponentPublicInstance": true,
|
|
||||||
"ComputedRef": true,
|
|
||||||
"EffectScope": true,
|
|
||||||
"InjectionKey": true,
|
|
||||||
"PropType": true,
|
|
||||||
"Ref": true,
|
|
||||||
"VNode": true,
|
|
||||||
"asyncComputed": true,
|
|
||||||
"autoResetRef": true,
|
|
||||||
"computed": true,
|
|
||||||
"computedAsync": true,
|
|
||||||
"computedEager": true,
|
|
||||||
"computedInject": true,
|
|
||||||
"computedWithControl": true,
|
|
||||||
"controlledComputed": true,
|
|
||||||
"controlledRef": true,
|
|
||||||
"createApp": true,
|
|
||||||
"createEventHook": true,
|
|
||||||
"createGlobalState": true,
|
|
||||||
"createInjectionState": true,
|
|
||||||
"createReactiveFn": true,
|
|
||||||
"createReusableTemplate": true,
|
|
||||||
"createSharedComposable": true,
|
|
||||||
"createTemplatePromise": true,
|
|
||||||
"createUnrefFn": true,
|
|
||||||
"customRef": true,
|
|
||||||
"debouncedRef": true,
|
|
||||||
"debouncedWatch": true,
|
|
||||||
"defineAsyncComponent": true,
|
|
||||||
"defineComponent": true,
|
|
||||||
"eagerComputed": true,
|
|
||||||
"effectScope": true,
|
|
||||||
"extendRef": true,
|
|
||||||
"getCurrentInstance": true,
|
|
||||||
"getCurrentScope": true,
|
|
||||||
"h": true,
|
|
||||||
"ignorableWatch": true,
|
|
||||||
"inject": true,
|
|
||||||
"isDefined": true,
|
|
||||||
"isProxy": true,
|
|
||||||
"isReactive": true,
|
|
||||||
"isReadonly": true,
|
|
||||||
"isRef": true,
|
|
||||||
"makeDestructurable": true,
|
|
||||||
"markRaw": true,
|
|
||||||
"nextTick": true,
|
|
||||||
"onActivated": true,
|
|
||||||
"onBeforeMount": true,
|
|
||||||
"onBeforeRouteLeave": true,
|
|
||||||
"onBeforeRouteUpdate": true,
|
|
||||||
"onBeforeUnmount": true,
|
|
||||||
"onBeforeUpdate": true,
|
|
||||||
"onClickOutside": true,
|
|
||||||
"onDeactivated": true,
|
|
||||||
"onErrorCaptured": true,
|
|
||||||
"onKeyStroke": true,
|
|
||||||
"onLongPress": true,
|
|
||||||
"onMounted": true,
|
|
||||||
"onRenderTracked": true,
|
|
||||||
"onRenderTriggered": true,
|
|
||||||
"onScopeDispose": true,
|
|
||||||
"onServerPrefetch": true,
|
|
||||||
"onStartTyping": true,
|
|
||||||
"onUnmounted": true,
|
|
||||||
"onUpdated": true,
|
|
||||||
"pausableWatch": true,
|
|
||||||
"provide": true,
|
|
||||||
"reactify": true,
|
|
||||||
"reactifyObject": true,
|
|
||||||
"reactive": true,
|
|
||||||
"reactiveComputed": true,
|
|
||||||
"reactiveOmit": true,
|
|
||||||
"reactivePick": true,
|
|
||||||
"readonly": true,
|
|
||||||
"ref": true,
|
|
||||||
"refAutoReset": true,
|
|
||||||
"refDebounced": true,
|
|
||||||
"refDefault": true,
|
|
||||||
"refThrottled": true,
|
|
||||||
"refWithControl": true,
|
|
||||||
"resolveComponent": true,
|
|
||||||
"resolveRef": true,
|
|
||||||
"resolveUnref": true,
|
|
||||||
"shallowReactive": true,
|
|
||||||
"shallowReadonly": true,
|
|
||||||
"shallowRef": true,
|
|
||||||
"syncRef": true,
|
|
||||||
"syncRefs": true,
|
|
||||||
"templateRef": true,
|
|
||||||
"throttledRef": true,
|
|
||||||
"throttledWatch": true,
|
|
||||||
"toRaw": true,
|
|
||||||
"toReactive": true,
|
|
||||||
"toRef": true,
|
|
||||||
"toRefs": true,
|
|
||||||
"triggerRef": true,
|
|
||||||
"tryOnBeforeMount": true,
|
|
||||||
"tryOnBeforeUnmount": true,
|
|
||||||
"tryOnMounted": true,
|
|
||||||
"tryOnScopeDispose": true,
|
|
||||||
"tryOnUnmounted": true,
|
|
||||||
"unref": true,
|
|
||||||
"unrefElement": true,
|
|
||||||
"until": true,
|
|
||||||
"useActiveElement": true,
|
|
||||||
"useAnimate": true,
|
|
||||||
"useArrayDifference": true,
|
|
||||||
"useArrayEvery": true,
|
|
||||||
"useArrayFilter": true,
|
|
||||||
"useArrayFind": true,
|
|
||||||
"useArrayFindIndex": true,
|
|
||||||
"useArrayFindLast": true,
|
|
||||||
"useArrayIncludes": true,
|
|
||||||
"useArrayJoin": true,
|
|
||||||
"useArrayMap": true,
|
|
||||||
"useArrayReduce": true,
|
|
||||||
"useArraySome": true,
|
|
||||||
"useArrayUnique": true,
|
|
||||||
"useAsyncQueue": true,
|
|
||||||
"useAsyncState": true,
|
|
||||||
"useAttrs": true,
|
|
||||||
"useBase64": true,
|
|
||||||
"useBattery": true,
|
|
||||||
"useBluetooth": true,
|
|
||||||
"useBreakpoints": true,
|
|
||||||
"useBroadcastChannel": true,
|
|
||||||
"useBrowserLocation": true,
|
|
||||||
"useCached": true,
|
|
||||||
"useClipboard": true,
|
|
||||||
"useCloned": true,
|
|
||||||
"useColorMode": true,
|
|
||||||
"useConfirmDialog": true,
|
|
||||||
"useCounter": true,
|
|
||||||
"useCssModule": true,
|
|
||||||
"useCssVar": true,
|
|
||||||
"useCssVars": true,
|
|
||||||
"useCurrentElement": true,
|
|
||||||
"useCycleList": true,
|
|
||||||
"useDark": true,
|
|
||||||
"useDateFormat": true,
|
|
||||||
"useDebounce": true,
|
|
||||||
"useDebounceFn": true,
|
|
||||||
"useDebouncedRefHistory": true,
|
|
||||||
"useDeviceMotion": true,
|
|
||||||
"useDeviceOrientation": true,
|
|
||||||
"useDevicePixelRatio": true,
|
|
||||||
"useDevicesList": true,
|
|
||||||
"useDialog": true,
|
|
||||||
"useDisplayMedia": true,
|
|
||||||
"useDocumentVisibility": true,
|
|
||||||
"useDraggable": true,
|
|
||||||
"useDropZone": true,
|
|
||||||
"useElementBounding": true,
|
|
||||||
"useElementByPoint": true,
|
|
||||||
"useElementHover": true,
|
|
||||||
"useElementSize": true,
|
|
||||||
"useElementVisibility": true,
|
|
||||||
"useEventBus": true,
|
|
||||||
"useEventListener": true,
|
|
||||||
"useEventSource": true,
|
|
||||||
"useEyeDropper": true,
|
|
||||||
"useFavicon": true,
|
|
||||||
"useFetch": true,
|
|
||||||
"useFileDialog": true,
|
|
||||||
"useFileSystemAccess": true,
|
|
||||||
"useFocus": true,
|
|
||||||
"useFocusWithin": true,
|
|
||||||
"useFps": true,
|
|
||||||
"useFullscreen": true,
|
|
||||||
"useGamepad": true,
|
|
||||||
"useGeolocation": true,
|
|
||||||
"useI18n": true,
|
|
||||||
"useIdle": true,
|
|
||||||
"useImage": true,
|
|
||||||
"useInfiniteScroll": true,
|
|
||||||
"useIntersectionObserver": true,
|
|
||||||
"useInterval": true,
|
|
||||||
"useIntervalFn": true,
|
|
||||||
"useKeyModifier": true,
|
|
||||||
"useLastChanged": true,
|
|
||||||
"useLink": true,
|
|
||||||
"useLoadingBar": true,
|
|
||||||
"useLocalStorage": true,
|
|
||||||
"useMagicKeys": true,
|
|
||||||
"useManualRefHistory": true,
|
|
||||||
"useMediaControls": true,
|
|
||||||
"useMediaQuery": true,
|
|
||||||
"useMemoize": true,
|
|
||||||
"useMemory": true,
|
|
||||||
"useMessage": true,
|
|
||||||
"useMounted": true,
|
|
||||||
"useMouse": true,
|
|
||||||
"useMouseInElement": true,
|
|
||||||
"useMousePressed": true,
|
|
||||||
"useMutationObserver": true,
|
|
||||||
"useNavigatorLanguage": true,
|
|
||||||
"useNetwork": true,
|
|
||||||
"useNotification": true,
|
|
||||||
"useNow": true,
|
|
||||||
"useObjectUrl": true,
|
|
||||||
"useOffsetPagination": true,
|
|
||||||
"useOnline": true,
|
|
||||||
"usePageLeave": true,
|
|
||||||
"useParallax": true,
|
|
||||||
"useParentElement": true,
|
|
||||||
"usePerformanceObserver": true,
|
|
||||||
"usePermission": true,
|
|
||||||
"usePointer": true,
|
|
||||||
"usePointerLock": true,
|
|
||||||
"usePointerSwipe": true,
|
|
||||||
"usePreferredColorScheme": true,
|
|
||||||
"usePreferredContrast": true,
|
|
||||||
"usePreferredDark": true,
|
|
||||||
"usePreferredLanguages": true,
|
|
||||||
"usePreferredReducedMotion": true,
|
|
||||||
"usePrevious": true,
|
|
||||||
"useRafFn": true,
|
|
||||||
"useRefHistory": true,
|
|
||||||
"useResizeObserver": true,
|
|
||||||
"useRoute": true,
|
|
||||||
"useRouter": true,
|
|
||||||
"useScreenOrientation": true,
|
|
||||||
"useScreenSafeArea": true,
|
|
||||||
"useScriptTag": true,
|
|
||||||
"useScroll": true,
|
|
||||||
"useScrollLock": true,
|
|
||||||
"useSessionStorage": true,
|
|
||||||
"useShare": true,
|
|
||||||
"useSlots": true,
|
|
||||||
"useSorted": true,
|
|
||||||
"useSpeechRecognition": true,
|
|
||||||
"useSpeechSynthesis": true,
|
|
||||||
"useStepper": true,
|
|
||||||
"useStorage": true,
|
|
||||||
"useStorageAsync": true,
|
|
||||||
"useStyleTag": true,
|
|
||||||
"useSupported": true,
|
|
||||||
"useSwipe": true,
|
|
||||||
"useTemplateRefsList": true,
|
|
||||||
"useTextDirection": true,
|
|
||||||
"useTextSelection": true,
|
|
||||||
"useTextareaAutosize": true,
|
|
||||||
"useThrottle": true,
|
|
||||||
"useThrottleFn": true,
|
|
||||||
"useThrottledRefHistory": true,
|
|
||||||
"useTimeAgo": true,
|
|
||||||
"useTimeout": true,
|
|
||||||
"useTimeoutFn": true,
|
|
||||||
"useTimeoutPoll": true,
|
|
||||||
"useTimestamp": true,
|
|
||||||
"useTitle": true,
|
|
||||||
"useToNumber": true,
|
|
||||||
"useToString": true,
|
|
||||||
"useToggle": true,
|
|
||||||
"useTransition": true,
|
|
||||||
"useUrlSearchParams": true,
|
|
||||||
"useUserMedia": true,
|
|
||||||
"useVModel": true,
|
|
||||||
"useVModels": true,
|
|
||||||
"useVibrate": true,
|
|
||||||
"useVirtualList": true,
|
|
||||||
"useWakeLock": true,
|
|
||||||
"useWebNotification": true,
|
|
||||||
"useWebSocket": true,
|
|
||||||
"useWebWorker": true,
|
|
||||||
"useWebWorkerFn": true,
|
|
||||||
"useWindowFocus": true,
|
|
||||||
"useWindowScroll": true,
|
|
||||||
"useWindowSize": true,
|
|
||||||
"watch": true,
|
|
||||||
"watchArray": true,
|
|
||||||
"watchAtMost": true,
|
|
||||||
"watchDebounced": true,
|
|
||||||
"watchDeep": true,
|
|
||||||
"watchEffect": true,
|
|
||||||
"watchIgnorable": true,
|
|
||||||
"watchImmediate": true,
|
|
||||||
"watchOnce": true,
|
|
||||||
"watchPausable": true,
|
|
||||||
"watchPostEffect": true,
|
|
||||||
"watchSyncEffect": true,
|
|
||||||
"watchThrottled": true,
|
|
||||||
"watchTriggerable": true,
|
|
||||||
"watchWithFilter": true,
|
|
||||||
"whenever": true,
|
|
||||||
"toValue": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
/**
|
|
||||||
* @type {import('eslint').Linter.Config}
|
|
||||||
*/
|
|
||||||
module.exports = {
|
|
||||||
root: true,
|
|
||||||
extends: ['@antfu', './.eslintrc-auto-import.json', '@unocss'],
|
|
||||||
|
|
||||||
rules: {
|
|
||||||
'curly': ['error', 'all'],
|
|
||||||
'@typescript-eslint/semi': ['error', 'always'],
|
|
||||||
'@typescript-eslint/no-use-before-define': ['error', { allowNamedExports: true, functions: false }],
|
|
||||||
'vue/no-empty-component-block': ['error'],
|
|
||||||
'no-restricted-imports': ['error', {
|
|
||||||
paths: [{
|
|
||||||
name: '@vueuse/core',
|
|
||||||
importNames: ['useClipboard'],
|
|
||||||
message: 'Please use local useCopy from src/composable/copy.ts instead of useClipboard.',
|
|
||||||
}],
|
|
||||||
}],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
18
.eslintrc.js
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
node: true
|
||||||
|
},
|
||||||
|
extends: [
|
||||||
|
'@nuxtjs/eslint-config-typescript',
|
||||||
|
'plugin:nuxt/recommended'
|
||||||
|
],
|
||||||
|
// add your custom rules here
|
||||||
|
rules: {
|
||||||
|
'space-before-function-paren': 'off',
|
||||||
|
'object-curly-spacing': 'off',
|
||||||
|
'no-undef': 'off', // will be catch by the tsc compiler
|
||||||
|
'vue/no-v-html': 'off'
|
||||||
|
}
|
||||||
|
}
|
||||||
48
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
@ -1,48 +0,0 @@
|
|||||||
name: 🐞 Bug Report
|
|
||||||
description: File a bug report.
|
|
||||||
labels: ['bug', 'triage']
|
|
||||||
assignees:
|
|
||||||
- CorentinTh
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for taking the time to fill out this bug report!
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: bug-description
|
|
||||||
attributes:
|
|
||||||
label: Describe the bug
|
|
||||||
description: A clear and concise description of what the bug is. If you intend to submit a PR for this issue, tell us in the description. Thanks!
|
|
||||||
placeholder: Bug description
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: what-happened
|
|
||||||
attributes:
|
|
||||||
label: What happened?
|
|
||||||
description: Also tell us, what did you expect to happen? If you have a screenshot, you can paste it here.
|
|
||||||
placeholder: Tell us what you see!
|
|
||||||
value: 'A bug happened!'
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: version
|
|
||||||
attributes:
|
|
||||||
label: System information
|
|
||||||
description: What is you environment? You can use the `npx envinfo --system --browsers` command to get this information.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: app-type
|
|
||||||
attributes:
|
|
||||||
label: Where did you encounter the bug?
|
|
||||||
options:
|
|
||||||
- Public app (it-tools.tech)
|
|
||||||
- A self hosted
|
|
||||||
- Other (installations, docker, etc.)
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
33
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
title: "[BUG] "
|
||||||
|
labels: bug
|
||||||
|
assignees: CorentinTh
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the bug**
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
**To Reproduce**
|
||||||
|
Steps to reproduce the behavior:
|
||||||
|
1. Go to '...'
|
||||||
|
2. Click on '....'
|
||||||
|
3. Scroll down to '....'
|
||||||
|
4. See error
|
||||||
|
|
||||||
|
**Expected behavior**
|
||||||
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
|
**Screenshots**
|
||||||
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
**Configuration (please complete the following information):**
|
||||||
|
- Device: [e.g. iPhone6, ]
|
||||||
|
- OS: [e.g. iOS]
|
||||||
|
- Browser [e.g. chrome, safari]
|
||||||
|
- Version [e.g. 22]
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context about the problem here.
|
||||||
1
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
56
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
@ -1,56 +0,0 @@
|
|||||||
name: 🚀 New feature proposal
|
|
||||||
description: Propose a new feature/enhancement or tool idea for IT-Tools
|
|
||||||
labels: ['enhancement', 'triage']
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for your interest in the project and taking the time to fill out this feature report!
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: request-type
|
|
||||||
attributes:
|
|
||||||
label: What type of request is this?
|
|
||||||
options:
|
|
||||||
- New tool idea
|
|
||||||
- New feature for an existing tool
|
|
||||||
- Deployment or CI/CD improvement
|
|
||||||
- Self-hosting improvement
|
|
||||||
- Other
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: feature-description
|
|
||||||
attributes:
|
|
||||||
label: Clear and concise description of the feature you are proposing
|
|
||||||
description: A clear and concise description of what the feature is.
|
|
||||||
placeholder: 'Example: a token generator tool'
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: alternative
|
|
||||||
attributes:
|
|
||||||
label: Is their example of this tool in the wild?
|
|
||||||
description: Provide link to already existing tool (like websites, apps, cli, ...) or npm packages that could be used or provide inspiration for the feature.
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: additional-context
|
|
||||||
attributes:
|
|
||||||
label: Additional context
|
|
||||||
description: Any other context or screenshots about the feature request here.
|
|
||||||
|
|
||||||
- type: checkboxes
|
|
||||||
id: checkboxes
|
|
||||||
attributes:
|
|
||||||
label: Validations
|
|
||||||
description: Before submitting the issue, please make sure you do the following
|
|
||||||
options:
|
|
||||||
- label: Check the feature is not already implemented in the project.
|
|
||||||
required: true
|
|
||||||
- label: Check that there isn't already an issue that request the same feature to avoid creating a duplicate.
|
|
||||||
required: true
|
|
||||||
- label: Check that the feature can be implemented in a client side only app (IT-Tools is client side only, no server).
|
|
||||||
required: true
|
|
||||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
title: "[FEAT]"
|
||||||
|
labels: enhancement
|
||||||
|
assignees: CorentinTh
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Is your feature request related to a problem? Please describe.**
|
||||||
|
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||||
|
|
||||||
|
**Describe the solution you'd like**
|
||||||
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
|
**Describe alternatives you've considered**
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context or screenshots about the feature request here.
|
||||||
@ -1,25 +0,0 @@
|
|||||||
<!-- Thank you for contributing! -->
|
|
||||||
|
|
||||||
### Description
|
|
||||||
|
|
||||||
<!-- Please insert your description here and provide especially info about the "what" this PR is solving -->
|
|
||||||
|
|
||||||
### Additional context
|
|
||||||
|
|
||||||
<!-- e.g. is there anything you'd like reviewers to focus on? -->
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### What is the purpose of this pull request? <!-- (put an "X" next to an item) -->
|
|
||||||
|
|
||||||
- [ ] Bug fix
|
|
||||||
- [ ] New Feature
|
|
||||||
- [ ] Documentation update
|
|
||||||
- [ ] Other
|
|
||||||
|
|
||||||
### Before submitting the PR, please make sure you do the following
|
|
||||||
|
|
||||||
- [ ] Submit the PR against the `dev` branch.
|
|
||||||
- [ ] Check that there isn't already a PR that solves the problem the same way to avoid creating a duplicate.
|
|
||||||
- [ ] Provide a description in this PR that addresses **what** the PR is solving, or reference the issue that it solves (e.g. `fixes #123`).
|
|
||||||
- [ ] Ideally, include relevant tests that fail without this PR but pass with it.
|
|
||||||
34
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
# Fetch and update latest `npm` packages
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: '/'
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
time: '00:00'
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
reviewers:
|
||||||
|
- corentinth
|
||||||
|
assignees:
|
||||||
|
- corentinth
|
||||||
|
commit-message:
|
||||||
|
prefix: fix
|
||||||
|
prefix-development: chore
|
||||||
|
include: scope
|
||||||
|
target-branch: "dev"
|
||||||
|
|
||||||
|
# Fetch and update latest `github-actions` pkgs
|
||||||
|
- package-ecosystem: github-actions
|
||||||
|
directory: '/'
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
time: '00:00'
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
reviewers:
|
||||||
|
- corentinth
|
||||||
|
assignees:
|
||||||
|
- corentinth
|
||||||
|
commit-message:
|
||||||
|
prefix: fix
|
||||||
|
prefix-development: chore
|
||||||
|
include: scope
|
||||||
BIN
.github/logo-dark.png
vendored
|
Before Width: | Height: | Size: 40 KiB |
BIN
.github/logo-white.png
vendored
|
Before Width: | Height: | Size: 39 KiB |
BIN
.github/logo.png
vendored
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
39
.github/workflows/ci.yml
vendored
@ -1,34 +1,35 @@
|
|||||||
name: ci
|
name: ci
|
||||||
|
|
||||||
on:
|
on: push
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
ci:
|
ci:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4
|
- name: Checkout
|
||||||
- run: corepack enable
|
uses: actions/checkout@master
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
fetch-depth: 0
|
||||||
cache: 'pnpm'
|
|
||||||
|
- name: Setup node env
|
||||||
|
uses: actions/setup-node@v3.0.0
|
||||||
|
with:
|
||||||
|
node-version: 14
|
||||||
|
|
||||||
|
- name: Cache node_modules
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ~/.npm
|
||||||
|
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-node-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm i
|
run: npm ci
|
||||||
|
|
||||||
- name: Run linters
|
- name: Run linters
|
||||||
run: pnpm lint
|
run: npm run lint
|
||||||
|
|
||||||
- name: Run unit test
|
|
||||||
run: pnpm test
|
|
||||||
|
|
||||||
- name: Type check
|
|
||||||
run: pnpm typecheck
|
|
||||||
|
|
||||||
- name: Build the app
|
- name: Build the app
|
||||||
run: pnpm build
|
run: npm run build
|
||||||
|
|||||||
69
.github/workflows/codeql-analysis.yml
vendored
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
#
|
||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ dev ]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [ dev ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'javascript' ]
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||||
|
# Learn more:
|
||||||
|
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v1
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v1
|
||||||
|
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 https://git.io/JvXDl
|
||||||
|
|
||||||
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||||
|
# and modify them (or add more) to build your code if your project
|
||||||
|
# uses a compiled language
|
||||||
|
|
||||||
|
#- run: |
|
||||||
|
# make bootstrap
|
||||||
|
# make release
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v1
|
||||||
30
.github/workflows/dependabot-merge.yml
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
on:
|
||||||
|
workflow_run:
|
||||||
|
workflows: [ci]
|
||||||
|
branches-ignore: [main]
|
||||||
|
types:
|
||||||
|
- completed
|
||||||
|
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
on-success:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: >
|
||||||
|
github.event.workflow_run.conclusion == 'success' &&
|
||||||
|
github.actor == 'dependabot[bot]'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: "Merge pull request"
|
||||||
|
uses: ridedott/merge-me-action@v2
|
||||||
|
with:
|
||||||
|
# Depending on branch protection rules, a manually populated
|
||||||
|
# `GITHUB_TOKEN_WORKAROUND` secret with permissions to push to
|
||||||
|
# a protected branch must be used. This secret can have an arbitrary
|
||||||
|
# name, as an example, this repository uses `DOTTBOTT_TOKEN`.
|
||||||
|
#
|
||||||
|
# When using a custom token, it is recommended to leave the following
|
||||||
|
# comment for other developers to be aware of the reasoning behind it:
|
||||||
|
#
|
||||||
|
# This must be used as GitHub Actions token does not support pushing
|
||||||
|
# to protected branches.
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
87
.github/workflows/docker-nightly-release.yml
vendored
@ -1,87 +0,0 @@
|
|||||||
name: Docker nightly release
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 0 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check_date:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
name: Check latest commit
|
|
||||||
outputs:
|
|
||||||
should_run: ${{ steps.should_run.outputs.should_run }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4
|
|
||||||
- name: print latest_commit
|
|
||||||
run: echo ${{ github.sha }}
|
|
||||||
|
|
||||||
- id: should_run
|
|
||||||
continue-on-error: true
|
|
||||||
name: check latest commit is less than a day
|
|
||||||
if: ${{ github.event_name == 'schedule' }}
|
|
||||||
run: test -z $(git rev-list --after="24 hours" ${{ github.sha }}) && echo "::set-output name=should_run::false"
|
|
||||||
|
|
||||||
ci:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: check_date
|
|
||||||
if: ${{ needs.check_date.outputs.should_run != 'false' }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4
|
|
||||||
- run: corepack enable
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
cache: 'pnpm'
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: pnpm i
|
|
||||||
|
|
||||||
- name: Run linters
|
|
||||||
run: pnpm lint
|
|
||||||
|
|
||||||
- name: Run unit test
|
|
||||||
run: pnpm test
|
|
||||||
|
|
||||||
- name: Build the app
|
|
||||||
run: pnpm build
|
|
||||||
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs:
|
|
||||||
- ci
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4
|
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: ghcr.io
|
|
||||||
username: ${{ github.repository_owner }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Build and push
|
|
||||||
uses: docker/build-push-action@v5
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: ./Dockerfile
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
push: true
|
|
||||||
tags: |
|
|
||||||
corentinth/it-tools:nightly
|
|
||||||
ghcr.io/corentinth/it-tools:nightly
|
|
||||||
47
.github/workflows/e2e-tests.yml
vendored
@ -1,47 +0,0 @@
|
|||||||
name: E2E tests
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
jobs:
|
|
||||||
test:
|
|
||||||
timeout-minutes: 10
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
shard: [1/3, 2/3, 3/3]
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4
|
|
||||||
|
|
||||||
- run: corepack enable
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
cache: 'pnpm'
|
|
||||||
|
|
||||||
- name: Get Playwright version
|
|
||||||
id: playwright-version
|
|
||||||
run: echo "PLAYWRIGHT_VERSION=$(jq -r .dependencies.playwright package.json)" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: pnpm install
|
|
||||||
|
|
||||||
- name: Build app
|
|
||||||
run: pnpm build
|
|
||||||
|
|
||||||
- name: Restore Playwright browsers from cache
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: ~/.cache/ms-playwright
|
|
||||||
key: ${{ runner.os }}-playwright-${{ steps.playwright-version.outputs.PLAYWRIGHT_VERSION }}-${{ hashFiles('**/playwright.config.ts') }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-playwright-${{ steps.playwright-version.outputs.PLAYWRIGHT_VERSION }}-
|
|
||||||
${{ runner.os }}-playwright-
|
|
||||||
|
|
||||||
- name: Install Playwright Browsers
|
|
||||||
run: pnpm exec playwright install --with-deps
|
|
||||||
|
|
||||||
- name: Run Playwright tests
|
|
||||||
run: pnpm run test:e2e --shard=${{ matrix.shard }}
|
|
||||||
104
.github/workflows/releases.yml
vendored
@ -1,104 +0,0 @@
|
|||||||
name: Release new versions
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- 'v*.*.*'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
docker-release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Get release version
|
|
||||||
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4
|
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: ghcr.io
|
|
||||||
username: ${{ github.repository_owner }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Build and push
|
|
||||||
uses: docker/build-push-action@v5
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: ./Dockerfile
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
push: true
|
|
||||||
tags: |
|
|
||||||
corentinth/it-tools:latest
|
|
||||||
corentinth/it-tools:${{ env.RELEASE_VERSION }}
|
|
||||||
ghcr.io/corentinth/it-tools:latest
|
|
||||||
ghcr.io/corentinth/it-tools:${{ env.RELEASE_VERSION}}
|
|
||||||
|
|
||||||
github-release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: docker-release
|
|
||||||
steps:
|
|
||||||
- name: Get release version
|
|
||||||
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4
|
|
||||||
|
|
||||||
- run: corepack enable
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
cache: 'pnpm'
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: pnpm i
|
|
||||||
|
|
||||||
- name: Build the app
|
|
||||||
run: pnpm build
|
|
||||||
|
|
||||||
- name: Zip the app
|
|
||||||
run: zip -r it-tools-${{ env.RELEASE_VERSION }}.zip dist/*
|
|
||||||
|
|
||||||
- name: Get changelog
|
|
||||||
id: changelog
|
|
||||||
run: |
|
|
||||||
EOF=$(openssl rand -hex 8)
|
|
||||||
echo "changelog<<$EOF" >> $GITHUB_OUTPUT
|
|
||||||
node ./scripts/getLatestChangelog.mjs >> $GITHUB_OUTPUT
|
|
||||||
echo "$EOF" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Create Release
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
files: it-tools-${{ env.RELEASE_VERSION }}.zip
|
|
||||||
tag_name: v${{ env.RELEASE_VERSION }}
|
|
||||||
draft: true
|
|
||||||
prerelease: false
|
|
||||||
body: |
|
|
||||||
## Docker images
|
|
||||||
|
|
||||||
- Docker Hub
|
|
||||||
- `corentinth/it-tools:latest`
|
|
||||||
- `corentinth/it-tools:${{ env.RELEASE_VERSION }}`
|
|
||||||
- GitHub Container Registry
|
|
||||||
- `ghcr.io/corentinth/it-tools:latest`
|
|
||||||
- `ghcr.io/corentinth/it-tools:${{ env.RELEASE_VERSION}}`
|
|
||||||
|
|
||||||
## Changelog
|
|
||||||
|
|
||||||
${{ steps.changelog.outputs.changelog }}
|
|
||||||
103
.gitignore
vendored
@ -1,35 +1,90 @@
|
|||||||
|
# Created by .ignore support plugin (hsz.mobi)
|
||||||
|
### Node template
|
||||||
# Logs
|
# Logs
|
||||||
logs
|
/logs
|
||||||
*.log
|
*.log
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
yarn-debug.log*
|
yarn-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
pnpm-debug.log*
|
|
||||||
lerna-debug.log*
|
|
||||||
|
|
||||||
node_modules
|
# Runtime data
|
||||||
.DS_Store
|
pids
|
||||||
dist
|
*.pid
|
||||||
dist-ssr
|
*.seed
|
||||||
|
*.pid.lock
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
coverage
|
coverage
|
||||||
*.local
|
|
||||||
|
|
||||||
/cypress/videos/
|
# nyc test coverage
|
||||||
/cypress/screenshots/
|
.nyc_output
|
||||||
|
|
||||||
# Editor directories and files
|
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
.vscode/*
|
.grunt
|
||||||
!.vscode/extensions.json
|
|
||||||
.idea
|
|
||||||
*.suo
|
|
||||||
*.ntvs*
|
|
||||||
*.njsproj
|
|
||||||
*.sln
|
|
||||||
*.sw?
|
|
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/)
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# TypeScript v1 declaration files
|
||||||
|
typings/
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
.node_repl_history
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Yarn Integrity file
|
||||||
|
.yarn-integrity
|
||||||
|
|
||||||
|
# dotenv environment variables file
|
||||||
.env
|
.env
|
||||||
/test-results/
|
|
||||||
/playwright-report/
|
# parcel-bundler cache (https://parceljs.org/)
|
||||||
/playwright/.cache/
|
.cache
|
||||||
# Webkit with playwright creates a salt file
|
|
||||||
salt
|
# next.js build output
|
||||||
|
.next
|
||||||
|
|
||||||
|
# nuxt.js build output
|
||||||
|
.nuxt
|
||||||
|
|
||||||
|
# Nuxt generate
|
||||||
|
dist
|
||||||
|
|
||||||
|
# vuepress build output
|
||||||
|
.vuepress/dist
|
||||||
|
|
||||||
|
# Serverless directories
|
||||||
|
.serverless
|
||||||
|
|
||||||
|
# IDE / Editor
|
||||||
|
.idea
|
||||||
|
|
||||||
|
# Service worker
|
||||||
|
sw.*
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Vim swap files
|
||||||
|
*.swp
|
||||||
|
|||||||
1
.husky/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
_
|
||||||
4
.husky/pre-commit
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
|
npm run lint
|
||||||
@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"singleQuote": true,
|
|
||||||
"semi": true,
|
|
||||||
"tabWidth": 2,
|
|
||||||
"trailingComma": "all",
|
|
||||||
"printWidth": 120
|
|
||||||
}
|
|
||||||
14
.versionrc
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"types": [
|
|
||||||
{"type": "feat", "section": "Features"},
|
|
||||||
{"type": "fix", "section": "Bug Fixes"},
|
|
||||||
{"type": "docs", "section": "Documentation"},
|
|
||||||
{"type": "style", "section": "Styling"},
|
|
||||||
{"type": "refactor", "section": "Refactors"},
|
|
||||||
{"type": "perf", "section": "Performance"},
|
|
||||||
{"type": "test", "section": "Tests"},
|
|
||||||
{"type": "build", "section": "Build System"},
|
|
||||||
{"type": "ci", "section": "CI"},
|
|
||||||
{"type": "revert", "section": "Reverts"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
3
.vscode/extensions.json
vendored
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin", "dbaeumer.vscode-eslint", "lokalise.i18n-ally"]
|
|
||||||
}
|
|
||||||
499
CHANGELOG.md
@ -1,424 +1,77 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
## Version 2024.10.22-7ca5933
|
|
||||||
|
## Next
|
||||||
### Features
|
### Changed
|
||||||
- **new tool**: Regex Tester (and Cheatsheet) (#1030) (f5c4ab1)
|
- Switched to [Nuxt.js](//nuxtjs.org)
|
||||||
- **new tool**: Markdown to HTML (#916) (87984e2)
|
- Switched to Typescript using class components decorators from [nuxt-property-decorator](https://github.com/nuxt-community/nuxt-property-decorator)
|
||||||
- **new-tool**: add email normalizer (#1243) (318fb6e)
|
- UI and theme reworked
|
||||||
- **new tools**: JSON to XML and XML to JSON (#1231) (f1a5489)
|
- URL path changed
|
||||||
- **lorem-ipsum**: add button to refresh text lorem-ipsum (#1213) (e1b4f9a)
|
- `/hash` -> [`/hash-text`](https://it-tools.tech/hash-text)
|
||||||
- **base64**: Base64 enhancements (#905) (30144aa)
|
- `/cypher` -> [`/cypher-uncyfer-text`](https://it-tools.tech/cypher-uncyfer-text)
|
||||||
|
- `/url-encoder` -> [`/url-encoder-decoder`](https://it-tools.tech/url-encoder-decoder)
|
||||||
### Bug fixes
|
- [Crontab generator](https://it-tools.tech/crontab-generator) now handle 6 digits format (second support)
|
||||||
- **favorites**: store favorites regardless of languages (#1202) (7ca5933)
|
- Switched from google analytics to a selfhosted privacy-friendly plausible tracker
|
||||||
- **emoji-picker**: debounced search input (#1181) (76a19d2)
|
|
||||||
- **format-transformer**: set overflow for output area width (#787) (b430bae)
|
### Added
|
||||||
- **jwt-parser**: prevent UI overflow on small screen (#1095) (dd4b7e6)
|
- Added [/how-to-report-bug-or-request](/how-to-report-bug-or-request) route to explain how to report bug and request features
|
||||||
|
- Added i18n support
|
||||||
### Refactoring
|
- Added new tools
|
||||||
- **regex-tester**: better description (7251700)
|
- [Random port generator](https://it-tools.tech/random-port-generator)
|
||||||
|
- [Unit converter](https://it-tools.tech/unit-converter)
|
||||||
### Chores
|
- [Roman numeral converter](https://it-tools.tech/roman-numeral-converter)
|
||||||
- **sponsors**: fern sponsor banners (#1314) (f962c41)
|
|
||||||
- **readme**: updated logos (#1294) (6709498)
|
### Removed
|
||||||
|
- Removed markdown editor
|
||||||
### Documentation
|
|
||||||
- **author**: updated author links (#1316) (1c35ac3)
|
## 1.7.0
|
||||||
|
- [feat] [Crontab friendly generator](https://it-tools.tech/crontab-generator)
|
||||||
## Version 2024.05.13-a0bc346
|
|
||||||
|
## 1.6.0
|
||||||
### Features
|
- [feat] [BIP39 generator](https://it-tools.tech/bip39-generator)
|
||||||
- **i18n**: added German translation (#1038) (2c2fb21)
|
- [feat] [Base 64 converter](https://it-tools.tech/base64-string-converter)
|
||||||
- **new tool**: Outlook Safelink Decoder (#911) (d3b32cc)
|
|
||||||
- **new tool**: ascii art generator (#886) (fe349ad)
|
## 1.5.2
|
||||||
- **i18n**: get locales on build (#880) (dc04615)
|
- [feat] [humans.txt](https://it-tools.tech/humans.txt)
|
||||||
- **i18n**: added vi tools translations (#876) (079aa21)
|
- [feat] pwa auto update on new changes
|
||||||
- **i18n**: added zh tools translations (#874) (9c6b122)
|
|
||||||
- **i18n**: added missing locale files in tools (#863) (7f5fa00)
|
## 1.5.1
|
||||||
- **i18n**: added vietnamese language (#859) (1334bff)
|
- [feat] switched back to history mode (no more '#' in url)
|
||||||
- **i18n**: added spanish language (#854) (85b50bb)
|
|
||||||
- **i18n**: added portuguese language (#813) (c65ffb6)
|
## 1.5.0
|
||||||
- **i18n**: added ukrainian language (#827) (693f362)
|
- [feat] added [qr-code generator](https://it-tools.tech/qrcode-generator)
|
||||||
- **new-tool**: yaml formater (#779) (fc06f01)
|
|
||||||
- **new-tool**: added unicode conversion utilities (#858) (c46207f)
|
## 1.4.0
|
||||||
|
- [ui] condensed + colored sidenav
|
||||||
### Bug fixes
|
- [feat] added [git memo](https://it-tools.tech/git-memo)
|
||||||
- **language**: English language cleanup (#1036) (221ddfa)
|
- [refactor] changed app title
|
||||||
- **url-encoder, validation**: typo in validation of url-encoder.vue #1024 (cb5b462)
|
|
||||||
- **integer base converter**: support bigint (#872) (9eac9cb)
|
## 1.3.0
|
||||||
- **bcrypt tool**: allow salt rounds up to 100 (#987) (23f82d9)
|
- [fix] [GithubContributors] ordered contributors by contribution count
|
||||||
|
- [refactor] used vue-typecasting for number inputs
|
||||||
### Refactoring
|
- [feat] lazy loading tools routes
|
||||||
- **lint**: removed extra semi (33e5294)
|
- [feat] added [markdown editor](https://it-tools.tech/markdown-editor)
|
||||||
- **auto-imports**: regen auto imports (1242842)
|
- [feat] added [lorem ipsum generator](https://it-tools.tech/lorem-ipsum-generator)
|
||||||
- **home**: lightened tool cards (#882) (a07806c)
|
|
||||||
- **home**: removed n-grid to prevent layout shift (#881) (10e56b3)
|
## 1.2.1
|
||||||
- **i18n**: added locales per tool (#861) (95698cb)
|
- [fix] [UuidGenerator] added quantity validation rules
|
||||||
|
- [refactor] better isInt checker
|
||||||
### Chores
|
|
||||||
- **issues**: prevent empty issues (#1078) (a0bc346)
|
## 1.2.0
|
||||||
- **issues**: removed old issue templates (#1077) (5a7b0f9)
|
- [feat] [UuidGenerator] can generate multiple uuids
|
||||||
- **node**: upgraded node version in CI workflows (b59942a)
|
|
||||||
- **version**: release 2024.05.10-33e5294 (38d5687)
|
## 1.1.0
|
||||||
- **issues**: improved issues template (2852c30)
|
- [feat] 404 route + page
|
||||||
- **issues**: improved bug issue template (#1046) (a799234)
|
- [feat] changelog in the About page
|
||||||
|
- [feat] contributors list in the About page
|
||||||
### Documentation
|
- [fix] [ColorConverter] color picker now updates fields
|
||||||
- **changelog**: update changelog for 2024.05.10-33e5294 (9dfd347)
|
|
||||||
|
## 1.0.1
|
||||||
## Version 2023.12.21-5ed3693
|
- [chore] added changelog
|
||||||
|
- [fix] [BaseConverter] prevented non-integer bases
|
||||||
### Features
|
- [fix] remove history move (incompatible with vercel.com)
|
||||||
|
|
||||||
- **i18n**: improve chinese i18n (#757) (2e56641)
|
## 1.0.0
|
||||||
- **i18n**: add tooltip and favoriteButton i18n (#756) (a1037cf)
|
- First release
|
||||||
- **i18n**: add Chinese translation base (#718) (8f99eb6)
|
|
||||||
- **new tool**: pdf signature checker (#745) (4781920)
|
|
||||||
- **new tool**: numeronym generator (#729) (e07e2ae)
|
|
||||||
|
|
||||||
### Bug fixes
|
|
||||||
|
|
||||||
- **jwt-parser**: jwt claim array support (#799) (5ed3693)
|
|
||||||
- **camera-recorder**: stop camera on navigation (#782) (80e46c9)
|
|
||||||
- **doc**: updated create new tool command in readme (#762) (7a70dbb)
|
|
||||||
- **base64-file-converter**: fix downloading of index.html content without data preambula (#750) (043e4f0)
|
|
||||||
- **docker**: rollback armv7 in docker releases (#741) (205e360)
|
|
||||||
- **eta**: corrected example (#737) (821cbea)
|
|
||||||
|
|
||||||
### Refactoring
|
|
||||||
|
|
||||||
- **about, i18n**: improved i18n dx with markdown (#753) (bd3edcb)
|
|
||||||
- **token, i18n**: complete fr translation (#752) (de1ee69)
|
|
||||||
- **uuid generator**: uuid version picker (#751) (38586ca)
|
|
||||||
- **case converter**: no split on lowercase, uppercase and mocking case (#748) (ca43a25)
|
|
||||||
- **ui**: replaced legacy n-upload with c-file-upload (#747) (7fe47b3)
|
|
||||||
- **token**: added password in token generator keywords (#746) (16ffe6b)
|
|
||||||
- **bcrypt**: fix input label align (#721) (093ff31)
|
|
||||||
|
|
||||||
### Chores
|
|
||||||
|
|
||||||
- **deps**: switched from oui to oui-data for mac address lookup (#693) (0fe9a20)
|
|
||||||
- **deps**: update unocss monorepo to ^0.57.0 (#638) (2e396d8)
|
|
||||||
- **docker**: added armv7 plateform for docker releases (#722) (fe1de8c)
|
|
||||||
|
|
||||||
## Version 2023.11.02-7d94e11
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **i18n**: language selector (#710) (e86fd96)
|
|
||||||
|
|
||||||
### Bug fixes
|
|
||||||
|
|
||||||
- **dockerfile**: revert replacement of nginx image with non-privileged one (#716) (7d94e11)
|
|
||||||
- **encryption**: alert on decryption error (#711) (02b0d0d)
|
|
||||||
|
|
||||||
### Refactoring
|
|
||||||
|
|
||||||
- **math-evaluator**: improved description (e87f4b1)
|
|
||||||
- **math-evaluator**: improved search and UX (#713) (58de897)
|
|
||||||
|
|
||||||
## Version 2023.11.01-e164afb
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **command-palette**: clear prompt on palette close (#708) (d013696)
|
|
||||||
- **command-palette**: added about page in command palette (99b1eb9)
|
|
||||||
- **new tool**: random MAC address generator (#657) (cc3425d)
|
|
||||||
- **case-converter**: added mocking case (#705) (681f7bf)
|
|
||||||
- **date-converter**: added excel date time format (#704) (f5eb7a8)
|
|
||||||
- **i18n**: token generator (#688) (02e68d3)
|
|
||||||
- **i18n**: home page (#687) (00562ed)
|
|
||||||
- **i18n**: support for i18n in .ts files (#683) (ebb4ec4)
|
|
||||||
- **i18n**: tool card (#682) (84a4a64)
|
|
||||||
- **i18n**: about page (#680) (a2b53c2)
|
|
||||||
- **i18n**: 404 page (#679) (35563b8)
|
|
||||||
- **new tool**: text to ascii converter (#669) (b2ad4f7)
|
|
||||||
- **new tool**: ULID generator (#623) (5c4d775)
|
|
||||||
- **new tool**: add wifi qr code generator (#599) (0eedce6)
|
|
||||||
- **new tool**: iban validation and parser (#591) (3a63837)
|
|
||||||
- **new tool**: text diff and comparator (#588) (81bfe57)
|
|
||||||
|
|
||||||
### Bug fixes
|
|
||||||
|
|
||||||
- **deps**: fix issue on slugify (#593) (#673) (720201a)
|
|
||||||
- **deps**: update dependency monaco-editor to ^0.43.0 (#620) (e371ef7)
|
|
||||||
- **deps**: update dependency sql-formatter to v13 (#606) (c7d4562)
|
|
||||||
|
|
||||||
### Refactoring
|
|
||||||
|
|
||||||
- **ui**: better ui demo preview menu (#664) (015c673)
|
|
||||||
- **color-converter**: improved color-converter UX (#701) (abb8335)
|
|
||||||
- **docker**: improved docker config (#700) (020e9cb)
|
|
||||||
- **c-table**: added description on c-table for accessibility (b408df8)
|
|
||||||
- **ci**: reduced timeout in e2e (#666) (88b8818)
|
|
||||||
- **ui**: new c-table ui component (#665) (ee4c853)
|
|
||||||
- **ui**: removed n-page-header component in user-agent parser (#663) (cbf58fd)
|
|
||||||
- **ui**: removed n-p components in about page (#662) (a757a51)
|
|
||||||
- **ui**: switched naive tooltip components to custom ones (#661) (025f556)
|
|
||||||
- **spelling**: minor corrections to phrasing/spelling (#596) (8a30b6b)
|
|
||||||
- **i18n**: merge tools scoped locales with global ones (#612) (233d556)
|
|
||||||
- **c-key-value-list**: got rid of table for layout (#611) (7ab9204)
|
|
||||||
- **CI**: run e2e against built app and no longer vercel (#610) (18dd140)
|
|
||||||
- **bcrypt**: fix typo (#604) (e18bae1)
|
|
||||||
|
|
||||||
### Chores
|
|
||||||
|
|
||||||
- **deps**: clean unused dependencies (#709) (e164afb)
|
|
||||||
- **deps**: update docker/setup-qemu-action action to v3 (#627) (4365226)
|
|
||||||
- **deps**: update docker/setup-buildx-action action to v3 (#626) (57ecda1)
|
|
||||||
- **deps**: update docker/login-action action to v3 (#625) (d8d7a3b)
|
|
||||||
- **deps**: update docker/build-push-action action to v5 (#624) (d36b18f)
|
|
||||||
- **deps**: update dependency node to v18.18.2 (#674) (eea9f91)
|
|
||||||
- **deps**: update dependency node to v18.18.0 (#636) (2d2dffb)
|
|
||||||
- **deps**: update actions/checkout action to v4 (#613) (4972159)
|
|
||||||
- **deps**: update dependency unplugin-icons to ^0.17.0 (#609) (f035f48)
|
|
||||||
- **deps**: update dependency @intlify/unplugin-vue-i18n to ^0.13.0 (#597) (d1dff42)
|
|
||||||
- **deps**: update dependency @antfu/eslint-config to ^0.41.0 (#585) (a9cd91c)
|
|
||||||
- **deps**: update dependency typescript to ~5.2.0 (#587) (f3e14fc)
|
|
||||||
|
|
||||||
### Doc
|
|
||||||
|
|
||||||
- **readme**: added contributors list (#622) (557b304)
|
|
||||||
- **hosting**: added cloudron in the other hosting solutions section (#589) (06c3547)
|
|
||||||
|
|
||||||
## Version 2023.08.21-6f93cba
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **copy**: support legacy copy to clipboard for older browser (#581) (6f93cba)
|
|
||||||
- **new tool**: string obfuscator (#575) (c58d6e3)
|
|
||||||
|
|
||||||
### Bug fixes
|
|
||||||
|
|
||||||
- **deps**: update dependency sql-formatter to v12 (#520) (2bcb77a)
|
|
||||||
|
|
||||||
### Chores
|
|
||||||
|
|
||||||
- **deps**: switched to fucking typescript v5 (#501) (76b2761)
|
|
||||||
- **deps**: update dependency @antfu/eslint-config to ^0.40.0 (#552) (6ff9a01)
|
|
||||||
- **deps**: update dependency prettier to v3 (#564) (a2b9b15)
|
|
||||||
- **deps**: removed @typescript-eslint/parser (#563) (144f86e)
|
|
||||||
- **deps**: removed ts-pattern (#565) (0f1f659)
|
|
||||||
|
|
||||||
## Version 2023.08.16-9bd4ad4
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **Case Converter**: Add lowercase and uppercase (#534) (7b6232a)
|
|
||||||
- **new tool**: emoji picker (#551) (93f7cf0)
|
|
||||||
- **ui**: added c-select in the ui lib (#550) (dfa1ba8)
|
|
||||||
- **new-tool**: password strength analyzer (#502) (a9c7b89)
|
|
||||||
- **new-tool**: yaml to toml (e29b258)
|
|
||||||
- **new-tool**: json to toml (ea50a3f)
|
|
||||||
- **new-tool**: toml to yaml (746e5bd)
|
|
||||||
- **new-tool**: toml to json (c7d4f11)
|
|
||||||
- **command-palette**: random tool action (ec4c533)
|
|
||||||
- **config**: allow app to run in a subfolder via BASE_URL (#461) (6304595)
|
|
||||||
- **new-tool**: percentage calculator (#456) (b9406a4)
|
|
||||||
- **new-tool**: json to csv converter (69f0bd0)
|
|
||||||
- **new tool**: xml formatter (#457) (a6bbeae)
|
|
||||||
- **chmod-calculator**: added symbolic representation (#455) (f771e7a)
|
|
||||||
- **enhancement**: use system dark mode (#458) (cf7b1f0)
|
|
||||||
- **phone-parser**: searchable country code select (d2956b6)
|
|
||||||
- **new tool**: camera screenshot and recorder (34d8e5c)
|
|
||||||
- **base64-string-converter**: switch to encode and decode url safe base64 strings (#392) (0b20f1c)
|
|
||||||
|
|
||||||
### Bug fixes
|
|
||||||
|
|
||||||
- **deps**: update dependency uuid to v9 (#566) (5e12991)
|
|
||||||
- **deps**: update dependency mathjs to v11 (#519) (7924456)
|
|
||||||
- **deps**: update dependency @vueuse/router to v10 (#516) (ea0f27c)
|
|
||||||
- **copy**: prevent shorthand copy if source is present in useCopy (#559) (86e964a)
|
|
||||||
- **c-lib**: hide component library shortcut link in non-dev (#557) (56d74d0)
|
|
||||||
- **emoji picker**: fix copy button (#556) (e5d0ba7)
|
|
||||||
- **deps**: update dependency @vueuse/head to v1 (#515) (d12dd40)
|
|
||||||
- **deps**: update dependency country-code-lookup to ^0.1.0 (#493) (8c72e69)
|
|
||||||
- **deps**: update dependency @vueuse/head to ^0.9.0 (#492) (cec9dea)
|
|
||||||
- **i18n**: fallback for demo i18n (12d9e5d)
|
|
||||||
- **typos**: fixed more typos & uppercase JSON (#475) (9526ed8)
|
|
||||||
- **about**: typos and wording (#474) (7068610)
|
|
||||||
- **mime-types**: typos (#470) (c4cec9e)
|
|
||||||
- **sonar**: took down minor sonar warning (4cbd7ac)
|
|
||||||
- **readme**: typo (105b21b)
|
|
||||||
- **ipv4-range-expander**: calculate correct for ip addresses where the first octet is lower than 128 (#405) (8c92d56)
|
|
||||||
- **ipv4-converter**: removed readonly on input (7aed9c5)
|
|
||||||
|
|
||||||
### Refactoring
|
|
||||||
|
|
||||||
- **navbar**: consistent spacing in navbar buttons (#507) (30f88fc)
|
|
||||||
- **ui**: remove n-text (#506) (72c98a3)
|
|
||||||
- **ui**: replaced some n-input to c-input (#505) (05ea545)
|
|
||||||
- **json-viewer**: input monospace font (#485) (9125dcf)
|
|
||||||
- **search**: command palette design (#463) (bcb98b3)
|
|
||||||
- **c-input-text**: force usage of props with default (1e2a35b)
|
|
||||||
- **naming**: prevent auto import conflicts for git memo (45c2474)
|
|
||||||
- **imports**: removed unnecessary imports to vue (fe61f0f)
|
|
||||||
- **ui**: removed all n-space (4d2b037)
|
|
||||||
- **ui**: replaced some n-input with c-input-text (f7fc779)
|
|
||||||
|
|
||||||
### Chores
|
|
||||||
|
|
||||||
- **deps**: update dependency vitest to ^0.34.0 (#562) (9bd4ad4)
|
|
||||||
- **deps**: update dependency node to v18.17.1 (#560) (65a9474)
|
|
||||||
- **deps**: update dependency unocss to ^0.55.0 (#561) (85cc7a8)
|
|
||||||
- **deps**: update dependency @unocss/eslint-config to ^0.55.0 (#553) (4268e25)
|
|
||||||
- **deps**: update dependency @intlify/unplugin-vue-i18n to ^0.12.0 (#526) (d1c8880)
|
|
||||||
- **deps**: update docker/login-action action to v2 (#512) (99bc84c)
|
|
||||||
- **deps**: update dependency jsdom to v22 (#499) (cd5a503)
|
|
||||||
- **deps**: update dependency @vitejs/plugin-vue-jsx to v3 (#497) (1a60236)
|
|
||||||
- **deps**: update dependency @vitejs/plugin-vue to v4 (#496) (a249421)
|
|
||||||
- **deps**: update dependency vite-plugin-pwa to ^0.16.0 (#488) (6498c9b)
|
|
||||||
- **deps**: update dependency vite to v4 (#503) (f40d7ec)
|
|
||||||
- **ci**: e2e against vercel deployement (#518) (2e28c50)
|
|
||||||
- **e2e**: execute e2e against built app (#511) (cf382b5)
|
|
||||||
- **deps**: update github/codeql-action action to v2 (#513) (0152583)
|
|
||||||
- **deps**: update node.js to v18 (#514) (38cb61d)
|
|
||||||
- **deps**: switched from vite-plugin-md to vite-plugin-vue-markdown (#510) (354aed6)
|
|
||||||
- **deps**: update dependency workbox-window to v7 (#509) (6b8682f)
|
|
||||||
- **deps**: update dependency vite-svg-loader to v4 (#508) (9e8349d)
|
|
||||||
- **deps**: update dependency typescript to ~4.9.0 (#481) (f440507)
|
|
||||||
- **deps**: update dependency vue-tsc to ^0.40.0 (#490) (b0d9a3e)
|
|
||||||
- **deps**: updated unplugin-auto-import (#504) (5c3bebf)
|
|
||||||
- **deps**: removed start-server-and-test dependency (8df7cd0)
|
|
||||||
- **deps**: update dependency c8 to v8 (#498) (6bda2ca)
|
|
||||||
- **deps**: update dependency @types/jsdom to v21 (#495) (994a1c3)
|
|
||||||
- **deps**: update node.js to v16.20.1 (#491) (05edaf4)
|
|
||||||
- **deps**: update dependency vitest to ^0.32.0 (#489) (49eacea)
|
|
||||||
- **deps**: update actions/checkout action to v3 (#494) (3f7d469)
|
|
||||||
- **deps**: update dependency unplugin-vue-components to ^0.25.0 (#484) (5f21908)
|
|
||||||
- **deps**: update dependency unplugin-auto-import to ^0.16.0 (#483) (6cb0845)
|
|
||||||
- **deps**: update dependency unocss to ^0.53.0 (#482) (38710dc)
|
|
||||||
- **deps**: update dependency @unocss/eslint-config to ^0.53.0 (#478) (282cfc4)
|
|
||||||
- **deps**: added renovate.json (#477) (363c2e4)
|
|
||||||
- **i18n**: tool scoped locales (#471) (1b038c7)
|
|
||||||
- **wysiwyg-editor**: update tiptap dependencies (732da08)
|
|
||||||
- **i18n**: setup i18n plugin config (ebfb872)
|
|
||||||
- **config**: netlify deployment support (#443) (93799af)
|
|
||||||
- **ci**: shard e2e tests (962a6d6)
|
|
||||||
- **lint**: switched to a better lint config (33c9b66)
|
|
||||||
|
|
||||||
### Refacor
|
|
||||||
|
|
||||||
- **transformers**: use monospace font for JSON and SQL text areas (#476) (ba4876d)
|
|
||||||
|
|
||||||
### Documentation
|
|
||||||
|
|
||||||
- **ide**: updated vscode extensions settings (#472) (847323c)
|
|
||||||
|
|
||||||
### Chors
|
|
||||||
|
|
||||||
- **deps**: updated vueuse dependency version (8515c24)
|
|
||||||
|
|
||||||
## Version 2023.05.14-77f2efc
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **list-converter**: a small converter who deals with column based data and do some stuff with it (#387) (83a7b3b)
|
|
||||||
- **new tool**: phone parser and normalizer (ce3150c)
|
|
||||||
|
|
||||||
### Bug fixes
|
|
||||||
|
|
||||||
- **phone-parser**: use default country code (a43c546)
|
|
||||||
- **home**: prevent weird blue border on card (3f6c8f0)
|
|
||||||
|
|
||||||
### Refactoring
|
|
||||||
|
|
||||||
- **ui**: replaced some n-input with c-input-text (77f2efc)
|
|
||||||
|
|
||||||
### Chores
|
|
||||||
|
|
||||||
- **issues**: updated new tool request issue template (edae4c6)
|
|
||||||
|
|
||||||
### Ui-lib
|
|
||||||
|
|
||||||
- **new-component**: added text input component in the c-lib (aad8d84)
|
|
||||||
- **button**: size variants (401f13f)
|
|
||||||
|
|
||||||
## Version 2023.04.23-92bd835
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **ui-lib**: demo pages for c-lib components (92bd835)
|
|
||||||
- **new-tool**: diff of two json objects (362f2fa)
|
|
||||||
- **ipv4-range-expander**: expands a given IPv4 start and end address to a valid IPv4 subnet (#366) (df989e2)
|
|
||||||
- **date converter**: auto focus main input (6d22025)
|
|
||||||
|
|
||||||
### Bug fixes
|
|
||||||
|
|
||||||
- **ts**: cleaned legacy typechecking warning (e88c1d5)
|
|
||||||
- **mac-address-lookup**: added copy handler on button click (c311e38)
|
|
||||||
|
|
||||||
### Refactoring
|
|
||||||
|
|
||||||
- **ui-lib**: prevent c-button to shrink (61ece23)
|
|
||||||
- **ui**: replaced naive ui cards with custom ones (f080933)
|
|
||||||
- **clean**: removed unused lodash import (bb32513)
|
|
||||||
- **clean**: removed useless br tags (74073f5)
|
|
||||||
- **ui**: getting ride of naive ui buttons (c45bce3)
|
|
||||||
|
|
||||||
## Version 2023.04.14-dbad773
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **new-tool**: http status codes (8355bd2)
|
|
||||||
|
|
||||||
### Refactoring
|
|
||||||
|
|
||||||
- **uuid-generator**: prevent NaN in quantity (6fb4994)
|
|
||||||
|
|
||||||
### Chores
|
|
||||||
|
|
||||||
- **release**: create a github release on new version (dbad773)
|
|
||||||
- **version**: reset CHANGELOG content to support new format (85cb0ff)
|
|
||||||
|
|
||||||
## Version 2023.04.14-f9b77b7
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **new-tool**: http status codes (8355bd2)
|
|
||||||
|
|
||||||
### Refactoring
|
|
||||||
|
|
||||||
- **uuid-generator**: prevent NaN in quantity (6fb4994)
|
|
||||||
|
|
||||||
### Chores
|
|
||||||
|
|
||||||
- **release**: create a github release on new version (f9b77b7)
|
|
||||||
- **version**: reset CHANGELOG content to support new format (85cb0ff)
|
|
||||||
|
|
||||||
## Version 2023.04.14-2f0d239
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **new-tool**: http status codes (8355bd2)
|
|
||||||
|
|
||||||
### Refactoring
|
|
||||||
|
|
||||||
- **uuid-generator**: prevent NaN in quantity (6fb4994)
|
|
||||||
|
|
||||||
### Chores
|
|
||||||
|
|
||||||
- **release**: create a github release on new version (2f0d239)
|
|
||||||
- **version**: reset CHANGELOG content to support new format (85cb0ff)
|
|
||||||
|
|
||||||
## Version 2023.04.14-474cae4
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- **new-tool**: http status codes (8355bd2)
|
|
||||||
|
|
||||||
### Refactoring
|
|
||||||
|
|
||||||
- **uuid-generator**: prevent NaN in quantity (6fb4994)
|
|
||||||
|
|
||||||
### Chores
|
|
||||||
|
|
||||||
- **release**: create a github release on new version (474cae4)
|
|
||||||
- **version**: reset CHANGELOG content to support new format (85cb0ff)
|
|
||||||
|
|
||||||
## Version v2023.4.13-dce9ff9
|
|
||||||
|
|
||||||
_Diff not available_
|
|
||||||
|
|||||||
45
CONTRIBUTING.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
## Commit message semantic
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
## Create a tool
|
||||||
|
|
||||||
|
Create a `.vue` file in `pages/tools/[category]/[route].vue` where `[category]` correspond to the tool scope and
|
||||||
|
`[route]` will be the path of the file in the url (ex: `foo-bar.vue` will be accessible at it-tools.tech/foo-bar).
|
||||||
|
|
||||||
|
|
||||||
|
Here is a template of a component
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<ToolWrapper :config="config()">
|
||||||
|
Hello world
|
||||||
|
</ToolWrapper>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
|
||||||
|
import {Component} from 'nuxt-property-decorator'
|
||||||
|
import type {ToolConfig} from '@/types/ToolConfig'
|
||||||
|
import Tool from '~/components/Tool.vue'
|
||||||
|
|
||||||
|
@Component
|
||||||
|
export default class MyComponent extends Tool {
|
||||||
|
config(): ToolConfig {
|
||||||
|
return {
|
||||||
|
title: 'My component',
|
||||||
|
description: 'The description of my component',
|
||||||
|
icon: 'mdi-icon',
|
||||||
|
keywords: ['some', 'keywords', 'here']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
// Extra styling here
|
||||||
|
</style>
|
||||||
|
|
||||||
|
```
|
||||||
17
Dockerfile
@ -1,17 +0,0 @@
|
|||||||
# build stage
|
|
||||||
FROM node:lts-alpine AS build-stage
|
|
||||||
# Set environment variables for non-interactive npm installs
|
|
||||||
ENV NPM_CONFIG_LOGLEVEL warn
|
|
||||||
ENV CI true
|
|
||||||
WORKDIR /app
|
|
||||||
COPY package.json pnpm-lock.yaml ./
|
|
||||||
RUN npm install -g pnpm && pnpm i --frozen-lockfile
|
|
||||||
COPY . .
|
|
||||||
RUN pnpm build
|
|
||||||
|
|
||||||
# production stage
|
|
||||||
FROM nginx:stable-alpine AS production-stage
|
|
||||||
COPY --from=build-stage /app/dist /usr/share/nginx/html
|
|
||||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
|
||||||
EXPOSE 80
|
|
||||||
CMD ["nginx", "-g", "daemon off;"]
|
|
||||||
695
LICENSE
@ -1,674 +1,21 @@
|
|||||||
GNU GENERAL PUBLIC LICENSE
|
MIT License
|
||||||
Version 3, 29 June 2007
|
|
||||||
|
Copyright (c) 2021 Corentin THOMASSET
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this license document, but changing it is not allowed.
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
Preamble
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
The GNU General Public License is a free, copyleft license for
|
furnished to do so, subject to the following conditions:
|
||||||
software and other kinds of works.
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
The licenses for most software and other practical works are designed
|
copies or substantial portions of the Software.
|
||||||
to take away your freedom to share and change the works. By contrast,
|
|
||||||
the GNU General Public License is intended to guarantee your freedom to
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
share and change all versions of a program--to make sure it remains free
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
software for all its users. We, the Free Software Foundation, use the
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
GNU General Public License for most of our software; it applies also to
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
any other work released this way by its authors. You can apply it to
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
your programs, too.
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
them if you wish), that you receive source code or can get it if you
|
|
||||||
want it, that you can change the software or use pieces of it in new
|
|
||||||
free programs, and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to prevent others from denying you
|
|
||||||
these rights or asking you to surrender the rights. Therefore, you have
|
|
||||||
certain responsibilities if you distribute copies of the software, or if
|
|
||||||
you modify it: responsibilities to respect the freedom of others.
|
|
||||||
|
|
||||||
For example, if you distribute copies of such a program, whether
|
|
||||||
gratis or for a fee, you must pass on to the recipients the same
|
|
||||||
freedoms that you received. You must make sure that they, too, receive
|
|
||||||
or can get the source code. And you must show them these terms so they
|
|
||||||
know their rights.
|
|
||||||
|
|
||||||
Developers that use the GNU GPL protect your rights with two steps:
|
|
||||||
(1) assert copyright on the software, and (2) offer you this License
|
|
||||||
giving you legal permission to copy, distribute and/or modify it.
|
|
||||||
|
|
||||||
For the developers' and authors' protection, the GPL clearly explains
|
|
||||||
that there is no warranty for this free software. For both users' and
|
|
||||||
authors' sake, the GPL requires that modified versions be marked as
|
|
||||||
changed, so that their problems will not be attributed erroneously to
|
|
||||||
authors of previous versions.
|
|
||||||
|
|
||||||
Some devices are designed to deny users access to install or run
|
|
||||||
modified versions of the software inside them, although the manufacturer
|
|
||||||
can do so. This is fundamentally incompatible with the aim of
|
|
||||||
protecting users' freedom to change the software. The systematic
|
|
||||||
pattern of such abuse occurs in the area of products for individuals to
|
|
||||||
use, which is precisely where it is most unacceptable. Therefore, we
|
|
||||||
have designed this version of the GPL to prohibit the practice for those
|
|
||||||
products. If such problems arise substantially in other domains, we
|
|
||||||
stand ready to extend this provision to those domains in future versions
|
|
||||||
of the GPL, as needed to protect the freedom of users.
|
|
||||||
|
|
||||||
Finally, every program is threatened constantly by software patents.
|
|
||||||
States should not allow patents to restrict development and use of
|
|
||||||
software on general-purpose computers, but in those that do, we wish to
|
|
||||||
avoid the special danger that patents applied to a free program could
|
|
||||||
make it effectively proprietary. To prevent this, the GPL assures that
|
|
||||||
patents cannot be used to render the program non-free.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
0. Definitions.
|
|
||||||
|
|
||||||
"This License" refers to version 3 of the GNU General Public License.
|
|
||||||
|
|
||||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
|
||||||
works, such as semiconductor masks.
|
|
||||||
|
|
||||||
"The Program" refers to any copyrightable work licensed under this
|
|
||||||
License. Each licensee is addressed as "you". "Licensees" and
|
|
||||||
"recipients" may be individuals or organizations.
|
|
||||||
|
|
||||||
To "modify" a work means to copy from or adapt all or part of the work
|
|
||||||
in a fashion requiring copyright permission, other than the making of an
|
|
||||||
exact copy. The resulting work is called a "modified version" of the
|
|
||||||
earlier work or a work "based on" the earlier work.
|
|
||||||
|
|
||||||
A "covered work" means either the unmodified Program or a work based
|
|
||||||
on the Program.
|
|
||||||
|
|
||||||
To "propagate" a work means to do anything with it that, without
|
|
||||||
permission, would make you directly or secondarily liable for
|
|
||||||
infringement under applicable copyright law, except executing it on a
|
|
||||||
computer or modifying a private copy. Propagation includes copying,
|
|
||||||
distribution (with or without modification), making available to the
|
|
||||||
public, and in some countries other activities as well.
|
|
||||||
|
|
||||||
To "convey" a work means any kind of propagation that enables other
|
|
||||||
parties to make or receive copies. Mere interaction with a user through
|
|
||||||
a computer network, with no transfer of a copy, is not conveying.
|
|
||||||
|
|
||||||
An interactive user interface displays "Appropriate Legal Notices"
|
|
||||||
to the extent that it includes a convenient and prominently visible
|
|
||||||
feature that (1) displays an appropriate copyright notice, and (2)
|
|
||||||
tells the user that there is no warranty for the work (except to the
|
|
||||||
extent that warranties are provided), that licensees may convey the
|
|
||||||
work under this License, and how to view a copy of this License. If
|
|
||||||
the interface presents a list of user commands or options, such as a
|
|
||||||
menu, a prominent item in the list meets this criterion.
|
|
||||||
|
|
||||||
1. Source Code.
|
|
||||||
|
|
||||||
The "source code" for a work means the preferred form of the work
|
|
||||||
for making modifications to it. "Object code" means any non-source
|
|
||||||
form of a work.
|
|
||||||
|
|
||||||
A "Standard Interface" means an interface that either is an official
|
|
||||||
standard defined by a recognized standards body, or, in the case of
|
|
||||||
interfaces specified for a particular programming language, one that
|
|
||||||
is widely used among developers working in that language.
|
|
||||||
|
|
||||||
The "System Libraries" of an executable work include anything, other
|
|
||||||
than the work as a whole, that (a) is included in the normal form of
|
|
||||||
packaging a Major Component, but which is not part of that Major
|
|
||||||
Component, and (b) serves only to enable use of the work with that
|
|
||||||
Major Component, or to implement a Standard Interface for which an
|
|
||||||
implementation is available to the public in source code form. A
|
|
||||||
"Major Component", in this context, means a major essential component
|
|
||||||
(kernel, window system, and so on) of the specific operating system
|
|
||||||
(if any) on which the executable work runs, or a compiler used to
|
|
||||||
produce the work, or an object code interpreter used to run it.
|
|
||||||
|
|
||||||
The "Corresponding Source" for a work in object code form means all
|
|
||||||
the source code needed to generate, install, and (for an executable
|
|
||||||
work) run the object code and to modify the work, including scripts to
|
|
||||||
control those activities. However, it does not include the work's
|
|
||||||
System Libraries, or general-purpose tools or generally available free
|
|
||||||
programs which are used unmodified in performing those activities but
|
|
||||||
which are not part of the work. For example, Corresponding Source
|
|
||||||
includes interface definition files associated with source files for
|
|
||||||
the work, and the source code for shared libraries and dynamically
|
|
||||||
linked subprograms that the work is specifically designed to require,
|
|
||||||
such as by intimate data communication or control flow between those
|
|
||||||
subprograms and other parts of the work.
|
|
||||||
|
|
||||||
The Corresponding Source need not include anything that users
|
|
||||||
can regenerate automatically from other parts of the Corresponding
|
|
||||||
Source.
|
|
||||||
|
|
||||||
The Corresponding Source for a work in source code form is that
|
|
||||||
same work.
|
|
||||||
|
|
||||||
2. Basic Permissions.
|
|
||||||
|
|
||||||
All rights granted under this License are granted for the term of
|
|
||||||
copyright on the Program, and are irrevocable provided the stated
|
|
||||||
conditions are met. This License explicitly affirms your unlimited
|
|
||||||
permission to run the unmodified Program. The output from running a
|
|
||||||
covered work is covered by this License only if the output, given its
|
|
||||||
content, constitutes a covered work. This License acknowledges your
|
|
||||||
rights of fair use or other equivalent, as provided by copyright law.
|
|
||||||
|
|
||||||
You may make, run and propagate covered works that you do not
|
|
||||||
convey, without conditions so long as your license otherwise remains
|
|
||||||
in force. You may convey covered works to others for the sole purpose
|
|
||||||
of having them make modifications exclusively for you, or provide you
|
|
||||||
with facilities for running those works, provided that you comply with
|
|
||||||
the terms of this License in conveying all material for which you do
|
|
||||||
not control copyright. Those thus making or running the covered works
|
|
||||||
for you must do so exclusively on your behalf, under your direction
|
|
||||||
and control, on terms that prohibit them from making any copies of
|
|
||||||
your copyrighted material outside their relationship with you.
|
|
||||||
|
|
||||||
Conveying under any other circumstances is permitted solely under
|
|
||||||
the conditions stated below. Sublicensing is not allowed; section 10
|
|
||||||
makes it unnecessary.
|
|
||||||
|
|
||||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
||||||
|
|
||||||
No covered work shall be deemed part of an effective technological
|
|
||||||
measure under any applicable law fulfilling obligations under article
|
|
||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
||||||
similar laws prohibiting or restricting circumvention of such
|
|
||||||
measures.
|
|
||||||
|
|
||||||
When you convey a covered work, you waive any legal power to forbid
|
|
||||||
circumvention of technological measures to the extent such circumvention
|
|
||||||
is effected by exercising rights under this License with respect to
|
|
||||||
the covered work, and you disclaim any intention to limit operation or
|
|
||||||
modification of the work as a means of enforcing, against the work's
|
|
||||||
users, your or third parties' legal rights to forbid circumvention of
|
|
||||||
technological measures.
|
|
||||||
|
|
||||||
4. Conveying Verbatim Copies.
|
|
||||||
|
|
||||||
You may convey verbatim copies of the Program's source code as you
|
|
||||||
receive it, in any medium, provided that you conspicuously and
|
|
||||||
appropriately publish on each copy an appropriate copyright notice;
|
|
||||||
keep intact all notices stating that this License and any
|
|
||||||
non-permissive terms added in accord with section 7 apply to the code;
|
|
||||||
keep intact all notices of the absence of any warranty; and give all
|
|
||||||
recipients a copy of this License along with the Program.
|
|
||||||
|
|
||||||
You may charge any price or no price for each copy that you convey,
|
|
||||||
and you may offer support or warranty protection for a fee.
|
|
||||||
|
|
||||||
5. Conveying Modified Source Versions.
|
|
||||||
|
|
||||||
You may convey a work based on the Program, or the modifications to
|
|
||||||
produce it from the Program, in the form of source code under the
|
|
||||||
terms of section 4, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The work must carry prominent notices stating that you modified
|
|
||||||
it, and giving a relevant date.
|
|
||||||
|
|
||||||
b) The work must carry prominent notices stating that it is
|
|
||||||
released under this License and any conditions added under section
|
|
||||||
7. This requirement modifies the requirement in section 4 to
|
|
||||||
"keep intact all notices".
|
|
||||||
|
|
||||||
c) You must license the entire work, as a whole, under this
|
|
||||||
License to anyone who comes into possession of a copy. This
|
|
||||||
License will therefore apply, along with any applicable section 7
|
|
||||||
additional terms, to the whole of the work, and all its parts,
|
|
||||||
regardless of how they are packaged. This License gives no
|
|
||||||
permission to license the work in any other way, but it does not
|
|
||||||
invalidate such permission if you have separately received it.
|
|
||||||
|
|
||||||
d) If the work has interactive user interfaces, each must display
|
|
||||||
Appropriate Legal Notices; however, if the Program has interactive
|
|
||||||
interfaces that do not display Appropriate Legal Notices, your
|
|
||||||
work need not make them do so.
|
|
||||||
|
|
||||||
A compilation of a covered work with other separate and independent
|
|
||||||
works, which are not by their nature extensions of the covered work,
|
|
||||||
and which are not combined with it such as to form a larger program,
|
|
||||||
in or on a volume of a storage or distribution medium, is called an
|
|
||||||
"aggregate" if the compilation and its resulting copyright are not
|
|
||||||
used to limit the access or legal rights of the compilation's users
|
|
||||||
beyond what the individual works permit. Inclusion of a covered work
|
|
||||||
in an aggregate does not cause this License to apply to the other
|
|
||||||
parts of the aggregate.
|
|
||||||
|
|
||||||
6. Conveying Non-Source Forms.
|
|
||||||
|
|
||||||
You may convey a covered work in object code form under the terms
|
|
||||||
of sections 4 and 5, provided that you also convey the
|
|
||||||
machine-readable Corresponding Source under the terms of this License,
|
|
||||||
in one of these ways:
|
|
||||||
|
|
||||||
a) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by the
|
|
||||||
Corresponding Source fixed on a durable physical medium
|
|
||||||
customarily used for software interchange.
|
|
||||||
|
|
||||||
b) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by a
|
|
||||||
written offer, valid for at least three years and valid for as
|
|
||||||
long as you offer spare parts or customer support for that product
|
|
||||||
model, to give anyone who possesses the object code either (1) a
|
|
||||||
copy of the Corresponding Source for all the software in the
|
|
||||||
product that is covered by this License, on a durable physical
|
|
||||||
medium customarily used for software interchange, for a price no
|
|
||||||
more than your reasonable cost of physically performing this
|
|
||||||
conveying of source, or (2) access to copy the
|
|
||||||
Corresponding Source from a network server at no charge.
|
|
||||||
|
|
||||||
c) Convey individual copies of the object code with a copy of the
|
|
||||||
written offer to provide the Corresponding Source. This
|
|
||||||
alternative is allowed only occasionally and noncommercially, and
|
|
||||||
only if you received the object code with such an offer, in accord
|
|
||||||
with subsection 6b.
|
|
||||||
|
|
||||||
d) Convey the object code by offering access from a designated
|
|
||||||
place (gratis or for a charge), and offer equivalent access to the
|
|
||||||
Corresponding Source in the same way through the same place at no
|
|
||||||
further charge. You need not require recipients to copy the
|
|
||||||
Corresponding Source along with the object code. If the place to
|
|
||||||
copy the object code is a network server, the Corresponding Source
|
|
||||||
may be on a different server (operated by you or a third party)
|
|
||||||
that supports equivalent copying facilities, provided you maintain
|
|
||||||
clear directions next to the object code saying where to find the
|
|
||||||
Corresponding Source. Regardless of what server hosts the
|
|
||||||
Corresponding Source, you remain obligated to ensure that it is
|
|
||||||
available for as long as needed to satisfy these requirements.
|
|
||||||
|
|
||||||
e) Convey the object code using peer-to-peer transmission, provided
|
|
||||||
you inform other peers where the object code and Corresponding
|
|
||||||
Source of the work are being offered to the general public at no
|
|
||||||
charge under subsection 6d.
|
|
||||||
|
|
||||||
A separable portion of the object code, whose source code is excluded
|
|
||||||
from the Corresponding Source as a System Library, need not be
|
|
||||||
included in conveying the object code work.
|
|
||||||
|
|
||||||
A "User Product" is either (1) a "consumer product", which means any
|
|
||||||
tangible personal property which is normally used for personal, family,
|
|
||||||
or household purposes, or (2) anything designed or sold for incorporation
|
|
||||||
into a dwelling. In determining whether a product is a consumer product,
|
|
||||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
|
||||||
product received by a particular user, "normally used" refers to a
|
|
||||||
typical or common use of that class of product, regardless of the status
|
|
||||||
of the particular user or of the way in which the particular user
|
|
||||||
actually uses, or expects or is expected to use, the product. A product
|
|
||||||
is a consumer product regardless of whether the product has substantial
|
|
||||||
commercial, industrial or non-consumer uses, unless such uses represent
|
|
||||||
the only significant mode of use of the product.
|
|
||||||
|
|
||||||
"Installation Information" for a User Product means any methods,
|
|
||||||
procedures, authorization keys, or other information required to install
|
|
||||||
and execute modified versions of a covered work in that User Product from
|
|
||||||
a modified version of its Corresponding Source. The information must
|
|
||||||
suffice to ensure that the continued functioning of the modified object
|
|
||||||
code is in no case prevented or interfered with solely because
|
|
||||||
modification has been made.
|
|
||||||
|
|
||||||
If you convey an object code work under this section in, or with, or
|
|
||||||
specifically for use in, a User Product, and the conveying occurs as
|
|
||||||
part of a transaction in which the right of possession and use of the
|
|
||||||
User Product is transferred to the recipient in perpetuity or for a
|
|
||||||
fixed term (regardless of how the transaction is characterized), the
|
|
||||||
Corresponding Source conveyed under this section must be accompanied
|
|
||||||
by the Installation Information. But this requirement does not apply
|
|
||||||
if neither you nor any third party retains the ability to install
|
|
||||||
modified object code on the User Product (for example, the work has
|
|
||||||
been installed in ROM).
|
|
||||||
|
|
||||||
The requirement to provide Installation Information does not include a
|
|
||||||
requirement to continue to provide support service, warranty, or updates
|
|
||||||
for a work that has been modified or installed by the recipient, or for
|
|
||||||
the User Product in which it has been modified or installed. Access to a
|
|
||||||
network may be denied when the modification itself materially and
|
|
||||||
adversely affects the operation of the network or violates the rules and
|
|
||||||
protocols for communication across the network.
|
|
||||||
|
|
||||||
Corresponding Source conveyed, and Installation Information provided,
|
|
||||||
in accord with this section must be in a format that is publicly
|
|
||||||
documented (and with an implementation available to the public in
|
|
||||||
source code form), and must require no special password or key for
|
|
||||||
unpacking, reading or copying.
|
|
||||||
|
|
||||||
7. Additional Terms.
|
|
||||||
|
|
||||||
"Additional permissions" are terms that supplement the terms of this
|
|
||||||
License by making exceptions from one or more of its conditions.
|
|
||||||
Additional permissions that are applicable to the entire Program shall
|
|
||||||
be treated as though they were included in this License, to the extent
|
|
||||||
that they are valid under applicable law. If additional permissions
|
|
||||||
apply only to part of the Program, that part may be used separately
|
|
||||||
under those permissions, but the entire Program remains governed by
|
|
||||||
this License without regard to the additional permissions.
|
|
||||||
|
|
||||||
When you convey a copy of a covered work, you may at your option
|
|
||||||
remove any additional permissions from that copy, or from any part of
|
|
||||||
it. (Additional permissions may be written to require their own
|
|
||||||
removal in certain cases when you modify the work.) You may place
|
|
||||||
additional permissions on material, added by you to a covered work,
|
|
||||||
for which you have or can give appropriate copyright permission.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, for material you
|
|
||||||
add to a covered work, you may (if authorized by the copyright holders of
|
|
||||||
that material) supplement the terms of this License with terms:
|
|
||||||
|
|
||||||
a) Disclaiming warranty or limiting liability differently from the
|
|
||||||
terms of sections 15 and 16 of this License; or
|
|
||||||
|
|
||||||
b) Requiring preservation of specified reasonable legal notices or
|
|
||||||
author attributions in that material or in the Appropriate Legal
|
|
||||||
Notices displayed by works containing it; or
|
|
||||||
|
|
||||||
c) Prohibiting misrepresentation of the origin of that material, or
|
|
||||||
requiring that modified versions of such material be marked in
|
|
||||||
reasonable ways as different from the original version; or
|
|
||||||
|
|
||||||
d) Limiting the use for publicity purposes of names of licensors or
|
|
||||||
authors of the material; or
|
|
||||||
|
|
||||||
e) Declining to grant rights under trademark law for use of some
|
|
||||||
trade names, trademarks, or service marks; or
|
|
||||||
|
|
||||||
f) Requiring indemnification of licensors and authors of that
|
|
||||||
material by anyone who conveys the material (or modified versions of
|
|
||||||
it) with contractual assumptions of liability to the recipient, for
|
|
||||||
any liability that these contractual assumptions directly impose on
|
|
||||||
those licensors and authors.
|
|
||||||
|
|
||||||
All other non-permissive additional terms are considered "further
|
|
||||||
restrictions" within the meaning of section 10. If the Program as you
|
|
||||||
received it, or any part of it, contains a notice stating that it is
|
|
||||||
governed by this License along with a term that is a further
|
|
||||||
restriction, you may remove that term. If a license document contains
|
|
||||||
a further restriction but permits relicensing or conveying under this
|
|
||||||
License, you may add to a covered work material governed by the terms
|
|
||||||
of that license document, provided that the further restriction does
|
|
||||||
not survive such relicensing or conveying.
|
|
||||||
|
|
||||||
If you add terms to a covered work in accord with this section, you
|
|
||||||
must place, in the relevant source files, a statement of the
|
|
||||||
additional terms that apply to those files, or a notice indicating
|
|
||||||
where to find the applicable terms.
|
|
||||||
|
|
||||||
Additional terms, permissive or non-permissive, may be stated in the
|
|
||||||
form of a separately written license, or stated as exceptions;
|
|
||||||
the above requirements apply either way.
|
|
||||||
|
|
||||||
8. Termination.
|
|
||||||
|
|
||||||
You may not propagate or modify a covered work except as expressly
|
|
||||||
provided under this License. Any attempt otherwise to propagate or
|
|
||||||
modify it is void, and will automatically terminate your rights under
|
|
||||||
this License (including any patent licenses granted under the third
|
|
||||||
paragraph of section 11).
|
|
||||||
|
|
||||||
However, if you cease all violation of this License, then your
|
|
||||||
license from a particular copyright holder is reinstated (a)
|
|
||||||
provisionally, unless and until the copyright holder explicitly and
|
|
||||||
finally terminates your license, and (b) permanently, if the copyright
|
|
||||||
holder fails to notify you of the violation by some reasonable means
|
|
||||||
prior to 60 days after the cessation.
|
|
||||||
|
|
||||||
Moreover, your license from a particular copyright holder is
|
|
||||||
reinstated permanently if the copyright holder notifies you of the
|
|
||||||
violation by some reasonable means, this is the first time you have
|
|
||||||
received notice of violation of this License (for any work) from that
|
|
||||||
copyright holder, and you cure the violation prior to 30 days after
|
|
||||||
your receipt of the notice.
|
|
||||||
|
|
||||||
Termination of your rights under this section does not terminate the
|
|
||||||
licenses of parties who have received copies or rights from you under
|
|
||||||
this License. If your rights have been terminated and not permanently
|
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
|
||||||
material under section 10.
|
|
||||||
|
|
||||||
9. Acceptance Not Required for Having Copies.
|
|
||||||
|
|
||||||
You are not required to accept this License in order to receive or
|
|
||||||
run a copy of the Program. Ancillary propagation of a covered work
|
|
||||||
occurring solely as a consequence of using peer-to-peer transmission
|
|
||||||
to receive a copy likewise does not require acceptance. However,
|
|
||||||
nothing other than this License grants you permission to propagate or
|
|
||||||
modify any covered work. These actions infringe copyright if you do
|
|
||||||
not accept this License. Therefore, by modifying or propagating a
|
|
||||||
covered work, you indicate your acceptance of this License to do so.
|
|
||||||
|
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
|
||||||
|
|
||||||
Each time you convey a covered work, the recipient automatically
|
|
||||||
receives a license from the original licensors, to run, modify and
|
|
||||||
propagate that work, subject to this License. You are not responsible
|
|
||||||
for enforcing compliance by third parties with this License.
|
|
||||||
|
|
||||||
An "entity transaction" is a transaction transferring control of an
|
|
||||||
organization, or substantially all assets of one, or subdividing an
|
|
||||||
organization, or merging organizations. If propagation of a covered
|
|
||||||
work results from an entity transaction, each party to that
|
|
||||||
transaction who receives a copy of the work also receives whatever
|
|
||||||
licenses to the work the party's predecessor in interest had or could
|
|
||||||
give under the previous paragraph, plus a right to possession of the
|
|
||||||
Corresponding Source of the work from the predecessor in interest, if
|
|
||||||
the predecessor has it or can get it with reasonable efforts.
|
|
||||||
|
|
||||||
You may not impose any further restrictions on the exercise of the
|
|
||||||
rights granted or affirmed under this License. For example, you may
|
|
||||||
not impose a license fee, royalty, or other charge for exercise of
|
|
||||||
rights granted under this License, and you may not initiate litigation
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
||||||
any patent claim is infringed by making, using, selling, offering for
|
|
||||||
sale, or importing the Program or any portion of it.
|
|
||||||
|
|
||||||
11. Patents.
|
|
||||||
|
|
||||||
A "contributor" is a copyright holder who authorizes use under this
|
|
||||||
License of the Program or a work on which the Program is based. The
|
|
||||||
work thus licensed is called the contributor's "contributor version".
|
|
||||||
|
|
||||||
A contributor's "essential patent claims" are all patent claims
|
|
||||||
owned or controlled by the contributor, whether already acquired or
|
|
||||||
hereafter acquired, that would be infringed by some manner, permitted
|
|
||||||
by this License, of making, using, or selling its contributor version,
|
|
||||||
but do not include claims that would be infringed only as a
|
|
||||||
consequence of further modification of the contributor version. For
|
|
||||||
purposes of this definition, "control" includes the right to grant
|
|
||||||
patent sublicenses in a manner consistent with the requirements of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
||||||
patent license under the contributor's essential patent claims, to
|
|
||||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
|
||||||
propagate the contents of its contributor version.
|
|
||||||
|
|
||||||
In the following three paragraphs, a "patent license" is any express
|
|
||||||
agreement or commitment, however denominated, not to enforce a patent
|
|
||||||
(such as an express permission to practice a patent or covenant not to
|
|
||||||
sue for patent infringement). To "grant" such a patent license to a
|
|
||||||
party means to make such an agreement or commitment not to enforce a
|
|
||||||
patent against the party.
|
|
||||||
|
|
||||||
If you convey a covered work, knowingly relying on a patent license,
|
|
||||||
and the Corresponding Source of the work is not available for anyone
|
|
||||||
to copy, free of charge and under the terms of this License, through a
|
|
||||||
publicly available network server or other readily accessible means,
|
|
||||||
then you must either (1) cause the Corresponding Source to be so
|
|
||||||
available, or (2) arrange to deprive yourself of the benefit of the
|
|
||||||
patent license for this particular work, or (3) arrange, in a manner
|
|
||||||
consistent with the requirements of this License, to extend the patent
|
|
||||||
license to downstream recipients. "Knowingly relying" means you have
|
|
||||||
actual knowledge that, but for the patent license, your conveying the
|
|
||||||
covered work in a country, or your recipient's use of the covered work
|
|
||||||
in a country, would infringe one or more identifiable patents in that
|
|
||||||
country that you have reason to believe are valid.
|
|
||||||
|
|
||||||
If, pursuant to or in connection with a single transaction or
|
|
||||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
|
||||||
covered work, and grant a patent license to some of the parties
|
|
||||||
receiving the covered work authorizing them to use, propagate, modify
|
|
||||||
or convey a specific copy of the covered work, then the patent license
|
|
||||||
you grant is automatically extended to all recipients of the covered
|
|
||||||
work and works based on it.
|
|
||||||
|
|
||||||
A patent license is "discriminatory" if it does not include within
|
|
||||||
the scope of its coverage, prohibits the exercise of, or is
|
|
||||||
conditioned on the non-exercise of one or more of the rights that are
|
|
||||||
specifically granted under this License. You may not convey a covered
|
|
||||||
work if you are a party to an arrangement with a third party that is
|
|
||||||
in the business of distributing software, under which you make payment
|
|
||||||
to the third party based on the extent of your activity of conveying
|
|
||||||
the work, and under which the third party grants, to any of the
|
|
||||||
parties who would receive the covered work from you, a discriminatory
|
|
||||||
patent license (a) in connection with copies of the covered work
|
|
||||||
conveyed by you (or copies made from those copies), or (b) primarily
|
|
||||||
for and in connection with specific products or compilations that
|
|
||||||
contain the covered work, unless you entered into that arrangement,
|
|
||||||
or that patent license was granted, prior to 28 March 2007.
|
|
||||||
|
|
||||||
Nothing in this License shall be construed as excluding or limiting
|
|
||||||
any implied license or other defenses to infringement that may
|
|
||||||
otherwise be available to you under applicable patent law.
|
|
||||||
|
|
||||||
12. No Surrender of Others' Freedom.
|
|
||||||
|
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot convey a
|
|
||||||
covered work so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you may
|
|
||||||
not convey it at all. For example, if you agree to terms that obligate you
|
|
||||||
to collect a royalty for further conveying from those to whom you convey
|
|
||||||
the Program, the only way you could satisfy both those terms and this
|
|
||||||
License would be to refrain entirely from conveying the Program.
|
|
||||||
|
|
||||||
13. Use with the GNU Affero General Public License.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, you have
|
|
||||||
permission to link or combine any covered work with a work licensed
|
|
||||||
under version 3 of the GNU Affero General Public License into a single
|
|
||||||
combined work, and to convey the resulting work. The terms of this
|
|
||||||
License will continue to apply to the part which is the covered work,
|
|
||||||
but the special requirements of the GNU Affero General Public License,
|
|
||||||
section 13, concerning interaction through a network will apply to the
|
|
||||||
combination as such.
|
|
||||||
|
|
||||||
14. Revised Versions of this License.
|
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions of
|
|
||||||
the GNU General Public License from time to time. Such new versions will
|
|
||||||
be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Program specifies that a certain numbered version of the GNU General
|
|
||||||
Public License "or any later version" applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that numbered
|
|
||||||
version or of any later version published by the Free Software
|
|
||||||
Foundation. If the Program does not specify a version number of the
|
|
||||||
GNU General Public License, you may choose any version ever published
|
|
||||||
by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Program specifies that a proxy can decide which future
|
|
||||||
versions of the GNU General Public License can be used, that proxy's
|
|
||||||
public statement of acceptance of a version permanently authorizes you
|
|
||||||
to choose that version for the Program.
|
|
||||||
|
|
||||||
Later license versions may give you additional or different
|
|
||||||
permissions. However, no additional obligations are imposed on any
|
|
||||||
author or copyright holder as a result of your choosing to follow a
|
|
||||||
later version.
|
|
||||||
|
|
||||||
15. Disclaimer of Warranty.
|
|
||||||
|
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
||||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
||||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. Limitation of Liability.
|
|
||||||
|
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGES.
|
|
||||||
|
|
||||||
17. Interpretation of Sections 15 and 16.
|
|
||||||
|
|
||||||
If the disclaimer of warranty and limitation of liability provided
|
|
||||||
above cannot be given local legal effect according to their terms,
|
|
||||||
reviewing courts shall apply local law that most closely approximates
|
|
||||||
an absolute waiver of all civil liability in connection with the
|
|
||||||
Program, unless a warranty or assumption of liability accompanies a
|
|
||||||
copy of the Program in return for a fee.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
state the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If the program does terminal interaction, make it output a short
|
|
||||||
notice like this when it starts in an interactive mode:
|
|
||||||
|
|
||||||
<program> Copyright (C) <year> <name of author>
|
|
||||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
||||||
This is free software, and you are welcome to redistribute it
|
|
||||||
under certain conditions; type `show c' for details.
|
|
||||||
|
|
||||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
|
||||||
parts of the General Public License. Of course, your program's commands
|
|
||||||
might be different; for a GUI interface, you would use an "about box".
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
||||||
For more information on this, and how to apply and follow the GNU GPL, see
|
|
||||||
<https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
The GNU General Public License does not permit incorporating your program
|
|
||||||
into proprietary programs. If your program is a subroutine library, you
|
|
||||||
may consider it more useful to permit linking proprietary applications with
|
|
||||||
the library. If this is what you want to do, use the GNU Lesser General
|
|
||||||
Public License instead of this License. But first, please read
|
|
||||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
|
||||||
|
|||||||
153
README.md
@ -1,150 +1,49 @@
|
|||||||
<picture>
|

|
||||||
<source srcset="./.github/logo-dark.png" media="(prefers-color-scheme: light)">
|
|
||||||
<source srcset="./.github/logo-white.png" media="(prefers-color-scheme: dark)">
|
|
||||||
<img src="./.github/logo-dark.png" alt="logo">
|
|
||||||
</picture>
|
|
||||||
|
|
||||||
<p align="center">
|
Aggregated set of useful tools that every developer may need once in a while. Available [here](https://dev.it-tools.tech).
|
||||||
Useful tools for developer and people working in IT. <a href="https://it-tools.tech">Try it!</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
|
:warning: This is the v2 branch it features a new and fresher version of it-tools completly reworked with nuxt. Stay tuned to be notified when it'll go live (click `watch`) :purple_heart:
|
||||||
|
|
||||||
## Sponsors
|
|
||||||
|
|
||||||
<div align="center" markdown="1">
|
|
||||||
<p align="center">
|
|
||||||
IT-Tools is proudly sponsored by:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<a href="https://go.warp.dev/it-tools">
|
|
||||||
<img alt="Warp sponsorship" width="400" src="https://raw.githubusercontent.com/warpdotdev/brand-assets/refs/heads/main/Github/Sponsor/Warp-Github-LG-01.png">
|
|
||||||
</a>
|
|
||||||
|
|
||||||
### [Warp, built for coding with multiple AI agents.](https://go.warp.dev/it-tools)
|
|
||||||
[Available for MacOS, Linux, & Windows](https://go.warp.dev/it-tools)<br>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
## Functionalities and roadmap
|
## Functionalities and roadmap
|
||||||
|
|
||||||
Please check the [issues](https://github.com/CorentinTh/it-tools/issues) to see if some feature listed to be implemented.
|
Please check the [issues](https://github.com/CorentinTh/it-tools/issues) to see if some feature listed to be implemented.
|
||||||
|
|
||||||
You have an idea of a tool? Submit a [feature request](https://github.com/CorentinTh/it-tools/issues/new/choose)!
|
You have an idea of a tool? Submit a [feature request](https://github.com/CorentinTh/it-tools/issues/new?assignees=corentinth&labels=&template=feature_request.md&title=)!
|
||||||
|
|
||||||
## Self host
|
## Project setup
|
||||||
|
|
||||||
Self host solutions for your homelab
|
Install dependencies by running the following command:
|
||||||
|
```shell
|
||||||
**From docker hub:**
|
npm install
|
||||||
|
|
||||||
```sh
|
|
||||||
docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-tools:latest
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**From github packages:**
|
Serve with hot reload at localhost:3000
|
||||||
|
```shell
|
||||||
```sh
|
npm run dev
|
||||||
docker run -d --name it-tools --restart unless-stopped -p 8080:80 ghcr.io/corentinth/it-tools:latest
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Other solutions:**
|
Build for production
|
||||||
|
```shell
|
||||||
- [Cloudron](https://www.cloudron.io/store/tech.ittools.cloudron.html)
|
npm run build
|
||||||
- [Tipi](https://www.runtipi.io/docs/apps-available)
|
```
|
||||||
- [Unraid](https://unraid.net/community/apps?q=it-tools)
|
|
||||||
|
|
||||||
|
And to lint and fixe files, run:
|
||||||
|
```shell
|
||||||
|
npm run lint
|
||||||
|
```
|
||||||
|
For detailed explanation on how things work, check out [Nuxt.js docs](https://nuxtjs.org).
|
||||||
## Contribute
|
## Contribute
|
||||||
|
**Pull requests are welcome !** Feel free to contribute.
|
||||||
|
|
||||||
### Recommended IDE Setup
|
### Add a tool
|
||||||
|
*Coming soon*
|
||||||
[VSCode](https://code.visualstudio.com/) with the following extensions:
|
|
||||||
|
|
||||||
- [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur)
|
|
||||||
- [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
|
|
||||||
- [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
|
|
||||||
- [i18n Ally](https://marketplace.visualstudio.com/items?itemName=lokalise.i18n-ally)
|
|
||||||
|
|
||||||
with the following settings:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"editor.formatOnSave": false,
|
|
||||||
"editor.codeActionsOnSave": {
|
|
||||||
"source.fixAll.eslint": true
|
|
||||||
},
|
|
||||||
"i18n-ally.localesPaths": ["locales", "src/tools/*/locales"],
|
|
||||||
"i18n-ally.keystyle": "nested"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Type Support for `.vue` Imports in TS
|
|
||||||
|
|
||||||
TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
|
|
||||||
|
|
||||||
If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
|
|
||||||
|
|
||||||
1. Disable the built-in TypeScript Extension
|
|
||||||
1. Run `Extensions: Show Built-in Extensions` from VSCode's command palette
|
|
||||||
2. Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
|
|
||||||
2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.
|
|
||||||
|
|
||||||
### Project Setup
|
|
||||||
|
|
||||||
```sh
|
|
||||||
pnpm install
|
|
||||||
```
|
|
||||||
|
|
||||||
### Compile and Hot-Reload for Development
|
|
||||||
|
|
||||||
```sh
|
|
||||||
pnpm dev
|
|
||||||
```
|
|
||||||
|
|
||||||
### Type-Check, Compile and Minify for Production
|
|
||||||
|
|
||||||
```sh
|
|
||||||
pnpm build
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run Unit Tests with [Vitest](https://vitest.dev/)
|
|
||||||
|
|
||||||
```sh
|
|
||||||
pnpm test
|
|
||||||
```
|
|
||||||
|
|
||||||
### Lint with [ESLint](https://eslint.org/)
|
|
||||||
|
|
||||||
```sh
|
|
||||||
pnpm lint
|
|
||||||
```
|
|
||||||
|
|
||||||
### Create a new tool
|
|
||||||
|
|
||||||
To create a new tool, there is a script that generate the boilerplate of the new tool, simply run:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
pnpm run script:create:tool my-tool-name
|
|
||||||
```
|
|
||||||
|
|
||||||
It will create a directory in `src/tools` with the correct files, and a the import in `src/tools/index.ts`. You will just need to add the imported tool in the proper category and develop the tool.
|
|
||||||
|
|
||||||
## Contributors
|
|
||||||
|
|
||||||
Big thanks to all the people who have already contributed!
|
|
||||||
|
|
||||||
[](https://github.com/corentinth/it-tools/graphs/contributors)
|
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
Coded with ❤️ by [Corentin Thomasset](//corentin-thomasset.fr).
|
||||||
Coded with ❤️ by [Corentin Thomasset](https://corentin.tech?utm_source=it-tools&utm_medium=readme).
|
|
||||||
|
|
||||||
This project is continuously deployed using [vercel.com](https://vercel.com).
|
This project is continuously deployed using [vercel.com](https://vercel.com).
|
||||||
|
|
||||||
Contributor graph is generated using [contrib.rocks](https://contrib.rocks/preview?repo=corentinth/it-tools).
|
|
||||||
|
|
||||||
<a href="https://www.producthunt.com/posts/it-tools?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-it-tools" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=345793&theme=light" alt="IT Tools - Collection of handy online tools for devs, with great UX | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
|
|
||||||
<a href="https://www.producthunt.com/posts/it-tools?utm_source=badge-top-post-badge&utm_medium=badge&utm_souce=badge-it-tools" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=345793&theme=light&period=daily" alt="IT Tools - Collection of handy online tools for devs, with great UX | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
This project is under the [MIT license](LICENSE).
|
||||||
|
|
||||||
|
|
||||||
This project is under the [GNU GPLv3](LICENSE).
|
|
||||||
|
|||||||
16
SECURITY.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
We release patches for security vulnerabilities. Which versions are eligible receiving such patches are :
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| > 2.0 | :white_check_mark: |
|
||||||
|
| < 2.0 | :x: |
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
Please report (suspected) security vulnerabilities to contact@corentin-thomasset.fr. You will receive a response from us within 48 hours. If the issue is confirmed, we will release a patch as soon as possible depending on complexity.
|
||||||
|
|
||||||
|
## Comments on this Policy
|
||||||
|
If you have suggestions on how this process could be improved please submit a pull request.
|
||||||
@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
to: src/ui/<%= h.changeCase.param(name) %>/<%= h.changeCase.param(name) %>.demo.vue
|
|
||||||
---
|
|
||||||
<template>
|
|
||||||
<<%= h.changeCase.param(name) %> />
|
|
||||||
</template>
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
to: src/ui/<%= h.changeCase.param(name) %>/<%= h.changeCase.param(name) %>.vue
|
|
||||||
---
|
|
||||||
<script lang="ts" setup>
|
|
||||||
const props = withDefaults(defineProps<{ prop?: string }>(), { prop: '' });
|
|
||||||
const { prop } = toRefs(props);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
{{ prop }}
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
127
assets/hello.svg
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
<svg id="b19d21a7-7bc0-44bd-ab2a-ad7473c6bec7" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 979.32677 424.8366">
|
||||||
|
<path
|
||||||
|
d="M993.71816,412.83936H419.142a9.19888,9.19888,0,0,0,0,18.39776H435.417V651.3026a9.19888,9.19888,0,0,0,18.39776,0l.1398-220.06548h461.1557l42.52,220.06548a9.19887,9.19887,0,1,0,18.39775,0l2.67633-220.06548h15.01383a9.19888,9.19888,0,0,0,0-18.39776Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path d="M518.73716,371.85047v38.9547H421.141a19.48915,19.48915,0,1,1-1.35523-38.95474q.67739-.02358,1.35523,0Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#f2f2f2"/>
|
||||||
|
<path
|
||||||
|
d="M521.13449,410.50552a1.49881,1.49881,0,0,1-1.49822,1.49822H419.40273a20.52615,20.52615,0,0,1,0-41.05229H519.63627a1.49827,1.49827,0,1,1,0,2.99653H419.40273a17.52964,17.52964,0,0,0,0,35.05924H519.63627A1.49883,1.49883,0,0,1,521.13449,410.50552Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#47b171"/>
|
||||||
|
<path d="M518.73716,380.84H413.85905a.29966.29966,0,0,1-.00552-.59929H518.73716a.29966.29966,0,0,1,0,.59929Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path d="M518.73716,388.03169H413.85905a.29966.29966,0,0,1-.00552-.59929H518.73716a.29966.29966,0,0,1,0,.59929Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path d="M518.73716,395.22332H413.85905a.29966.29966,0,0,1-.00552-.59929H518.73716a.29966.29966,0,0,1,0,.59929Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path d="M518.73716,402.41487H413.85905a.29966.29966,0,0,1-.00552-.59929H518.73716a.29966.29966,0,0,1,0,.59929Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path d="M500.33941,330.80932v38.95474H402.74324a19.48915,19.48915,0,0,1-1.35522-38.95474q.67737-.02358,1.35522,0Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#f2f2f2"/>
|
||||||
|
<path
|
||||||
|
d="M502.73673,369.46442a1.49885,1.49885,0,0,1-1.49822,1.49826H401.005a20.52614,20.52614,0,0,1,0-41.05229H501.23851a1.49826,1.49826,0,1,1,0,2.99652H401.005a17.52964,17.52964,0,0,0,0,35.05928H501.23851A1.49884,1.49884,0,0,1,502.73673,369.46442Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#3f3d56"/>
|
||||||
|
<path d="M500.33941,339.79886H395.4613a.29966.29966,0,0,1-.00553-.59929H500.33941a.29966.29966,0,0,1,0,.59929Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path d="M500.33941,346.99054H395.4613a.29966.29966,0,0,1-.00553-.59929H500.33941a.29966.29966,0,0,1,0,.59929Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path d="M500.33941,354.18217H395.4613a.29966.29966,0,0,1-.00553-.59929H500.33941a.29966.29966,0,0,1,0,.59929Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path d="M500.33941,361.37376H395.4613a.29966.29966,0,0,1-.00553-.59929H500.33941a.29966.29966,0,0,1,0,.59929Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path
|
||||||
|
d="M613.87355,550.68347V516.71838a5.661,5.661,0,0,0-5.66085-5.66085H479.4284a5.661,5.661,0,0,0-5.66084,5.66085v33.96509Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<rect x="363.43092" y="325.83868" width="140.10602" height="43.87158" fill="#ccc"/>
|
||||||
|
<path
|
||||||
|
d="M473.76756,620.02887V653.994a5.661,5.661,0,0,0,5.66084,5.66084H608.2127a5.661,5.661,0,0,0,5.66085-5.66084V620.02887Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<circle cx="432.77633" cy="294.70402" r="4.24564" fill="#fff"/>
|
||||||
|
<circle cx="432.77633" cy="351.3125" r="4.24564" fill="#fff"/>
|
||||||
|
<circle cx="433.00385" cy="406.72228" r="4.24564" fill="#fff"/>
|
||||||
|
<path d="M597.989,472.33053v38.9547H500.39287a19.48916,19.48916,0,0,1-1.35647-38.9547q.678-.02358,1.35647,0Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#f2f2f2"/>
|
||||||
|
<path
|
||||||
|
d="M600.38637,510.98558a1.49881,1.49881,0,0,1-1.49822,1.49822H498.65461a20.52615,20.52615,0,0,1-.0247-41.05229H598.88815a1.49827,1.49827,0,1,1,0,2.99653H498.65461a17.52963,17.52963,0,0,0,0,35.05923H598.88815A1.49885,1.49885,0,0,1,600.38637,510.98558Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#3f3d56"/>
|
||||||
|
<path d="M597.989,481.32H493.111a.29966.29966,0,0,1-.00553-.59929H597.98913a.29966.29966,0,0,1,0,.59929Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path d="M597.989,488.51175H493.111a.29966.29966,0,0,1-.00553-.59929H597.98913a.29966.29966,0,0,1,0,.59929Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path d="M597.989,495.70338H493.111a.29966.29966,0,0,1-.00553-.59929H597.98913a.29966.29966,0,0,1,0,.59929Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path d="M597.989,502.89493H493.111a.29966.29966,0,0,1-.00553-.59929H597.98913a.29966.29966,0,0,1,0,.59929Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path
|
||||||
|
d="M483.36747,317.81415H438.90162a2.74745,2.74745,0,0,0-1.21689.28306l-11.22288,5.61835a2.0452,2.0452,0,0,0,0,3.76443l11.22288,5.61835a2.74718,2.74718,0,0,0,1.21689.28306h44.46585a2.33381,2.33381,0,0,0,2.4628-2.16532v-11.2367A2.3338,2.3338,0,0,0,483.36747,317.81415Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#3f3d56"/>
|
||||||
|
<path
|
||||||
|
d="M485.83027,319.97947v11.2367a2.33383,2.33383,0,0,1-2.4628,2.16532h-8.8589V317.81415h8.8589A2.33383,2.33383,0,0,1,485.83027,319.97947Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#47b171"/>
|
||||||
|
<path
|
||||||
|
d="M216.78083,537.99332a35.33951,35.33951,0,0,0,34.12552-6.01134c11.95262-10.03214,15.70013-26.56,18.74934-41.864q4.50949-22.63308,9.019-45.26617l-18.88217,13.00153c-13.57891,9.34993-27.46375,18.99939-36.86572,32.54233S209.42082,522.42587,216.975,537.08"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#e6e6e6"/>
|
||||||
|
<path
|
||||||
|
d="M218.39489,592.79741c-1.91113-13.92071-3.87625-28.0202-2.53572-42.09016,1.19057-12.4956,5.00277-24.70032,12.764-34.70734a57.73582,57.73582,0,0,1,14.81307-13.42309c1.48131-.935,2.84468,1.41257,1.36983,2.34348a54.88844,54.88844,0,0,0-21.71125,26.19626c-4.72684,12.02273-5.48591,25.12848-4.67135,37.90006.4926,7.72345,1.53656,15.39627,2.58859,23.05926a1.40615,1.40615,0,0,1-.94781,1.66928,1.3653,1.3653,0,0,1-1.6693-.94781Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#f2f2f2"/>
|
||||||
|
<path
|
||||||
|
d="M236.80246,568.16434a26.01425,26.01425,0,0,0,22.6665,11.69871c11.47417-.54466,21.04-8.55293,29.651-16.15584l25.46969-22.48783-16.85671-.80672c-12.12234-.58011-24.55745-1.12124-36.10356,2.617s-22.19457,12.73508-24.30583,24.68624"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#e6e6e6"/>
|
||||||
|
<path
|
||||||
|
d="M212.99392,600.79976c9.19853-16.27621,19.86805-34.36538,38.93262-40.14695A43.445,43.445,0,0,1,268.3022,558.962c1.73863.14991,1.30448,2.82994-.431,2.6803a40.36111,40.36111,0,0,0-26.133,6.91386c-7.36852,5.01554-13.10573,11.98848-17.96161,19.383-2.97439,4.52936-5.63867,9.25082-8.30346,13.966-.85161,1.50687-3.34078.41915-2.47922-1.10534Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#f2f2f2"/>
|
||||||
|
<path
|
||||||
|
d="M198.25523,617.93168a19.69836,19.69836,0,0,1,12.0709-16.49847v-9.40956h15.782v9.70608a19.68812,19.68812,0,0,1,11.41362,16.202l3.711,43.13835H194.54417Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#f2f2f2"/>
|
||||||
|
<path
|
||||||
|
d="M734.973,411.955l-4.69488-1.97685-3.22067-23.53551h-42.889l-3.491,23.43936-4.20031,2.10013a.99744.99744,0,0,0,.44611,1.88955h57.66283A.99739.99739,0,0,0,734.973,411.955Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#e6e6e6"/>
|
||||||
|
<path
|
||||||
|
d="M811.1898,389.574H600.50692a4.174,4.174,0,0,1-4.16467-4.174V355.69092H815.35446V385.4A4.17408,4.17408,0,0,1,811.1898,389.574Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
<path
|
||||||
|
d="M815.57469,369.73213H596.15V242.61337a5.0375,5.0375,0,0,1,5.03186-5.03167h209.361a5.03755,5.03755,0,0,1,5.03191,5.03167Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#3f3d56"/>
|
||||||
|
<path
|
||||||
|
d="M802.46932,360.50584h-193.214a3.88344,3.88344,0,0,1-3.87919-3.87908V250.68707a3.88365,3.88365,0,0,1,3.87919-3.87932h193.214a3.88366,3.88366,0,0,1,3.8792,3.87932V356.62676A3.88345,3.88345,0,0,1,802.46932,360.50584Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#fff"/>
|
||||||
|
<path
|
||||||
|
d="M751.57964,397.88662a11.6159,11.6159,0,0,1,17.666,2.27241l26.13446-4.64642,6.69716,15.19317-36.99908,6.04328a11.67883,11.67883,0,0,1-13.49855-18.86244Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ffb6b6"/>
|
||||||
|
<path
|
||||||
|
d="M775.77611,417.286l27.24571-.33963,3.44882-.04668,55.43253-.69843s15.05312-14.3609,28.16068-29.1465l-1.83719-13.28833A54.29159,54.29159,0,0,0,870.023,340.1519C851.24988,352.696,840.363,377.52559,840.363,377.52559l-34.37018,8.22071-3.43848.82227-21.35608,5.10326Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#47b171"/>
|
||||||
|
<path
|
||||||
|
d="M915.25011,498.96167H864.39249c0,2.17915-55.59414,3.94772-55.59414,3.94772a20.30858,20.30858,0,0,0-3.33166,3.15818,19.59694,19.59694,0,0,0-4.58,12.63271v3.15818a19.74588,19.74588,0,0,0,19.73861,19.73861h94.62478a19.75579,19.75579,0,0,0,19.73862-19.73861v-3.15818A19.76607,19.76607,0,0,0,915.25011,498.96167Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#e4e4e4"/>
|
||||||
|
<rect x="747.4019" y="303.23122" width="20.52816" height="118.48951" fill="#e4e4e4"/>
|
||||||
|
<path
|
||||||
|
d="M799.31222,658.58132c0,2.218,31.10721.858,69.47992.858s69.47991,1.36012,69.47991-.858-31.1072-19.807-69.47991-19.807S799.31222,656.36323,799.31222,658.58132Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#e4e4e4"/>
|
||||||
|
<polygon points="675.186 407.461 659.908 407.46 652.64 348.531 675.188 348.532 675.186 407.461" fill="#ffb6b6"/>
|
||||||
|
<path d="M789.41863,659.852l-49.2623-.00183v-.62309a19.17528,19.17528,0,0,1,19.17426-19.17395h.00122l30.08773.00122Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#2f2e41"/>
|
||||||
|
<polygon points="630.031 407.461 614.753 407.46 607.485 348.531 630.033 348.532 630.031 407.461" fill="#ffb6b6"/>
|
||||||
|
<path d="M744.2636,659.852l-49.2623-.00183v-.62309a19.1753,19.1753,0,0,1,19.17426-19.17395h.00122l30.08773.00122Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#2f2e41"/>
|
||||||
|
<circle cx="766.88656" cy="41.63615" r="26.56401" fill="#ffb6b6"/>
|
||||||
|
<path
|
||||||
|
d="M920.21655,461.22417s8.91308,47.1307-24.99958,53.13247-82.86639,10.21993-82.86639,10.21993L790.36706,627.14324l-29.53443-2.63675s3.928-123.46737,13.5876-133.127,70.71212-38.58282,70.71212-38.58282Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#2f2e41"/>
|
||||||
|
<path
|
||||||
|
d="M853.98286,441.47135,839.151,456.35062s-107.0941,17.25-111.22553,41.9852c-6.23747,37.34427-13.60493,118.552-13.60493,118.552l32.1988-2.41491,12.62647-92.31123,51.5182-11.71874L869.27729,478.5Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#2f2e41"/>
|
||||||
|
<path
|
||||||
|
d="M902.78526,263.36115c-2.6223-4.94751-5.95413-14.80785-11.24679-16.63657a42.07731,42.07731,0,0,0-9.05841-1.92972l-8.99618,3.46009,4.89616-3.808q-1.42988-.08519-2.85817-.13928l-6.0699,2.33453,3.10542-2.41532c-5.65883-.05808-11.5.53031-15.88468,3.9752-3.73817,2.93677-7.44169,14.06185-8.04057,18.77753a35.9171,35.9171,0,0,0,.6603,13.53055l1.53716,1.46166a18.85936,18.85936,0,0,0,1.206-3.83883,18.18056,18.18056,0,0,1,8.70263-11.80641l.08368-.0472c2.5782-1.451,5.7065-1.3841,8.66308-1.27769l14.04158.50527c3.37829.12158,7.01608.33533,9.64978,2.45443a15.888,15.888,0,0,1,3.85826,5.58929c1.30868,2.6414,3.8661,12.60418,3.8661,12.60418s1.44689-1.88062,2.1404-.48092a48.39766,48.39766,0,0,0,2.01437-11.23347A22.00877,22.00877,0,0,0,902.78526,263.36115Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#2f2e41"/>
|
||||||
|
<path
|
||||||
|
d="M995.69426,290.88349A11.61582,11.61582,0,0,0,985.181,305.26136l-21.3614,15.75722,6.40951,15.31674,29.8539-22.67594a11.67883,11.67883,0,0,0-4.38876-22.77589Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ffb6b6"/>
|
||||||
|
<path
|
||||||
|
d="M992.25627,323.052l-53.551,59.4744s-25.60913-8.19816-45.41466-17.08624l-8.8977-27.32787a54.34329,54.34329,0,0,1-2.60112-19.66442c27.45606-7.306,59.391,19.87863,59.391,19.87863l40.08517-31.39877Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#47b171"/>
|
||||||
|
<path
|
||||||
|
d="M867.301,465.6169c-9.554-3.30029-19.43312-6.71277-30.08912-7.99385l-.45773-.05533.12632-.443c11.03073-38.7308,8.27761-63.50657,2.87195-100.72306a37.59072,37.59072,0,0,1,21.5483-39.50121l.06542-.02958,30.43436-1.93391.06935-.00423,22.13437,6.50989a15.18313,15.18313,0,0,1,10.86724,14.83111c-.23987,12.23937.26868,25.9043.80711,40.37114,1.20787,32.45569,2.45686,66.01647-4.63045,87.79166l-.03718.11412-.09462.07416a36.09883,36.09883,0,0,1-23.08086,8.10758C887.90057,472.73235,877.76186,469.23034,867.301,465.6169Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#47b171"/>
|
||||||
|
<path d="M1088.24817,662.4183H111.75183a1.41521,1.41521,0,1,1,0-2.83042h976.49634a1.41521,1.41521,0,1,1,0,2.83042Z"
|
||||||
|
transform="translate(-110.33661 -237.5817)" fill="#ccc"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 12 KiB |
6
assets/logo-outlined.svg
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 82.09 82.06">
|
||||||
|
<g>
|
||||||
|
<path fill="#fff" d="M44,4a.14.14,0,0,1,.14.14V7.79a4,4,0,0,0,3.17,3.91,29.7,29.7,0,0,1,10,4.16,4,4,0,0,0,2.18.65,4,4,0,0,0,2.83-1.17l2.6-2.6a.12.12,0,0,1,.09,0,.13.13,0,0,1,.1,0l4.15,4.15a.14.14,0,0,1,0,.19l-2.6,2.6a4,4,0,0,0-.52,5,29.65,29.65,0,0,1,4.16,10.08,4,4,0,0,0,3.92,3.17H78a.13.13,0,0,1,.13.14V44a.13.13,0,0,1-.13.13H74.27a4,4,0,0,0-3.92,3.17,29.45,29.45,0,0,1-4.16,10,4,4,0,0,0,.52,5l2.62,2.61a.12.12,0,0,1,0,.09.13.13,0,0,1,0,.1l-4.15,4.15a.14.14,0,0,1-.2,0l-2.61-2.62a4,4,0,0,0-2.83-1.17,3.94,3.94,0,0,0-2.18.65,29.71,29.71,0,0,1-10,4.15,4,4,0,0,0-3.17,3.92v3.7A.14.14,0,0,1,44,78H38.15a.14.14,0,0,1-.14-.14v-3.7a4,4,0,0,0-2.7-3.78l2.94-3A26.71,26.71,0,0,0,49.4,66.28a27.1,27.1,0,0,0,3.66-1.51A26.72,26.72,0,0,0,64.84,53a26,26,0,0,0,1.52-3.67A26.68,26.68,0,0,0,53.08,17.21a27.4,27.4,0,0,0-3.68-1.52,26.78,26.78,0,0,0-16.64,0,27.89,27.89,0,0,0-3.71,1.54A26.72,26.72,0,0,0,17.29,29a27.17,27.17,0,0,0-1.53,3.7A26.8,26.8,0,0,0,14.6,43.81l-2.95,2.94a4,4,0,0,0-3.77-2.67H4.2A.13.13,0,0,1,4.07,44V38.08a.13.13,0,0,1,.13-.14H7.87a4,4,0,0,0,3.91-3.17A29.68,29.68,0,0,1,15.94,24.7a4,4,0,0,0-.52-5l-2.59-2.58a.14.14,0,0,1,0-.19L17,12.77a.14.14,0,0,1,.2,0l2.57,2.58a4,4,0,0,0,5,.52A29.54,29.54,0,0,1,34.84,11.7,4,4,0,0,0,38,7.79V4.14A.14.14,0,0,1,38.15,4H44m0-4H38.15A4.14,4.14,0,0,0,34,4.14V7.79a33.61,33.61,0,0,0-11.43,4.73L20,9.94a4.14,4.14,0,0,0-5.85,0L10,14.09a4.15,4.15,0,0,0,0,5.85l2.59,2.58A33.66,33.66,0,0,0,7.87,33.94H4.2A4.13,4.13,0,0,0,.07,38.08V44A4.13,4.13,0,0,0,4.2,48.08H7.88a33.09,33.09,0,0,0,1.94,6.16l9-9a22.74,22.74,0,0,1,.72-11.28,24.44,24.44,0,0,1,1.3-3.14,22.75,22.75,0,0,1,10-10A21.53,21.53,0,0,1,34,19.49a22.68,22.68,0,0,1,14.14,0A22.8,22.8,0,0,1,61.28,30.78a23.88,23.88,0,0,1,1.3,3.16,22.71,22.71,0,0,1,0,14.14A22.43,22.43,0,0,1,57.07,57a22.6,22.6,0,0,1-5.81,4.21,21.43,21.43,0,0,1-3.11,1.28,22.44,22.44,0,0,1-7.07,1.13,23.23,23.23,0,0,1-4.24-.39l-9,9a34.19,34.19,0,0,0,6.19,2v3.7A4.14,4.14,0,0,0,38.15,82H44a4.14,4.14,0,0,0,4.14-4.14v-3.7a33.71,33.71,0,0,0,11.39-4.72l2.62,2.62a4.14,4.14,0,0,0,5.85,0l4.15-4.15a4.15,4.15,0,0,0,0-5.85l-2.62-2.61a33.79,33.79,0,0,0,4.73-11.4H78A4.13,4.13,0,0,0,82.09,44V38.08A4.13,4.13,0,0,0,78,33.94H74.28a33.81,33.81,0,0,0-4.73-11.43l2.6-2.6a4.15,4.15,0,0,0,0-5.85L68,9.91a4.14,4.14,0,0,0-5.85,0l-2.6,2.6a33.85,33.85,0,0,0-11.4-4.72V4.14A4.14,4.14,0,0,0,44,0Z"/>
|
||||||
|
<path fill="#fff" d="M53.84,36.22,48.07,42a5.66,5.66,0,0,1-8,0h0a5.66,5.66,0,0,1,0-8l5.77-5.77a2.26,2.26,0,0,0-1.12-3.81A17,17,0,0,0,25.16,46.9L2.07,70a7.07,7.07,0,0,0,0,10h0a7.07,7.07,0,0,0,10,0L35.16,56.9A17,17,0,0,0,57.65,37.34,2.26,2.26,0,0,0,53.84,36.22Z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
10
src/assets/hero-gradient.svg → assets/small-hero-gradient.svg
Normal file → Executable file
@ -3,21 +3,21 @@
|
|||||||
<linearGradient id="small-hero-gradient-1" x1="13.74" y1="183.7" x2="303.96" y2="45.59" gradientUnits="userSpaceOnUse">
|
<linearGradient id="small-hero-gradient-1" x1="13.74" y1="183.7" x2="303.96" y2="45.59" gradientUnits="userSpaceOnUse">
|
||||||
<stop offset="0" stop-color="#25636c"/>
|
<stop offset="0" stop-color="#25636c"/>
|
||||||
<stop offset="0.6" stop-color="#3b956f"/>
|
<stop offset="0.6" stop-color="#3b956f"/>
|
||||||
<stop offset="1" stop-color="#14a058"/>
|
<stop offset="1" stop-color="#47b171"/>
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
</defs>
|
</defs>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<path fill="#14a058" opacity="0.49" d="M0,187.5v25s0,37.5,50,50S300,225,300,225V187.5Z"/>
|
<path fill="#00a19a" opacity="0.49" d="M0,187.5v25s0,37.5,50,50S300,225,300,225V187.5Z"/>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<path fill="#14a058" opacity="0.49" d="M300,237.5S287.5,275,250,275,121.05,237.5,61.4,200s134.21,0,134.21,0Z"/>
|
<path fill="#00a19a" opacity="0.49" d="M300,237.5S287.5,275,250,275,121.05,237.5,61.4,200s134.21,0,134.21,0Z"/>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<path fill="#14a058" opacity="0.38" d="M0,200v12.5a241.47,241.47,0,0,0,112.5,50c73.6,11.69,130.61-14.86,150-25L300,200Z"/>
|
<path fill="#00a19a" opacity="0.38" d="M0,200v12.5a241.47,241.47,0,0,0,112.5,50c73.6,11.69,130.61-14.86,150-25L300,200Z"/>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<path fill="url(#small-hero-gradient-1)" d="M0,0V212.5s62.5-12.5,150,25,150,0,150,0V0Z"/>
|
<path fill="url(#small-hero-gradient-1)" d="M0,0V212.5s62.5-12.5,150,25,150,0,150,0V0Z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 894 B After Width: | Height: | Size: 895 B |
6
assets/variables.scss
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
// Ref: https://github.com/nuxt-community/vuetify-module#customvariables
|
||||||
|
//
|
||||||
|
// The variables you want to modify
|
||||||
|
// $font-size-root: 20px;
|
||||||
|
|
||||||
|
$test: linear-gradient(90deg, rgba(37, 99, 108, 1) 0%, rgba(59, 149, 111, 1) 60%, rgba(71, 177, 113, 1) 100%)
|
||||||
862
auto-imports.d.ts
vendored
@ -1,862 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
/* prettier-ignore */
|
|
||||||
// @ts-nocheck
|
|
||||||
// Generated by unplugin-auto-import
|
|
||||||
export {}
|
|
||||||
declare global {
|
|
||||||
const EffectScope: typeof import('vue')['EffectScope']
|
|
||||||
const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
|
|
||||||
const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
|
|
||||||
const computed: typeof import('vue')['computed']
|
|
||||||
const computedAsync: typeof import('@vueuse/core')['computedAsync']
|
|
||||||
const computedEager: typeof import('@vueuse/core')['computedEager']
|
|
||||||
const computedInject: typeof import('@vueuse/core')['computedInject']
|
|
||||||
const computedWithControl: typeof import('@vueuse/core')['computedWithControl']
|
|
||||||
const controlledComputed: typeof import('@vueuse/core')['controlledComputed']
|
|
||||||
const controlledRef: typeof import('@vueuse/core')['controlledRef']
|
|
||||||
const createApp: typeof import('vue')['createApp']
|
|
||||||
const createEventHook: typeof import('@vueuse/core')['createEventHook']
|
|
||||||
const createGlobalState: typeof import('@vueuse/core')['createGlobalState']
|
|
||||||
const createInjectionState: typeof import('@vueuse/core')['createInjectionState']
|
|
||||||
const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn']
|
|
||||||
const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate']
|
|
||||||
const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable']
|
|
||||||
const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise']
|
|
||||||
const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn']
|
|
||||||
const customRef: typeof import('vue')['customRef']
|
|
||||||
const debouncedRef: typeof import('@vueuse/core')['debouncedRef']
|
|
||||||
const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch']
|
|
||||||
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
|
|
||||||
const defineComponent: typeof import('vue')['defineComponent']
|
|
||||||
const eagerComputed: typeof import('@vueuse/core')['eagerComputed']
|
|
||||||
const effectScope: typeof import('vue')['effectScope']
|
|
||||||
const extendRef: typeof import('@vueuse/core')['extendRef']
|
|
||||||
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
|
|
||||||
const getCurrentScope: typeof import('vue')['getCurrentScope']
|
|
||||||
const h: typeof import('vue')['h']
|
|
||||||
const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']
|
|
||||||
const inject: typeof import('vue')['inject']
|
|
||||||
const isDefined: typeof import('@vueuse/core')['isDefined']
|
|
||||||
const isProxy: typeof import('vue')['isProxy']
|
|
||||||
const isReactive: typeof import('vue')['isReactive']
|
|
||||||
const isReadonly: typeof import('vue')['isReadonly']
|
|
||||||
const isRef: typeof import('vue')['isRef']
|
|
||||||
const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable']
|
|
||||||
const markRaw: typeof import('vue')['markRaw']
|
|
||||||
const nextTick: typeof import('vue')['nextTick']
|
|
||||||
const onActivated: typeof import('vue')['onActivated']
|
|
||||||
const onBeforeMount: typeof import('vue')['onBeforeMount']
|
|
||||||
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
|
|
||||||
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
|
|
||||||
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
|
|
||||||
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
|
|
||||||
const onClickOutside: typeof import('@vueuse/core')['onClickOutside']
|
|
||||||
const onDeactivated: typeof import('vue')['onDeactivated']
|
|
||||||
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
|
|
||||||
const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke']
|
|
||||||
const onLongPress: typeof import('@vueuse/core')['onLongPress']
|
|
||||||
const onMounted: typeof import('vue')['onMounted']
|
|
||||||
const onRenderTracked: typeof import('vue')['onRenderTracked']
|
|
||||||
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
|
|
||||||
const onScopeDispose: typeof import('vue')['onScopeDispose']
|
|
||||||
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
|
|
||||||
const onStartTyping: typeof import('@vueuse/core')['onStartTyping']
|
|
||||||
const onUnmounted: typeof import('vue')['onUnmounted']
|
|
||||||
const onUpdated: typeof import('vue')['onUpdated']
|
|
||||||
const pausableWatch: typeof import('@vueuse/core')['pausableWatch']
|
|
||||||
const provide: typeof import('vue')['provide']
|
|
||||||
const reactify: typeof import('@vueuse/core')['reactify']
|
|
||||||
const reactifyObject: typeof import('@vueuse/core')['reactifyObject']
|
|
||||||
const reactive: typeof import('vue')['reactive']
|
|
||||||
const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed']
|
|
||||||
const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit']
|
|
||||||
const reactivePick: typeof import('@vueuse/core')['reactivePick']
|
|
||||||
const readonly: typeof import('vue')['readonly']
|
|
||||||
const ref: typeof import('vue')['ref']
|
|
||||||
const refAutoReset: typeof import('@vueuse/core')['refAutoReset']
|
|
||||||
const refDebounced: typeof import('@vueuse/core')['refDebounced']
|
|
||||||
const refDefault: typeof import('@vueuse/core')['refDefault']
|
|
||||||
const refThrottled: typeof import('@vueuse/core')['refThrottled']
|
|
||||||
const refWithControl: typeof import('@vueuse/core')['refWithControl']
|
|
||||||
const resolveComponent: typeof import('vue')['resolveComponent']
|
|
||||||
const resolveRef: typeof import('@vueuse/core')['resolveRef']
|
|
||||||
const resolveUnref: typeof import('@vueuse/core')['resolveUnref']
|
|
||||||
const shallowReactive: typeof import('vue')['shallowReactive']
|
|
||||||
const shallowReadonly: typeof import('vue')['shallowReadonly']
|
|
||||||
const shallowRef: typeof import('vue')['shallowRef']
|
|
||||||
const syncRef: typeof import('@vueuse/core')['syncRef']
|
|
||||||
const syncRefs: typeof import('@vueuse/core')['syncRefs']
|
|
||||||
const templateRef: typeof import('@vueuse/core')['templateRef']
|
|
||||||
const throttledRef: typeof import('@vueuse/core')['throttledRef']
|
|
||||||
const throttledWatch: typeof import('@vueuse/core')['throttledWatch']
|
|
||||||
const toRaw: typeof import('vue')['toRaw']
|
|
||||||
const toReactive: typeof import('@vueuse/core')['toReactive']
|
|
||||||
const toRef: typeof import('vue')['toRef']
|
|
||||||
const toRefs: typeof import('vue')['toRefs']
|
|
||||||
const toValue: typeof import('vue')['toValue']
|
|
||||||
const triggerRef: typeof import('vue')['triggerRef']
|
|
||||||
const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount']
|
|
||||||
const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount']
|
|
||||||
const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted']
|
|
||||||
const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose']
|
|
||||||
const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted']
|
|
||||||
const unref: typeof import('vue')['unref']
|
|
||||||
const unrefElement: typeof import('@vueuse/core')['unrefElement']
|
|
||||||
const until: typeof import('@vueuse/core')['until']
|
|
||||||
const useActiveElement: typeof import('@vueuse/core')['useActiveElement']
|
|
||||||
const useAnimate: typeof import('@vueuse/core')['useAnimate']
|
|
||||||
const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference']
|
|
||||||
const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery']
|
|
||||||
const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter']
|
|
||||||
const useArrayFind: typeof import('@vueuse/core')['useArrayFind']
|
|
||||||
const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex']
|
|
||||||
const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast']
|
|
||||||
const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes']
|
|
||||||
const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin']
|
|
||||||
const useArrayMap: typeof import('@vueuse/core')['useArrayMap']
|
|
||||||
const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce']
|
|
||||||
const useArraySome: typeof import('@vueuse/core')['useArraySome']
|
|
||||||
const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique']
|
|
||||||
const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue']
|
|
||||||
const useAsyncState: typeof import('@vueuse/core')['useAsyncState']
|
|
||||||
const useAttrs: typeof import('vue')['useAttrs']
|
|
||||||
const useBase64: typeof import('@vueuse/core')['useBase64']
|
|
||||||
const useBattery: typeof import('@vueuse/core')['useBattery']
|
|
||||||
const useBluetooth: typeof import('@vueuse/core')['useBluetooth']
|
|
||||||
const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints']
|
|
||||||
const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel']
|
|
||||||
const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation']
|
|
||||||
const useCached: typeof import('@vueuse/core')['useCached']
|
|
||||||
const useClipboard: typeof import('@vueuse/core')['useClipboard']
|
|
||||||
const useCloned: typeof import('@vueuse/core')['useCloned']
|
|
||||||
const useColorMode: typeof import('@vueuse/core')['useColorMode']
|
|
||||||
const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog']
|
|
||||||
const useCounter: typeof import('@vueuse/core')['useCounter']
|
|
||||||
const useCssModule: typeof import('vue')['useCssModule']
|
|
||||||
const useCssVar: typeof import('@vueuse/core')['useCssVar']
|
|
||||||
const useCssVars: typeof import('vue')['useCssVars']
|
|
||||||
const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement']
|
|
||||||
const useCycleList: typeof import('@vueuse/core')['useCycleList']
|
|
||||||
const useDark: typeof import('@vueuse/core')['useDark']
|
|
||||||
const useDateFormat: typeof import('@vueuse/core')['useDateFormat']
|
|
||||||
const useDebounce: typeof import('@vueuse/core')['useDebounce']
|
|
||||||
const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn']
|
|
||||||
const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory']
|
|
||||||
const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion']
|
|
||||||
const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation']
|
|
||||||
const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio']
|
|
||||||
const useDevicesList: typeof import('@vueuse/core')['useDevicesList']
|
|
||||||
const useDialog: typeof import('naive-ui')['useDialog']
|
|
||||||
const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia']
|
|
||||||
const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility']
|
|
||||||
const useDraggable: typeof import('@vueuse/core')['useDraggable']
|
|
||||||
const useDropZone: typeof import('@vueuse/core')['useDropZone']
|
|
||||||
const useElementBounding: typeof import('@vueuse/core')['useElementBounding']
|
|
||||||
const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint']
|
|
||||||
const useElementHover: typeof import('@vueuse/core')['useElementHover']
|
|
||||||
const useElementSize: typeof import('@vueuse/core')['useElementSize']
|
|
||||||
const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility']
|
|
||||||
const useEventBus: typeof import('@vueuse/core')['useEventBus']
|
|
||||||
const useEventListener: typeof import('@vueuse/core')['useEventListener']
|
|
||||||
const useEventSource: typeof import('@vueuse/core')['useEventSource']
|
|
||||||
const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper']
|
|
||||||
const useFavicon: typeof import('@vueuse/core')['useFavicon']
|
|
||||||
const useFetch: typeof import('@vueuse/core')['useFetch']
|
|
||||||
const useFileDialog: typeof import('@vueuse/core')['useFileDialog']
|
|
||||||
const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess']
|
|
||||||
const useFocus: typeof import('@vueuse/core')['useFocus']
|
|
||||||
const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin']
|
|
||||||
const useFps: typeof import('@vueuse/core')['useFps']
|
|
||||||
const useFullscreen: typeof import('@vueuse/core')['useFullscreen']
|
|
||||||
const useGamepad: typeof import('@vueuse/core')['useGamepad']
|
|
||||||
const useGeolocation: typeof import('@vueuse/core')['useGeolocation']
|
|
||||||
const useI18n: typeof import('vue-i18n')['useI18n']
|
|
||||||
const useIdle: typeof import('@vueuse/core')['useIdle']
|
|
||||||
const useImage: typeof import('@vueuse/core')['useImage']
|
|
||||||
const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll']
|
|
||||||
const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver']
|
|
||||||
const useInterval: typeof import('@vueuse/core')['useInterval']
|
|
||||||
const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn']
|
|
||||||
const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier']
|
|
||||||
const useLastChanged: typeof import('@vueuse/core')['useLastChanged']
|
|
||||||
const useLink: typeof import('vue-router')['useLink']
|
|
||||||
const useLoadingBar: typeof import('naive-ui')['useLoadingBar']
|
|
||||||
const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage']
|
|
||||||
const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys']
|
|
||||||
const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory']
|
|
||||||
const useMediaControls: typeof import('@vueuse/core')['useMediaControls']
|
|
||||||
const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery']
|
|
||||||
const useMemoize: typeof import('@vueuse/core')['useMemoize']
|
|
||||||
const useMemory: typeof import('@vueuse/core')['useMemory']
|
|
||||||
const useMessage: typeof import('naive-ui')['useMessage']
|
|
||||||
const useMounted: typeof import('@vueuse/core')['useMounted']
|
|
||||||
const useMouse: typeof import('@vueuse/core')['useMouse']
|
|
||||||
const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement']
|
|
||||||
const useMousePressed: typeof import('@vueuse/core')['useMousePressed']
|
|
||||||
const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver']
|
|
||||||
const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage']
|
|
||||||
const useNetwork: typeof import('@vueuse/core')['useNetwork']
|
|
||||||
const useNotification: typeof import('naive-ui')['useNotification']
|
|
||||||
const useNow: typeof import('@vueuse/core')['useNow']
|
|
||||||
const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl']
|
|
||||||
const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination']
|
|
||||||
const useOnline: typeof import('@vueuse/core')['useOnline']
|
|
||||||
const usePageLeave: typeof import('@vueuse/core')['usePageLeave']
|
|
||||||
const useParallax: typeof import('@vueuse/core')['useParallax']
|
|
||||||
const useParentElement: typeof import('@vueuse/core')['useParentElement']
|
|
||||||
const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver']
|
|
||||||
const usePermission: typeof import('@vueuse/core')['usePermission']
|
|
||||||
const usePointer: typeof import('@vueuse/core')['usePointer']
|
|
||||||
const usePointerLock: typeof import('@vueuse/core')['usePointerLock']
|
|
||||||
const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe']
|
|
||||||
const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme']
|
|
||||||
const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast']
|
|
||||||
const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark']
|
|
||||||
const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages']
|
|
||||||
const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion']
|
|
||||||
const usePrevious: typeof import('@vueuse/core')['usePrevious']
|
|
||||||
const useRafFn: typeof import('@vueuse/core')['useRafFn']
|
|
||||||
const useRefHistory: typeof import('@vueuse/core')['useRefHistory']
|
|
||||||
const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver']
|
|
||||||
const useRoute: typeof import('vue-router')['useRoute']
|
|
||||||
const useRouter: typeof import('vue-router')['useRouter']
|
|
||||||
const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation']
|
|
||||||
const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea']
|
|
||||||
const useScriptTag: typeof import('@vueuse/core')['useScriptTag']
|
|
||||||
const useScroll: typeof import('@vueuse/core')['useScroll']
|
|
||||||
const useScrollLock: typeof import('@vueuse/core')['useScrollLock']
|
|
||||||
const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
|
|
||||||
const useShare: typeof import('@vueuse/core')['useShare']
|
|
||||||
const useSlots: typeof import('vue')['useSlots']
|
|
||||||
const useSorted: typeof import('@vueuse/core')['useSorted']
|
|
||||||
const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition']
|
|
||||||
const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis']
|
|
||||||
const useStepper: typeof import('@vueuse/core')['useStepper']
|
|
||||||
const useStorage: typeof import('@vueuse/core')['useStorage']
|
|
||||||
const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync']
|
|
||||||
const useStyleTag: typeof import('@vueuse/core')['useStyleTag']
|
|
||||||
const useSupported: typeof import('@vueuse/core')['useSupported']
|
|
||||||
const useSwipe: typeof import('@vueuse/core')['useSwipe']
|
|
||||||
const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList']
|
|
||||||
const useTextDirection: typeof import('@vueuse/core')['useTextDirection']
|
|
||||||
const useTextSelection: typeof import('@vueuse/core')['useTextSelection']
|
|
||||||
const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize']
|
|
||||||
const useThrottle: typeof import('@vueuse/core')['useThrottle']
|
|
||||||
const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn']
|
|
||||||
const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory']
|
|
||||||
const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo']
|
|
||||||
const useTimeout: typeof import('@vueuse/core')['useTimeout']
|
|
||||||
const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn']
|
|
||||||
const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll']
|
|
||||||
const useTimestamp: typeof import('@vueuse/core')['useTimestamp']
|
|
||||||
const useTitle: typeof import('@vueuse/core')['useTitle']
|
|
||||||
const useToNumber: typeof import('@vueuse/core')['useToNumber']
|
|
||||||
const useToString: typeof import('@vueuse/core')['useToString']
|
|
||||||
const useToggle: typeof import('@vueuse/core')['useToggle']
|
|
||||||
const useTransition: typeof import('@vueuse/core')['useTransition']
|
|
||||||
const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams']
|
|
||||||
const useUserMedia: typeof import('@vueuse/core')['useUserMedia']
|
|
||||||
const useVModel: typeof import('@vueuse/core')['useVModel']
|
|
||||||
const useVModels: typeof import('@vueuse/core')['useVModels']
|
|
||||||
const useVibrate: typeof import('@vueuse/core')['useVibrate']
|
|
||||||
const useVirtualList: typeof import('@vueuse/core')['useVirtualList']
|
|
||||||
const useWakeLock: typeof import('@vueuse/core')['useWakeLock']
|
|
||||||
const useWebNotification: typeof import('@vueuse/core')['useWebNotification']
|
|
||||||
const useWebSocket: typeof import('@vueuse/core')['useWebSocket']
|
|
||||||
const useWebWorker: typeof import('@vueuse/core')['useWebWorker']
|
|
||||||
const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn']
|
|
||||||
const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus']
|
|
||||||
const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll']
|
|
||||||
const useWindowSize: typeof import('@vueuse/core')['useWindowSize']
|
|
||||||
const watch: typeof import('vue')['watch']
|
|
||||||
const watchArray: typeof import('@vueuse/core')['watchArray']
|
|
||||||
const watchAtMost: typeof import('@vueuse/core')['watchAtMost']
|
|
||||||
const watchDebounced: typeof import('@vueuse/core')['watchDebounced']
|
|
||||||
const watchDeep: typeof import('@vueuse/core')['watchDeep']
|
|
||||||
const watchEffect: typeof import('vue')['watchEffect']
|
|
||||||
const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable']
|
|
||||||
const watchImmediate: typeof import('@vueuse/core')['watchImmediate']
|
|
||||||
const watchOnce: typeof import('@vueuse/core')['watchOnce']
|
|
||||||
const watchPausable: typeof import('@vueuse/core')['watchPausable']
|
|
||||||
const watchPostEffect: typeof import('vue')['watchPostEffect']
|
|
||||||
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
|
|
||||||
const watchThrottled: typeof import('@vueuse/core')['watchThrottled']
|
|
||||||
const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable']
|
|
||||||
const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter']
|
|
||||||
const whenever: typeof import('@vueuse/core')['whenever']
|
|
||||||
}
|
|
||||||
// for type re-export
|
|
||||||
declare global {
|
|
||||||
// @ts-ignore
|
|
||||||
export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode } from 'vue'
|
|
||||||
}
|
|
||||||
// for vue template auto import
|
|
||||||
import { UnwrapRef } from 'vue'
|
|
||||||
declare module 'vue' {
|
|
||||||
interface ComponentCustomProperties {
|
|
||||||
readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
|
|
||||||
readonly asyncComputed: UnwrapRef<typeof import('@vueuse/core')['asyncComputed']>
|
|
||||||
readonly autoResetRef: UnwrapRef<typeof import('@vueuse/core')['autoResetRef']>
|
|
||||||
readonly computed: UnwrapRef<typeof import('vue')['computed']>
|
|
||||||
readonly computedAsync: UnwrapRef<typeof import('@vueuse/core')['computedAsync']>
|
|
||||||
readonly computedEager: UnwrapRef<typeof import('@vueuse/core')['computedEager']>
|
|
||||||
readonly computedInject: UnwrapRef<typeof import('@vueuse/core')['computedInject']>
|
|
||||||
readonly computedWithControl: UnwrapRef<typeof import('@vueuse/core')['computedWithControl']>
|
|
||||||
readonly controlledComputed: UnwrapRef<typeof import('@vueuse/core')['controlledComputed']>
|
|
||||||
readonly controlledRef: UnwrapRef<typeof import('@vueuse/core')['controlledRef']>
|
|
||||||
readonly createApp: UnwrapRef<typeof import('vue')['createApp']>
|
|
||||||
readonly createEventHook: UnwrapRef<typeof import('@vueuse/core')['createEventHook']>
|
|
||||||
readonly createGlobalState: UnwrapRef<typeof import('@vueuse/core')['createGlobalState']>
|
|
||||||
readonly createInjectionState: UnwrapRef<typeof import('@vueuse/core')['createInjectionState']>
|
|
||||||
readonly createReactiveFn: UnwrapRef<typeof import('@vueuse/core')['createReactiveFn']>
|
|
||||||
readonly createReusableTemplate: UnwrapRef<typeof import('@vueuse/core')['createReusableTemplate']>
|
|
||||||
readonly createSharedComposable: UnwrapRef<typeof import('@vueuse/core')['createSharedComposable']>
|
|
||||||
readonly createTemplatePromise: UnwrapRef<typeof import('@vueuse/core')['createTemplatePromise']>
|
|
||||||
readonly createUnrefFn: UnwrapRef<typeof import('@vueuse/core')['createUnrefFn']>
|
|
||||||
readonly customRef: UnwrapRef<typeof import('vue')['customRef']>
|
|
||||||
readonly debouncedRef: UnwrapRef<typeof import('@vueuse/core')['debouncedRef']>
|
|
||||||
readonly debouncedWatch: UnwrapRef<typeof import('@vueuse/core')['debouncedWatch']>
|
|
||||||
readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']>
|
|
||||||
readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
|
|
||||||
readonly eagerComputed: UnwrapRef<typeof import('@vueuse/core')['eagerComputed']>
|
|
||||||
readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']>
|
|
||||||
readonly extendRef: UnwrapRef<typeof import('@vueuse/core')['extendRef']>
|
|
||||||
readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']>
|
|
||||||
readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
|
|
||||||
readonly h: UnwrapRef<typeof import('vue')['h']>
|
|
||||||
readonly ignorableWatch: UnwrapRef<typeof import('@vueuse/core')['ignorableWatch']>
|
|
||||||
readonly inject: UnwrapRef<typeof import('vue')['inject']>
|
|
||||||
readonly isDefined: UnwrapRef<typeof import('@vueuse/core')['isDefined']>
|
|
||||||
readonly isProxy: UnwrapRef<typeof import('vue')['isProxy']>
|
|
||||||
readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']>
|
|
||||||
readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']>
|
|
||||||
readonly isRef: UnwrapRef<typeof import('vue')['isRef']>
|
|
||||||
readonly makeDestructurable: UnwrapRef<typeof import('@vueuse/core')['makeDestructurable']>
|
|
||||||
readonly markRaw: UnwrapRef<typeof import('vue')['markRaw']>
|
|
||||||
readonly nextTick: UnwrapRef<typeof import('vue')['nextTick']>
|
|
||||||
readonly onActivated: UnwrapRef<typeof import('vue')['onActivated']>
|
|
||||||
readonly onBeforeMount: UnwrapRef<typeof import('vue')['onBeforeMount']>
|
|
||||||
readonly onBeforeRouteLeave: UnwrapRef<typeof import('vue-router')['onBeforeRouteLeave']>
|
|
||||||
readonly onBeforeRouteUpdate: UnwrapRef<typeof import('vue-router')['onBeforeRouteUpdate']>
|
|
||||||
readonly onBeforeUnmount: UnwrapRef<typeof import('vue')['onBeforeUnmount']>
|
|
||||||
readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']>
|
|
||||||
readonly onClickOutside: UnwrapRef<typeof import('@vueuse/core')['onClickOutside']>
|
|
||||||
readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']>
|
|
||||||
readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']>
|
|
||||||
readonly onKeyStroke: UnwrapRef<typeof import('@vueuse/core')['onKeyStroke']>
|
|
||||||
readonly onLongPress: UnwrapRef<typeof import('@vueuse/core')['onLongPress']>
|
|
||||||
readonly onMounted: UnwrapRef<typeof import('vue')['onMounted']>
|
|
||||||
readonly onRenderTracked: UnwrapRef<typeof import('vue')['onRenderTracked']>
|
|
||||||
readonly onRenderTriggered: UnwrapRef<typeof import('vue')['onRenderTriggered']>
|
|
||||||
readonly onScopeDispose: UnwrapRef<typeof import('vue')['onScopeDispose']>
|
|
||||||
readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']>
|
|
||||||
readonly onStartTyping: UnwrapRef<typeof import('@vueuse/core')['onStartTyping']>
|
|
||||||
readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
|
|
||||||
readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
|
|
||||||
readonly pausableWatch: UnwrapRef<typeof import('@vueuse/core')['pausableWatch']>
|
|
||||||
readonly provide: UnwrapRef<typeof import('vue')['provide']>
|
|
||||||
readonly reactify: UnwrapRef<typeof import('@vueuse/core')['reactify']>
|
|
||||||
readonly reactifyObject: UnwrapRef<typeof import('@vueuse/core')['reactifyObject']>
|
|
||||||
readonly reactive: UnwrapRef<typeof import('vue')['reactive']>
|
|
||||||
readonly reactiveComputed: UnwrapRef<typeof import('@vueuse/core')['reactiveComputed']>
|
|
||||||
readonly reactiveOmit: UnwrapRef<typeof import('@vueuse/core')['reactiveOmit']>
|
|
||||||
readonly reactivePick: UnwrapRef<typeof import('@vueuse/core')['reactivePick']>
|
|
||||||
readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
|
|
||||||
readonly ref: UnwrapRef<typeof import('vue')['ref']>
|
|
||||||
readonly refAutoReset: UnwrapRef<typeof import('@vueuse/core')['refAutoReset']>
|
|
||||||
readonly refDebounced: UnwrapRef<typeof import('@vueuse/core')['refDebounced']>
|
|
||||||
readonly refDefault: UnwrapRef<typeof import('@vueuse/core')['refDefault']>
|
|
||||||
readonly refThrottled: UnwrapRef<typeof import('@vueuse/core')['refThrottled']>
|
|
||||||
readonly refWithControl: UnwrapRef<typeof import('@vueuse/core')['refWithControl']>
|
|
||||||
readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
|
|
||||||
readonly resolveRef: UnwrapRef<typeof import('@vueuse/core')['resolveRef']>
|
|
||||||
readonly resolveUnref: UnwrapRef<typeof import('@vueuse/core')['resolveUnref']>
|
|
||||||
readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']>
|
|
||||||
readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']>
|
|
||||||
readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']>
|
|
||||||
readonly syncRef: UnwrapRef<typeof import('@vueuse/core')['syncRef']>
|
|
||||||
readonly syncRefs: UnwrapRef<typeof import('@vueuse/core')['syncRefs']>
|
|
||||||
readonly templateRef: UnwrapRef<typeof import('@vueuse/core')['templateRef']>
|
|
||||||
readonly throttledRef: UnwrapRef<typeof import('@vueuse/core')['throttledRef']>
|
|
||||||
readonly throttledWatch: UnwrapRef<typeof import('@vueuse/core')['throttledWatch']>
|
|
||||||
readonly toRaw: UnwrapRef<typeof import('vue')['toRaw']>
|
|
||||||
readonly toReactive: UnwrapRef<typeof import('@vueuse/core')['toReactive']>
|
|
||||||
readonly toRef: UnwrapRef<typeof import('vue')['toRef']>
|
|
||||||
readonly toRefs: UnwrapRef<typeof import('vue')['toRefs']>
|
|
||||||
readonly toValue: UnwrapRef<typeof import('vue')['toValue']>
|
|
||||||
readonly triggerRef: UnwrapRef<typeof import('vue')['triggerRef']>
|
|
||||||
readonly tryOnBeforeMount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeMount']>
|
|
||||||
readonly tryOnBeforeUnmount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeUnmount']>
|
|
||||||
readonly tryOnMounted: UnwrapRef<typeof import('@vueuse/core')['tryOnMounted']>
|
|
||||||
readonly tryOnScopeDispose: UnwrapRef<typeof import('@vueuse/core')['tryOnScopeDispose']>
|
|
||||||
readonly tryOnUnmounted: UnwrapRef<typeof import('@vueuse/core')['tryOnUnmounted']>
|
|
||||||
readonly unref: UnwrapRef<typeof import('vue')['unref']>
|
|
||||||
readonly unrefElement: UnwrapRef<typeof import('@vueuse/core')['unrefElement']>
|
|
||||||
readonly until: UnwrapRef<typeof import('@vueuse/core')['until']>
|
|
||||||
readonly useActiveElement: UnwrapRef<typeof import('@vueuse/core')['useActiveElement']>
|
|
||||||
readonly useAnimate: UnwrapRef<typeof import('@vueuse/core')['useAnimate']>
|
|
||||||
readonly useArrayDifference: UnwrapRef<typeof import('@vueuse/core')['useArrayDifference']>
|
|
||||||
readonly useArrayEvery: UnwrapRef<typeof import('@vueuse/core')['useArrayEvery']>
|
|
||||||
readonly useArrayFilter: UnwrapRef<typeof import('@vueuse/core')['useArrayFilter']>
|
|
||||||
readonly useArrayFind: UnwrapRef<typeof import('@vueuse/core')['useArrayFind']>
|
|
||||||
readonly useArrayFindIndex: UnwrapRef<typeof import('@vueuse/core')['useArrayFindIndex']>
|
|
||||||
readonly useArrayFindLast: UnwrapRef<typeof import('@vueuse/core')['useArrayFindLast']>
|
|
||||||
readonly useArrayIncludes: UnwrapRef<typeof import('@vueuse/core')['useArrayIncludes']>
|
|
||||||
readonly useArrayJoin: UnwrapRef<typeof import('@vueuse/core')['useArrayJoin']>
|
|
||||||
readonly useArrayMap: UnwrapRef<typeof import('@vueuse/core')['useArrayMap']>
|
|
||||||
readonly useArrayReduce: UnwrapRef<typeof import('@vueuse/core')['useArrayReduce']>
|
|
||||||
readonly useArraySome: UnwrapRef<typeof import('@vueuse/core')['useArraySome']>
|
|
||||||
readonly useArrayUnique: UnwrapRef<typeof import('@vueuse/core')['useArrayUnique']>
|
|
||||||
readonly useAsyncQueue: UnwrapRef<typeof import('@vueuse/core')['useAsyncQueue']>
|
|
||||||
readonly useAsyncState: UnwrapRef<typeof import('@vueuse/core')['useAsyncState']>
|
|
||||||
readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']>
|
|
||||||
readonly useBase64: UnwrapRef<typeof import('@vueuse/core')['useBase64']>
|
|
||||||
readonly useBattery: UnwrapRef<typeof import('@vueuse/core')['useBattery']>
|
|
||||||
readonly useBluetooth: UnwrapRef<typeof import('@vueuse/core')['useBluetooth']>
|
|
||||||
readonly useBreakpoints: UnwrapRef<typeof import('@vueuse/core')['useBreakpoints']>
|
|
||||||
readonly useBroadcastChannel: UnwrapRef<typeof import('@vueuse/core')['useBroadcastChannel']>
|
|
||||||
readonly useBrowserLocation: UnwrapRef<typeof import('@vueuse/core')['useBrowserLocation']>
|
|
||||||
readonly useCached: UnwrapRef<typeof import('@vueuse/core')['useCached']>
|
|
||||||
readonly useClipboard: UnwrapRef<typeof import('@vueuse/core')['useClipboard']>
|
|
||||||
readonly useCloned: UnwrapRef<typeof import('@vueuse/core')['useCloned']>
|
|
||||||
readonly useColorMode: UnwrapRef<typeof import('@vueuse/core')['useColorMode']>
|
|
||||||
readonly useConfirmDialog: UnwrapRef<typeof import('@vueuse/core')['useConfirmDialog']>
|
|
||||||
readonly useCounter: UnwrapRef<typeof import('@vueuse/core')['useCounter']>
|
|
||||||
readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
|
|
||||||
readonly useCssVar: UnwrapRef<typeof import('@vueuse/core')['useCssVar']>
|
|
||||||
readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
|
|
||||||
readonly useCurrentElement: UnwrapRef<typeof import('@vueuse/core')['useCurrentElement']>
|
|
||||||
readonly useCycleList: UnwrapRef<typeof import('@vueuse/core')['useCycleList']>
|
|
||||||
readonly useDark: UnwrapRef<typeof import('@vueuse/core')['useDark']>
|
|
||||||
readonly useDateFormat: UnwrapRef<typeof import('@vueuse/core')['useDateFormat']>
|
|
||||||
readonly useDebounce: UnwrapRef<typeof import('@vueuse/core')['useDebounce']>
|
|
||||||
readonly useDebounceFn: UnwrapRef<typeof import('@vueuse/core')['useDebounceFn']>
|
|
||||||
readonly useDebouncedRefHistory: UnwrapRef<typeof import('@vueuse/core')['useDebouncedRefHistory']>
|
|
||||||
readonly useDeviceMotion: UnwrapRef<typeof import('@vueuse/core')['useDeviceMotion']>
|
|
||||||
readonly useDeviceOrientation: UnwrapRef<typeof import('@vueuse/core')['useDeviceOrientation']>
|
|
||||||
readonly useDevicePixelRatio: UnwrapRef<typeof import('@vueuse/core')['useDevicePixelRatio']>
|
|
||||||
readonly useDevicesList: UnwrapRef<typeof import('@vueuse/core')['useDevicesList']>
|
|
||||||
readonly useDialog: UnwrapRef<typeof import('naive-ui')['useDialog']>
|
|
||||||
readonly useDisplayMedia: UnwrapRef<typeof import('@vueuse/core')['useDisplayMedia']>
|
|
||||||
readonly useDocumentVisibility: UnwrapRef<typeof import('@vueuse/core')['useDocumentVisibility']>
|
|
||||||
readonly useDraggable: UnwrapRef<typeof import('@vueuse/core')['useDraggable']>
|
|
||||||
readonly useDropZone: UnwrapRef<typeof import('@vueuse/core')['useDropZone']>
|
|
||||||
readonly useElementBounding: UnwrapRef<typeof import('@vueuse/core')['useElementBounding']>
|
|
||||||
readonly useElementByPoint: UnwrapRef<typeof import('@vueuse/core')['useElementByPoint']>
|
|
||||||
readonly useElementHover: UnwrapRef<typeof import('@vueuse/core')['useElementHover']>
|
|
||||||
readonly useElementSize: UnwrapRef<typeof import('@vueuse/core')['useElementSize']>
|
|
||||||
readonly useElementVisibility: UnwrapRef<typeof import('@vueuse/core')['useElementVisibility']>
|
|
||||||
readonly useEventBus: UnwrapRef<typeof import('@vueuse/core')['useEventBus']>
|
|
||||||
readonly useEventListener: UnwrapRef<typeof import('@vueuse/core')['useEventListener']>
|
|
||||||
readonly useEventSource: UnwrapRef<typeof import('@vueuse/core')['useEventSource']>
|
|
||||||
readonly useEyeDropper: UnwrapRef<typeof import('@vueuse/core')['useEyeDropper']>
|
|
||||||
readonly useFavicon: UnwrapRef<typeof import('@vueuse/core')['useFavicon']>
|
|
||||||
readonly useFetch: UnwrapRef<typeof import('@vueuse/core')['useFetch']>
|
|
||||||
readonly useFileDialog: UnwrapRef<typeof import('@vueuse/core')['useFileDialog']>
|
|
||||||
readonly useFileSystemAccess: UnwrapRef<typeof import('@vueuse/core')['useFileSystemAccess']>
|
|
||||||
readonly useFocus: UnwrapRef<typeof import('@vueuse/core')['useFocus']>
|
|
||||||
readonly useFocusWithin: UnwrapRef<typeof import('@vueuse/core')['useFocusWithin']>
|
|
||||||
readonly useFps: UnwrapRef<typeof import('@vueuse/core')['useFps']>
|
|
||||||
readonly useFullscreen: UnwrapRef<typeof import('@vueuse/core')['useFullscreen']>
|
|
||||||
readonly useGamepad: UnwrapRef<typeof import('@vueuse/core')['useGamepad']>
|
|
||||||
readonly useGeolocation: UnwrapRef<typeof import('@vueuse/core')['useGeolocation']>
|
|
||||||
readonly useI18n: UnwrapRef<typeof import('vue-i18n')['useI18n']>
|
|
||||||
readonly useIdle: UnwrapRef<typeof import('@vueuse/core')['useIdle']>
|
|
||||||
readonly useImage: UnwrapRef<typeof import('@vueuse/core')['useImage']>
|
|
||||||
readonly useInfiniteScroll: UnwrapRef<typeof import('@vueuse/core')['useInfiniteScroll']>
|
|
||||||
readonly useIntersectionObserver: UnwrapRef<typeof import('@vueuse/core')['useIntersectionObserver']>
|
|
||||||
readonly useInterval: UnwrapRef<typeof import('@vueuse/core')['useInterval']>
|
|
||||||
readonly useIntervalFn: UnwrapRef<typeof import('@vueuse/core')['useIntervalFn']>
|
|
||||||
readonly useKeyModifier: UnwrapRef<typeof import('@vueuse/core')['useKeyModifier']>
|
|
||||||
readonly useLastChanged: UnwrapRef<typeof import('@vueuse/core')['useLastChanged']>
|
|
||||||
readonly useLink: UnwrapRef<typeof import('vue-router')['useLink']>
|
|
||||||
readonly useLoadingBar: UnwrapRef<typeof import('naive-ui')['useLoadingBar']>
|
|
||||||
readonly useLocalStorage: UnwrapRef<typeof import('@vueuse/core')['useLocalStorage']>
|
|
||||||
readonly useMagicKeys: UnwrapRef<typeof import('@vueuse/core')['useMagicKeys']>
|
|
||||||
readonly useManualRefHistory: UnwrapRef<typeof import('@vueuse/core')['useManualRefHistory']>
|
|
||||||
readonly useMediaControls: UnwrapRef<typeof import('@vueuse/core')['useMediaControls']>
|
|
||||||
readonly useMediaQuery: UnwrapRef<typeof import('@vueuse/core')['useMediaQuery']>
|
|
||||||
readonly useMemoize: UnwrapRef<typeof import('@vueuse/core')['useMemoize']>
|
|
||||||
readonly useMemory: UnwrapRef<typeof import('@vueuse/core')['useMemory']>
|
|
||||||
readonly useMessage: UnwrapRef<typeof import('naive-ui')['useMessage']>
|
|
||||||
readonly useMounted: UnwrapRef<typeof import('@vueuse/core')['useMounted']>
|
|
||||||
readonly useMouse: UnwrapRef<typeof import('@vueuse/core')['useMouse']>
|
|
||||||
readonly useMouseInElement: UnwrapRef<typeof import('@vueuse/core')['useMouseInElement']>
|
|
||||||
readonly useMousePressed: UnwrapRef<typeof import('@vueuse/core')['useMousePressed']>
|
|
||||||
readonly useMutationObserver: UnwrapRef<typeof import('@vueuse/core')['useMutationObserver']>
|
|
||||||
readonly useNavigatorLanguage: UnwrapRef<typeof import('@vueuse/core')['useNavigatorLanguage']>
|
|
||||||
readonly useNetwork: UnwrapRef<typeof import('@vueuse/core')['useNetwork']>
|
|
||||||
readonly useNotification: UnwrapRef<typeof import('naive-ui')['useNotification']>
|
|
||||||
readonly useNow: UnwrapRef<typeof import('@vueuse/core')['useNow']>
|
|
||||||
readonly useObjectUrl: UnwrapRef<typeof import('@vueuse/core')['useObjectUrl']>
|
|
||||||
readonly useOffsetPagination: UnwrapRef<typeof import('@vueuse/core')['useOffsetPagination']>
|
|
||||||
readonly useOnline: UnwrapRef<typeof import('@vueuse/core')['useOnline']>
|
|
||||||
readonly usePageLeave: UnwrapRef<typeof import('@vueuse/core')['usePageLeave']>
|
|
||||||
readonly useParallax: UnwrapRef<typeof import('@vueuse/core')['useParallax']>
|
|
||||||
readonly useParentElement: UnwrapRef<typeof import('@vueuse/core')['useParentElement']>
|
|
||||||
readonly usePerformanceObserver: UnwrapRef<typeof import('@vueuse/core')['usePerformanceObserver']>
|
|
||||||
readonly usePermission: UnwrapRef<typeof import('@vueuse/core')['usePermission']>
|
|
||||||
readonly usePointer: UnwrapRef<typeof import('@vueuse/core')['usePointer']>
|
|
||||||
readonly usePointerLock: UnwrapRef<typeof import('@vueuse/core')['usePointerLock']>
|
|
||||||
readonly usePointerSwipe: UnwrapRef<typeof import('@vueuse/core')['usePointerSwipe']>
|
|
||||||
readonly usePreferredColorScheme: UnwrapRef<typeof import('@vueuse/core')['usePreferredColorScheme']>
|
|
||||||
readonly usePreferredContrast: UnwrapRef<typeof import('@vueuse/core')['usePreferredContrast']>
|
|
||||||
readonly usePreferredDark: UnwrapRef<typeof import('@vueuse/core')['usePreferredDark']>
|
|
||||||
readonly usePreferredLanguages: UnwrapRef<typeof import('@vueuse/core')['usePreferredLanguages']>
|
|
||||||
readonly usePreferredReducedMotion: UnwrapRef<typeof import('@vueuse/core')['usePreferredReducedMotion']>
|
|
||||||
readonly usePrevious: UnwrapRef<typeof import('@vueuse/core')['usePrevious']>
|
|
||||||
readonly useRafFn: UnwrapRef<typeof import('@vueuse/core')['useRafFn']>
|
|
||||||
readonly useRefHistory: UnwrapRef<typeof import('@vueuse/core')['useRefHistory']>
|
|
||||||
readonly useResizeObserver: UnwrapRef<typeof import('@vueuse/core')['useResizeObserver']>
|
|
||||||
readonly useRoute: UnwrapRef<typeof import('vue-router')['useRoute']>
|
|
||||||
readonly useRouter: UnwrapRef<typeof import('vue-router')['useRouter']>
|
|
||||||
readonly useScreenOrientation: UnwrapRef<typeof import('@vueuse/core')['useScreenOrientation']>
|
|
||||||
readonly useScreenSafeArea: UnwrapRef<typeof import('@vueuse/core')['useScreenSafeArea']>
|
|
||||||
readonly useScriptTag: UnwrapRef<typeof import('@vueuse/core')['useScriptTag']>
|
|
||||||
readonly useScroll: UnwrapRef<typeof import('@vueuse/core')['useScroll']>
|
|
||||||
readonly useScrollLock: UnwrapRef<typeof import('@vueuse/core')['useScrollLock']>
|
|
||||||
readonly useSessionStorage: UnwrapRef<typeof import('@vueuse/core')['useSessionStorage']>
|
|
||||||
readonly useShare: UnwrapRef<typeof import('@vueuse/core')['useShare']>
|
|
||||||
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
|
|
||||||
readonly useSorted: UnwrapRef<typeof import('@vueuse/core')['useSorted']>
|
|
||||||
readonly useSpeechRecognition: UnwrapRef<typeof import('@vueuse/core')['useSpeechRecognition']>
|
|
||||||
readonly useSpeechSynthesis: UnwrapRef<typeof import('@vueuse/core')['useSpeechSynthesis']>
|
|
||||||
readonly useStepper: UnwrapRef<typeof import('@vueuse/core')['useStepper']>
|
|
||||||
readonly useStorage: UnwrapRef<typeof import('@vueuse/core')['useStorage']>
|
|
||||||
readonly useStorageAsync: UnwrapRef<typeof import('@vueuse/core')['useStorageAsync']>
|
|
||||||
readonly useStyleTag: UnwrapRef<typeof import('@vueuse/core')['useStyleTag']>
|
|
||||||
readonly useSupported: UnwrapRef<typeof import('@vueuse/core')['useSupported']>
|
|
||||||
readonly useSwipe: UnwrapRef<typeof import('@vueuse/core')['useSwipe']>
|
|
||||||
readonly useTemplateRefsList: UnwrapRef<typeof import('@vueuse/core')['useTemplateRefsList']>
|
|
||||||
readonly useTextDirection: UnwrapRef<typeof import('@vueuse/core')['useTextDirection']>
|
|
||||||
readonly useTextSelection: UnwrapRef<typeof import('@vueuse/core')['useTextSelection']>
|
|
||||||
readonly useTextareaAutosize: UnwrapRef<typeof import('@vueuse/core')['useTextareaAutosize']>
|
|
||||||
readonly useThrottle: UnwrapRef<typeof import('@vueuse/core')['useThrottle']>
|
|
||||||
readonly useThrottleFn: UnwrapRef<typeof import('@vueuse/core')['useThrottleFn']>
|
|
||||||
readonly useThrottledRefHistory: UnwrapRef<typeof import('@vueuse/core')['useThrottledRefHistory']>
|
|
||||||
readonly useTimeAgo: UnwrapRef<typeof import('@vueuse/core')['useTimeAgo']>
|
|
||||||
readonly useTimeout: UnwrapRef<typeof import('@vueuse/core')['useTimeout']>
|
|
||||||
readonly useTimeoutFn: UnwrapRef<typeof import('@vueuse/core')['useTimeoutFn']>
|
|
||||||
readonly useTimeoutPoll: UnwrapRef<typeof import('@vueuse/core')['useTimeoutPoll']>
|
|
||||||
readonly useTimestamp: UnwrapRef<typeof import('@vueuse/core')['useTimestamp']>
|
|
||||||
readonly useTitle: UnwrapRef<typeof import('@vueuse/core')['useTitle']>
|
|
||||||
readonly useToNumber: UnwrapRef<typeof import('@vueuse/core')['useToNumber']>
|
|
||||||
readonly useToString: UnwrapRef<typeof import('@vueuse/core')['useToString']>
|
|
||||||
readonly useToggle: UnwrapRef<typeof import('@vueuse/core')['useToggle']>
|
|
||||||
readonly useTransition: UnwrapRef<typeof import('@vueuse/core')['useTransition']>
|
|
||||||
readonly useUrlSearchParams: UnwrapRef<typeof import('@vueuse/core')['useUrlSearchParams']>
|
|
||||||
readonly useUserMedia: UnwrapRef<typeof import('@vueuse/core')['useUserMedia']>
|
|
||||||
readonly useVModel: UnwrapRef<typeof import('@vueuse/core')['useVModel']>
|
|
||||||
readonly useVModels: UnwrapRef<typeof import('@vueuse/core')['useVModels']>
|
|
||||||
readonly useVibrate: UnwrapRef<typeof import('@vueuse/core')['useVibrate']>
|
|
||||||
readonly useVirtualList: UnwrapRef<typeof import('@vueuse/core')['useVirtualList']>
|
|
||||||
readonly useWakeLock: UnwrapRef<typeof import('@vueuse/core')['useWakeLock']>
|
|
||||||
readonly useWebNotification: UnwrapRef<typeof import('@vueuse/core')['useWebNotification']>
|
|
||||||
readonly useWebSocket: UnwrapRef<typeof import('@vueuse/core')['useWebSocket']>
|
|
||||||
readonly useWebWorker: UnwrapRef<typeof import('@vueuse/core')['useWebWorker']>
|
|
||||||
readonly useWebWorkerFn: UnwrapRef<typeof import('@vueuse/core')['useWebWorkerFn']>
|
|
||||||
readonly useWindowFocus: UnwrapRef<typeof import('@vueuse/core')['useWindowFocus']>
|
|
||||||
readonly useWindowScroll: UnwrapRef<typeof import('@vueuse/core')['useWindowScroll']>
|
|
||||||
readonly useWindowSize: UnwrapRef<typeof import('@vueuse/core')['useWindowSize']>
|
|
||||||
readonly watch: UnwrapRef<typeof import('vue')['watch']>
|
|
||||||
readonly watchArray: UnwrapRef<typeof import('@vueuse/core')['watchArray']>
|
|
||||||
readonly watchAtMost: UnwrapRef<typeof import('@vueuse/core')['watchAtMost']>
|
|
||||||
readonly watchDebounced: UnwrapRef<typeof import('@vueuse/core')['watchDebounced']>
|
|
||||||
readonly watchDeep: UnwrapRef<typeof import('@vueuse/core')['watchDeep']>
|
|
||||||
readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
|
|
||||||
readonly watchIgnorable: UnwrapRef<typeof import('@vueuse/core')['watchIgnorable']>
|
|
||||||
readonly watchImmediate: UnwrapRef<typeof import('@vueuse/core')['watchImmediate']>
|
|
||||||
readonly watchOnce: UnwrapRef<typeof import('@vueuse/core')['watchOnce']>
|
|
||||||
readonly watchPausable: UnwrapRef<typeof import('@vueuse/core')['watchPausable']>
|
|
||||||
readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']>
|
|
||||||
readonly watchSyncEffect: UnwrapRef<typeof import('vue')['watchSyncEffect']>
|
|
||||||
readonly watchThrottled: UnwrapRef<typeof import('@vueuse/core')['watchThrottled']>
|
|
||||||
readonly watchTriggerable: UnwrapRef<typeof import('@vueuse/core')['watchTriggerable']>
|
|
||||||
readonly watchWithFilter: UnwrapRef<typeof import('@vueuse/core')['watchWithFilter']>
|
|
||||||
readonly whenever: UnwrapRef<typeof import('@vueuse/core')['whenever']>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
declare module '@vue/runtime-core' {
|
|
||||||
interface ComponentCustomProperties {
|
|
||||||
readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
|
|
||||||
readonly asyncComputed: UnwrapRef<typeof import('@vueuse/core')['asyncComputed']>
|
|
||||||
readonly autoResetRef: UnwrapRef<typeof import('@vueuse/core')['autoResetRef']>
|
|
||||||
readonly computed: UnwrapRef<typeof import('vue')['computed']>
|
|
||||||
readonly computedAsync: UnwrapRef<typeof import('@vueuse/core')['computedAsync']>
|
|
||||||
readonly computedEager: UnwrapRef<typeof import('@vueuse/core')['computedEager']>
|
|
||||||
readonly computedInject: UnwrapRef<typeof import('@vueuse/core')['computedInject']>
|
|
||||||
readonly computedWithControl: UnwrapRef<typeof import('@vueuse/core')['computedWithControl']>
|
|
||||||
readonly controlledComputed: UnwrapRef<typeof import('@vueuse/core')['controlledComputed']>
|
|
||||||
readonly controlledRef: UnwrapRef<typeof import('@vueuse/core')['controlledRef']>
|
|
||||||
readonly createApp: UnwrapRef<typeof import('vue')['createApp']>
|
|
||||||
readonly createEventHook: UnwrapRef<typeof import('@vueuse/core')['createEventHook']>
|
|
||||||
readonly createGlobalState: UnwrapRef<typeof import('@vueuse/core')['createGlobalState']>
|
|
||||||
readonly createInjectionState: UnwrapRef<typeof import('@vueuse/core')['createInjectionState']>
|
|
||||||
readonly createReactiveFn: UnwrapRef<typeof import('@vueuse/core')['createReactiveFn']>
|
|
||||||
readonly createReusableTemplate: UnwrapRef<typeof import('@vueuse/core')['createReusableTemplate']>
|
|
||||||
readonly createSharedComposable: UnwrapRef<typeof import('@vueuse/core')['createSharedComposable']>
|
|
||||||
readonly createTemplatePromise: UnwrapRef<typeof import('@vueuse/core')['createTemplatePromise']>
|
|
||||||
readonly createUnrefFn: UnwrapRef<typeof import('@vueuse/core')['createUnrefFn']>
|
|
||||||
readonly customRef: UnwrapRef<typeof import('vue')['customRef']>
|
|
||||||
readonly debouncedRef: UnwrapRef<typeof import('@vueuse/core')['debouncedRef']>
|
|
||||||
readonly debouncedWatch: UnwrapRef<typeof import('@vueuse/core')['debouncedWatch']>
|
|
||||||
readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']>
|
|
||||||
readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
|
|
||||||
readonly eagerComputed: UnwrapRef<typeof import('@vueuse/core')['eagerComputed']>
|
|
||||||
readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']>
|
|
||||||
readonly extendRef: UnwrapRef<typeof import('@vueuse/core')['extendRef']>
|
|
||||||
readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']>
|
|
||||||
readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
|
|
||||||
readonly h: UnwrapRef<typeof import('vue')['h']>
|
|
||||||
readonly ignorableWatch: UnwrapRef<typeof import('@vueuse/core')['ignorableWatch']>
|
|
||||||
readonly inject: UnwrapRef<typeof import('vue')['inject']>
|
|
||||||
readonly isDefined: UnwrapRef<typeof import('@vueuse/core')['isDefined']>
|
|
||||||
readonly isProxy: UnwrapRef<typeof import('vue')['isProxy']>
|
|
||||||
readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']>
|
|
||||||
readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']>
|
|
||||||
readonly isRef: UnwrapRef<typeof import('vue')['isRef']>
|
|
||||||
readonly makeDestructurable: UnwrapRef<typeof import('@vueuse/core')['makeDestructurable']>
|
|
||||||
readonly markRaw: UnwrapRef<typeof import('vue')['markRaw']>
|
|
||||||
readonly nextTick: UnwrapRef<typeof import('vue')['nextTick']>
|
|
||||||
readonly onActivated: UnwrapRef<typeof import('vue')['onActivated']>
|
|
||||||
readonly onBeforeMount: UnwrapRef<typeof import('vue')['onBeforeMount']>
|
|
||||||
readonly onBeforeRouteLeave: UnwrapRef<typeof import('vue-router')['onBeforeRouteLeave']>
|
|
||||||
readonly onBeforeRouteUpdate: UnwrapRef<typeof import('vue-router')['onBeforeRouteUpdate']>
|
|
||||||
readonly onBeforeUnmount: UnwrapRef<typeof import('vue')['onBeforeUnmount']>
|
|
||||||
readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']>
|
|
||||||
readonly onClickOutside: UnwrapRef<typeof import('@vueuse/core')['onClickOutside']>
|
|
||||||
readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']>
|
|
||||||
readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']>
|
|
||||||
readonly onKeyStroke: UnwrapRef<typeof import('@vueuse/core')['onKeyStroke']>
|
|
||||||
readonly onLongPress: UnwrapRef<typeof import('@vueuse/core')['onLongPress']>
|
|
||||||
readonly onMounted: UnwrapRef<typeof import('vue')['onMounted']>
|
|
||||||
readonly onRenderTracked: UnwrapRef<typeof import('vue')['onRenderTracked']>
|
|
||||||
readonly onRenderTriggered: UnwrapRef<typeof import('vue')['onRenderTriggered']>
|
|
||||||
readonly onScopeDispose: UnwrapRef<typeof import('vue')['onScopeDispose']>
|
|
||||||
readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']>
|
|
||||||
readonly onStartTyping: UnwrapRef<typeof import('@vueuse/core')['onStartTyping']>
|
|
||||||
readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
|
|
||||||
readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
|
|
||||||
readonly pausableWatch: UnwrapRef<typeof import('@vueuse/core')['pausableWatch']>
|
|
||||||
readonly provide: UnwrapRef<typeof import('vue')['provide']>
|
|
||||||
readonly reactify: UnwrapRef<typeof import('@vueuse/core')['reactify']>
|
|
||||||
readonly reactifyObject: UnwrapRef<typeof import('@vueuse/core')['reactifyObject']>
|
|
||||||
readonly reactive: UnwrapRef<typeof import('vue')['reactive']>
|
|
||||||
readonly reactiveComputed: UnwrapRef<typeof import('@vueuse/core')['reactiveComputed']>
|
|
||||||
readonly reactiveOmit: UnwrapRef<typeof import('@vueuse/core')['reactiveOmit']>
|
|
||||||
readonly reactivePick: UnwrapRef<typeof import('@vueuse/core')['reactivePick']>
|
|
||||||
readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
|
|
||||||
readonly ref: UnwrapRef<typeof import('vue')['ref']>
|
|
||||||
readonly refAutoReset: UnwrapRef<typeof import('@vueuse/core')['refAutoReset']>
|
|
||||||
readonly refDebounced: UnwrapRef<typeof import('@vueuse/core')['refDebounced']>
|
|
||||||
readonly refDefault: UnwrapRef<typeof import('@vueuse/core')['refDefault']>
|
|
||||||
readonly refThrottled: UnwrapRef<typeof import('@vueuse/core')['refThrottled']>
|
|
||||||
readonly refWithControl: UnwrapRef<typeof import('@vueuse/core')['refWithControl']>
|
|
||||||
readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
|
|
||||||
readonly resolveRef: UnwrapRef<typeof import('@vueuse/core')['resolveRef']>
|
|
||||||
readonly resolveUnref: UnwrapRef<typeof import('@vueuse/core')['resolveUnref']>
|
|
||||||
readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']>
|
|
||||||
readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']>
|
|
||||||
readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']>
|
|
||||||
readonly syncRef: UnwrapRef<typeof import('@vueuse/core')['syncRef']>
|
|
||||||
readonly syncRefs: UnwrapRef<typeof import('@vueuse/core')['syncRefs']>
|
|
||||||
readonly templateRef: UnwrapRef<typeof import('@vueuse/core')['templateRef']>
|
|
||||||
readonly throttledRef: UnwrapRef<typeof import('@vueuse/core')['throttledRef']>
|
|
||||||
readonly throttledWatch: UnwrapRef<typeof import('@vueuse/core')['throttledWatch']>
|
|
||||||
readonly toRaw: UnwrapRef<typeof import('vue')['toRaw']>
|
|
||||||
readonly toReactive: UnwrapRef<typeof import('@vueuse/core')['toReactive']>
|
|
||||||
readonly toRef: UnwrapRef<typeof import('vue')['toRef']>
|
|
||||||
readonly toRefs: UnwrapRef<typeof import('vue')['toRefs']>
|
|
||||||
readonly toValue: UnwrapRef<typeof import('vue')['toValue']>
|
|
||||||
readonly triggerRef: UnwrapRef<typeof import('vue')['triggerRef']>
|
|
||||||
readonly tryOnBeforeMount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeMount']>
|
|
||||||
readonly tryOnBeforeUnmount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeUnmount']>
|
|
||||||
readonly tryOnMounted: UnwrapRef<typeof import('@vueuse/core')['tryOnMounted']>
|
|
||||||
readonly tryOnScopeDispose: UnwrapRef<typeof import('@vueuse/core')['tryOnScopeDispose']>
|
|
||||||
readonly tryOnUnmounted: UnwrapRef<typeof import('@vueuse/core')['tryOnUnmounted']>
|
|
||||||
readonly unref: UnwrapRef<typeof import('vue')['unref']>
|
|
||||||
readonly unrefElement: UnwrapRef<typeof import('@vueuse/core')['unrefElement']>
|
|
||||||
readonly until: UnwrapRef<typeof import('@vueuse/core')['until']>
|
|
||||||
readonly useActiveElement: UnwrapRef<typeof import('@vueuse/core')['useActiveElement']>
|
|
||||||
readonly useAnimate: UnwrapRef<typeof import('@vueuse/core')['useAnimate']>
|
|
||||||
readonly useArrayDifference: UnwrapRef<typeof import('@vueuse/core')['useArrayDifference']>
|
|
||||||
readonly useArrayEvery: UnwrapRef<typeof import('@vueuse/core')['useArrayEvery']>
|
|
||||||
readonly useArrayFilter: UnwrapRef<typeof import('@vueuse/core')['useArrayFilter']>
|
|
||||||
readonly useArrayFind: UnwrapRef<typeof import('@vueuse/core')['useArrayFind']>
|
|
||||||
readonly useArrayFindIndex: UnwrapRef<typeof import('@vueuse/core')['useArrayFindIndex']>
|
|
||||||
readonly useArrayFindLast: UnwrapRef<typeof import('@vueuse/core')['useArrayFindLast']>
|
|
||||||
readonly useArrayIncludes: UnwrapRef<typeof import('@vueuse/core')['useArrayIncludes']>
|
|
||||||
readonly useArrayJoin: UnwrapRef<typeof import('@vueuse/core')['useArrayJoin']>
|
|
||||||
readonly useArrayMap: UnwrapRef<typeof import('@vueuse/core')['useArrayMap']>
|
|
||||||
readonly useArrayReduce: UnwrapRef<typeof import('@vueuse/core')['useArrayReduce']>
|
|
||||||
readonly useArraySome: UnwrapRef<typeof import('@vueuse/core')['useArraySome']>
|
|
||||||
readonly useArrayUnique: UnwrapRef<typeof import('@vueuse/core')['useArrayUnique']>
|
|
||||||
readonly useAsyncQueue: UnwrapRef<typeof import('@vueuse/core')['useAsyncQueue']>
|
|
||||||
readonly useAsyncState: UnwrapRef<typeof import('@vueuse/core')['useAsyncState']>
|
|
||||||
readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']>
|
|
||||||
readonly useBase64: UnwrapRef<typeof import('@vueuse/core')['useBase64']>
|
|
||||||
readonly useBattery: UnwrapRef<typeof import('@vueuse/core')['useBattery']>
|
|
||||||
readonly useBluetooth: UnwrapRef<typeof import('@vueuse/core')['useBluetooth']>
|
|
||||||
readonly useBreakpoints: UnwrapRef<typeof import('@vueuse/core')['useBreakpoints']>
|
|
||||||
readonly useBroadcastChannel: UnwrapRef<typeof import('@vueuse/core')['useBroadcastChannel']>
|
|
||||||
readonly useBrowserLocation: UnwrapRef<typeof import('@vueuse/core')['useBrowserLocation']>
|
|
||||||
readonly useCached: UnwrapRef<typeof import('@vueuse/core')['useCached']>
|
|
||||||
readonly useClipboard: UnwrapRef<typeof import('@vueuse/core')['useClipboard']>
|
|
||||||
readonly useCloned: UnwrapRef<typeof import('@vueuse/core')['useCloned']>
|
|
||||||
readonly useColorMode: UnwrapRef<typeof import('@vueuse/core')['useColorMode']>
|
|
||||||
readonly useConfirmDialog: UnwrapRef<typeof import('@vueuse/core')['useConfirmDialog']>
|
|
||||||
readonly useCounter: UnwrapRef<typeof import('@vueuse/core')['useCounter']>
|
|
||||||
readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
|
|
||||||
readonly useCssVar: UnwrapRef<typeof import('@vueuse/core')['useCssVar']>
|
|
||||||
readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
|
|
||||||
readonly useCurrentElement: UnwrapRef<typeof import('@vueuse/core')['useCurrentElement']>
|
|
||||||
readonly useCycleList: UnwrapRef<typeof import('@vueuse/core')['useCycleList']>
|
|
||||||
readonly useDark: UnwrapRef<typeof import('@vueuse/core')['useDark']>
|
|
||||||
readonly useDateFormat: UnwrapRef<typeof import('@vueuse/core')['useDateFormat']>
|
|
||||||
readonly useDebounce: UnwrapRef<typeof import('@vueuse/core')['useDebounce']>
|
|
||||||
readonly useDebounceFn: UnwrapRef<typeof import('@vueuse/core')['useDebounceFn']>
|
|
||||||
readonly useDebouncedRefHistory: UnwrapRef<typeof import('@vueuse/core')['useDebouncedRefHistory']>
|
|
||||||
readonly useDeviceMotion: UnwrapRef<typeof import('@vueuse/core')['useDeviceMotion']>
|
|
||||||
readonly useDeviceOrientation: UnwrapRef<typeof import('@vueuse/core')['useDeviceOrientation']>
|
|
||||||
readonly useDevicePixelRatio: UnwrapRef<typeof import('@vueuse/core')['useDevicePixelRatio']>
|
|
||||||
readonly useDevicesList: UnwrapRef<typeof import('@vueuse/core')['useDevicesList']>
|
|
||||||
readonly useDialog: UnwrapRef<typeof import('naive-ui')['useDialog']>
|
|
||||||
readonly useDisplayMedia: UnwrapRef<typeof import('@vueuse/core')['useDisplayMedia']>
|
|
||||||
readonly useDocumentVisibility: UnwrapRef<typeof import('@vueuse/core')['useDocumentVisibility']>
|
|
||||||
readonly useDraggable: UnwrapRef<typeof import('@vueuse/core')['useDraggable']>
|
|
||||||
readonly useDropZone: UnwrapRef<typeof import('@vueuse/core')['useDropZone']>
|
|
||||||
readonly useElementBounding: UnwrapRef<typeof import('@vueuse/core')['useElementBounding']>
|
|
||||||
readonly useElementByPoint: UnwrapRef<typeof import('@vueuse/core')['useElementByPoint']>
|
|
||||||
readonly useElementHover: UnwrapRef<typeof import('@vueuse/core')['useElementHover']>
|
|
||||||
readonly useElementSize: UnwrapRef<typeof import('@vueuse/core')['useElementSize']>
|
|
||||||
readonly useElementVisibility: UnwrapRef<typeof import('@vueuse/core')['useElementVisibility']>
|
|
||||||
readonly useEventBus: UnwrapRef<typeof import('@vueuse/core')['useEventBus']>
|
|
||||||
readonly useEventListener: UnwrapRef<typeof import('@vueuse/core')['useEventListener']>
|
|
||||||
readonly useEventSource: UnwrapRef<typeof import('@vueuse/core')['useEventSource']>
|
|
||||||
readonly useEyeDropper: UnwrapRef<typeof import('@vueuse/core')['useEyeDropper']>
|
|
||||||
readonly useFavicon: UnwrapRef<typeof import('@vueuse/core')['useFavicon']>
|
|
||||||
readonly useFetch: UnwrapRef<typeof import('@vueuse/core')['useFetch']>
|
|
||||||
readonly useFileDialog: UnwrapRef<typeof import('@vueuse/core')['useFileDialog']>
|
|
||||||
readonly useFileSystemAccess: UnwrapRef<typeof import('@vueuse/core')['useFileSystemAccess']>
|
|
||||||
readonly useFocus: UnwrapRef<typeof import('@vueuse/core')['useFocus']>
|
|
||||||
readonly useFocusWithin: UnwrapRef<typeof import('@vueuse/core')['useFocusWithin']>
|
|
||||||
readonly useFps: UnwrapRef<typeof import('@vueuse/core')['useFps']>
|
|
||||||
readonly useFullscreen: UnwrapRef<typeof import('@vueuse/core')['useFullscreen']>
|
|
||||||
readonly useGamepad: UnwrapRef<typeof import('@vueuse/core')['useGamepad']>
|
|
||||||
readonly useGeolocation: UnwrapRef<typeof import('@vueuse/core')['useGeolocation']>
|
|
||||||
readonly useI18n: UnwrapRef<typeof import('vue-i18n')['useI18n']>
|
|
||||||
readonly useIdle: UnwrapRef<typeof import('@vueuse/core')['useIdle']>
|
|
||||||
readonly useImage: UnwrapRef<typeof import('@vueuse/core')['useImage']>
|
|
||||||
readonly useInfiniteScroll: UnwrapRef<typeof import('@vueuse/core')['useInfiniteScroll']>
|
|
||||||
readonly useIntersectionObserver: UnwrapRef<typeof import('@vueuse/core')['useIntersectionObserver']>
|
|
||||||
readonly useInterval: UnwrapRef<typeof import('@vueuse/core')['useInterval']>
|
|
||||||
readonly useIntervalFn: UnwrapRef<typeof import('@vueuse/core')['useIntervalFn']>
|
|
||||||
readonly useKeyModifier: UnwrapRef<typeof import('@vueuse/core')['useKeyModifier']>
|
|
||||||
readonly useLastChanged: UnwrapRef<typeof import('@vueuse/core')['useLastChanged']>
|
|
||||||
readonly useLink: UnwrapRef<typeof import('vue-router')['useLink']>
|
|
||||||
readonly useLoadingBar: UnwrapRef<typeof import('naive-ui')['useLoadingBar']>
|
|
||||||
readonly useLocalStorage: UnwrapRef<typeof import('@vueuse/core')['useLocalStorage']>
|
|
||||||
readonly useMagicKeys: UnwrapRef<typeof import('@vueuse/core')['useMagicKeys']>
|
|
||||||
readonly useManualRefHistory: UnwrapRef<typeof import('@vueuse/core')['useManualRefHistory']>
|
|
||||||
readonly useMediaControls: UnwrapRef<typeof import('@vueuse/core')['useMediaControls']>
|
|
||||||
readonly useMediaQuery: UnwrapRef<typeof import('@vueuse/core')['useMediaQuery']>
|
|
||||||
readonly useMemoize: UnwrapRef<typeof import('@vueuse/core')['useMemoize']>
|
|
||||||
readonly useMemory: UnwrapRef<typeof import('@vueuse/core')['useMemory']>
|
|
||||||
readonly useMessage: UnwrapRef<typeof import('naive-ui')['useMessage']>
|
|
||||||
readonly useMounted: UnwrapRef<typeof import('@vueuse/core')['useMounted']>
|
|
||||||
readonly useMouse: UnwrapRef<typeof import('@vueuse/core')['useMouse']>
|
|
||||||
readonly useMouseInElement: UnwrapRef<typeof import('@vueuse/core')['useMouseInElement']>
|
|
||||||
readonly useMousePressed: UnwrapRef<typeof import('@vueuse/core')['useMousePressed']>
|
|
||||||
readonly useMutationObserver: UnwrapRef<typeof import('@vueuse/core')['useMutationObserver']>
|
|
||||||
readonly useNavigatorLanguage: UnwrapRef<typeof import('@vueuse/core')['useNavigatorLanguage']>
|
|
||||||
readonly useNetwork: UnwrapRef<typeof import('@vueuse/core')['useNetwork']>
|
|
||||||
readonly useNotification: UnwrapRef<typeof import('naive-ui')['useNotification']>
|
|
||||||
readonly useNow: UnwrapRef<typeof import('@vueuse/core')['useNow']>
|
|
||||||
readonly useObjectUrl: UnwrapRef<typeof import('@vueuse/core')['useObjectUrl']>
|
|
||||||
readonly useOffsetPagination: UnwrapRef<typeof import('@vueuse/core')['useOffsetPagination']>
|
|
||||||
readonly useOnline: UnwrapRef<typeof import('@vueuse/core')['useOnline']>
|
|
||||||
readonly usePageLeave: UnwrapRef<typeof import('@vueuse/core')['usePageLeave']>
|
|
||||||
readonly useParallax: UnwrapRef<typeof import('@vueuse/core')['useParallax']>
|
|
||||||
readonly useParentElement: UnwrapRef<typeof import('@vueuse/core')['useParentElement']>
|
|
||||||
readonly usePerformanceObserver: UnwrapRef<typeof import('@vueuse/core')['usePerformanceObserver']>
|
|
||||||
readonly usePermission: UnwrapRef<typeof import('@vueuse/core')['usePermission']>
|
|
||||||
readonly usePointer: UnwrapRef<typeof import('@vueuse/core')['usePointer']>
|
|
||||||
readonly usePointerLock: UnwrapRef<typeof import('@vueuse/core')['usePointerLock']>
|
|
||||||
readonly usePointerSwipe: UnwrapRef<typeof import('@vueuse/core')['usePointerSwipe']>
|
|
||||||
readonly usePreferredColorScheme: UnwrapRef<typeof import('@vueuse/core')['usePreferredColorScheme']>
|
|
||||||
readonly usePreferredContrast: UnwrapRef<typeof import('@vueuse/core')['usePreferredContrast']>
|
|
||||||
readonly usePreferredDark: UnwrapRef<typeof import('@vueuse/core')['usePreferredDark']>
|
|
||||||
readonly usePreferredLanguages: UnwrapRef<typeof import('@vueuse/core')['usePreferredLanguages']>
|
|
||||||
readonly usePreferredReducedMotion: UnwrapRef<typeof import('@vueuse/core')['usePreferredReducedMotion']>
|
|
||||||
readonly usePrevious: UnwrapRef<typeof import('@vueuse/core')['usePrevious']>
|
|
||||||
readonly useRafFn: UnwrapRef<typeof import('@vueuse/core')['useRafFn']>
|
|
||||||
readonly useRefHistory: UnwrapRef<typeof import('@vueuse/core')['useRefHistory']>
|
|
||||||
readonly useResizeObserver: UnwrapRef<typeof import('@vueuse/core')['useResizeObserver']>
|
|
||||||
readonly useRoute: UnwrapRef<typeof import('vue-router')['useRoute']>
|
|
||||||
readonly useRouter: UnwrapRef<typeof import('vue-router')['useRouter']>
|
|
||||||
readonly useScreenOrientation: UnwrapRef<typeof import('@vueuse/core')['useScreenOrientation']>
|
|
||||||
readonly useScreenSafeArea: UnwrapRef<typeof import('@vueuse/core')['useScreenSafeArea']>
|
|
||||||
readonly useScriptTag: UnwrapRef<typeof import('@vueuse/core')['useScriptTag']>
|
|
||||||
readonly useScroll: UnwrapRef<typeof import('@vueuse/core')['useScroll']>
|
|
||||||
readonly useScrollLock: UnwrapRef<typeof import('@vueuse/core')['useScrollLock']>
|
|
||||||
readonly useSessionStorage: UnwrapRef<typeof import('@vueuse/core')['useSessionStorage']>
|
|
||||||
readonly useShare: UnwrapRef<typeof import('@vueuse/core')['useShare']>
|
|
||||||
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
|
|
||||||
readonly useSorted: UnwrapRef<typeof import('@vueuse/core')['useSorted']>
|
|
||||||
readonly useSpeechRecognition: UnwrapRef<typeof import('@vueuse/core')['useSpeechRecognition']>
|
|
||||||
readonly useSpeechSynthesis: UnwrapRef<typeof import('@vueuse/core')['useSpeechSynthesis']>
|
|
||||||
readonly useStepper: UnwrapRef<typeof import('@vueuse/core')['useStepper']>
|
|
||||||
readonly useStorage: UnwrapRef<typeof import('@vueuse/core')['useStorage']>
|
|
||||||
readonly useStorageAsync: UnwrapRef<typeof import('@vueuse/core')['useStorageAsync']>
|
|
||||||
readonly useStyleTag: UnwrapRef<typeof import('@vueuse/core')['useStyleTag']>
|
|
||||||
readonly useSupported: UnwrapRef<typeof import('@vueuse/core')['useSupported']>
|
|
||||||
readonly useSwipe: UnwrapRef<typeof import('@vueuse/core')['useSwipe']>
|
|
||||||
readonly useTemplateRefsList: UnwrapRef<typeof import('@vueuse/core')['useTemplateRefsList']>
|
|
||||||
readonly useTextDirection: UnwrapRef<typeof import('@vueuse/core')['useTextDirection']>
|
|
||||||
readonly useTextSelection: UnwrapRef<typeof import('@vueuse/core')['useTextSelection']>
|
|
||||||
readonly useTextareaAutosize: UnwrapRef<typeof import('@vueuse/core')['useTextareaAutosize']>
|
|
||||||
readonly useThrottle: UnwrapRef<typeof import('@vueuse/core')['useThrottle']>
|
|
||||||
readonly useThrottleFn: UnwrapRef<typeof import('@vueuse/core')['useThrottleFn']>
|
|
||||||
readonly useThrottledRefHistory: UnwrapRef<typeof import('@vueuse/core')['useThrottledRefHistory']>
|
|
||||||
readonly useTimeAgo: UnwrapRef<typeof import('@vueuse/core')['useTimeAgo']>
|
|
||||||
readonly useTimeout: UnwrapRef<typeof import('@vueuse/core')['useTimeout']>
|
|
||||||
readonly useTimeoutFn: UnwrapRef<typeof import('@vueuse/core')['useTimeoutFn']>
|
|
||||||
readonly useTimeoutPoll: UnwrapRef<typeof import('@vueuse/core')['useTimeoutPoll']>
|
|
||||||
readonly useTimestamp: UnwrapRef<typeof import('@vueuse/core')['useTimestamp']>
|
|
||||||
readonly useTitle: UnwrapRef<typeof import('@vueuse/core')['useTitle']>
|
|
||||||
readonly useToNumber: UnwrapRef<typeof import('@vueuse/core')['useToNumber']>
|
|
||||||
readonly useToString: UnwrapRef<typeof import('@vueuse/core')['useToString']>
|
|
||||||
readonly useToggle: UnwrapRef<typeof import('@vueuse/core')['useToggle']>
|
|
||||||
readonly useTransition: UnwrapRef<typeof import('@vueuse/core')['useTransition']>
|
|
||||||
readonly useUrlSearchParams: UnwrapRef<typeof import('@vueuse/core')['useUrlSearchParams']>
|
|
||||||
readonly useUserMedia: UnwrapRef<typeof import('@vueuse/core')['useUserMedia']>
|
|
||||||
readonly useVModel: UnwrapRef<typeof import('@vueuse/core')['useVModel']>
|
|
||||||
readonly useVModels: UnwrapRef<typeof import('@vueuse/core')['useVModels']>
|
|
||||||
readonly useVibrate: UnwrapRef<typeof import('@vueuse/core')['useVibrate']>
|
|
||||||
readonly useVirtualList: UnwrapRef<typeof import('@vueuse/core')['useVirtualList']>
|
|
||||||
readonly useWakeLock: UnwrapRef<typeof import('@vueuse/core')['useWakeLock']>
|
|
||||||
readonly useWebNotification: UnwrapRef<typeof import('@vueuse/core')['useWebNotification']>
|
|
||||||
readonly useWebSocket: UnwrapRef<typeof import('@vueuse/core')['useWebSocket']>
|
|
||||||
readonly useWebWorker: UnwrapRef<typeof import('@vueuse/core')['useWebWorker']>
|
|
||||||
readonly useWebWorkerFn: UnwrapRef<typeof import('@vueuse/core')['useWebWorkerFn']>
|
|
||||||
readonly useWindowFocus: UnwrapRef<typeof import('@vueuse/core')['useWindowFocus']>
|
|
||||||
readonly useWindowScroll: UnwrapRef<typeof import('@vueuse/core')['useWindowScroll']>
|
|
||||||
readonly useWindowSize: UnwrapRef<typeof import('@vueuse/core')['useWindowSize']>
|
|
||||||
readonly watch: UnwrapRef<typeof import('vue')['watch']>
|
|
||||||
readonly watchArray: UnwrapRef<typeof import('@vueuse/core')['watchArray']>
|
|
||||||
readonly watchAtMost: UnwrapRef<typeof import('@vueuse/core')['watchAtMost']>
|
|
||||||
readonly watchDebounced: UnwrapRef<typeof import('@vueuse/core')['watchDebounced']>
|
|
||||||
readonly watchDeep: UnwrapRef<typeof import('@vueuse/core')['watchDeep']>
|
|
||||||
readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
|
|
||||||
readonly watchIgnorable: UnwrapRef<typeof import('@vueuse/core')['watchIgnorable']>
|
|
||||||
readonly watchImmediate: UnwrapRef<typeof import('@vueuse/core')['watchImmediate']>
|
|
||||||
readonly watchOnce: UnwrapRef<typeof import('@vueuse/core')['watchOnce']>
|
|
||||||
readonly watchPausable: UnwrapRef<typeof import('@vueuse/core')['watchPausable']>
|
|
||||||
readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']>
|
|
||||||
readonly watchSyncEffect: UnwrapRef<typeof import('vue')['watchSyncEffect']>
|
|
||||||
readonly watchThrottled: UnwrapRef<typeof import('@vueuse/core')['watchThrottled']>
|
|
||||||
readonly watchTriggerable: UnwrapRef<typeof import('@vueuse/core')['watchTriggerable']>
|
|
||||||
readonly watchWithFilter: UnwrapRef<typeof import('@vueuse/core')['watchWithFilter']>
|
|
||||||
readonly whenever: UnwrapRef<typeof import('@vueuse/core')['whenever']>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
23
buildModules/memo/index.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import {Module} from '@nuxt/types'
|
||||||
|
|
||||||
|
interface MemoModuleOptions {
|
||||||
|
}
|
||||||
|
|
||||||
|
const toolConfigModule: Module<MemoModuleOptions> = function () {
|
||||||
|
const {extendBuild} = this
|
||||||
|
|
||||||
|
extendBuild((config) => {
|
||||||
|
if (!config.module) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.warn('Failed to register the memo module.')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
config.module.rules.push({
|
||||||
|
resourceQuery: /blockType=memo/,
|
||||||
|
loader: require.resolve('./loader.js')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export default toolConfigModule
|
||||||
11
buildModules/memo/loader.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
const loader = function (source, map) {
|
||||||
|
this.callback(
|
||||||
|
null,
|
||||||
|
`export default function (Component) {
|
||||||
|
Component.options.__memo = ${JSON.stringify(source)}
|
||||||
|
}`,
|
||||||
|
map
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = loader
|
||||||
83
buildModules/tool-config/index.ts
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
import {readdirSync, readFileSync} from 'fs'
|
||||||
|
import {join, resolve} from 'path'
|
||||||
|
import {Module} from '@nuxt/types'
|
||||||
|
import {NuxtRouteConfig} from '@nuxt/types/config/router'
|
||||||
|
import YAML from 'yaml'
|
||||||
|
import {capitalise} from '../../utils/string'
|
||||||
|
|
||||||
|
const toolDirName = 'tools'
|
||||||
|
const rootDir = join(__dirname, '..', '..')
|
||||||
|
const toolsDir = join(rootDir, toolDirName)
|
||||||
|
|
||||||
|
interface ToolConfigModuleOptions {
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTools() {
|
||||||
|
const categories = readdirSync(toolsDir)
|
||||||
|
const toolList: { [key: string]: any[] } = {}
|
||||||
|
|
||||||
|
for (const category of categories) {
|
||||||
|
const categoryDir = join(toolsDir, category)
|
||||||
|
const categoryFormatted = capitalise(category)
|
||||||
|
|
||||||
|
toolList[categoryFormatted] = readdirSync(categoryDir).map((toolFileName) => {
|
||||||
|
const toolPath = join(categoryDir, toolFileName)
|
||||||
|
const contentMatch = readFileSync(toolPath, 'utf8').match(/<tool(\s[^>\s]*)*>([\S\s.]*?)<\/tool>/)
|
||||||
|
|
||||||
|
return contentMatch
|
||||||
|
? {
|
||||||
|
...YAML.parse(contentMatch[2]),
|
||||||
|
componentPath: join(toolDirName, category, toolFileName)
|
||||||
|
}
|
||||||
|
: null
|
||||||
|
}).filter(v => v !== null)
|
||||||
|
}
|
||||||
|
|
||||||
|
return toolList
|
||||||
|
}
|
||||||
|
|
||||||
|
const toolConfigModule: Module<ToolConfigModuleOptions> = function () {
|
||||||
|
const {nuxt, extendBuild, addPlugin} = this
|
||||||
|
const toolList = getTools()
|
||||||
|
const toolListFlat = Object.values(toolList).flat()
|
||||||
|
|
||||||
|
nuxt.hook('build:extendRoutes', (routes: NuxtRouteConfig[]) => {
|
||||||
|
toolListFlat.forEach((toolConfig) => {
|
||||||
|
const {path = '', title, componentPath} = toolConfig
|
||||||
|
const name = title.toLowerCase().split(/\s/).join('-').replace(/\.vue$/, '')
|
||||||
|
|
||||||
|
const newRoute: NuxtRouteConfig = {
|
||||||
|
name,
|
||||||
|
path,
|
||||||
|
component: join(rootDir, componentPath),
|
||||||
|
chunkName: componentPath.replace(/\.vue$/, '')
|
||||||
|
}
|
||||||
|
|
||||||
|
routes.push(newRoute)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
extendBuild((config) => {
|
||||||
|
if (!config.module) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.warn('Failed to register the tool-config module.')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
config.module.rules.push({
|
||||||
|
resourceQuery: /blockType=tool/,
|
||||||
|
loader: require.resolve('./loader.js')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
addPlugin({
|
||||||
|
src: resolve(__dirname, 'plugin.ts'),
|
||||||
|
fileName: 'tool-config/plugin.ts',
|
||||||
|
options: {
|
||||||
|
toolList,
|
||||||
|
toolListFlat
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export default toolConfigModule
|
||||||
13
buildModules/tool-config/loader.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
const YAML = require('yaml')
|
||||||
|
|
||||||
|
const loader = function (source, map) {
|
||||||
|
this.callback(
|
||||||
|
null,
|
||||||
|
`export default function (Component) {
|
||||||
|
Component.options.__toolConfig = ${JSON.stringify(YAML.parse(source))}
|
||||||
|
}`,
|
||||||
|
map
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = loader
|
||||||
16
buildModules/tool-config/plugin.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// @ts-nocheck
|
||||||
|
import {Plugin} from '@nuxt/types'
|
||||||
|
import type {ToolRouteConfig} from '~/types/ToolConfig';
|
||||||
|
|
||||||
|
declare module 'vue/types/vue' {
|
||||||
|
interface Vue {
|
||||||
|
$toolListFlat: ToolRouteConfig[]
|
||||||
|
$toolList: { [key: string]: ToolRouteConfig[] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const plugin: Plugin = (_, inject) => {
|
||||||
|
inject('toolListFlat', <%= serialize(options.toolListFlat) %>)
|
||||||
|
inject('toolList', <%= serialize(options.toolList) %>)
|
||||||
|
}
|
||||||
|
export default plugin
|
||||||
6
commitlint.config.js
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
module.exports = {
|
||||||
|
extends: ['@commitlint/config-conventional'],
|
||||||
|
rules: {
|
||||||
|
'body-max-line-length': [2, 'always', Infinity]
|
||||||
|
}
|
||||||
|
}
|
||||||
209
components.d.ts
vendored
@ -1,209 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
/* prettier-ignore */
|
|
||||||
// @ts-nocheck
|
|
||||||
// Generated by unplugin-vue-components
|
|
||||||
// Read more: https://github.com/vuejs/core/pull/3399
|
|
||||||
import '@vue/runtime-core'
|
|
||||||
|
|
||||||
export {}
|
|
||||||
|
|
||||||
declare module '@vue/runtime-core' {
|
|
||||||
export interface GlobalComponents {
|
|
||||||
'404.page': typeof import('./src/pages/404.page.vue')['default']
|
|
||||||
About: typeof import('./src/pages/About.vue')['default']
|
|
||||||
App: typeof import('./src/App.vue')['default']
|
|
||||||
AsciiTextDrawer: typeof import('./src/tools/ascii-text-drawer/ascii-text-drawer.vue')['default']
|
|
||||||
'Base.layout': typeof import('./src/layouts/base.layout.vue')['default']
|
|
||||||
Base64FileConverter: typeof import('./src/tools/base64-file-converter/base64-file-converter.vue')['default']
|
|
||||||
Base64StringConverter: typeof import('./src/tools/base64-string-converter/base64-string-converter.vue')['default']
|
|
||||||
BasicAuthGenerator: typeof import('./src/tools/basic-auth-generator/basic-auth-generator.vue')['default']
|
|
||||||
Bcrypt: typeof import('./src/tools/bcrypt/bcrypt.vue')['default']
|
|
||||||
BenchmarkBuilder: typeof import('./src/tools/benchmark-builder/benchmark-builder.vue')['default']
|
|
||||||
Bip39Generator: typeof import('./src/tools/bip39-generator/bip39-generator.vue')['default']
|
|
||||||
CAlert: typeof import('./src/ui/c-alert/c-alert.vue')['default']
|
|
||||||
'CAlert.demo': typeof import('./src/ui/c-alert/c-alert.demo.vue')['default']
|
|
||||||
CameraRecorder: typeof import('./src/tools/camera-recorder/camera-recorder.vue')['default']
|
|
||||||
CaseConverter: typeof import('./src/tools/case-converter/case-converter.vue')['default']
|
|
||||||
CButton: typeof import('./src/ui/c-button/c-button.vue')['default']
|
|
||||||
'CButton.demo': typeof import('./src/ui/c-button/c-button.demo.vue')['default']
|
|
||||||
CButtonsSelect: typeof import('./src/ui/c-buttons-select/c-buttons-select.vue')['default']
|
|
||||||
'CButtonsSelect.demo': typeof import('./src/ui/c-buttons-select/c-buttons-select.demo.vue')['default']
|
|
||||||
CCard: typeof import('./src/ui/c-card/c-card.vue')['default']
|
|
||||||
'CCard.demo': typeof import('./src/ui/c-card/c-card.demo.vue')['default']
|
|
||||||
CCollapse: typeof import('./src/ui/c-collapse/c-collapse.vue')['default']
|
|
||||||
'CCollapse.demo': typeof import('./src/ui/c-collapse/c-collapse.demo.vue')['default']
|
|
||||||
CDiffEditor: typeof import('./src/ui/c-diff-editor/c-diff-editor.vue')['default']
|
|
||||||
CFileUpload: typeof import('./src/ui/c-file-upload/c-file-upload.vue')['default']
|
|
||||||
'CFileUpload.demo': typeof import('./src/ui/c-file-upload/c-file-upload.demo.vue')['default']
|
|
||||||
ChmodCalculator: typeof import('./src/tools/chmod-calculator/chmod-calculator.vue')['default']
|
|
||||||
Chronometer: typeof import('./src/tools/chronometer/chronometer.vue')['default']
|
|
||||||
CInputText: typeof import('./src/ui/c-input-text/c-input-text.vue')['default']
|
|
||||||
'CInputText.demo': typeof import('./src/ui/c-input-text/c-input-text.demo.vue')['default']
|
|
||||||
CKeyValueList: typeof import('./src/ui/c-key-value-list/c-key-value-list.vue')['default']
|
|
||||||
CKeyValueListItem: typeof import('./src/ui/c-key-value-list/c-key-value-list-item.vue')['default']
|
|
||||||
CLabel: typeof import('./src/ui/c-label/c-label.vue')['default']
|
|
||||||
CLink: typeof import('./src/ui/c-link/c-link.vue')['default']
|
|
||||||
'CLink.demo': typeof import('./src/ui/c-link/c-link.demo.vue')['default']
|
|
||||||
CMarkdown: typeof import('./src/ui/c-markdown/c-markdown.vue')['default']
|
|
||||||
'CMarkdown.demo': typeof import('./src/ui/c-markdown/c-markdown.demo.vue')['default']
|
|
||||||
CModal: typeof import('./src/ui/c-modal/c-modal.vue')['default']
|
|
||||||
'CModal.demo': typeof import('./src/ui/c-modal/c-modal.demo.vue')['default']
|
|
||||||
CModalValue: typeof import('./src/ui/c-modal-value/c-modal-value.vue')['default']
|
|
||||||
'CModalValue.demo': typeof import('./src/ui/c-modal-value/c-modal-value.demo.vue')['default']
|
|
||||||
CollapsibleToolMenu: typeof import('./src/components/CollapsibleToolMenu.vue')['default']
|
|
||||||
ColorConverter: typeof import('./src/tools/color-converter/color-converter.vue')['default']
|
|
||||||
ColoredCard: typeof import('./src/components/ColoredCard.vue')['default']
|
|
||||||
CommandPalette: typeof import('./src/modules/command-palette/command-palette.vue')['default']
|
|
||||||
CommandPaletteOption: typeof import('./src/modules/command-palette/components/command-palette-option.vue')['default']
|
|
||||||
CrontabGenerator: typeof import('./src/tools/crontab-generator/crontab-generator.vue')['default']
|
|
||||||
CSelect: typeof import('./src/ui/c-select/c-select.vue')['default']
|
|
||||||
'CSelect.demo': typeof import('./src/ui/c-select/c-select.demo.vue')['default']
|
|
||||||
CTable: typeof import('./src/ui/c-table/c-table.vue')['default']
|
|
||||||
'CTable.demo': typeof import('./src/ui/c-table/c-table.demo.vue')['default']
|
|
||||||
CTextCopyable: typeof import('./src/ui/c-text-copyable/c-text-copyable.vue')['default']
|
|
||||||
'CTextCopyable.demo': typeof import('./src/ui/c-text-copyable/c-text-copyable.demo.vue')['default']
|
|
||||||
CTooltip: typeof import('./src/ui/c-tooltip/c-tooltip.vue')['default']
|
|
||||||
'CTooltip.demo': typeof import('./src/ui/c-tooltip/c-tooltip.demo.vue')['default']
|
|
||||||
DateTimeConverter: typeof import('./src/tools/date-time-converter/date-time-converter.vue')['default']
|
|
||||||
'DemoHome.page': typeof import('./src/ui/demo/demo-home.page.vue')['default']
|
|
||||||
DemoWrapper: typeof import('./src/ui/demo/demo-wrapper.vue')['default']
|
|
||||||
DeviceInformation: typeof import('./src/tools/device-information/device-information.vue')['default']
|
|
||||||
DiffViewer: typeof import('./src/tools/json-diff/diff-viewer/diff-viewer.vue')['default']
|
|
||||||
DockerRunToDockerComposeConverter: typeof import('./src/tools/docker-run-to-docker-compose-converter/docker-run-to-docker-compose-converter.vue')['default']
|
|
||||||
DynamicValues: typeof import('./src/tools/benchmark-builder/dynamic-values.vue')['default']
|
|
||||||
Editor: typeof import('./src/tools/html-wysiwyg-editor/editor/editor.vue')['default']
|
|
||||||
EmailNormalizer: typeof import('./src/tools/email-normalizer/email-normalizer.vue')['default']
|
|
||||||
EmojiCard: typeof import('./src/tools/emoji-picker/emoji-card.vue')['default']
|
|
||||||
EmojiGrid: typeof import('./src/tools/emoji-picker/emoji-grid.vue')['default']
|
|
||||||
EmojiPicker: typeof import('./src/tools/emoji-picker/emoji-picker.vue')['default']
|
|
||||||
Encryption: typeof import('./src/tools/encryption/encryption.vue')['default']
|
|
||||||
EtaCalculator: typeof import('./src/tools/eta-calculator/eta-calculator.vue')['default']
|
|
||||||
FavoriteButton: typeof import('./src/components/FavoriteButton.vue')['default']
|
|
||||||
FormatTransformer: typeof import('./src/components/FormatTransformer.vue')['default']
|
|
||||||
GitMemo: typeof import('./src/tools/git-memo/git-memo.vue')['default']
|
|
||||||
'GitMemo.content': typeof import('./src/tools/git-memo/git-memo.content.md')['default']
|
|
||||||
HashText: typeof import('./src/tools/hash-text/hash-text.vue')['default']
|
|
||||||
HmacGenerator: typeof import('./src/tools/hmac-generator/hmac-generator.vue')['default']
|
|
||||||
'Home.page': typeof import('./src/pages/Home.page.vue')['default']
|
|
||||||
HtmlEntities: typeof import('./src/tools/html-entities/html-entities.vue')['default']
|
|
||||||
HtmlWysiwygEditor: typeof import('./src/tools/html-wysiwyg-editor/html-wysiwyg-editor.vue')['default']
|
|
||||||
HttpStatusCodes: typeof import('./src/tools/http-status-codes/http-status-codes.vue')['default']
|
|
||||||
IbanValidatorAndParser: typeof import('./src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')['default']
|
|
||||||
'IconMdi:brushVariant': typeof import('~icons/mdi/brush-variant')['default']
|
|
||||||
'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default']
|
|
||||||
IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default']
|
|
||||||
IconMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default']
|
|
||||||
IconMdiClose: typeof import('~icons/mdi/close')['default']
|
|
||||||
IconMdiContentCopy: typeof import('~icons/mdi/content-copy')['default']
|
|
||||||
IconMdiEye: typeof import('~icons/mdi/eye')['default']
|
|
||||||
IconMdiEyeOff: typeof import('~icons/mdi/eye-off')['default']
|
|
||||||
IconMdiHeart: typeof import('~icons/mdi/heart')['default']
|
|
||||||
IconMdiSearch: typeof import('~icons/mdi/search')['default']
|
|
||||||
IconMdiTranslate: typeof import('~icons/mdi/translate')['default']
|
|
||||||
IconMdiTriangleDown: typeof import('~icons/mdi/triangle-down')['default']
|
|
||||||
InputCopyable: typeof import('./src/components/InputCopyable.vue')['default']
|
|
||||||
IntegerBaseConverter: typeof import('./src/tools/integer-base-converter/integer-base-converter.vue')['default']
|
|
||||||
Ipv4AddressConverter: typeof import('./src/tools/ipv4-address-converter/ipv4-address-converter.vue')['default']
|
|
||||||
Ipv4RangeExpander: typeof import('./src/tools/ipv4-range-expander/ipv4-range-expander.vue')['default']
|
|
||||||
Ipv4SubnetCalculator: typeof import('./src/tools/ipv4-subnet-calculator/ipv4-subnet-calculator.vue')['default']
|
|
||||||
Ipv6UlaGenerator: typeof import('./src/tools/ipv6-ula-generator/ipv6-ula-generator.vue')['default']
|
|
||||||
JsonDiff: typeof import('./src/tools/json-diff/json-diff.vue')['default']
|
|
||||||
JsonMinify: typeof import('./src/tools/json-minify/json-minify.vue')['default']
|
|
||||||
JsonToCsv: typeof import('./src/tools/json-to-csv/json-to-csv.vue')['default']
|
|
||||||
JsonToToml: typeof import('./src/tools/json-to-toml/json-to-toml.vue')['default']
|
|
||||||
JsonToXml: typeof import('./src/tools/json-to-xml/json-to-xml.vue')['default']
|
|
||||||
JsonToYaml: typeof import('./src/tools/json-to-yaml-converter/json-to-yaml.vue')['default']
|
|
||||||
JsonViewer: typeof import('./src/tools/json-viewer/json-viewer.vue')['default']
|
|
||||||
JwtParser: typeof import('./src/tools/jwt-parser/jwt-parser.vue')['default']
|
|
||||||
KeycodeInfo: typeof import('./src/tools/keycode-info/keycode-info.vue')['default']
|
|
||||||
ListConverter: typeof import('./src/tools/list-converter/list-converter.vue')['default']
|
|
||||||
LocaleSelector: typeof import('./src/modules/i18n/components/locale-selector.vue')['default']
|
|
||||||
LoremIpsumGenerator: typeof import('./src/tools/lorem-ipsum-generator/lorem-ipsum-generator.vue')['default']
|
|
||||||
MacAddressGenerator: typeof import('./src/tools/mac-address-generator/mac-address-generator.vue')['default']
|
|
||||||
MacAddressLookup: typeof import('./src/tools/mac-address-lookup/mac-address-lookup.vue')['default']
|
|
||||||
MarkdownToHtml: typeof import('./src/tools/markdown-to-html/markdown-to-html.vue')['default']
|
|
||||||
MathEvaluator: typeof import('./src/tools/math-evaluator/math-evaluator.vue')['default']
|
|
||||||
MenuBar: typeof import('./src/tools/html-wysiwyg-editor/editor/menu-bar.vue')['default']
|
|
||||||
MenuBarItem: typeof import('./src/tools/html-wysiwyg-editor/editor/menu-bar-item.vue')['default']
|
|
||||||
MenuIconItem: typeof import('./src/components/MenuIconItem.vue')['default']
|
|
||||||
MenuLayout: typeof import('./src/components/MenuLayout.vue')['default']
|
|
||||||
MetaTagGenerator: typeof import('./src/tools/meta-tag-generator/meta-tag-generator.vue')['default']
|
|
||||||
MimeTypes: typeof import('./src/tools/mime-types/mime-types.vue')['default']
|
|
||||||
NavbarButtons: typeof import('./src/components/NavbarButtons.vue')['default']
|
|
||||||
NCheckbox: typeof import('naive-ui')['NCheckbox']
|
|
||||||
NCode: typeof import('naive-ui')['NCode']
|
|
||||||
NCollapseTransition: typeof import('naive-ui')['NCollapseTransition']
|
|
||||||
NColorPicker: typeof import('naive-ui')['NColorPicker']
|
|
||||||
NConfigProvider: typeof import('naive-ui')['NConfigProvider']
|
|
||||||
NDivider: typeof import('naive-ui')['NDivider']
|
|
||||||
NEllipsis: typeof import('naive-ui')['NEllipsis']
|
|
||||||
NForm: typeof import('naive-ui')['NForm']
|
|
||||||
NFormItem: typeof import('naive-ui')['NFormItem']
|
|
||||||
NGi: typeof import('naive-ui')['NGi']
|
|
||||||
NGrid: typeof import('naive-ui')['NGrid']
|
|
||||||
NH1: typeof import('naive-ui')['NH1']
|
|
||||||
NH3: typeof import('naive-ui')['NH3']
|
|
||||||
NIcon: typeof import('naive-ui')['NIcon']
|
|
||||||
NImage: typeof import('naive-ui')['NImage']
|
|
||||||
NInputGroup: typeof import('naive-ui')['NInputGroup']
|
|
||||||
NInputGroupLabel: typeof import('naive-ui')['NInputGroupLabel']
|
|
||||||
NInputNumber: typeof import('naive-ui')['NInputNumber']
|
|
||||||
NLayout: typeof import('naive-ui')['NLayout']
|
|
||||||
NLayoutSider: typeof import('naive-ui')['NLayoutSider']
|
|
||||||
NMenu: typeof import('naive-ui')['NMenu']
|
|
||||||
NScrollbar: typeof import('naive-ui')['NScrollbar']
|
|
||||||
NSlider: typeof import('naive-ui')['NSlider']
|
|
||||||
NSpace: typeof import('naive-ui')['NSpace']
|
|
||||||
NSpin: typeof import('naive-ui')['NSpin']
|
|
||||||
NSwitch: typeof import('naive-ui')['NSwitch']
|
|
||||||
NTable: typeof import('naive-ui')['NTable']
|
|
||||||
NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default']
|
|
||||||
OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default']
|
|
||||||
PasswordStrengthAnalyser: typeof import('./src/tools/password-strength-analyser/password-strength-analyser.vue')['default']
|
|
||||||
PdfSignatureChecker: typeof import('./src/tools/pdf-signature-checker/pdf-signature-checker.vue')['default']
|
|
||||||
PdfSignatureDetails: typeof import('./src/tools/pdf-signature-checker/components/pdf-signature-details.vue')['default']
|
|
||||||
PercentageCalculator: typeof import('./src/tools/percentage-calculator/percentage-calculator.vue')['default']
|
|
||||||
PhoneParserAndFormatter: typeof import('./src/tools/phone-parser-and-formatter/phone-parser-and-formatter.vue')['default']
|
|
||||||
QrCodeGenerator: typeof import('./src/tools/qr-code-generator/qr-code-generator.vue')['default']
|
|
||||||
RandomPortGenerator: typeof import('./src/tools/random-port-generator/random-port-generator.vue')['default']
|
|
||||||
RegexMemo: typeof import('./src/tools/regex-memo/regex-memo.vue')['default']
|
|
||||||
'RegexMemo.content': typeof import('./src/tools/regex-memo/regex-memo.content.md')['default']
|
|
||||||
RegexTester: typeof import('./src/tools/regex-tester/regex-tester.vue')['default']
|
|
||||||
ResultRow: typeof import('./src/tools/ipv4-range-expander/result-row.vue')['default']
|
|
||||||
RomanNumeralConverter: typeof import('./src/tools/roman-numeral-converter/roman-numeral-converter.vue')['default']
|
|
||||||
RouterLink: typeof import('vue-router')['RouterLink']
|
|
||||||
RouterView: typeof import('vue-router')['RouterView']
|
|
||||||
RsaKeyPairGenerator: typeof import('./src/tools/rsa-key-pair-generator/rsa-key-pair-generator.vue')['default']
|
|
||||||
SafelinkDecoder: typeof import('./src/tools/safelink-decoder/safelink-decoder.vue')['default']
|
|
||||||
SlugifyString: typeof import('./src/tools/slugify-string/slugify-string.vue')['default']
|
|
||||||
SpanCopyable: typeof import('./src/components/SpanCopyable.vue')['default']
|
|
||||||
SqlPrettify: typeof import('./src/tools/sql-prettify/sql-prettify.vue')['default']
|
|
||||||
StringObfuscator: typeof import('./src/tools/string-obfuscator/string-obfuscator.vue')['default']
|
|
||||||
SvgPlaceholderGenerator: typeof import('./src/tools/svg-placeholder-generator/svg-placeholder-generator.vue')['default']
|
|
||||||
TemperatureConverter: typeof import('./src/tools/temperature-converter/temperature-converter.vue')['default']
|
|
||||||
TextareaCopyable: typeof import('./src/components/TextareaCopyable.vue')['default']
|
|
||||||
TextDiff: typeof import('./src/tools/text-diff/text-diff.vue')['default']
|
|
||||||
TextStatistics: typeof import('./src/tools/text-statistics/text-statistics.vue')['default']
|
|
||||||
TextToBinary: typeof import('./src/tools/text-to-binary/text-to-binary.vue')['default']
|
|
||||||
TextToNatoAlphabet: typeof import('./src/tools/text-to-nato-alphabet/text-to-nato-alphabet.vue')['default']
|
|
||||||
TextToUnicode: typeof import('./src/tools/text-to-unicode/text-to-unicode.vue')['default']
|
|
||||||
TokenDisplay: typeof import('./src/tools/otp-code-generator-and-validator/token-display.vue')['default']
|
|
||||||
'TokenGenerator.tool': typeof import('./src/tools/token-generator/token-generator.tool.vue')['default']
|
|
||||||
TomlToJson: typeof import('./src/tools/toml-to-json/toml-to-json.vue')['default']
|
|
||||||
TomlToYaml: typeof import('./src/tools/toml-to-yaml/toml-to-yaml.vue')['default']
|
|
||||||
'Tool.layout': typeof import('./src/layouts/tool.layout.vue')['default']
|
|
||||||
ToolCard: typeof import('./src/components/ToolCard.vue')['default']
|
|
||||||
UlidGenerator: typeof import('./src/tools/ulid-generator/ulid-generator.vue')['default']
|
|
||||||
UrlEncoder: typeof import('./src/tools/url-encoder/url-encoder.vue')['default']
|
|
||||||
UrlParser: typeof import('./src/tools/url-parser/url-parser.vue')['default']
|
|
||||||
UserAgentParser: typeof import('./src/tools/user-agent-parser/user-agent-parser.vue')['default']
|
|
||||||
UserAgentResultCards: typeof import('./src/tools/user-agent-parser/user-agent-result-cards.vue')['default']
|
|
||||||
UuidGenerator: typeof import('./src/tools/uuid-generator/uuid-generator.vue')['default']
|
|
||||||
WifiQrCodeGenerator: typeof import('./src/tools/wifi-qr-code-generator/wifi-qr-code-generator.vue')['default']
|
|
||||||
XmlFormatter: typeof import('./src/tools/xml-formatter/xml-formatter.vue')['default']
|
|
||||||
XmlToJson: typeof import('./src/tools/xml-to-json/xml-to-json.vue')['default']
|
|
||||||
YamlToJson: typeof import('./src/tools/yaml-to-json-converter/yaml-to-json.vue')['default']
|
|
||||||
YamlToToml: typeof import('./src/tools/yaml-to-toml/yaml-to-toml.vue')['default']
|
|
||||||
YamlViewer: typeof import('./src/tools/yaml-viewer/yaml-viewer.vue')['default']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
57
components/ColorInput.vue
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<template>
|
||||||
|
<v-text-field
|
||||||
|
v-model="color"
|
||||||
|
hide-details
|
||||||
|
class="ma-0 pa-0"
|
||||||
|
outlined
|
||||||
|
:label="label"
|
||||||
|
@input="$emit('input', color)"
|
||||||
|
>
|
||||||
|
<template #append>
|
||||||
|
<v-menu v-model="menu" top nudge-bottom="101" nudge-left="16" :close-on-content-click="false">
|
||||||
|
<template #activator="{ on }">
|
||||||
|
<div :style="swatchStyle" v-on="on" />
|
||||||
|
</template>
|
||||||
|
<v-card>
|
||||||
|
<v-card-text class="pa-0">
|
||||||
|
<v-color-picker v-model="color" flat @input="$emit('input', color)" />
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
|
</v-menu>
|
||||||
|
</template>
|
||||||
|
</v-text-field>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import {Component, Prop, Vue} from 'nuxt-property-decorator'
|
||||||
|
// Adapted from: https://codepen.io/JamieCurnow/pen/KKPjraK
|
||||||
|
|
||||||
|
@Component
|
||||||
|
export default class ColorInput extends Vue {
|
||||||
|
@Prop({default: '#ffffff'}) readonly value!: string;
|
||||||
|
@Prop() readonly label: string | undefined;
|
||||||
|
menu = false
|
||||||
|
color = ''
|
||||||
|
|
||||||
|
created() {
|
||||||
|
this.color = this.value
|
||||||
|
}
|
||||||
|
|
||||||
|
get swatchStyle() {
|
||||||
|
return {
|
||||||
|
backgroundColor: this.color,
|
||||||
|
cursor: 'pointer',
|
||||||
|
height: '30px',
|
||||||
|
width: '30px',
|
||||||
|
borderRadius: this.menu ? '50%' : '4px',
|
||||||
|
transition: 'border-radius 200ms ease-in-out'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
::v-deep .v-input__append-inner {
|
||||||
|
margin-top: 13px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
291
components/FileUploader.vue
Normal file
@ -0,0 +1,291 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="drop-area pa-4 text-center"
|
||||||
|
:class="{'drag-over':dragging, 'pb-0':!loading}"
|
||||||
|
@dragover.prevent
|
||||||
|
@drop.prevent="imageDropped"
|
||||||
|
@dragenter="dragEnter()"
|
||||||
|
@dragend="dragEnd()"
|
||||||
|
@dragleave="dragLeave()"
|
||||||
|
@dragexit="dragExit()"
|
||||||
|
>
|
||||||
|
<div v-if="loading">
|
||||||
|
<v-progress-circular
|
||||||
|
indeterminate
|
||||||
|
color="primary"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<p>Drag & drop a file here</p>
|
||||||
|
<p class="or">
|
||||||
|
or
|
||||||
|
</p>
|
||||||
|
<v-btn depressed @click="manualUploadClicked">
|
||||||
|
select a file
|
||||||
|
</v-btn>
|
||||||
|
<input ref="uploadInput" type="file" hidden @change="(e) => handleFiles(e.target.files[0])">
|
||||||
|
|
||||||
|
<div v-if="allowUrl">
|
||||||
|
<p class="or">
|
||||||
|
or
|
||||||
|
</p>
|
||||||
|
<v-text-field
|
||||||
|
ref="urlInput"
|
||||||
|
v-model="url"
|
||||||
|
append-icon="fa-arrow-right"
|
||||||
|
dense
|
||||||
|
label="Paste the file url"
|
||||||
|
outlined
|
||||||
|
:error-messages="urlErrors"
|
||||||
|
@click:append="urlFilled(url)"
|
||||||
|
@keypress.enter="urlFilled(url)"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import * as axios from 'axios'
|
||||||
|
export default {
|
||||||
|
name: 'FileUploader',
|
||||||
|
props: {
|
||||||
|
allowUrl: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
dragging: false,
|
||||||
|
urlErrors: undefined,
|
||||||
|
dragEnterCounter: 0,
|
||||||
|
url: '',
|
||||||
|
loading: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
imageDropped(e) {
|
||||||
|
this.dragging = false
|
||||||
|
if (e.dataTransfer.items.length > 0) {
|
||||||
|
const item = e.dataTransfer.items[0]
|
||||||
|
switch (item.kind) {
|
||||||
|
case 'string':
|
||||||
|
item.getAsString(url => this.urlFilled(url))
|
||||||
|
break
|
||||||
|
case 'file':
|
||||||
|
this.handleFiles(item.getAsFile())
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dragEnter() {
|
||||||
|
this.dragEnterCounter++
|
||||||
|
this.dragging = true
|
||||||
|
},
|
||||||
|
dragLeave() {
|
||||||
|
if (--this.dragEnterCounter <= 0) {
|
||||||
|
this.dragging = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async urlFilled(url) {
|
||||||
|
if (url && url.length > 0) {
|
||||||
|
this.loading = true
|
||||||
|
try {
|
||||||
|
const {data, headers} = await axios.get(url)
|
||||||
|
const name = url.split('/').pop()
|
||||||
|
const file = new File([data], name, {type: headers['content-type']})
|
||||||
|
this.handleFiles(file)
|
||||||
|
} catch (ignored) {
|
||||||
|
this.urlErrors = 'Incorrect url'
|
||||||
|
}
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dragEnd() {
|
||||||
|
this.dragging = false
|
||||||
|
},
|
||||||
|
dragExit() {
|
||||||
|
this.dragging = false
|
||||||
|
},
|
||||||
|
handleFiles(file) {
|
||||||
|
if (!file) { return }
|
||||||
|
this.$emit('input', file)
|
||||||
|
},
|
||||||
|
manualUploadClicked() {
|
||||||
|
this.$refs.uploadInput.click()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
.drop-area {
|
||||||
|
border: 2px dashed #363636;
|
||||||
|
border-radius: 10px;
|
||||||
|
& > *, .v-btn {
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
.or {
|
||||||
|
opacity: 0.7;
|
||||||
|
margin: 5px 0 !important;
|
||||||
|
}
|
||||||
|
&.drag-over {
|
||||||
|
border-color: var(--v-primary-base);
|
||||||
|
}
|
||||||
|
.v-input__icon {
|
||||||
|
button {
|
||||||
|
margin-top: 0 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!--<template>-->
|
||||||
|
<!-- <div-->
|
||||||
|
<!-- class="drop-area pa-4 text-center"-->
|
||||||
|
<!-- :class="{'drag-over':dragging, 'pb-0':!loading}"-->
|
||||||
|
<!-- @dragover.prevent-->
|
||||||
|
<!-- @drop.prevent="imageDropped"-->
|
||||||
|
<!-- @dragenter="dragEnter()"-->
|
||||||
|
<!-- @dragend="dragEnd()"-->
|
||||||
|
<!-- @dragleave="dragLeave()"-->
|
||||||
|
<!-- @dragexit="dragExit()"-->
|
||||||
|
<!-- >-->
|
||||||
|
<!-- <div v-if="loading">-->
|
||||||
|
<!-- <v-progress-circular-->
|
||||||
|
<!-- indeterminate-->
|
||||||
|
<!-- color="primary"-->
|
||||||
|
<!-- />-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- <div v-else>-->
|
||||||
|
<!-- <p>Drag & drop a file here</p>-->
|
||||||
|
<!-- <p class="or">-->
|
||||||
|
<!-- or-->
|
||||||
|
<!-- </p>-->
|
||||||
|
<!-- <v-btn depressed @click="manualUploadClicked">-->
|
||||||
|
<!-- select a file-->
|
||||||
|
<!-- </v-btn>-->
|
||||||
|
<!-- <input ref="uploadInput" type="file" hidden @change="(e) => handleFiles(e.target.files[0])">-->
|
||||||
|
|
||||||
|
<!-- <div v-if="allowUrl">-->
|
||||||
|
<!-- <p class="or">-->
|
||||||
|
<!-- or-->
|
||||||
|
<!-- </p>-->
|
||||||
|
<!-- <v-text-field-->
|
||||||
|
<!-- ref="urlInput"-->
|
||||||
|
<!-- v-model="url"-->
|
||||||
|
<!-- append-icon="fa-arrow-right"-->
|
||||||
|
<!-- dense-->
|
||||||
|
<!-- label="Paste the file url"-->
|
||||||
|
<!-- outlined-->
|
||||||
|
<!-- :error-messages="urlErrors"-->
|
||||||
|
<!-- @click:append="urlFilled(url)"-->
|
||||||
|
<!-- @keypress.enter="urlFilled(url)"-->
|
||||||
|
<!-- />-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!--</template>-->
|
||||||
|
|
||||||
|
<!--<script lang="ts">-->
|
||||||
|
<!--import {Component, Prop, Vue} from 'nuxt-property-decorator'-->
|
||||||
|
|
||||||
|
<!--@Component-->
|
||||||
|
<!--export default class FileUploader extends Vue {-->
|
||||||
|
<!-- @Prop({default: true}) readonly allowUrl!: boolean-->
|
||||||
|
<!-- dragging = false-->
|
||||||
|
<!-- urlErrors: string|null = null-->
|
||||||
|
<!-- dragEnterCounter = 0-->
|
||||||
|
<!-- url = ''-->
|
||||||
|
<!-- loading = false-->
|
||||||
|
|
||||||
|
<!-- imageDropped(e: DragEvent) {-->
|
||||||
|
<!-- this.dragging = false-->
|
||||||
|
<!-- if (e.dataTransfer.items.length > 0) {-->
|
||||||
|
<!-- const item = e.dataTransfer.items[0]-->
|
||||||
|
<!-- switch (item.kind) {-->
|
||||||
|
<!-- case 'string':-->
|
||||||
|
<!-- item.getAsString((url: string) => this.urlFilled(url))-->
|
||||||
|
<!-- break-->
|
||||||
|
<!-- case 'file':-->
|
||||||
|
<!-- this.handleFiles(item.getAsFile())-->
|
||||||
|
<!-- break-->
|
||||||
|
<!-- }-->
|
||||||
|
<!-- }-->
|
||||||
|
<!-- }-->
|
||||||
|
|
||||||
|
<!-- dragEnter() {-->
|
||||||
|
<!-- this.dragEnterCounter++-->
|
||||||
|
<!-- this.dragging = true-->
|
||||||
|
<!-- }-->
|
||||||
|
|
||||||
|
<!-- dragLeave() {-->
|
||||||
|
<!-- if (--this.dragEnterCounter <= 0) {-->
|
||||||
|
<!-- this.dragging = false-->
|
||||||
|
<!-- }-->
|
||||||
|
<!-- }-->
|
||||||
|
|
||||||
|
<!-- async urlFilled(url: string) {-->
|
||||||
|
<!-- if (url && url.length > 0) {-->
|
||||||
|
<!-- this.loading = true-->
|
||||||
|
<!-- try {-->
|
||||||
|
<!-- const {data, headers} = await this.$axios.$get(url)-->
|
||||||
|
<!-- const name = url.split('/').pop()-->
|
||||||
|
<!-- const file = new File([data], name, {type: headers['content-type']})-->
|
||||||
|
<!-- this.handleFiles(file)-->
|
||||||
|
<!-- } catch (ignored) {-->
|
||||||
|
<!-- this.urlErrors = 'Incorrect url'-->
|
||||||
|
<!-- }-->
|
||||||
|
<!-- this.loading = false-->
|
||||||
|
<!-- }-->
|
||||||
|
<!-- }-->
|
||||||
|
|
||||||
|
<!-- dragEnd() {-->
|
||||||
|
<!-- this.dragging = false-->
|
||||||
|
<!-- }-->
|
||||||
|
|
||||||
|
<!-- dragExit() {-->
|
||||||
|
<!-- this.dragging = false-->
|
||||||
|
<!-- }-->
|
||||||
|
|
||||||
|
<!-- handleFiles(file: File) {-->
|
||||||
|
<!-- if (!file) {-->
|
||||||
|
<!-- return-->
|
||||||
|
<!-- }-->
|
||||||
|
<!-- this.$emit('input', file)-->
|
||||||
|
<!-- }-->
|
||||||
|
|
||||||
|
<!-- manualUploadClicked() {-->
|
||||||
|
<!-- this.$refs.uploadInput.click()-->
|
||||||
|
<!-- }-->
|
||||||
|
<!--}-->
|
||||||
|
|
||||||
|
<!--</script>-->
|
||||||
|
|
||||||
|
<!--<style lang="less">-->
|
||||||
|
<!--.drop-area {-->
|
||||||
|
<!-- border: 2px dashed rgba(255, 255, 255, 0.3);-->
|
||||||
|
<!-- border-radius: 10px;-->
|
||||||
|
<!-- background-color: rgba(255, 255, 255, 0.03);-->
|
||||||
|
|
||||||
|
<!-- & > *, .v-btn {-->
|
||||||
|
<!-- margin: 0 !important;-->
|
||||||
|
<!-- }-->
|
||||||
|
|
||||||
|
<!-- .or {-->
|
||||||
|
<!-- opacity: 0.7;-->
|
||||||
|
<!-- margin: 5px 0 !important;-->
|
||||||
|
<!-- }-->
|
||||||
|
|
||||||
|
<!-- &.drag-over {-->
|
||||||
|
<!-- border-color: var(--v-primary-base);-->
|
||||||
|
<!-- }-->
|
||||||
|
|
||||||
|
<!-- .v-input__icon {-->
|
||||||
|
<!-- button {-->
|
||||||
|
<!-- margin-top: 0 !important;-->
|
||||||
|
<!-- }-->
|
||||||
|
<!-- }-->
|
||||||
|
<!--}-->
|
||||||
|
<!--</style>-->
|
||||||
51
components/GithubContributors.vue
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<template>
|
||||||
|
<div class="github-contributor">
|
||||||
|
<v-list class="pa-0">
|
||||||
|
<v-list-item v-for="(contributor, i) in contributors" :key="i" :href="contributor.html_url" target="_blank" rel="noopener noreferrer">
|
||||||
|
<v-list-item-avatar>
|
||||||
|
<v-img :src="contributor.avatar_url" />
|
||||||
|
</v-list-item-avatar>
|
||||||
|
<v-list-item-content>
|
||||||
|
{{ contributor.login }}
|
||||||
|
</v-list-item-content>
|
||||||
|
</v-list-item>
|
||||||
|
</v-list>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import {Component, Vue} from 'nuxt-property-decorator'
|
||||||
|
|
||||||
|
import axios from 'axios'
|
||||||
|
const url = 'https://api.github.com/repos/CorentinTh/it-tools/contributors'
|
||||||
|
|
||||||
|
interface IGithubContributors {
|
||||||
|
contributions: number;
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
avatar_url: string;
|
||||||
|
login: string;
|
||||||
|
type: 'User' | 'Bot'
|
||||||
|
}
|
||||||
|
|
||||||
|
@Component
|
||||||
|
export default class GithubContributors extends Vue {
|
||||||
|
contributors: IGithubContributors[] = []
|
||||||
|
fetchOnServer = true
|
||||||
|
|
||||||
|
fetch() {
|
||||||
|
axios
|
||||||
|
.get(url)
|
||||||
|
.then(({data}: {data: IGithubContributors[]}) => {
|
||||||
|
this.contributors = data.filter(u => u.type === 'User').sort((a, b) => b.contributions - a.contributions)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.github-contributor{
|
||||||
|
.v-list {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
138
components/Memo.vue
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
<template>
|
||||||
|
<div class="memo">
|
||||||
|
<v-row justify="center">
|
||||||
|
<v-col lg="6" md="9" sm="9" cols="12" class="mb-16">
|
||||||
|
<ToolHeader :config="$toolConfig" />
|
||||||
|
|
||||||
|
<v-card>
|
||||||
|
<v-card-text class="pa-10">
|
||||||
|
<div class="memo-content" v-html="content" />
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
|
</v-col>
|
||||||
|
|
||||||
|
<v-col lg="2" md="3" sm="3" cols="12">
|
||||||
|
<div class="toc">
|
||||||
|
<div class="toc-title">
|
||||||
|
On this page
|
||||||
|
</div>
|
||||||
|
<div class="toc-content" v-html="toc" />
|
||||||
|
</div>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import {Component} from 'nuxt-property-decorator'
|
||||||
|
import Tool from './Tool.vue'
|
||||||
|
import {CopyableMixin} from '~/mixins/copyable.mixin'
|
||||||
|
import ToolHeader from '~/components/ToolHeader.vue'
|
||||||
|
import {toc} from '~/utils/md-toc'
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
mixins: [CopyableMixin],
|
||||||
|
components: {ToolHeader}
|
||||||
|
})
|
||||||
|
export default class Memo extends Tool {
|
||||||
|
fetchOnServer = true
|
||||||
|
content: string = ''
|
||||||
|
toc: string = ''
|
||||||
|
|
||||||
|
fetch() {
|
||||||
|
// @ts-ignore
|
||||||
|
const content: string = this.$options.__memo.trim()
|
||||||
|
|
||||||
|
this.toc = this.$md.render(toc(content).join('\n'))
|
||||||
|
this.content = this.$md.render(content)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.memo {
|
||||||
|
|
||||||
|
::v-deep {
|
||||||
|
.memo-content {
|
||||||
|
text-align: justify;
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 25px;
|
||||||
|
margin: 0 0 20px 0;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
border-bottom: 1px solid rgba(255, 255, 255, 0.26);
|
||||||
|
color: #ffffff;
|
||||||
|
|
||||||
|
&:not(:first-child){
|
||||||
|
margin-top: 50px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-weight: 400;
|
||||||
|
margin-top: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
width: 100%;
|
||||||
|
overflow-x: auto;
|
||||||
|
|
||||||
|
code {
|
||||||
|
display: block;
|
||||||
|
padding: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc {
|
||||||
|
margin-top: 140px;
|
||||||
|
|
||||||
|
.toc-title {
|
||||||
|
font-weight: 600;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep {
|
||||||
|
.toc-content {
|
||||||
|
a {
|
||||||
|
color: #ffffff;
|
||||||
|
text-decoration: none;
|
||||||
|
opacity: 0.7;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
font-weight: 400;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
opacity: 1;
|
||||||
|
color: var(--v-primary-base);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
list-style-type: none;
|
||||||
|
padding-left: 10px;
|
||||||
|
|
||||||
|
li {
|
||||||
|
padding: 5px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&>ul {
|
||||||
|
padding-left: 0;
|
||||||
|
|
||||||
|
&>li {
|
||||||
|
border-top: 1px dashed rgba(238, 238, 238, 0.38);
|
||||||
|
padding: 5px 0 5px 10px;
|
||||||
|
|
||||||
|
&>a {
|
||||||
|
font-weight: 600 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
7
components/README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# COMPONENTS
|
||||||
|
|
||||||
|
**This directory is not required, you can delete it if you don't want to use it.**
|
||||||
|
|
||||||
|
The components directory contains your Vue.js Components.
|
||||||
|
|
||||||
|
_Nuxt.js doesn't supercharge these components._
|
||||||
62
components/SearchBar.vue
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
<template>
|
||||||
|
<v-autocomplete
|
||||||
|
label="Search..."
|
||||||
|
single-line
|
||||||
|
append-icon="mdi-magnify"
|
||||||
|
color="white"
|
||||||
|
hide-details
|
||||||
|
:items="$toolListFlat"
|
||||||
|
:item-text="item => item.title"
|
||||||
|
item-value="path"
|
||||||
|
solo-inverted
|
||||||
|
dense
|
||||||
|
:filter="filterItems"
|
||||||
|
clearable
|
||||||
|
cache-items
|
||||||
|
@change="choose"
|
||||||
|
>
|
||||||
|
<template #no-data>
|
||||||
|
<v-list-item>
|
||||||
|
<v-list-item-title>
|
||||||
|
Search for the <strong>tool</strong> you need!
|
||||||
|
</v-list-item-title>
|
||||||
|
</v-list-item>
|
||||||
|
</template>
|
||||||
|
</v-autocomplete>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import {Component, Vue} from 'nuxt-property-decorator'
|
||||||
|
import {ToolRouteConfig} from '~/types/ToolConfig'
|
||||||
|
|
||||||
|
@Component
|
||||||
|
export default class SearchBar extends Vue {
|
||||||
|
choose(path:string) {
|
||||||
|
this.$router.push({path})
|
||||||
|
}
|
||||||
|
|
||||||
|
filterItems(item:ToolRouteConfig, queryText:string, itemText:string) {
|
||||||
|
const query = queryText.trim().toLowerCase()
|
||||||
|
const nameContainsText = itemText.toLowerCase().includes(query)
|
||||||
|
const keywordContainsText = item?.keywords.join(' ').toLowerCase().includes(query) ?? false
|
||||||
|
return nameContainsText || keywordContainsText
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
::v-deep {
|
||||||
|
.v-input__slot{
|
||||||
|
background: var(--v-primary-base) !important;
|
||||||
|
background: linear-gradient(90deg, rgba(37,99,108,1) 0%, rgba(59,149,111,1) 60%, rgba(71,177,113,1) 100%) !important;
|
||||||
|
input {
|
||||||
|
color: #ffffff !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-list{
|
||||||
|
background: var(--v-foreground-base) !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
33
components/Tool.vue
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import {Component, mixins} from 'nuxt-property-decorator'
|
||||||
|
import ToolWrapper from '~/components/ToolWrapper.vue'
|
||||||
|
import {ToolConfigMixin} from '~/mixins/tool-config.mixin'
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
components: {ToolWrapper}
|
||||||
|
})
|
||||||
|
export default class Tool extends mixins(ToolConfigMixin) {
|
||||||
|
public head() {
|
||||||
|
const {title, description, keywords} = this.$toolConfig
|
||||||
|
|
||||||
|
const uniqueKeywordsCleaned = [...new Set([...keywords, ...title.split(/\s+/)].map(s => s.trim().toLowerCase()))]
|
||||||
|
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
meta: [
|
||||||
|
{
|
||||||
|
name: 'description',
|
||||||
|
content: description,
|
||||||
|
hid: 'description'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'keywords',
|
||||||
|
content: uniqueKeywordsCleaned,
|
||||||
|
hid: 'keywords'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
44
components/ToolHeader.vue
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<template>
|
||||||
|
<div class="tool-wrapper-info">
|
||||||
|
<h1>{{ config.title }}</h1>
|
||||||
|
<div class="spacer" />
|
||||||
|
<div class="description">
|
||||||
|
{{ config.description }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import {Component, Prop, Vue} from 'nuxt-property-decorator'
|
||||||
|
import type {ToolConfig} from '@/types/ToolConfig'
|
||||||
|
|
||||||
|
@Component
|
||||||
|
export default class ToolWrapper extends Vue {
|
||||||
|
@Prop() readonly config!: ToolConfig;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.tool-wrapper-info {
|
||||||
|
padding: 50px 0 30px;
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 50px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.spacer {
|
||||||
|
width: 200px;
|
||||||
|
height: 2px;
|
||||||
|
background: var(--v-primary-base);
|
||||||
|
background: linear-gradient(90deg, rgba(71, 177, 113, 1) 0%, rgba(59, 149, 111, 1) 60%, rgba(37, 99, 108, 1) 200%);
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.description {
|
||||||
|
color: #829097;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
42
components/ToolWrapper.vue
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<template>
|
||||||
|
<div class="tool-wrapper">
|
||||||
|
<v-row no-gutters justify="center" align="center">
|
||||||
|
<v-col cols="12" xl="6" lg="8" md="10">
|
||||||
|
<ToolHeader :config="config" />
|
||||||
|
|
||||||
|
<template v-if="!noCard">
|
||||||
|
<v-card flat>
|
||||||
|
<v-card-text class="pa-10">
|
||||||
|
<slot />
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<slot />
|
||||||
|
</template>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import {Component, Prop, Vue} from 'nuxt-property-decorator'
|
||||||
|
import ToolHeader from './ToolHeader.vue'
|
||||||
|
import type {ToolConfig} from '~/types/ToolConfig'
|
||||||
|
@Component({components: {ToolHeader}})
|
||||||
|
export default class ToolWrapper extends Vue {
|
||||||
|
@Prop() readonly config!: ToolConfig;
|
||||||
|
@Prop({default: () => false}) readonly noCard!: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.tool-wrapper {
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.category {
|
||||||
|
color: #546167;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
14
env.d.ts
vendored
@ -1,14 +0,0 @@
|
|||||||
/// <reference types="vite/client" />
|
|
||||||
/// <reference types="vite-svg-loader" />
|
|
||||||
|
|
||||||
interface ImportMetaEnv {
|
|
||||||
VITE_PLAUSIBLE_API_HOST: string;
|
|
||||||
VITE_PLAUSIBLE_DOMAIN: string;
|
|
||||||
PACKAGE_VERSION: string;
|
|
||||||
GIT_SHORT_SHA: string;
|
|
||||||
PROD: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ImportMeta {
|
|
||||||
readonly env: ImportMetaEnv;
|
|
||||||
}
|
|
||||||
52
index.html
@ -1,52 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<link rel="icon" href="favicon.ico" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>IT Tools - Handy online tools for developers</title>
|
|
||||||
<meta itemprop="name" content="IT Tools - Handy online tools for developers" />
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content="Collection of handy online tools for developers, with great UX. IT Tools is a free and open-source collection of handy online tools for developers & people working in IT."
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
itemprop="description"
|
|
||||||
content="Collection of handy online tools for developers, with great UX. IT Tools is a free and open-source collection of handy online tools for developers & people working in IT."
|
|
||||||
/>
|
|
||||||
<link rel="author" href="humans.txt" />
|
|
||||||
<link rel="canonical" href="https://it-tools.nayls.cloud" />
|
|
||||||
|
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png" />
|
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png" />
|
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png" />
|
|
||||||
<link rel="mask-icon" href="safari-pinned-tab.svg" color="#18a058" />
|
|
||||||
<meta name="msapplication-TileColor" content="#da532c" />
|
|
||||||
<meta name="theme-color" content="#ffffff" />
|
|
||||||
|
|
||||||
<meta property="og:url" content="https://it-tools.nayls.cloud/" />
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:title" content="IT Tools - Handy online tools for developers" />
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content="Collection of handy online tools for developers, with great UX. IT Tools is a free and open-source collection of handy online tools for developers & people working in IT."
|
|
||||||
/>
|
|
||||||
<meta property="og:image" content="https://it-tools.nayls.cloud/banner.png?v=2" />
|
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta name="twitter:site" content="@ittoolsdottech" />
|
|
||||||
<meta name="twitter:creator" content="@cthmsst" />
|
|
||||||
|
|
||||||
<meta name="twitter:title" content="IT Tools - Handy online tools for developers" />
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content="Collection of handy online tools for developers, with great UX. IT Tools is a free and open-source collection of handy online tools for developers & people working in IT."
|
|
||||||
/>
|
|
||||||
<meta name="twitter:image" content="https://it-tools.nayls.cloud/banner.png?v=2" />
|
|
||||||
<meta name="twitter:image:alt" content="IT Tools - Handy online tools for developers" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="app"></div>
|
|
||||||
<script type="module" src="/src/main.ts"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
18
jest.config.js
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module.exports = {
|
||||||
|
moduleNameMapper: {
|
||||||
|
'^@/(.*)$': '<rootDir>/$1',
|
||||||
|
'^~/(.*)$': '<rootDir>/$1',
|
||||||
|
'^vue$': 'vue/dist/vue.common.js'
|
||||||
|
},
|
||||||
|
moduleFileExtensions: ['ts', 'js', 'vue', 'json'],
|
||||||
|
transform: {
|
||||||
|
'^.+\\.ts$': 'ts-jest',
|
||||||
|
'^.+\\.js$': 'babel-jest',
|
||||||
|
'.*\\.(vue)$': 'vue-jest'
|
||||||
|
},
|
||||||
|
collectCoverage: true,
|
||||||
|
collectCoverageFrom: [
|
||||||
|
'<rootDir>/components/**/*.vue',
|
||||||
|
'<rootDir>/pages/**/*.vue'
|
||||||
|
]
|
||||||
|
}
|
||||||
7
layouts/README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# LAYOUTS
|
||||||
|
|
||||||
|
**This directory is not required, you can delete it if you don't want to use it.**
|
||||||
|
|
||||||
|
This directory contains your Application Layouts.
|
||||||
|
|
||||||
|
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/views#layouts).
|
||||||
281
layouts/default.vue
Normal file
@ -0,0 +1,281 @@
|
|||||||
|
<template>
|
||||||
|
<v-app dark>
|
||||||
|
<v-navigation-drawer
|
||||||
|
v-model="drawer"
|
||||||
|
fixed
|
||||||
|
app
|
||||||
|
>
|
||||||
|
<template #prepend>
|
||||||
|
<div class="small-hero">
|
||||||
|
<HeroGradient />
|
||||||
|
<div class="small-hero-content">
|
||||||
|
<div class="small-hero-content-logo">
|
||||||
|
<LogoOutlined />
|
||||||
|
</div>
|
||||||
|
<div class="small-hero-content-title">
|
||||||
|
{{ title }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<SearchBar class="hidden-sm-and-up" />
|
||||||
|
|
||||||
|
<v-list>
|
||||||
|
<div v-for="(items, section) in $toolList" :key="section">
|
||||||
|
<v-subheader class="mt-4 pl-4">
|
||||||
|
{{ section }}
|
||||||
|
</v-subheader>
|
||||||
|
|
||||||
|
<v-list-item
|
||||||
|
v-for="(item, i) in items"
|
||||||
|
:key="i"
|
||||||
|
:to="item.path"
|
||||||
|
router
|
||||||
|
exact
|
||||||
|
dense
|
||||||
|
>
|
||||||
|
<v-list-item-action>
|
||||||
|
<v-icon color="primary">
|
||||||
|
{{ item.icon }}
|
||||||
|
</v-icon>
|
||||||
|
</v-list-item-action>
|
||||||
|
<v-list-item-content>
|
||||||
|
<v-list-item-title v-text="item.title" />
|
||||||
|
</v-list-item-content>
|
||||||
|
</v-list-item>
|
||||||
|
</div>
|
||||||
|
</v-list>
|
||||||
|
|
||||||
|
<template #append>
|
||||||
|
<v-divider />
|
||||||
|
|
||||||
|
<div class="pa-5 navigation-drawer-footer">
|
||||||
|
<div>
|
||||||
|
IT-Tools <a
|
||||||
|
:href="'https://github.com/CorentinTh/it-tools/tree/'+appVersion"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>{{ appVersion }}</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
© {{ new Date().getFullYear() }}
|
||||||
|
<a href="//corentin-thomasset.fr" class="footer-link" rel="noopener noreferrer" target="_blank">
|
||||||
|
Corentin Thomasset
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</v-navigation-drawer>
|
||||||
|
|
||||||
|
<v-app-bar
|
||||||
|
app
|
||||||
|
flat
|
||||||
|
height="60px"
|
||||||
|
>
|
||||||
|
<v-app-bar-nav-icon aria-label="menu" @click.stop="drawer = !drawer" />
|
||||||
|
<v-toolbar-title>
|
||||||
|
<NuxtLink to="/" class="title">
|
||||||
|
{{ title }}
|
||||||
|
</NuxtLink>
|
||||||
|
</v-toolbar-title>
|
||||||
|
<v-spacer />
|
||||||
|
<SearchBar class="hidden-sm-and-down" />
|
||||||
|
<v-spacer />
|
||||||
|
|
||||||
|
<NuxtLink to="/about">
|
||||||
|
About
|
||||||
|
</NuxtLink>
|
||||||
|
<a
|
||||||
|
href="https://github.com/CorentinTh/it-tools"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
aria-label="Github repository"
|
||||||
|
>
|
||||||
|
<v-icon>mdi-github</v-icon>
|
||||||
|
</a>
|
||||||
|
<v-tooltip bottom>
|
||||||
|
<template #activator="{ on, attrs }">
|
||||||
|
<v-btn
|
||||||
|
depressed
|
||||||
|
color="primary"
|
||||||
|
href="https://github.com/sponsors/CorentinTh"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
v-bind="attrs"
|
||||||
|
v-on="on"
|
||||||
|
>
|
||||||
|
Sponsor
|
||||||
|
</v-btn>
|
||||||
|
</template>
|
||||||
|
<span class="text-center">Sponsor this project by supporting the developer</span>
|
||||||
|
</v-tooltip>
|
||||||
|
</v-app-bar>
|
||||||
|
|
||||||
|
<v-main>
|
||||||
|
<v-container>
|
||||||
|
<nuxt />
|
||||||
|
</v-container>
|
||||||
|
</v-main>
|
||||||
|
</v-app>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import {Component, Vue} from 'nuxt-property-decorator'
|
||||||
|
import {version} from '../package.json'
|
||||||
|
import LogoOutlined from '~/assets/logo-outlined.svg?inline'
|
||||||
|
import HeroGradient from '~/assets/small-hero-gradient.svg?inline'
|
||||||
|
import SearchBar from '~/components/SearchBar.vue'
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
components: {
|
||||||
|
LogoOutlined,
|
||||||
|
HeroGradient,
|
||||||
|
SearchBar
|
||||||
|
}
|
||||||
|
})
|
||||||
|
export default class DefaultLayout extends Vue {
|
||||||
|
title = 'IT - Tools'
|
||||||
|
drawer = false
|
||||||
|
items = []
|
||||||
|
appVersion = 'v' + version
|
||||||
|
|
||||||
|
head() {
|
||||||
|
return {
|
||||||
|
link: [
|
||||||
|
{
|
||||||
|
rel: 'canonical',
|
||||||
|
href: 'https://it-tools.tech' + this.$route.path
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
.pretty-scrollbar {
|
||||||
|
&::-webkit-scrollbar {
|
||||||
|
width: 5px !important;
|
||||||
|
height: 5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Track
|
||||||
|
&::-webkit-scrollbar-track {
|
||||||
|
opacity: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle
|
||||||
|
&::-webkit-scrollbar-thumb {
|
||||||
|
background: rgba(241, 241, 241, 0.10) !important;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle on hover
|
||||||
|
&::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: rgba(241, 241, 241, 0.20) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-toolbar__content {
|
||||||
|
a {
|
||||||
|
color: #ffffff !important;
|
||||||
|
text-decoration: none;
|
||||||
|
transition: all ease 0.2s;
|
||||||
|
margin: 0 10px;
|
||||||
|
font-size: 15px;
|
||||||
|
|
||||||
|
&.title {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
opacity: 1;
|
||||||
|
color: var(--v-primary-base);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.v-btn {
|
||||||
|
font-size: 15px;
|
||||||
|
background: var(--v-primary-base) !important;
|
||||||
|
background: linear-gradient(90deg, rgba(37,99,108,1) 0%, rgba(71,177,113,1) 100%) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.small-hero {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.small-hero-content {
|
||||||
|
padding-top: 30px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.small-hero-content-logo {
|
||||||
|
width: 25%;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.small-hero-content-title {
|
||||||
|
margin-top: 10px;
|
||||||
|
font-size: 25px;
|
||||||
|
font-weight: 600;
|
||||||
|
font-family: Ubuntu, Roboto, sans-serif;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-navigation-drawer__content {
|
||||||
|
.pretty-scrollbar;
|
||||||
|
|
||||||
|
.v-list-item--active {
|
||||||
|
color: var(--v-anchor-base);
|
||||||
|
border-left: 3px solid var(--v-primary-base);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-application {
|
||||||
|
background-color: var(--v-background-base, #121212) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-snack {
|
||||||
|
background: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-snack__content {
|
||||||
|
font-weight: bold !important;
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-navigation-drawer__append {
|
||||||
|
text-align: center;
|
||||||
|
color: rgba(255, 255, 255, 0.52) !important;
|
||||||
|
|
||||||
|
a {
|
||||||
|
border-bottom: 1px dashed;
|
||||||
|
text-decoration: none;
|
||||||
|
color: rgba(255, 255, 255, 0.52) !important;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #4CAF50 !important;
|
||||||
|
border-bottom: 1px solid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme--dark {
|
||||||
|
.v-card,
|
||||||
|
.v-footer,
|
||||||
|
.v-navigation-drawer,
|
||||||
|
.v-app-bar.v-toolbar.v-sheet {
|
||||||
|
background-color: var(--v-foreground-base, #121212) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-footer,
|
||||||
|
.v-app-bar.v-toolbar.v-sheet {
|
||||||
|
background-color: var(--v-toolbar-base, #121212) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
87
layouts/error.vue
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<template>
|
||||||
|
<v-app dark>
|
||||||
|
<div v-if="error.statusCode === 404">
|
||||||
|
<div class="error-wrapper">
|
||||||
|
<div class="error-image">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
x="0px"
|
||||||
|
y="0px"
|
||||||
|
viewBox="0 100 511.999 300"
|
||||||
|
xml:space="preserve"
|
||||||
|
>
|
||||||
|
<g><path d="M140.61,273.063h-5.956v-22.69c0-11.623-10.593-19.433-26.358-19.433s-26.357,7.81-26.357,19.433v22.69H65.571 l25.677-100.707c1.101-2.746,1.194-5.749,1.186-8.392l-0.001-0.284c0-15.632-22.966-20.737-30.881-20.737 c-10.132,0-18.414,5.148-22.723,14.123c-0.199,0.415-0.359,0.847-0.481,1.29C0,298.98,0,300.981,0,302.305 c0,12.096,8.537,20.876,20.297,20.876H33.97c4.2,0,7.604-3.405,7.604-7.604c0-4.199-3.404-7.604-7.604-7.604H20.297 c-3.184,0-4.887-1.694-5.072-5.04c1.954-8.608,23.256-87.252,37.593-139.831c1.785-3.288,4.721-4.954,8.734-4.954 c5.289,0,14.355,3.338,15.673,5.732l0.001,0.128c0.001,0.584,0.006,2.084-0.132,2.756c-0.178,0.397-0.321,0.809-0.43,1.231 L48.417,278.788c-0.58,2.275-0.076,4.69,1.365,6.544c1.44,1.854,3.656,2.938,6.004,2.938h33.757c4.2,0,7.604-3.405,7.604-7.604 v-30.294c0-2.528,5.766-4.225,11.149-4.225c5.481,0,11.15,1.581,11.15,4.225v30.294c0,4.199,3.404,7.604,7.604,7.604h13.56 c2.252,0,4.226,4.671,4.226,9.996c0,5.013-3.022,9.171-4.382,9.708H127.05c-4.2,0-7.604,3.405-7.604,7.604v34.045 c0,1.954-4.872,4.225-11.15,4.225c-6.467,0-11.149-2.523-11.149-4.225v-34.045c0-4.199-3.404-7.604-7.604-7.604H59.318 c-4.2,0-7.604,3.405-7.604,7.604c0,4.199,3.404,7.604,7.604,7.604h22.621v26.441c0,11.26,11.086,19.433,26.357,19.433 c15.52,0,26.358-7.991,26.358-19.433v-26.441h5.956c9.192,0,19.434-10.232,19.434-24.916 C160.043,283.663,151.87,273.063,140.61,273.063z" /></g>
|
||||||
|
<g><path d="M492.566,273.063h-5.956v-22.69c0-11.623-10.593-19.433-26.358-19.433s-26.357,7.81-26.357,19.433v22.69h-16.368 l25.679-100.708c1.1-2.745,1.193-5.75,1.185-8.393l-0.001-0.281c0-15.632-22.966-20.737-30.881-20.737 c-10.132,0-18.415,5.148-22.724,14.123c-0.199,0.415-0.359,0.847-0.481,1.29c0,0-4.869,17.852-11.125,40.898 c0,0.001,0,0.002-0.001,0.003l-7.879,29.071c-19.345,71.527-19.345,72.449-19.345,73.978c0,12.096,8.537,20.876,20.298,20.876 h61.64v26.441c0,11.26,11.085,19.433,26.357,19.433c15.52,0,26.358-7.991,26.358-19.433v-26.441h5.956 c9.192,0,19.434-10.232,19.434-24.915C512,283.663,503.826,273.063,492.566,273.063z M492.41,307.974h-13.404 c-4.2,0-7.604,3.405-7.604,7.604v34.045c0,1.954-4.872,4.225-11.15,4.225c-6.467,0-11.149-2.523-11.149-4.225v-34.045 c0-4.199-3.404-7.604-7.604-7.604h-69.244c-3.183,0-4.887-1.694-5.073-5.037c0.677-2.966,4.201-16.655,18.801-70.634l7.877-29.064 c5.504-20.276,9.934-36.53,10.916-40.133c1.785-3.288,4.721-4.954,8.735-4.954c5.289,0,14.354,3.338,15.673,5.732l0.001,0.124 c0.001,0.585,0.006,2.09-0.133,2.762c-0.177,0.396-0.32,0.808-0.429,1.23l-28.249,110.79c-0.58,2.275-0.076,4.69,1.365,6.544 c1.44,1.854,3.656,2.938,6.004,2.938H441.5c4.2,0,7.604-3.405,7.604-7.604v-30.294c0-2.528,5.766-4.225,11.149-4.225 c5.481,0,11.15,1.581,11.15,4.225v30.294c0,4.199,3.404,7.604,7.604,7.604h13.56c2.252,0,4.226,4.671,4.226,9.996 C496.792,303.281,493.769,307.437,492.41,307.974z" /></g>
|
||||||
|
<g><path d="M330.892,206.939c-2.512-3.363-7.279-4.051-10.642-1.536c-3.362,2.515-4.05,7.281-1.535,10.643 c10.168,13.597,15.542,29.786,15.542,46.818c0,43.149-35.104,78.252-78.252,78.252c-43.15,0-78.253-35.104-78.253-78.252 c0-43.149,35.104-78.253,78.253-78.253c17.152,0,33.434,5.444,47.083,15.744c3.353,2.53,8.122,1.863,10.651-1.49 c2.529-3.352,1.862-8.12-1.49-10.65c-16.311-12.307-35.76-18.812-56.245-18.812c-51.534,0-93.461,41.927-93.461,93.461 s41.927,93.46,93.461,93.46c51.534,0,93.46-41.926,93.46-93.46C349.464,242.523,343.042,223.185,330.892,206.939z" /></g>
|
||||||
|
<g><path d="M296.624,292.726l-29.863-29.863L296.624,233c2.968-2.969,2.968-7.783-0.002-10.753c-2.971-2.97-7.784-2.97-10.754,0 l-29.863,29.863l-29.863-29.863c-2.971-2.97-7.784-2.97-10.754,0c-2.97,2.97-2.97,7.784,0,10.753l29.863,29.863l-29.863,29.863 c-2.97,2.97-2.97,7.784,0,10.753c1.485,1.484,3.432,2.227,5.378,2.227c1.946,0,3.892-0.742,5.377-2.227l29.863-29.863 l29.863,29.863c1.485,1.484,3.432,2.227,5.377,2.227s3.892-0.742,5.378-2.227C299.593,300.51,299.593,295.695,296.624,292.726z" /></g>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="separator" />
|
||||||
|
<div class="error-description">
|
||||||
|
Page not found, sorry.
|
||||||
|
</div>
|
||||||
|
<v-btn color="primary" depressed @click="$router.go(-1)">
|
||||||
|
Back
|
||||||
|
</v-btn>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<div class="error-wrapper">
|
||||||
|
<div class="error-description">
|
||||||
|
{{ error ? error.message : 'An error occurred' }}
|
||||||
|
</div>
|
||||||
|
<v-btn color="primary" depressed @click="$router.go(-1)">
|
||||||
|
Back
|
||||||
|
</v-btn>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</v-app>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
|
||||||
|
import {Component, Prop, Vue} from 'nuxt-property-decorator'
|
||||||
|
|
||||||
|
@Component
|
||||||
|
export default class Error extends Vue {
|
||||||
|
@Prop({default: () => null}) error!: { statusCode: number, message: string } | null;
|
||||||
|
layout = 'empty'
|
||||||
|
|
||||||
|
head() {
|
||||||
|
return {
|
||||||
|
title: `${this.error?.statusCode ?? ''} ${this.error?.message ?? 'An error occurred'}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.error-wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.error-image {
|
||||||
|
width: 200px;
|
||||||
|
|
||||||
|
svg {
|
||||||
|
fill: #ffffff;
|
||||||
|
opacity: 0.3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.separator {
|
||||||
|
width: 60px;
|
||||||
|
height: 3px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: var(--v-primary-base)
|
||||||
|
}
|
||||||
|
|
||||||
|
.error-description {
|
||||||
|
font-size: 30px;
|
||||||
|
opacity: 0.9;
|
||||||
|
margin: 15px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
377
locales/en.yml
@ -1,377 +0,0 @@
|
|||||||
home:
|
|
||||||
categories:
|
|
||||||
newestTools: Newest tools
|
|
||||||
favoriteTools: 'Your favorite tools'
|
|
||||||
allTools: 'All the tools'
|
|
||||||
favoritesDndToolTip: 'Drag and drop to reorder favorites'
|
|
||||||
subtitle: 'Handy tools for developers'
|
|
||||||
toggleMenu: 'Toggle menu'
|
|
||||||
home: Home
|
|
||||||
uiLib: 'UI Lib'
|
|
||||||
support: 'Support IT-Tools development'
|
|
||||||
buyMeACoffee: 'Buy me a coffee'
|
|
||||||
follow:
|
|
||||||
title: 'You like it-tools?'
|
|
||||||
p1: 'Give us a star on'
|
|
||||||
githubRepository: 'IT-Tools GitHub repository'
|
|
||||||
p2: 'or follow us on'
|
|
||||||
twitterXAccount: 'IT-Tools X account'
|
|
||||||
thankYou: 'Thank you!'
|
|
||||||
nav:
|
|
||||||
github: 'GitHub repository'
|
|
||||||
githubRepository: 'IT-Tools GitHub repository'
|
|
||||||
twitterX: 'X account'
|
|
||||||
twitterXAccount: 'IT Tools X account'
|
|
||||||
about: 'About IT-Tools'
|
|
||||||
aboutLabel: 'About'
|
|
||||||
darkMode: 'Dark mode'
|
|
||||||
lightMode: 'Light mode'
|
|
||||||
mode: 'Toggle dark/light mode'
|
|
||||||
|
|
||||||
404:
|
|
||||||
notFound: '404 Not Found'
|
|
||||||
sorry: 'Sorry, this page does not seem to exist'
|
|
||||||
maybe: 'Maybe the cache is doing tricky things, try force-refreshing?'
|
|
||||||
backHome: 'Back home'
|
|
||||||
favoriteButton:
|
|
||||||
remove: 'Remove from favorites'
|
|
||||||
add: 'Add to favorites'
|
|
||||||
toolCard:
|
|
||||||
new: New
|
|
||||||
search:
|
|
||||||
label: Search
|
|
||||||
tools:
|
|
||||||
categories:
|
|
||||||
favorite-tools: 'Your favorite tools'
|
|
||||||
crypto: Crypto
|
|
||||||
converter: Converter
|
|
||||||
web: Web
|
|
||||||
images and videos: 'Images & Videos'
|
|
||||||
development: Development
|
|
||||||
network: Network
|
|
||||||
math: Math
|
|
||||||
measurement: Measurement
|
|
||||||
text: Text
|
|
||||||
data: Data
|
|
||||||
|
|
||||||
password-strength-analyser:
|
|
||||||
title: Password strength analyser
|
|
||||||
description: Discover the strength of your password with this client-side-only password strength analyser and crack time estimation tool.
|
|
||||||
|
|
||||||
chronometer:
|
|
||||||
title: Chronometer
|
|
||||||
description: Monitor the duration of a thing. Basically a chronometer with simple chronometer features.
|
|
||||||
|
|
||||||
token-generator:
|
|
||||||
title: Token generator
|
|
||||||
description: Generate random string with the chars you want, uppercase or lowercase letters, numbers and/or symbols.
|
|
||||||
|
|
||||||
uppercase: Uppercase (ABC...)
|
|
||||||
lowercase: Lowercase (abc...)
|
|
||||||
numbers: Numbers (123...)
|
|
||||||
symbols: Symbols (!-;...)
|
|
||||||
length: Length
|
|
||||||
tokenPlaceholder: 'The token...'
|
|
||||||
copied: Token copied to the clipboard
|
|
||||||
button:
|
|
||||||
copy: Copy
|
|
||||||
refresh: Refresh
|
|
||||||
percentage-calculator:
|
|
||||||
title: Percentage calculator
|
|
||||||
description: Easily calculate percentages from a value to another value, or from a percentage to a value.
|
|
||||||
|
|
||||||
svg-placeholder-generator:
|
|
||||||
title: SVG placeholder generator
|
|
||||||
description: Generate svg images to use as a placeholder in your applications.
|
|
||||||
|
|
||||||
json-to-csv:
|
|
||||||
title: JSON to CSV
|
|
||||||
description: Convert JSON to CSV with automatic header detection.
|
|
||||||
|
|
||||||
camera-recorder:
|
|
||||||
title: Camera recorder
|
|
||||||
description: Take a picture or record a video from your webcam or camera.
|
|
||||||
|
|
||||||
keycode-info:
|
|
||||||
title: Keycode info
|
|
||||||
description: Find the javascript keycode, code, location and modifiers of any pressed key.
|
|
||||||
|
|
||||||
emoji-picker:
|
|
||||||
title: Emoji picker
|
|
||||||
description: Copy and paste emojis easily and get the unicode and code points value of each emoji.
|
|
||||||
|
|
||||||
color-converter:
|
|
||||||
title: Color converter
|
|
||||||
description: Convert color between the different formats (hex, rgb, hsl and css name)
|
|
||||||
|
|
||||||
bcrypt:
|
|
||||||
title: Bcrypt
|
|
||||||
description: Hash and compare text string using bcrypt. Bcrypt is a password-hashing function based on the Blowfish cipher.
|
|
||||||
|
|
||||||
crontab-generator:
|
|
||||||
title: Crontab generator
|
|
||||||
description: Validate and generate crontab and get the human-readable description of the cron schedule.
|
|
||||||
|
|
||||||
http-status-codes:
|
|
||||||
title: HTTP status codes
|
|
||||||
description: The list of all HTTP status codes, their name, and their meaning.
|
|
||||||
|
|
||||||
sql-prettify:
|
|
||||||
title: SQL prettify and format
|
|
||||||
description: Format and prettify your SQL queries online (it supports various SQL dialects).
|
|
||||||
|
|
||||||
benchmark-builder:
|
|
||||||
title: Benchmark builder
|
|
||||||
description: Easily compare execution time of tasks with this very simple online benchmark builder.
|
|
||||||
|
|
||||||
git-memo:
|
|
||||||
title: Git cheatsheet
|
|
||||||
description: Git is a decentralized version management software. With this cheatsheet, you will have quick access to the most common git commands.
|
|
||||||
|
|
||||||
slugify-string:
|
|
||||||
title: Slugify string
|
|
||||||
description: Make a string url, filename and id safe.
|
|
||||||
|
|
||||||
encryption:
|
|
||||||
title: Encrypt / decrypt text
|
|
||||||
description: Encrypt clear text and decrypt ciphertext using crypto algorithms like AES, TripleDES, Rabbit or RC4.
|
|
||||||
|
|
||||||
random-port-generator:
|
|
||||||
title: Random port generator
|
|
||||||
description: Generate random port numbers outside of the range of "known" ports (0-1023).
|
|
||||||
|
|
||||||
yaml-prettify:
|
|
||||||
title: YAML prettify and format
|
|
||||||
description: Prettify your YAML string into a friendly, human-readable format.
|
|
||||||
|
|
||||||
eta-calculator:
|
|
||||||
title: ETA calculator
|
|
||||||
description: An ETA (Estimated Time of Arrival) calculator to determine the approximate end time of a task, for example, the end time and duration of a file download.
|
|
||||||
|
|
||||||
roman-numeral-converter:
|
|
||||||
title: Roman numeral converter
|
|
||||||
description: Convert Roman numerals to numbers and convert numbers to Roman numerals.
|
|
||||||
|
|
||||||
hmac-generator:
|
|
||||||
title: Hmac generator
|
|
||||||
description: Computes a hash-based message authentication code (HMAC) using a secret key and your favorite hashing function.
|
|
||||||
|
|
||||||
bip39-generator:
|
|
||||||
title: BIP39 passphrase generator
|
|
||||||
description: Generate a BIP39 passphrase from an existing or random mnemonic, or get the mnemonic from the passphrase.
|
|
||||||
|
|
||||||
base64-file-converter:
|
|
||||||
title: Base64 file converter
|
|
||||||
description: Convert a string, file, or image into its base64 representation.
|
|
||||||
|
|
||||||
list-converter:
|
|
||||||
title: List converter
|
|
||||||
description: This tool can process column-based data and apply various changes (transpose, add prefix and suffix, reverse list, sort list, lowercase values, truncate values) to each row.
|
|
||||||
|
|
||||||
base64-string-converter:
|
|
||||||
title: Base64 string encoder/decoder
|
|
||||||
description: Simply encode and decode strings into their base64 representation.
|
|
||||||
|
|
||||||
toml-to-yaml:
|
|
||||||
title: TOML to YAML
|
|
||||||
description: Parse and convert TOML to YAML.
|
|
||||||
|
|
||||||
math-evaluator:
|
|
||||||
title: Math evaluator
|
|
||||||
description: A calculator for evaluating mathematical expressions. You can use functions like sqrt, cos, sin, abs, etc.
|
|
||||||
|
|
||||||
json-to-yaml-converter:
|
|
||||||
title: JSON to YAML converter
|
|
||||||
description: Simply convert JSON to YAML with this online live converter.
|
|
||||||
|
|
||||||
url-parser:
|
|
||||||
title: URL parser
|
|
||||||
description: Parse a URL into its separate constituent parts (protocol, origin, params, port, username-password, ...)
|
|
||||||
|
|
||||||
iban-validator-and-parser:
|
|
||||||
title: IBAN validator and parser
|
|
||||||
description: Validate and parse IBAN numbers. Check if an IBAN is valid and get the country, BBAN, if it is a QR-IBAN and the IBAN friendly format.
|
|
||||||
|
|
||||||
user-agent-parser:
|
|
||||||
title: User-agent parser
|
|
||||||
description: Detect and parse Browser, Engine, OS, CPU, and Device type/model from an user-agent string.
|
|
||||||
|
|
||||||
numeronym-generator:
|
|
||||||
title: Numeronym generator
|
|
||||||
description: A numeronym is a word where a number is used to form an abbreviation. For example, "i18n" is a numeronym of "internationalization" where 18 stands for the number of letters between the first i and the last n in the word.
|
|
||||||
|
|
||||||
case-converter:
|
|
||||||
title: Case converter
|
|
||||||
description: Transform the case of a string and choose between different formats
|
|
||||||
|
|
||||||
html-entities:
|
|
||||||
title: Escape HTML entities
|
|
||||||
description: Escape or unescape HTML entities (replace characters like <,>, &, " and \' with their HTML version)
|
|
||||||
|
|
||||||
json-prettify:
|
|
||||||
title: JSON prettify and format
|
|
||||||
description: Prettify your JSON string into a friendly, human-readable format.
|
|
||||||
|
|
||||||
docker-run-to-docker-compose-converter:
|
|
||||||
title: Docker run to Docker compose converter
|
|
||||||
description: Transforms "docker run" commands into docker-compose files!
|
|
||||||
|
|
||||||
mac-address-lookup:
|
|
||||||
title: MAC address lookup
|
|
||||||
description: Find the vendor and manufacturer of a device by its MAC address.
|
|
||||||
|
|
||||||
mime-types:
|
|
||||||
title: MIME types
|
|
||||||
description: Convert MIME types to file extensions and vice-versa.
|
|
||||||
|
|
||||||
toml-to-json:
|
|
||||||
title: TOML to JSON
|
|
||||||
description: Parse and convert TOML to JSON.
|
|
||||||
|
|
||||||
lorem-ipsum-generator:
|
|
||||||
title: Lorem ipsum generator
|
|
||||||
description: Lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document or a typeface without relying on meaningful content
|
|
||||||
|
|
||||||
qrcode-generator:
|
|
||||||
title: QR Code generator
|
|
||||||
description: Generate and download a QR code for a URL (or just plain text), and customize the background and foreground colors.
|
|
||||||
|
|
||||||
wifi-qrcode-generator:
|
|
||||||
title: WiFi QR Code generator
|
|
||||||
description: Generate and download QR codes for quick connections to WiFi networks.
|
|
||||||
|
|
||||||
xml-formatter:
|
|
||||||
title: XML formatter
|
|
||||||
description: Prettify your XML string into a friendly, human-readable format.
|
|
||||||
|
|
||||||
temperature-converter:
|
|
||||||
title: Temperature converter
|
|
||||||
description: Degrees temperature conversions for Kelvin, Celsius, Fahrenheit, Rankine, Delisle, Newton, Réaumur, and Rømer.
|
|
||||||
|
|
||||||
chmod-calculator:
|
|
||||||
title: Chmod calculator
|
|
||||||
description: Compute your chmod permissions and commands with this online chmod calculator.
|
|
||||||
|
|
||||||
rsa-key-pair-generator:
|
|
||||||
title: RSA key pair generator
|
|
||||||
description: Generate a new random RSA private and public pem certificate key pair.
|
|
||||||
|
|
||||||
html-wysiwyg-editor:
|
|
||||||
title: HTML WYSIWYG editor
|
|
||||||
description: Online, feature-rich WYSIWYG HTML editor which generates the source code of the content immediately.
|
|
||||||
|
|
||||||
yaml-to-toml:
|
|
||||||
title: YAML to TOML
|
|
||||||
description: Parse and convert YAML to TOML.
|
|
||||||
|
|
||||||
mac-address-generator:
|
|
||||||
title: MAC address generator
|
|
||||||
description: Enter the quantity and prefix. MAC addresses will be generated in your chosen case (uppercase or lowercase)
|
|
||||||
|
|
||||||
json-diff:
|
|
||||||
title: JSON diff
|
|
||||||
description: Compare two JSON objects and get the differences between them.
|
|
||||||
|
|
||||||
jwt-parser:
|
|
||||||
title: JWT parser
|
|
||||||
description: Parse and decode your JSON Web Token (jwt) and display its content.
|
|
||||||
|
|
||||||
date-converter:
|
|
||||||
title: Date-time converter
|
|
||||||
description: Convert date and time into the various different formats
|
|
||||||
|
|
||||||
phone-parser-and-formatter:
|
|
||||||
title: Phone parser and formatter
|
|
||||||
description: Parse, validate and format phone numbers. Get information about the phone number, like the country code, type, etc.
|
|
||||||
|
|
||||||
ipv4-subnet-calculator:
|
|
||||||
title: IPv4 subnet calculator
|
|
||||||
description: Parse your IPv4 CIDR blocks and get all the info you need about your subnet.
|
|
||||||
|
|
||||||
og-meta-generator:
|
|
||||||
title: Open graph meta generator
|
|
||||||
description: Generate open-graph and socials HTML meta tags for your website.
|
|
||||||
|
|
||||||
ipv6-ula-generator:
|
|
||||||
title: IPv6 ULA generator
|
|
||||||
description: Generate your own local, non-routable IP addresses for your network according to RFC4193.
|
|
||||||
|
|
||||||
hash-text:
|
|
||||||
title: Hash text
|
|
||||||
description: 'Hash a text string using the function you need : MD5, SHA1, SHA256, SHA224, SHA512, SHA384, SHA3 or RIPEMD160'
|
|
||||||
|
|
||||||
json-to-toml:
|
|
||||||
title: JSON to TOML
|
|
||||||
description: Parse and convert JSON to TOML.
|
|
||||||
|
|
||||||
device-information:
|
|
||||||
title: Device information
|
|
||||||
description: Get information about your current device (screen size, pixel-ratio, user agent, ...)
|
|
||||||
|
|
||||||
pdf-signature-checker:
|
|
||||||
title: PDF signature checker
|
|
||||||
description: Verify the signatures of a PDF file. A signed PDF file contains one or more signatures that may be used to determine whether the contents of the file have been altered since the file was signed.
|
|
||||||
|
|
||||||
json-minify:
|
|
||||||
title: JSON minify
|
|
||||||
description: Minify and compress your JSON by removing unnecessary whitespace.
|
|
||||||
|
|
||||||
ulid-generator:
|
|
||||||
title: ULID generator
|
|
||||||
description: Generate random Universally Unique Lexicographically Sortable Identifier (ULID).
|
|
||||||
|
|
||||||
string-obfuscator:
|
|
||||||
title: String obfuscator
|
|
||||||
description: Obfuscate a string (like a secret, an IBAN, or a token) to make it shareable and identifiable without revealing its content.
|
|
||||||
|
|
||||||
base-converter:
|
|
||||||
title: Integer base converter
|
|
||||||
description: Convert a number between different bases (decimal, hexadecimal, binary, octal, base64, ...)
|
|
||||||
|
|
||||||
yaml-to-json-converter:
|
|
||||||
title: YAML to JSON converter
|
|
||||||
description: Simply convert YAML to JSON with this online live converter.
|
|
||||||
|
|
||||||
uuid-generator:
|
|
||||||
title: UUIDs generator
|
|
||||||
description: A Universally Unique Identifier (UUID) is a 128-bit number used to identify information in computer systems. The number of possible UUIDs is 16^32, which is 2^128 or about 3.4x10^38 (which is a lot!).
|
|
||||||
|
|
||||||
ipv4-address-converter:
|
|
||||||
title: IPv4 address converter
|
|
||||||
description: Convert an IP address into decimal, binary, hexadecimal, or even an IPv6 representation of it.
|
|
||||||
|
|
||||||
text-statistics:
|
|
||||||
title: Text statistics
|
|
||||||
description: Get information about a text, the number of characters, the number of words, its size in bytes, ...
|
|
||||||
|
|
||||||
text-to-nato-alphabet:
|
|
||||||
title: Text to NATO alphabet
|
|
||||||
description: Transform text into the NATO phonetic alphabet for oral transmission.
|
|
||||||
|
|
||||||
basic-auth-generator:
|
|
||||||
title: Basic auth generator
|
|
||||||
description: Generate a base64 basic auth header from a username and password.
|
|
||||||
|
|
||||||
text-to-unicode:
|
|
||||||
title: Text to Unicode
|
|
||||||
description: Parse and convert text to unicode and vice-versa
|
|
||||||
|
|
||||||
ipv4-range-expander:
|
|
||||||
title: IPv4 range expander
|
|
||||||
description: Given a start and an end IPv4 address, this tool calculates a valid IPv4 subnet along with its CIDR notation.
|
|
||||||
|
|
||||||
text-diff:
|
|
||||||
title: Text diff
|
|
||||||
description: Compare two texts and see the differences between them.
|
|
||||||
|
|
||||||
otp-generator:
|
|
||||||
title: OTP code generator
|
|
||||||
description: Generate and validate time-based OTP (one time password) for multi-factor authentication.
|
|
||||||
|
|
||||||
url-encoder:
|
|
||||||
title: Encode/decode URL-formatted strings
|
|
||||||
description: Encode text to URL-encoded format (also known as "percent-encoded"), or decode from it.
|
|
||||||
|
|
||||||
text-to-binary:
|
|
||||||
title: Text to ASCII binary
|
|
||||||
description: Convert text to its ASCII binary representation and vice-versa.
|
|
||||||
377
locales/ru.yml
@ -1,377 +0,0 @@
|
|||||||
home:
|
|
||||||
categories:
|
|
||||||
newestTools: "Новые инструменты"
|
|
||||||
favoriteTools: "Ваши любимые инструменты"
|
|
||||||
allTools: "Все инструменты"
|
|
||||||
favoritesDndToolTip: "Перетаскивайте, чтобы изменить порядок избранного"
|
|
||||||
subtitle: "Полезные инструменты для разработчиков"
|
|
||||||
toggleMenu: "Переключить меню"
|
|
||||||
home: "Главная"
|
|
||||||
uiLib: "UI Библиотека"
|
|
||||||
support: "Поддержать разработку IT-Tools"
|
|
||||||
buyMeACoffee: "Купить мне кофе"
|
|
||||||
follow:
|
|
||||||
title: "Вам нравится it-tools?"
|
|
||||||
p1: "Поставьте звезду на"
|
|
||||||
githubRepository: "репозитории IT-Tools на GitHub"
|
|
||||||
p2: "или подпишитесь на нас в"
|
|
||||||
twitterXAccount: "аккаунте IT-Tools в X"
|
|
||||||
thankYou: "Спасибо!"
|
|
||||||
nav:
|
|
||||||
github: "Репозиторий GitHub"
|
|
||||||
githubRepository: "Репозиторий IT-Tools на GitHub"
|
|
||||||
twitterX: "Аккаунт X"
|
|
||||||
twitterXAccount: "Аккаунт IT-Tools в X"
|
|
||||||
about: "О проекте IT-Tools"
|
|
||||||
aboutLabel: "О проекте"
|
|
||||||
darkMode: "Тёмная тема"
|
|
||||||
lightMode: "Светлая тема"
|
|
||||||
mode: "Переключить тёмную/светлую тему."
|
|
||||||
|
|
||||||
404:
|
|
||||||
notFound: "404 Не найдено"
|
|
||||||
sorry: "Извините, похоже, такой страницы не существует"
|
|
||||||
maybe: "Может, кэш играет злую шутку — попробуйте принудительно обновить страницу?"
|
|
||||||
backHome: "На главную"
|
|
||||||
favoriteButton:
|
|
||||||
remove: "Убрать из избранного"
|
|
||||||
add: "Добавить в избранное"
|
|
||||||
toolCard:
|
|
||||||
new: "Новое"
|
|
||||||
search:
|
|
||||||
label: "Поиск"
|
|
||||||
tools:
|
|
||||||
categories:
|
|
||||||
favorite-tools: "Ваши любимые инструменты"
|
|
||||||
crypto: "Криптография"
|
|
||||||
converter: "Конвертеры"
|
|
||||||
web: "Веб"
|
|
||||||
images and videos: "Изображения и видео"
|
|
||||||
development: "Разработка"
|
|
||||||
network: "Сеть"
|
|
||||||
math: "Математика"
|
|
||||||
measurement: "Измерения"
|
|
||||||
text: "Текст"
|
|
||||||
data: "Данные"
|
|
||||||
|
|
||||||
password-strength-analyser:
|
|
||||||
title: "Анализатор надёжности пароля"
|
|
||||||
description: "Оцените надёжность пароля с помощью клиентского анализатора и расчёта времени взлома."
|
|
||||||
|
|
||||||
chronometer:
|
|
||||||
title: "Хронометр"
|
|
||||||
description: "Отслеживайте длительность события. Простой хронометр с базовыми функциями."
|
|
||||||
|
|
||||||
token-generator:
|
|
||||||
title: "Генератор токенов"
|
|
||||||
description: "Генерируйте случайные строки из выбранных символов: заглавные/строчные буквы, цифры и/или спецсимволы."
|
|
||||||
|
|
||||||
uppercase: "Заглавные (ABC...)"
|
|
||||||
lowercase: "Строчные (abc...)"
|
|
||||||
numbers: "Цифры (123...)"
|
|
||||||
symbols: "Символы (!-;...)"
|
|
||||||
length: "Длина"
|
|
||||||
tokenPlaceholder: "Токен..."
|
|
||||||
copied: "Токен скопирован в буфер обмена"
|
|
||||||
button:
|
|
||||||
copy: "Копировать"
|
|
||||||
refresh: "Обновить"
|
|
||||||
percentage-calculator:
|
|
||||||
title: "Калькулятор процентов"
|
|
||||||
description: "Легко рассчитывайте проценты между значениями или значение по проценту."
|
|
||||||
|
|
||||||
svg-placeholder-generator:
|
|
||||||
title: "Генератор SVG-заполнителей"
|
|
||||||
description: "Создавайте SVG-изображения для использования в качестве заполнителей в приложениях."
|
|
||||||
|
|
||||||
json-to-csv:
|
|
||||||
title: "JSON → CSV"
|
|
||||||
description: "Конвертируйте JSON в CSV с автоматическим определением заголовков."
|
|
||||||
|
|
||||||
camera-recorder:
|
|
||||||
title: "Запись с камеры"
|
|
||||||
description: "Сделайте фото или запишите видео с веб-камеры или камеры устройства."
|
|
||||||
|
|
||||||
keycode-info:
|
|
||||||
title: "Информация о коде клавиши"
|
|
||||||
description: "Узнайте JavaScript keycode, code, location и модификаторы любой нажатой клавиши."
|
|
||||||
|
|
||||||
emoji-picker:
|
|
||||||
title: "Выбор эмодзи"
|
|
||||||
description: "Легко копируйте эмодзи и узнавайте их Unicode и кодовые точки."
|
|
||||||
|
|
||||||
color-converter:
|
|
||||||
title: "Конвертер цветов"
|
|
||||||
description: "Конвертируйте цвет между форматами (hex, rgb, hsl и CSS-названия)."
|
|
||||||
|
|
||||||
bcrypt:
|
|
||||||
title: "Bcrypt"
|
|
||||||
description: "Хэшируйте и сравнивайте строки с помощью bcrypt — функции хэширования паролей на основе шифра Blowfish."
|
|
||||||
|
|
||||||
crontab-generator:
|
|
||||||
title: "Генератор crontab"
|
|
||||||
description: "Валидируйте и создавайте crontab, получайте человекочитаемое описание расписания."
|
|
||||||
|
|
||||||
http-status-codes:
|
|
||||||
title: "Коды состояния HTTP"
|
|
||||||
description: "Список всех HTTP-кодов, их названий и значений."
|
|
||||||
|
|
||||||
sql-prettify:
|
|
||||||
title: "Форматирование SQL"
|
|
||||||
description: "Форматируйте и украшайте SQL-запросы онлайн (поддержка разных диалектов)."
|
|
||||||
|
|
||||||
benchmark-builder:
|
|
||||||
title: "Создатель бенчмарков"
|
|
||||||
description: "Сравнивайте время выполнения задач с помощью простого онлайн-конструктора бенчмарков."
|
|
||||||
|
|
||||||
git-memo:
|
|
||||||
title: "Шпаргалка по Git"
|
|
||||||
description: "Git — децентрализованная система управления версиями. Эта шпаргалка даёт быстрый доступ к самым частым командам."
|
|
||||||
|
|
||||||
slugify-string:
|
|
||||||
title: "Создание slug"
|
|
||||||
description: "Делайте строку безопасной для URL, имён файлов и ID."
|
|
||||||
|
|
||||||
encryption:
|
|
||||||
title: "Шифрование / расшифровка текста"
|
|
||||||
description: "Шифруйте текст и расшифровывайте шифротекст с помощью алгоритмов AES, TripleDES, Rabbit или RC4."
|
|
||||||
|
|
||||||
random-port-generator:
|
|
||||||
title: "Генератор случайных портов"
|
|
||||||
description: "Генерируйте случайные номера портов вне диапазона «известных» портов (0–1023)."
|
|
||||||
|
|
||||||
yaml-prettify:
|
|
||||||
title: "Форматирование YAML"
|
|
||||||
description: "Преобразуйте YAML-строку в удобный для чтения формат."
|
|
||||||
|
|
||||||
eta-calculator:
|
|
||||||
title: "Калькулятор ETA"
|
|
||||||
description: "Калькулятор времени окончания (ETA) — например, для загрузки файла: время завершения и длительность."
|
|
||||||
|
|
||||||
roman-numeral-converter:
|
|
||||||
title: "Конвертер римских цифр"
|
|
||||||
description: "Конвертируйте римские цифры в числа и наоборот."
|
|
||||||
|
|
||||||
hmac-generator:
|
|
||||||
title: "Генератор HMAC"
|
|
||||||
description: "Вычисляйте HMAC (код аутентификации сообщения) с секретным ключом и выбранной хэш-функцией."
|
|
||||||
|
|
||||||
bip39-generator:
|
|
||||||
title: "Генератор BIP39-фраз"
|
|
||||||
description: "Создавайте BIP39-фразу из мнемонической фразы (случайной или существующей) или получайте мнемонику из фразы."
|
|
||||||
|
|
||||||
base64-file-converter:
|
|
||||||
title: "Конвертер файлов в Base64"
|
|
||||||
description: "Преобразуйте строку, файл или изображение в Base64-представление."
|
|
||||||
|
|
||||||
list-converter:
|
|
||||||
title: "Конвертер списков"
|
|
||||||
description: "Обрабатывайте данные по столбцам: транспонирование, добавление префиксов/суффиксов, реверс, сортировка, нижний регистр, обрезка."
|
|
||||||
|
|
||||||
base64-string-converter:
|
|
||||||
title: "Кодировщик/декодер Base64"
|
|
||||||
description: "Простое кодирование и декодирование строк в Base64."
|
|
||||||
|
|
||||||
toml-to-yaml:
|
|
||||||
title: "TOML → YAML"
|
|
||||||
description: "Парсите и конвертируйте TOML в YAML."
|
|
||||||
|
|
||||||
math-evaluator:
|
|
||||||
title: "Калькулятор математических выражений"
|
|
||||||
description: "Калькулятор для вычисления выражений. Поддержка функций: sqrt, cos, sin, abs и др."
|
|
||||||
|
|
||||||
json-to-yaml-converter:
|
|
||||||
title: "JSON → YAML"
|
|
||||||
description: "Простая онлайн-конвертация JSON в YAML в реальном времени."
|
|
||||||
|
|
||||||
url-parser:
|
|
||||||
title: "Парсер URL"
|
|
||||||
description: "Разбирайте URL на компоненты (протокол, источник, параметры, порт, логин-пароль и т.д.)."
|
|
||||||
|
|
||||||
iban-validator-and-parser:
|
|
||||||
title: "Валидатор и парсер IBAN"
|
|
||||||
description: "Проверяйте IBAN, получайте страну, BBAN, QR-IBAN и удобный формат."
|
|
||||||
|
|
||||||
user-agent-parser:
|
|
||||||
title: "Парсер User-Agent"
|
|
||||||
description: "Определяйте браузер, движок, ОС, CPU и модель устройства по User-Agent."
|
|
||||||
|
|
||||||
numeronym-generator:
|
|
||||||
title: "Генератор нумеронимов"
|
|
||||||
description: "Нумероним — слово с числом вместо букв (например, i18n = internationalization, где 18 — количество букв между i и n)."
|
|
||||||
|
|
||||||
case-converter:
|
|
||||||
title: "Конвертер регистра"
|
|
||||||
description: "Преобразуйте регистр строки: разные форматы на выбор."
|
|
||||||
|
|
||||||
html-entities:
|
|
||||||
title: "Экранирование HTML-сущностей"
|
|
||||||
description: "Экранируйте/раскодируйте символы вроде <, >, &, \" и ' в HTML-сущности."
|
|
||||||
|
|
||||||
json-prettify:
|
|
||||||
title: "Форматирование JSON"
|
|
||||||
description: "Преобразуйте JSON в удобный для чтения формат."
|
|
||||||
|
|
||||||
docker-run-to-docker-compose-converter:
|
|
||||||
title: "Docker run → Docker Compose"
|
|
||||||
description: "Преобразуйте команды `docker run` в файлы docker-compose!"
|
|
||||||
|
|
||||||
mac-address-lookup:
|
|
||||||
title: "Поиск по MAC-адресу"
|
|
||||||
description: "Узнайте производителя устройства по его MAC-адресу."
|
|
||||||
|
|
||||||
mime-types:
|
|
||||||
title: "MIME-типы"
|
|
||||||
description: "Конвертируйте MIME-типы в расширения файлов и обратно."
|
|
||||||
|
|
||||||
toml-to-json:
|
|
||||||
title: "TOML → JSON"
|
|
||||||
description: "Парсите и конвертируйте TOML в JSON."
|
|
||||||
|
|
||||||
lorem-ipsum-generator:
|
|
||||||
title: "Генератор Lorem Ipsum"
|
|
||||||
description: "Заполнитель текста для демонстрации шрифтов и макетов без осмысленного контента."
|
|
||||||
|
|
||||||
qrcode-generator:
|
|
||||||
title: "Генератор QR-кодов"
|
|
||||||
description: "Создавайте и скачивайте QR-коды для URL или текста, настраивайте цвета."
|
|
||||||
|
|
||||||
wifi-qrcode-generator:
|
|
||||||
title: "QR-код для Wi-Fi"
|
|
||||||
description: "Генерируйте QR-коды для быстрого подключения к Wi-Fi-сетям."
|
|
||||||
|
|
||||||
xml-formatter:
|
|
||||||
title: "Форматирование XML"
|
|
||||||
description: "Преобразуйте XML в удобный для чтения формат."
|
|
||||||
|
|
||||||
temperature-converter:
|
|
||||||
title: "Конвертер температуры"
|
|
||||||
description: "Перевод градусов между шкалами: Кельвин, Цельсий, Фаренгейт, Ранкин, Делиль, Ньютон, Реомюр, Рёмер."
|
|
||||||
|
|
||||||
chmod-calculator:
|
|
||||||
title: "Калькулятор chmod"
|
|
||||||
description: "Рассчитывайте права доступа и команды chmod онлайн."
|
|
||||||
|
|
||||||
rsa-key-pair-generator:
|
|
||||||
title: "Генератор пары ключей RSA"
|
|
||||||
description: "Создавайте случайную пару приватного и публичного PEM-ключей RSA."
|
|
||||||
|
|
||||||
html-wysiwyg-editor:
|
|
||||||
title: "WYSIWYG-редактор HTML"
|
|
||||||
description: "Онлайн-редактор HTML с мгновенным отображением исходного кода."
|
|
||||||
|
|
||||||
yaml-to-toml:
|
|
||||||
title: "YAML → TOML"
|
|
||||||
description: "Парсите и конвертируйте YAML в TOML."
|
|
||||||
|
|
||||||
mac-address-generator:
|
|
||||||
title: "Генератор MAC-адресов"
|
|
||||||
description: "Укажите количество и префикс — MAC-адреса будут в выбранном регистре."
|
|
||||||
|
|
||||||
json-diff:
|
|
||||||
title: "Сравнение JSON"
|
|
||||||
description: "Сравните два JSON и увидьте различия."
|
|
||||||
|
|
||||||
jwt-parser:
|
|
||||||
title: "Парсер JWT"
|
|
||||||
description: "Декодируйте и отображайте содержимое JSON Web Token."
|
|
||||||
|
|
||||||
date-converter:
|
|
||||||
title: "Конвертер даты и времени"
|
|
||||||
description: "Преобразуйте дату и время в разные форматы."
|
|
||||||
|
|
||||||
phone-parser-and-formatter:
|
|
||||||
title: "Парсер и форматтер номеров"
|
|
||||||
description: "Парсите, валидируйте и форматируйте номера. Получайте код страны, тип и др."
|
|
||||||
|
|
||||||
ipv4-subnet-calculator:
|
|
||||||
title: "Калькулятор подсетей IPv4"
|
|
||||||
description: "Анализируйте CIDR-блоки IPv4 и получайте всю информацию о подсети."
|
|
||||||
|
|
||||||
og-meta-generator:
|
|
||||||
title: "Генератор Open Graph мета-тегов"
|
|
||||||
description: "Создавайте Open Graph и социальные HTML-мета-теги для сайта."
|
|
||||||
|
|
||||||
ipv6-ula-generator:
|
|
||||||
title: "Генератор IPv6 ULA"
|
|
||||||
description: "Создавайте локальные, нерутируемые IPv6-адреса по RFC4193."
|
|
||||||
|
|
||||||
hash-text:
|
|
||||||
title: "Хэширование текста"
|
|
||||||
description: "'Хэшируйте текст с помощью: MD5, SHA1, SHA256, SHA224, SHA512, SHA384, SHA3 или RIPEMD160'"
|
|
||||||
|
|
||||||
json-to-toml:
|
|
||||||
title: "JSON → TOML"
|
|
||||||
description: "Парсите и конвертируйте JSON в TOML."
|
|
||||||
|
|
||||||
device-information:
|
|
||||||
title: "Информация об устройстве"
|
|
||||||
description: "Получайте данные об устройстве: размер экрана, pixel-ratio, user-agent и др."
|
|
||||||
|
|
||||||
pdf-signature-checker:
|
|
||||||
title: "Проверка подписи PDF"
|
|
||||||
description: "Проверяйте подписи в PDF. Подписанный файл содержит подписи, позволяющие определить изменения после подписи."
|
|
||||||
|
|
||||||
json-minify:
|
|
||||||
title: "Минификация JSON"
|
|
||||||
description: "Сжимайте JSON, удаляя лишние пробелы."
|
|
||||||
|
|
||||||
ulid-generator:
|
|
||||||
title: "Генератор ULID"
|
|
||||||
description: "Создавайте случайные Universally Unique Lexicographically Sortable Identifier (ULID)."
|
|
||||||
|
|
||||||
string-obfuscator:
|
|
||||||
title: "Обфускатор строк"
|
|
||||||
description: "Обфусцируйте строку (секрет, IBAN, токен), чтобы делиться ею без раскрытия содержимого."
|
|
||||||
|
|
||||||
base-converter:
|
|
||||||
title: "Конвертер чисел между системами счисления"
|
|
||||||
description: "Преобразуйте число между системами: десятичная, шестнадцатеричная, двоичная, восьмеричная, base64 и др."
|
|
||||||
|
|
||||||
yaml-to-json-converter:
|
|
||||||
title: "YAML → JSON"
|
|
||||||
description: "Простая онлайн-конвертация YAML в JSON в реальном времени."
|
|
||||||
|
|
||||||
uuid-generator:
|
|
||||||
title: "Генератор UUID"
|
|
||||||
description: "UUID — 128-битный идентификатор. Возможных значений: 16^32 (около 3.4×10^38)."
|
|
||||||
|
|
||||||
ipv4-address-converter:
|
|
||||||
title: "Конвертер IPv4-адресов"
|
|
||||||
description: "Преобразуйте IP в десятичное, двоичное, шестнадцатеричное или IPv6-представление."
|
|
||||||
|
|
||||||
text-statistics:
|
|
||||||
title: "Статистика текста"
|
|
||||||
description: "Получайте данные о тексте: символы, слова, размер в байтах и др."
|
|
||||||
|
|
||||||
text-to-nato-alphabet:
|
|
||||||
title: "Текст → фонетический алфавит NATO"
|
|
||||||
description: "Преобразуйте текст в фонетический алфавит NATO для устной передачи."
|
|
||||||
|
|
||||||
basic-auth-generator:
|
|
||||||
title: "Генератор Basic Auth"
|
|
||||||
description: "Создавайте Base64-заголовок Basic Auth из логина и пароля."
|
|
||||||
|
|
||||||
text-to-unicode:
|
|
||||||
title: "Текст ↔ Unicode"
|
|
||||||
description: "Парсите и конвертируйте текст в Unicode и обратно."
|
|
||||||
|
|
||||||
ipv4-range-expander:
|
|
||||||
title: "Расширитель диапазона IPv4"
|
|
||||||
description: "По началу и концу IPv4 рассчитывает подсеть и CIDR."
|
|
||||||
|
|
||||||
text-diff:
|
|
||||||
title: "Сравнение текстов"
|
|
||||||
description: "Сравните два текста и увидьте различия."
|
|
||||||
|
|
||||||
otp-generator:
|
|
||||||
title: "Генератор OTP"
|
|
||||||
description: "Генерируйте и проверяйте одноразовые пароли (TOTP) для двухфакторной аутентификации."
|
|
||||||
|
|
||||||
url-encoder:
|
|
||||||
title: "Кодировщик/декодер URL"
|
|
||||||
description: "Кодируйте текст в URL-формат (percent-encoding) или декодируйте."
|
|
||||||
|
|
||||||
text-to-binary:
|
|
||||||
title: "Текст → двоичный ASCII"
|
|
||||||
description: "Преобразуйте текст в двоичное ASCII-представление и обратно."
|
|
||||||
19
mixins/copyable.mixin.ts
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import {Component, Vue} from 'nuxt-property-decorator'
|
||||||
|
|
||||||
|
const copyToClipboard = (text: string) => {
|
||||||
|
const input = document.createElement('textarea')
|
||||||
|
input.innerHTML = text
|
||||||
|
document.body.appendChild(input)
|
||||||
|
input.select()
|
||||||
|
const result = document.execCommand('copy')
|
||||||
|
document.body.removeChild(input)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
@Component
|
||||||
|
export class CopyableMixin extends Vue {
|
||||||
|
copy(text: string|number, toastText = 'Copied to clipboard !') {
|
||||||
|
copyToClipboard(String(text))
|
||||||
|
this.$toast.success(toastText)
|
||||||
|
}
|
||||||
|
}
|
||||||
12
mixins/tool-config.mixin.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import {Component, Vue} from 'nuxt-property-decorator'
|
||||||
|
import {ToolConfig} from '~/types/ToolConfig'
|
||||||
|
|
||||||
|
@Component
|
||||||
|
export class ToolConfigMixin extends Vue {
|
||||||
|
public $toolConfig!: ToolConfig;
|
||||||
|
|
||||||
|
beforeCreate() {
|
||||||
|
// @ts-ignore
|
||||||
|
this.$toolConfig = this.$options.__toolConfig
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +0,0 @@
|
|||||||
[[redirects]]
|
|
||||||
from = "/*"
|
|
||||||
to = "/index.html"
|
|
||||||
status = 200
|
|
||||||
10
nginx.conf
@ -1,10 +0,0 @@
|
|||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name localhost;
|
|
||||||
root /usr/share/nginx/html;
|
|
||||||
index index.html;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
try_files $uri $uri/ /index.html;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
152
nuxt.config.js
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
import colors from 'vuetify/es5/util/colors'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
// Enable server-side rendering (https://go.nuxtjs.dev/ssr-mode)
|
||||||
|
ssr: true,
|
||||||
|
|
||||||
|
// Target (https://go.nuxtjs.dev/config-target)
|
||||||
|
target: 'static',
|
||||||
|
|
||||||
|
// Global page headers (https://go.nuxtjs.dev/config-head)
|
||||||
|
head: {
|
||||||
|
titleTemplate: '%s - IT-Tools',
|
||||||
|
title: 'IT-Tools',
|
||||||
|
meta: [
|
||||||
|
{charset: 'utf-8'},
|
||||||
|
{name: 'viewport', content: 'width=device-width, initial-scale=1'},
|
||||||
|
{
|
||||||
|
hid: 'description',
|
||||||
|
name: 'description',
|
||||||
|
content: 'Aggregated set of useful tools that every developer may need once in a while.'
|
||||||
|
},
|
||||||
|
{hid: 'keywords', name: 'keywords', content: ['tools', 'tool', 'it', 'developer', 'web', 'computing']}
|
||||||
|
],
|
||||||
|
link: [{rel: 'icon', type: 'image/x-icon', href: '/favicon.ico'}]
|
||||||
|
},
|
||||||
|
|
||||||
|
// Global CSS (https://go.nuxtjs.dev/config-css)
|
||||||
|
css: [],
|
||||||
|
|
||||||
|
// Plugins to run before rendering page (https://go.nuxtjs.dev/config-plugins)
|
||||||
|
plugins: [
|
||||||
|
{src: '~/plugins/pwa-update.plugin.ts', mode: 'client'},
|
||||||
|
'~/plugins/vuetify-toast'
|
||||||
|
],
|
||||||
|
|
||||||
|
// Auto import components (https://go.nuxtjs.dev/config-components)
|
||||||
|
components: true,
|
||||||
|
|
||||||
|
// Modules for dev and build (recommended) (https://go.nuxtjs.dev/config-modules)
|
||||||
|
buildModules: [
|
||||||
|
// https://go.nuxtjs.dev/typescript
|
||||||
|
'@nuxt/typescript-build',
|
||||||
|
// https://go.nuxtjs.dev/vuetify
|
||||||
|
'@nuxtjs/vuetify',
|
||||||
|
// '@nuxtjs/router-extras'
|
||||||
|
'~/buildModules/tool-config',
|
||||||
|
'~/buildModules/memo',
|
||||||
|
'@nuxtjs/google-fonts'
|
||||||
|
],
|
||||||
|
|
||||||
|
// Modules (https://go.nuxtjs.dev/config-modules)
|
||||||
|
modules: [
|
||||||
|
// https://go.nuxtjs.dev/axios
|
||||||
|
'@nuxtjs/axios',
|
||||||
|
// https://go.nuxtjs.dev/pwa
|
||||||
|
'@nuxtjs/pwa',
|
||||||
|
'@nuxtjs/svg',
|
||||||
|
'nuxt-i18n',
|
||||||
|
'@nuxtjs/markdownit',
|
||||||
|
'vue-plausible',
|
||||||
|
'@nuxtjs/sitemap' // Must stay last
|
||||||
|
],
|
||||||
|
|
||||||
|
plausible: {
|
||||||
|
domain: process.env.NUXT_ENV_PLAUSIBLE_DOMAIN,
|
||||||
|
apiHost: process.env.NUXT_ENV_PLAUSIBLE_API_HOST,
|
||||||
|
trackLocalhost: false
|
||||||
|
},
|
||||||
|
|
||||||
|
// Axios module configuration (https://go.nuxtjs.dev/config-axios)
|
||||||
|
axios: {},
|
||||||
|
|
||||||
|
// Vuetify module configuration (https://go.nuxtjs.dev/config-vuetify)
|
||||||
|
vuetify: {
|
||||||
|
defaultAssets: {
|
||||||
|
icons: 'mdi'
|
||||||
|
},
|
||||||
|
icons: {
|
||||||
|
iconfont: 'mdi'
|
||||||
|
},
|
||||||
|
customVariables: ['~/assets/variables.scss'],
|
||||||
|
treeShake: {
|
||||||
|
components: [
|
||||||
|
'VSnackbar',
|
||||||
|
'VBtn',
|
||||||
|
'VIcon'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
theme: {
|
||||||
|
dark: true,
|
||||||
|
options: {customProperties: true},
|
||||||
|
themes: {
|
||||||
|
dark: {
|
||||||
|
primary: '#05e677',
|
||||||
|
accent: colors.grey.darken3,
|
||||||
|
secondary: colors.amber.darken3,
|
||||||
|
info: colors.teal.lighten1,
|
||||||
|
warning: colors.amber.base,
|
||||||
|
error: colors.deepOrange.accent4,
|
||||||
|
success: colors.green.accent3,
|
||||||
|
background: '#324148',
|
||||||
|
foreground: '#28353b',
|
||||||
|
toolbar: '#243137'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
i18n: {
|
||||||
|
vueI18nLoader: true,
|
||||||
|
locales: ['en'],
|
||||||
|
defaultLocale: 'en',
|
||||||
|
strategy: 'no_prefix'
|
||||||
|
},
|
||||||
|
|
||||||
|
// Build Configuration (https://go.nuxtjs.dev/config-build)
|
||||||
|
build: {
|
||||||
|
extractCSS: true
|
||||||
|
},
|
||||||
|
|
||||||
|
router: {},
|
||||||
|
|
||||||
|
googleFonts: {
|
||||||
|
display: 'swap',
|
||||||
|
prefetch: true,
|
||||||
|
preconnect: true,
|
||||||
|
preload: true,
|
||||||
|
families: {
|
||||||
|
Roboto: {
|
||||||
|
wght: [300, 400, 500, 700, 900]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
sitemap: {
|
||||||
|
hostname: 'https://it-tools.tech',
|
||||||
|
gzip: true
|
||||||
|
},
|
||||||
|
|
||||||
|
markdownit: {
|
||||||
|
preset: 'default',
|
||||||
|
linkify: true,
|
||||||
|
breaks: true,
|
||||||
|
runtime: true,
|
||||||
|
typographer: true,
|
||||||
|
html: false,
|
||||||
|
use: [
|
||||||
|
'markdown-it-anchor',
|
||||||
|
'markdown-it-highlightjs'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
45636
package-lock.json
generated
Normal file
194
package.json
@ -1,15 +1,17 @@
|
|||||||
{
|
{
|
||||||
"name": "it-tools",
|
"name": "it-tools",
|
||||||
"type": "module",
|
"version": "2.0.0-beta.0",
|
||||||
"version": "2024.10.22-7ca5933",
|
"private": false,
|
||||||
"packageManager": "pnpm@9.11.0",
|
"description": "Aggregated set of useful tools that every developer may need once in a while.",
|
||||||
"description": "Collection of handy online tools for developers, with great UX. ",
|
"license": "MIT",
|
||||||
"author": "Corentin Th <corentin.thomasset74+it-tools@gmail.com> (https://corentin.tech)",
|
|
||||||
"license": "GNU GPLv3",
|
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/CorentinTh/it-tools"
|
"url": "https://github.com/CorentinTh/it-tools"
|
||||||
},
|
},
|
||||||
|
"funding": "https://github.com/sponsors/CorentinTh",
|
||||||
|
"author": "Corentin Th <corentin.thomasset74+npm@gmail.com> (https://github.com/CorentinTh)",
|
||||||
|
"homepage": "https://it-tools.tech",
|
||||||
|
"bugs": "https://github.com/CorentinTh/it-tools/issues",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"productivity",
|
"productivity",
|
||||||
"converter",
|
"converter",
|
||||||
@ -22,132 +24,74 @@
|
|||||||
"developer-productivity"
|
"developer-productivity"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "nuxt",
|
||||||
"build": "vue-tsc --noEmit && NODE_OPTIONS=--max_old_space_size=4096 vite build",
|
"build": "npm run generate",
|
||||||
"preview": "vite preview --port 5050",
|
"start": "nuxt start",
|
||||||
"test": "npm run test:unit",
|
"generate": "nuxt generate",
|
||||||
"test:unit": "vitest --environment jsdom",
|
"lint:commit": "commitlint --from $(git rev-list --max-parents=0 HEAD)",
|
||||||
"test:e2e": "playwright test",
|
"lint:js": "eslint --ext .js,.vue --ignore-path=.gitignore --max-warnings=0 .",
|
||||||
"test:e2e:dev": "BASE_URL=http://localhost:5173 NO_WEB_SERVER=true playwright test",
|
"lint": "npm run lint:js && npm run lint:commit",
|
||||||
"coverage": "vitest run --coverage",
|
"test": "jest",
|
||||||
"typecheck": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false",
|
"prepare": "husky install",
|
||||||
"lint": "eslint src --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --ignore-path .gitignore",
|
"release": "standard-version"
|
||||||
"script:create:tool": "node scripts/create-tool.mjs",
|
|
||||||
"script:create:ui": "hygen generator ui-component",
|
|
||||||
"release": "node ./scripts/release.mjs"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@it-tools/bip39": "^0.0.4",
|
"@nuxtjs/axios": "^5.13.6",
|
||||||
"@it-tools/oggen": "^1.3.0",
|
"@nuxtjs/markdownit": "^2.0.0",
|
||||||
"@regexper/render": "^1.0.0",
|
"@nuxtjs/pwa": "^3.0.2",
|
||||||
"@sindresorhus/slugify": "^2.2.1",
|
"@nuxtjs/sitemap": "^2.4.0",
|
||||||
"@tabler/icons-vue": "^3.20.0",
|
"@nuxtjs/toast": "^3.3.1",
|
||||||
"@tiptap/pm": "2.1.6",
|
"bip39": "^3.0.4",
|
||||||
"@tiptap/starter-kit": "2.1.6",
|
|
||||||
"@tiptap/vue-3": "2.0.3",
|
|
||||||
"@types/figlet": "^1.5.8",
|
|
||||||
"@types/markdown-it": "^13.0.7",
|
|
||||||
"@vicons/material": "^0.12.0",
|
|
||||||
"@vicons/tabler": "^0.12.0",
|
|
||||||
"@vueuse/core": "^10.3.0",
|
|
||||||
"@vueuse/head": "^1.0.0",
|
|
||||||
"@vueuse/router": "^10.0.0",
|
|
||||||
"bcryptjs": "^2.4.3",
|
|
||||||
"change-case": "^4.1.2",
|
"change-case": "^4.1.2",
|
||||||
"colord": "^2.9.3",
|
"color-convert": "^2.0.1",
|
||||||
"composerize-ts": "^0.6.2",
|
"color-name": "^1.1.4",
|
||||||
"country-code-lookup": "^0.1.0",
|
"convert-units": "^2.3.4",
|
||||||
|
"core-js": "^3.21.1",
|
||||||
"cron-validator": "^1.3.1",
|
"cron-validator": "^1.3.1",
|
||||||
"cronstrue": "^2.26.0",
|
"cronstrue": "^1.125.0",
|
||||||
"crypto-js": "^4.1.1",
|
"crypto-js": "^4.1.1",
|
||||||
"date-fns": "^2.29.3",
|
"markdown-it-anchor": "^8.4.1",
|
||||||
"dompurify": "^3.0.6",
|
"markdown-it-highlightjs": "^3.6.0",
|
||||||
"email-normalizer": "^1.0.0",
|
"nuxt": "^2.15.8",
|
||||||
"emojilib": "^3.0.10",
|
"nuxt-i18n": "^6.28.1",
|
||||||
"figlet": "^1.7.0",
|
"qrcode.vue": "^3.3.3",
|
||||||
"figue": "^1.2.0",
|
"vue-plausible": "^1.3.1",
|
||||||
"fuse.js": "^6.6.2",
|
"vuetify": "^2.6.3",
|
||||||
"highlight.js": "^11.7.0",
|
"vuetify-toast-snackbar": "^0.6.1"
|
||||||
"iarna-toml-esm": "^3.0.5",
|
|
||||||
"ibantools": "^4.3.3",
|
|
||||||
"js-base64": "^3.7.6",
|
|
||||||
"json5": "^2.2.3",
|
|
||||||
"jwt-decode": "^3.1.2",
|
|
||||||
"libphonenumber-js": "^1.10.28",
|
|
||||||
"lodash": "^4.17.21",
|
|
||||||
"markdown-it": "^14.0.0",
|
|
||||||
"marked": "^10.0.0",
|
|
||||||
"mathjs": "^11.9.1",
|
|
||||||
"mime-types": "^2.1.35",
|
|
||||||
"monaco-editor": "^0.43.0",
|
|
||||||
"naive-ui": "^2.35.0",
|
|
||||||
"netmask": "^2.0.2",
|
|
||||||
"node-forge": "^1.3.1",
|
|
||||||
"oui-data": "^1.0.10",
|
|
||||||
"pdf-signature-reader": "^1.4.2",
|
|
||||||
"pinia": "^2.0.34",
|
|
||||||
"plausible-tracker": "^0.3.8",
|
|
||||||
"qrcode": "^1.5.1",
|
|
||||||
"randexp": "^0.5.3",
|
|
||||||
"sql-formatter": "^13.0.0",
|
|
||||||
"ua-parser-js": "^1.0.35",
|
|
||||||
"ulid": "^2.3.0",
|
|
||||||
"unicode-emoji-json": "^0.4.0",
|
|
||||||
"unplugin-auto-import": "^0.16.4",
|
|
||||||
"uuid": "^9.0.0",
|
|
||||||
"vue": "^3.3.4",
|
|
||||||
"vue-i18n": "^9.9.1",
|
|
||||||
"vue-router": "^4.1.6",
|
|
||||||
"vue-shadow-dom": "^4.2.0",
|
|
||||||
"vue-tsc": "^1.8.1",
|
|
||||||
"vuedraggable": "^4.1.0",
|
|
||||||
"xml-formatter": "^3.3.2",
|
|
||||||
"xml-js": "^1.6.11",
|
|
||||||
"yaml": "^2.2.1"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@antfu/eslint-config": "^0.41.0",
|
"@commitlint/cli": "^16.2.1",
|
||||||
"@iconify-json/mdi": "^1.1.50",
|
"@commitlint/config-conventional": "^16.2.1",
|
||||||
"@intlify/unplugin-vue-i18n": "^2.0.0",
|
"@nuxt/types": "^2.15.8",
|
||||||
"@playwright/test": "^1.32.3",
|
"@nuxt/typescript-build": "^2.1.0",
|
||||||
"@rushstack/eslint-patch": "^1.2.0",
|
"@nuxtjs/eslint-config": "^6.0.1",
|
||||||
"@tsconfig/node18": "^18.2.0",
|
"@nuxtjs/eslint-config-typescript": "^6.0.0",
|
||||||
"@types/bcryptjs": "^2.4.2",
|
"@nuxtjs/eslint-module": "^3.0.2",
|
||||||
|
"@nuxtjs/google-fonts": "^1.3.0",
|
||||||
|
"@nuxtjs/svg": "^0.4.0",
|
||||||
|
"@nuxtjs/vuetify": "^1.12.3",
|
||||||
|
"@types/color-convert": "^2.0.0",
|
||||||
|
"@types/color-name": "^1.1.1",
|
||||||
|
"@types/convert-units": "^2.3.5",
|
||||||
"@types/crypto-js": "^4.1.1",
|
"@types/crypto-js": "^4.1.1",
|
||||||
"@types/dompurify": "^3.0.5",
|
"@vue/test-utils": "^1.3.0",
|
||||||
"@types/jsdom": "^21.0.0",
|
"babel-core": "7.0.0-bridge.0",
|
||||||
"@types/lodash": "^4.14.192",
|
"babel-eslint": "^10.1.0",
|
||||||
"@types/mime-types": "^2.1.1",
|
"babel-jest": "^27.5.1",
|
||||||
"@types/netmask": "^2.0.0",
|
"eslint": "^7.32.0",
|
||||||
"@types/node": "^18.15.11",
|
"eslint-config-prettier": "^8.4.0",
|
||||||
"@types/node-forge": "^1.3.2",
|
"eslint-plugin-nuxt": "^3.1.0",
|
||||||
"@types/qrcode": "^1.5.0",
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
"@types/ua-parser-js": "^0.7.36",
|
"eslint-plugin-promise": "^6.0.0",
|
||||||
"@types/uuid": "^9.0.0",
|
"husky": "^7.0.4",
|
||||||
"@unocss/eslint-config": "^0.57.0",
|
"jest": "^27.5.1",
|
||||||
"@vitejs/plugin-vue": "^4.3.2",
|
"less": "^4.1.2",
|
||||||
"@vitejs/plugin-vue-jsx": "^3.0.2",
|
"less-loader": "^7.1.0",
|
||||||
"@vue/compiler-sfc": "^3.2.47",
|
"markdown-toc": "^1.2.0",
|
||||||
"@vue/runtime-dom": "^3.3.4",
|
"nuxt-property-decorator": "^2.9.1",
|
||||||
"@vue/test-utils": "^2.3.2",
|
"standard-version": "^9.3.2",
|
||||||
"@vue/tsconfig": "^0.4.0",
|
"ts-jest": "^27.1.3",
|
||||||
"consola": "^3.0.2",
|
"vue-jest": "^3.0.4",
|
||||||
"eslint": "^8.47.0",
|
"yaml": "^1.10.2"
|
||||||
"hygen": "^6.2.11",
|
|
||||||
"jsdom": "^22.0.0",
|
|
||||||
"less": "^4.1.3",
|
|
||||||
"prettier": "^3.0.0",
|
|
||||||
"typescript": "~5.2.0",
|
|
||||||
"unocss": "^0.65.1",
|
|
||||||
"unocss-preset-scrollbar": "^0.2.1",
|
|
||||||
"unplugin-icons": "^0.17.0",
|
|
||||||
"unplugin-vue-components": "^0.25.0",
|
|
||||||
"vite": "^4.4.9",
|
|
||||||
"vite-plugin-pwa": "^0.16.0",
|
|
||||||
"vite-plugin-vue-markdown": "^0.23.5",
|
|
||||||
"vite-svg-loader": "^4.0.0",
|
|
||||||
"vitest": "^0.34.0",
|
|
||||||
"workbox-window": "^7.0.0",
|
|
||||||
"zx": "^7.2.1"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
6
pages/README.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# PAGES
|
||||||
|
|
||||||
|
This directory contains your Application Views and Routes.
|
||||||
|
The framework reads all the `*.vue` files inside this directory and creates the router of your application.
|
||||||
|
|
||||||
|
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing).
|
||||||
106
pages/about.vue
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
<template>
|
||||||
|
<div class="about-page mt-10">
|
||||||
|
<v-row justify="center">
|
||||||
|
<v-col cols="12" sm="6" md="7" xl="5" class="about-section">
|
||||||
|
<v-card>
|
||||||
|
<v-card-title class="justify-center text-h4">
|
||||||
|
<div class="pt-5">
|
||||||
|
About
|
||||||
|
</div>
|
||||||
|
</v-card-title>
|
||||||
|
<v-card-text>
|
||||||
|
Welcome to IT-Tools! This wonderful website, originally created with ❤ by <a href="https://corentin-thomasset.fr" target="_blank" rel="noopener noreferrer">Corentin Thomasset</a>, aggregate a set of useful tools that every developer may need once in a while. And don't forget to add IT-Tools to your shortcut bar (press <code>Ctrl + D</code>).
|
||||||
|
|
||||||
|
<v-row class="mt-10">
|
||||||
|
<v-col cols="12" lg="6" md="12">
|
||||||
|
<h2>A tool is missing?</h2>
|
||||||
|
<p class="text-justify">
|
||||||
|
If you need a tool that is not currently not present here, and you think can be
|
||||||
|
relevant, you are welcome to submit a feature request <a
|
||||||
|
href="//github.com/CorentinTh/it-tools/issues/new?assignees=CorentinTh&labels=enhancement&template=feature_request.md&title=%5BFEAT%5D%20My%20feature"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>here</a>.
|
||||||
|
</p>
|
||||||
|
</v-col>
|
||||||
|
<v-col cols="12" lg="6" md="12">
|
||||||
|
<h2>Found a bug?</h2>
|
||||||
|
<p class="text-justify">
|
||||||
|
If you found a bug, or something broken that doesn't work as expected, please fill a bug report here <a
|
||||||
|
href="//github.com/CorentinTh/it-tools/issues/new?assignees=CorentinTh&labels=bug&template=bug_report.md&title=%5BBUG%5D%20My%20bug"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>here</a>.
|
||||||
|
</p>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
|
<br>
|
||||||
|
<v-card>
|
||||||
|
<v-card-title class="justify-center text-h4">
|
||||||
|
<div class="pt-5">
|
||||||
|
Contributors
|
||||||
|
</div>
|
||||||
|
</v-card-title>
|
||||||
|
<v-card-text>
|
||||||
|
<GithubContributors />
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
|
</v-col>
|
||||||
|
<v-col cols="12" sm="6" md="4">
|
||||||
|
<v-card>
|
||||||
|
<v-card-title class="justify-center text-h4">
|
||||||
|
<div class="pt-5">
|
||||||
|
Changelog
|
||||||
|
</div>
|
||||||
|
</v-card-title>
|
||||||
|
<v-card-text>
|
||||||
|
<div class="changelog" v-html="changelog" />
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {Component, Vue} from 'nuxt-property-decorator'
|
||||||
|
import GithubContributors from '@/components/GithubContributors.vue'
|
||||||
|
import changelog from '@/CHANGELOG.md'
|
||||||
|
|
||||||
|
@Component({components: {GithubContributors}})
|
||||||
|
export default class About extends Vue {
|
||||||
|
changelog = changelog.replace(/<h1>(.*?)<\/p>/is, '') // Remove h1 and first paragraphe
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
|
||||||
|
.about-page {
|
||||||
|
.about-section{
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
|
||||||
|
.changelog {
|
||||||
|
h2 {
|
||||||
|
|
||||||
|
&:not(:first-child) {
|
||||||
|
margin-top: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin-top: 10px;
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-card-title{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
15
pages/how-to-report-bug-or-request.vue
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<template>
|
||||||
|
<v-row justify="center" align="center">
|
||||||
|
<v-col cols="12" sm="12" md="8">
|
||||||
|
<h1>How-to-report-bug-or-request</h1>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {Component, Vue} from 'nuxt-property-decorator'
|
||||||
|
|
||||||
|
@Component
|
||||||
|
export default class HowToReportBugOrRequest extends Vue {
|
||||||
|
}
|
||||||
|
</script>
|
||||||
88
pages/index.vue
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
<template>
|
||||||
|
<v-row justify="center" align="center">
|
||||||
|
<v-col lg="1" />
|
||||||
|
<v-col lg="4">
|
||||||
|
<div>
|
||||||
|
<HelloSvg />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<v-card>
|
||||||
|
<v-card-title>IT Tools</v-card-title>
|
||||||
|
<v-card-text>
|
||||||
|
<h2>Hello, World!</h2>
|
||||||
|
Welcome to IT-Tools! This wonderful website, originally created with ❤ by Corentin Thomasset, aggregate a set
|
||||||
|
of useful tools that every developer may need once in a while. And don't forget to add IT-Tools to your
|
||||||
|
shortcut bar (press Ctrl + D).
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
|
</v-col>
|
||||||
|
<v-col lg="1" />
|
||||||
|
<v-col cols="12" sm="12" md="12" lg="5">
|
||||||
|
<v-row>
|
||||||
|
<v-col
|
||||||
|
v-for="(items, section) in $toolList"
|
||||||
|
:key="section"
|
||||||
|
cols="12"
|
||||||
|
sm="12"
|
||||||
|
md="6"
|
||||||
|
lg="6"
|
||||||
|
class="tool-group"
|
||||||
|
>
|
||||||
|
<v-card>
|
||||||
|
<v-card-title>{{ section }}</v-card-title>
|
||||||
|
<v-card-text>
|
||||||
|
<v-list>
|
||||||
|
<v-list-item
|
||||||
|
v-for="(item, i) in items"
|
||||||
|
:key="i"
|
||||||
|
:to="item.path"
|
||||||
|
router
|
||||||
|
exact
|
||||||
|
>
|
||||||
|
<v-list-item-action>
|
||||||
|
<v-icon>{{ item.icon }}</v-icon>
|
||||||
|
</v-list-item-action>
|
||||||
|
<v-list-item-content>
|
||||||
|
<v-list-item-title v-text="item.title" />
|
||||||
|
</v-list-item-content>
|
||||||
|
</v-list-item>
|
||||||
|
</v-list>
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</v-col>
|
||||||
|
<v-col lg="1" />
|
||||||
|
</v-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {Component, Vue} from 'nuxt-property-decorator'
|
||||||
|
import HelloSvg from '~/assets/hello.svg?inline'
|
||||||
|
|
||||||
|
@Component({components: {HelloSvg}})
|
||||||
|
export default class Index extends Vue {
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.v-list {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tool-group {
|
||||||
|
.v-card__title {
|
||||||
|
background: var(--v-primary-base) !important;
|
||||||
|
background: linear-gradient(90deg, rgba(37, 99, 108, 1) 0%, rgba(59, 149, 111, 1) 60%, rgba(71, 177, 113, 1) 100%) !important;
|
||||||
|
padding-left: 33px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-list-item {
|
||||||
|
padding-left: 31px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-card__text {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -1,65 +0,0 @@
|
|||||||
import { defineConfig, devices } from '@playwright/test';
|
|
||||||
|
|
||||||
const isCI = !!process.env.CI;
|
|
||||||
const baseUrl = process.env.BASE_URL || 'http://localhost:5050';
|
|
||||||
const useWebServer = process.env.NO_WEB_SERVER !== 'true';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* See https://playwright.dev/docs/test-configuration.
|
|
||||||
*/
|
|
||||||
export default defineConfig({
|
|
||||||
testDir: './src',
|
|
||||||
testMatch: /\.e2e\.(spec\.)?ts$/,
|
|
||||||
/* Run tests in files in parallel */
|
|
||||||
fullyParallel: true,
|
|
||||||
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
|
||||||
forbidOnly: isCI,
|
|
||||||
/* Retry on CI only */
|
|
||||||
retries: isCI ? 2 : 0,
|
|
||||||
/* Opt out of parallel tests on CI. */
|
|
||||||
workers: isCI ? 1 : undefined,
|
|
||||||
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
|
||||||
reporter: 'html',
|
|
||||||
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
|
||||||
use: {
|
|
||||||
/* Base URL to use in actions like `await page.goto('/')`. */
|
|
||||||
baseURL: baseUrl,
|
|
||||||
|
|
||||||
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
|
||||||
trace: 'on-first-retry',
|
|
||||||
|
|
||||||
testIdAttribute: 'data-test-id',
|
|
||||||
locale: 'en-GB',
|
|
||||||
timezoneId: 'Europe/Paris',
|
|
||||||
},
|
|
||||||
|
|
||||||
/* Configure projects for major browsers */
|
|
||||||
projects: [
|
|
||||||
{
|
|
||||||
name: 'chromium',
|
|
||||||
use: { ...devices['Desktop Chrome'] },
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
name: 'firefox',
|
|
||||||
use: { ...devices['Desktop Firefox'] },
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
name: 'webkit',
|
|
||||||
use: { ...devices['Desktop Safari'] },
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
/* Run your local dev server before starting the tests */
|
|
||||||
|
|
||||||
...(useWebServer
|
|
||||||
&& {
|
|
||||||
webServer: {
|
|
||||||
command: 'npm run preview',
|
|
||||||
url: 'http://localhost:5050',
|
|
||||||
reuseExistingServer: !isCI,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
),
|
|
||||||
});
|
|
||||||
26
plugins/pwa-update.plugin.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import { Plugin } from '@nuxt/types'
|
||||||
|
|
||||||
|
const pwaUpdatePlugin: Plugin = async () => {
|
||||||
|
// @ts-ignore
|
||||||
|
const workbox = await window.$workbox
|
||||||
|
|
||||||
|
if (!workbox) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.debug("Workbox couldn't be loaded.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
workbox.addEventListener('installed', (event: { isUpdate: boolean }) => {
|
||||||
|
if (!event.isUpdate) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.debug('The PWA is on the latest version.')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.debug('There is an update for the PWA, reloading...')
|
||||||
|
window.location.reload()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export default pwaUpdatePlugin
|
||||||
9
plugins/vuetify-toast.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import VuetifyToast from 'vuetify-toast-snackbar'
|
||||||
|
|
||||||
|
// @ts-ignore
|
||||||
|
export default ({ $vuetify }) => {
|
||||||
|
Vue.use(VuetifyToast, {
|
||||||
|
$vuetify
|
||||||
|
})
|
||||||
|
}
|
||||||
12507
pnpm-lock.yaml
generated
|
Before Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 155 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 15 KiB |
@ -1,218 +0,0 @@
|
|||||||
flf2a$ 2 1 8 -1 13
|
|
||||||
|
|
||||||
1row font by unknown
|
|
||||||
=======================
|
|
||||||
|
|
||||||
|
|
||||||
-> Conversion to FigLet font by MEPH. (Part of ASCII Editor Service Pack I)
|
|
||||||
(http://studenten.freepage.de/meph/ascii/ascii/editor/_index.htm)
|
|
||||||
-> Defined: ASCII code alphanumeric
|
|
||||||
-> Uppercase characters only.
|
|
||||||
|
|
||||||
|
|
||||||
Was a part of a '1row' font collection. Author unknown.
|
|
||||||
|
|
||||||
$@
|
|
||||||
$@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
(\) @
|
|
||||||
@@
|
|
||||||
'| @
|
|
||||||
@@
|
|
||||||
^/_ @
|
|
||||||
@@
|
|
||||||
-} @
|
|
||||||
@@
|
|
||||||
+| @
|
|
||||||
@@
|
|
||||||
;~ @
|
|
||||||
@@
|
|
||||||
(o @
|
|
||||||
@@
|
|
||||||
"/ @
|
|
||||||
@@
|
|
||||||
{} @
|
|
||||||
@@
|
|
||||||
"| @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
/\ @
|
|
||||||
@@
|
|
||||||
]3 @
|
|
||||||
@@
|
|
||||||
( @
|
|
||||||
@@
|
|
||||||
|) @
|
|
||||||
@@
|
|
||||||
[- @
|
|
||||||
@@
|
|
||||||
/= @
|
|
||||||
@@
|
|
||||||
(_, @
|
|
||||||
@@
|
|
||||||
|-| @
|
|
||||||
@@
|
|
||||||
| @
|
|
||||||
@@
|
|
||||||
_T @
|
|
||||||
@@
|
|
||||||
/< @
|
|
||||||
@@
|
|
||||||
|_ @
|
|
||||||
@@
|
|
||||||
|\/| @
|
|
||||||
@@
|
|
||||||
|\| @
|
|
||||||
@@
|
|
||||||
() @
|
|
||||||
@@
|
|
||||||
|^ @
|
|
||||||
@@
|
|
||||||
()_ @
|
|
||||||
@@
|
|
||||||
/? @
|
|
||||||
@@
|
|
||||||
_\~ @
|
|
||||||
@@
|
|
||||||
~|~ @
|
|
||||||
@@
|
|
||||||
|_| @
|
|
||||||
@@
|
|
||||||
\/ @
|
|
||||||
@@
|
|
||||||
\/\/ @
|
|
||||||
@@
|
|
||||||
>< @
|
|
||||||
@@
|
|
||||||
`/ @
|
|
||||||
@@
|
|
||||||
~/_ @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
/\ @
|
|
||||||
@@
|
|
||||||
]3 @
|
|
||||||
@@
|
|
||||||
( @
|
|
||||||
@@
|
|
||||||
|) @
|
|
||||||
@@
|
|
||||||
[- @
|
|
||||||
@@
|
|
||||||
/= @
|
|
||||||
@@
|
|
||||||
(_, @
|
|
||||||
@@
|
|
||||||
|-| @
|
|
||||||
@@
|
|
||||||
| @
|
|
||||||
@@
|
|
||||||
_T @
|
|
||||||
@@
|
|
||||||
/< @
|
|
||||||
@@
|
|
||||||
|_ @
|
|
||||||
@@
|
|
||||||
|\/| @
|
|
||||||
@@
|
|
||||||
|\| @
|
|
||||||
@@
|
|
||||||
() @
|
|
||||||
@@
|
|
||||||
|^ @
|
|
||||||
@@
|
|
||||||
()_ @
|
|
||||||
@@
|
|
||||||
/? @
|
|
||||||
@@
|
|
||||||
_\~ @
|
|
||||||
@@
|
|
||||||
~|~ @
|
|
||||||
@@
|
|
||||||
|_| @
|
|
||||||
@@
|
|
||||||
\/ @
|
|
||||||
@@
|
|
||||||
\/\/ @
|
|
||||||
@@
|
|
||||||
>< @
|
|
||||||
@@
|
|
||||||
`/ @
|
|
||||||
@@
|
|
||||||
~/_ @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@ -1,823 +0,0 @@
|
|||||||
flf2a$ 8 8 20 -1 6
|
|
||||||
3-D font created by Daniel Henninger <dahennin@eos.ncsu.edu>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Font modified June 17, 2007 by patorjk
|
|
||||||
This was to widen the space character.
|
|
||||||
$ $@
|
|
||||||
$ $@
|
|
||||||
$ $@
|
|
||||||
$ $@
|
|
||||||
$ $@
|
|
||||||
$ $@
|
|
||||||
$ $@
|
|
||||||
$ $@@
|
|
||||||
**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
// @
|
|
||||||
**@
|
|
||||||
// @@
|
|
||||||
* *@
|
|
||||||
/* /*@
|
|
||||||
/ / @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
** ** @
|
|
||||||
************@
|
|
||||||
///**////**/ @
|
|
||||||
/** /** @
|
|
||||||
************@
|
|
||||||
///**////**/ @
|
|
||||||
// // @@
|
|
||||||
* @
|
|
||||||
*****@
|
|
||||||
/*/*/ @
|
|
||||||
/*****@
|
|
||||||
///*/*@
|
|
||||||
*****@
|
|
||||||
///*/ @
|
|
||||||
/ @@
|
|
||||||
@
|
|
||||||
** ** @
|
|
||||||
// ** @
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
** ** @
|
|
||||||
// // @@
|
|
||||||
** @
|
|
||||||
*/ * @
|
|
||||||
/ ** @
|
|
||||||
*/ * *@
|
|
||||||
* / * @
|
|
||||||
/* /* @
|
|
||||||
/ **** *@
|
|
||||||
//// / @@
|
|
||||||
**@
|
|
||||||
//*@
|
|
||||||
/ @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
**@
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
//** @
|
|
||||||
//**@
|
|
||||||
// @@
|
|
||||||
** @
|
|
||||||
//** @
|
|
||||||
//**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
// @@
|
|
||||||
** @
|
|
||||||
** /** ** @
|
|
||||||
//** /** ** @
|
|
||||||
**************@
|
|
||||||
///**//**//**/ @
|
|
||||||
** /** //** @
|
|
||||||
// /** // @
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
* @
|
|
||||||
/* @
|
|
||||||
*********@
|
|
||||||
/////*/// @
|
|
||||||
/* @
|
|
||||||
/ @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
**@
|
|
||||||
//*@
|
|
||||||
/ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
*****@
|
|
||||||
///// @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
**@
|
|
||||||
/**@
|
|
||||||
// @@
|
|
||||||
**@
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
// @@
|
|
||||||
**** @
|
|
||||||
*///**@
|
|
||||||
/* */*@
|
|
||||||
/* * /*@
|
|
||||||
/** /*@
|
|
||||||
/* /*@
|
|
||||||
/ **** @
|
|
||||||
//// @@
|
|
||||||
** @
|
|
||||||
*** @
|
|
||||||
//** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
****@
|
|
||||||
//// @@
|
|
||||||
**** @
|
|
||||||
*/// *@
|
|
||||||
/ /*@
|
|
||||||
*** @
|
|
||||||
*// @
|
|
||||||
* @
|
|
||||||
/******@
|
|
||||||
////// @@
|
|
||||||
**** @
|
|
||||||
*/// *@
|
|
||||||
/ /*@
|
|
||||||
*** @
|
|
||||||
/// *@
|
|
||||||
* /*@
|
|
||||||
/ **** @
|
|
||||||
//// @@
|
|
||||||
** @
|
|
||||||
*/* @
|
|
||||||
* /* @
|
|
||||||
******@
|
|
||||||
/////* @
|
|
||||||
/* @
|
|
||||||
/* @
|
|
||||||
/ @@
|
|
||||||
******@
|
|
||||||
/*//// @
|
|
||||||
/***** @
|
|
||||||
///// *@
|
|
||||||
/*@
|
|
||||||
* /*@
|
|
||||||
/ **** @
|
|
||||||
//// @@
|
|
||||||
**** @
|
|
||||||
*/// *@
|
|
||||||
/* / @
|
|
||||||
/***** @
|
|
||||||
/*/// *@
|
|
||||||
/* /*@
|
|
||||||
/ **** @
|
|
||||||
//// @@
|
|
||||||
******@
|
|
||||||
//////*@
|
|
||||||
/*@
|
|
||||||
* @
|
|
||||||
* @
|
|
||||||
* @
|
|
||||||
* @
|
|
||||||
/ @@
|
|
||||||
**** @
|
|
||||||
*/// *@
|
|
||||||
/* /*@
|
|
||||||
/ **** @
|
|
||||||
*/// *@
|
|
||||||
/* /*@
|
|
||||||
/ **** @
|
|
||||||
//// @@
|
|
||||||
**** @
|
|
||||||
*/// *@
|
|
||||||
/* /*@
|
|
||||||
/ **** @
|
|
||||||
///* @
|
|
||||||
* @
|
|
||||||
* @
|
|
||||||
/ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
**@
|
|
||||||
// @
|
|
||||||
**@
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
**@
|
|
||||||
// @
|
|
||||||
**@
|
|
||||||
//*@
|
|
||||||
/ @@
|
|
||||||
**@
|
|
||||||
**/ @
|
|
||||||
**/ @
|
|
||||||
**/ @
|
|
||||||
// ** @
|
|
||||||
// ** @
|
|
||||||
// **@
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
******@
|
|
||||||
////// @
|
|
||||||
******@
|
|
||||||
////// @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
** @
|
|
||||||
// ** @
|
|
||||||
// ** @
|
|
||||||
// **@
|
|
||||||
**/ @
|
|
||||||
**/ @
|
|
||||||
**/ @
|
|
||||||
// @@
|
|
||||||
**** @
|
|
||||||
**//**@
|
|
||||||
/** /**@
|
|
||||||
// ** @
|
|
||||||
** @
|
|
||||||
// @
|
|
||||||
** @
|
|
||||||
// @@
|
|
||||||
**** @
|
|
||||||
*/// *@
|
|
||||||
/* **/*@
|
|
||||||
/*/* /*@
|
|
||||||
/*/ ** @
|
|
||||||
/* // @
|
|
||||||
/ *****@
|
|
||||||
///// @@
|
|
||||||
** @
|
|
||||||
**** @
|
|
||||||
**//** @
|
|
||||||
** //** @
|
|
||||||
**********@
|
|
||||||
/**//////**@
|
|
||||||
/** /**@
|
|
||||||
// // @@
|
|
||||||
****** @
|
|
||||||
/*////** @
|
|
||||||
/* /** @
|
|
||||||
/****** @
|
|
||||||
/*//// **@
|
|
||||||
/* /**@
|
|
||||||
/******* @
|
|
||||||
/////// @@
|
|
||||||
****** @
|
|
||||||
**////**@
|
|
||||||
** // @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
//** **@
|
|
||||||
//****** @
|
|
||||||
////// @@
|
|
||||||
******* @
|
|
||||||
/**////** @
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
/** ** @
|
|
||||||
/******* @
|
|
||||||
/////// @@
|
|
||||||
********@
|
|
||||||
/**///// @
|
|
||||||
/** @
|
|
||||||
/******* @
|
|
||||||
/**//// @
|
|
||||||
/** @
|
|
||||||
/********@
|
|
||||||
//////// @@
|
|
||||||
********@
|
|
||||||
/**///// @
|
|
||||||
/** @
|
|
||||||
/******* @
|
|
||||||
/**//// @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
// @@
|
|
||||||
******** @
|
|
||||||
**//////**@
|
|
||||||
** // @
|
|
||||||
/** @
|
|
||||||
/** *****@
|
|
||||||
//** ////**@
|
|
||||||
//******** @
|
|
||||||
//////// @@
|
|
||||||
** **@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
/**********@
|
|
||||||
/**//////**@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
// // @@
|
|
||||||
**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
// @@
|
|
||||||
**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
** /**@
|
|
||||||
//***** @
|
|
||||||
///// @@
|
|
||||||
** **@
|
|
||||||
/** ** @
|
|
||||||
/** ** @
|
|
||||||
/**** @
|
|
||||||
/**/** @
|
|
||||||
/**//** @
|
|
||||||
/** //**@
|
|
||||||
// // @@
|
|
||||||
** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/********@
|
|
||||||
//////// @@
|
|
||||||
**** ****@
|
|
||||||
/**/** **/**@
|
|
||||||
/**//** ** /**@
|
|
||||||
/** //*** /**@
|
|
||||||
/** //* /**@
|
|
||||||
/** / /**@
|
|
||||||
/** /**@
|
|
||||||
// // @@
|
|
||||||
**** **@
|
|
||||||
/**/** /**@
|
|
||||||
/**//** /**@
|
|
||||||
/** //** /**@
|
|
||||||
/** //**/**@
|
|
||||||
/** //****@
|
|
||||||
/** //***@
|
|
||||||
// /// @@
|
|
||||||
******* @
|
|
||||||
**/////** @
|
|
||||||
** //**@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
//** ** @
|
|
||||||
//******* @
|
|
||||||
/////// @@
|
|
||||||
******* @
|
|
||||||
/**////**@
|
|
||||||
/** /**@
|
|
||||||
/******* @
|
|
||||||
/**//// @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
// @@
|
|
||||||
******* @
|
|
||||||
**/////** @
|
|
||||||
** //** @
|
|
||||||
/** /** @
|
|
||||||
/** **/** @
|
|
||||||
//** // ** @
|
|
||||||
//******* **@
|
|
||||||
/////// // @@
|
|
||||||
******* @
|
|
||||||
/**////** @
|
|
||||||
/** /** @
|
|
||||||
/******* @
|
|
||||||
/**///** @
|
|
||||||
/** //** @
|
|
||||||
/** //**@
|
|
||||||
// // @@
|
|
||||||
********@
|
|
||||||
**////// @
|
|
||||||
/** @
|
|
||||||
/*********@
|
|
||||||
////////**@
|
|
||||||
/**@
|
|
||||||
******** @
|
|
||||||
//////// @@
|
|
||||||
**********@
|
|
||||||
/////**/// @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
// @@
|
|
||||||
** **@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
//******* @
|
|
||||||
/////// @@
|
|
||||||
** **@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
//** ** @
|
|
||||||
//** ** @
|
|
||||||
//**** @
|
|
||||||
//** @
|
|
||||||
// @@
|
|
||||||
** **@
|
|
||||||
/** /**@
|
|
||||||
/** * /**@
|
|
||||||
/** *** /**@
|
|
||||||
/** **/**/**@
|
|
||||||
/**** //****@
|
|
||||||
/**/ ///**@
|
|
||||||
// // @@
|
|
||||||
** **@
|
|
||||||
//** ** @
|
|
||||||
//** ** @
|
|
||||||
//*** @
|
|
||||||
**/** @
|
|
||||||
** //** @
|
|
||||||
** //**@
|
|
||||||
// // @@
|
|
||||||
** **@
|
|
||||||
//** ** @
|
|
||||||
//**** @
|
|
||||||
//** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
// @@
|
|
||||||
********@
|
|
||||||
//////** @
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
********@
|
|
||||||
//////// @@
|
|
||||||
*****@
|
|
||||||
/**// @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/*****@
|
|
||||||
///// @@
|
|
||||||
** @
|
|
||||||
//** @
|
|
||||||
//** @
|
|
||||||
//** @
|
|
||||||
//** @
|
|
||||||
//** @
|
|
||||||
//**@
|
|
||||||
// @@
|
|
||||||
*****@
|
|
||||||
////**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
*****@
|
|
||||||
///// @@
|
|
||||||
** @
|
|
||||||
**/ ** @
|
|
||||||
** // **@
|
|
||||||
// // @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
*****@
|
|
||||||
///// @@
|
|
||||||
**@
|
|
||||||
/* @
|
|
||||||
/ @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
****** @
|
|
||||||
//////** @
|
|
||||||
******* @
|
|
||||||
**////** @
|
|
||||||
//********@
|
|
||||||
//////// @@
|
|
||||||
** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/****** @
|
|
||||||
/**///**@
|
|
||||||
/** /**@
|
|
||||||
/****** @
|
|
||||||
///// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
***** @
|
|
||||||
**///**@
|
|
||||||
/** // @
|
|
||||||
/** **@
|
|
||||||
//***** @
|
|
||||||
///// @@
|
|
||||||
**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
******@
|
|
||||||
**///**@
|
|
||||||
/** /**@
|
|
||||||
//******@
|
|
||||||
////// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
***** @
|
|
||||||
**///**@
|
|
||||||
/*******@
|
|
||||||
/**//// @
|
|
||||||
//******@
|
|
||||||
////// @@
|
|
||||||
****@
|
|
||||||
/**/ @
|
|
||||||
******@
|
|
||||||
///**/ @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
***** @
|
|
||||||
**///**@
|
|
||||||
/** /**@
|
|
||||||
//******@
|
|
||||||
/////**@
|
|
||||||
***** @
|
|
||||||
///// @@
|
|
||||||
** @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
/****** @
|
|
||||||
/**///**@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
// // @@
|
|
||||||
**@
|
|
||||||
// @
|
|
||||||
**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
// @@
|
|
||||||
**@
|
|
||||||
// @
|
|
||||||
**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
**/**@
|
|
||||||
//*** @
|
|
||||||
/// @@
|
|
||||||
** @
|
|
||||||
/** @
|
|
||||||
/** **@
|
|
||||||
/** ** @
|
|
||||||
/**** @
|
|
||||||
/**/** @
|
|
||||||
/**//**@
|
|
||||||
// // @@
|
|
||||||
**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
/**@
|
|
||||||
***@
|
|
||||||
/// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
********** @
|
|
||||||
//**//**//**@
|
|
||||||
/** /** /**@
|
|
||||||
/** /** /**@
|
|
||||||
*** /** /**@
|
|
||||||
/// // // @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
******* @
|
|
||||||
//**///**@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
*** /**@
|
|
||||||
/// // @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
****** @
|
|
||||||
**////**@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
//****** @
|
|
||||||
////// @@
|
|
||||||
@
|
|
||||||
****** @
|
|
||||||
/**///**@
|
|
||||||
/** /**@
|
|
||||||
/****** @
|
|
||||||
/**/// @
|
|
||||||
/** @
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
**** @
|
|
||||||
**//** @
|
|
||||||
/** /** @
|
|
||||||
//***** @
|
|
||||||
////** @
|
|
||||||
/***@
|
|
||||||
/// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
******@
|
|
||||||
//**//*@
|
|
||||||
/** / @
|
|
||||||
/** @
|
|
||||||
/*** @
|
|
||||||
/// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
******@
|
|
||||||
**//// @
|
|
||||||
//***** @
|
|
||||||
/////**@
|
|
||||||
****** @
|
|
||||||
////// @@
|
|
||||||
** @
|
|
||||||
/** @
|
|
||||||
******@
|
|
||||||
///**/ @
|
|
||||||
/** @
|
|
||||||
/** @
|
|
||||||
//** @
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
** **@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
/** /**@
|
|
||||||
//******@
|
|
||||||
////// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
** **@
|
|
||||||
/** /**@
|
|
||||||
//** /** @
|
|
||||||
//**** @
|
|
||||||
//** @
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
*** **@
|
|
||||||
//** * /**@
|
|
||||||
/** ***/**@
|
|
||||||
/****/****@
|
|
||||||
***/ ///**@
|
|
||||||
/// /// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
** **@
|
|
||||||
//** ** @
|
|
||||||
//*** @
|
|
||||||
**/** @
|
|
||||||
** //**@
|
|
||||||
// // @@
|
|
||||||
@
|
|
||||||
** **@
|
|
||||||
//** ** @
|
|
||||||
//*** @
|
|
||||||
/** @
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
******@
|
|
||||||
////** @
|
|
||||||
** @
|
|
||||||
** @
|
|
||||||
******@
|
|
||||||
////// @@
|
|
||||||
***@
|
|
||||||
**/ @
|
|
||||||
/** @
|
|
||||||
*** @
|
|
||||||
///** @
|
|
||||||
/** @
|
|
||||||
//***@
|
|
||||||
/// @@
|
|
||||||
*@
|
|
||||||
/*@
|
|
||||||
/*@
|
|
||||||
/ @
|
|
||||||
*@
|
|
||||||
/*@
|
|
||||||
/*@
|
|
||||||
/ @@
|
|
||||||
*** @
|
|
||||||
///** @
|
|
||||||
/** @
|
|
||||||
//***@
|
|
||||||
**/ @
|
|
||||||
/** @
|
|
||||||
*** @
|
|
||||||
/// @@
|
|
||||||
** *** @
|
|
||||||
//***//**@
|
|
||||||
/// // @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@ -1,818 +0,0 @@
|
|||||||
flf2a$ 8 8 20 -1 1
|
|
||||||
3d font created by xero <x@xero.nu>
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@@
|
|
||||||
██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░░ @
|
|
||||||
██@
|
|
||||||
░░ @@
|
|
||||||
█ █@
|
|
||||||
░█ ░█@
|
|
||||||
░ ░ @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
██ ██ @
|
|
||||||
████████████@
|
|
||||||
░░░██░░░░██░ @
|
|
||||||
░██ ░██ @
|
|
||||||
████████████@
|
|
||||||
░░░██░░░░██░ @
|
|
||||||
░░ ░░ @@
|
|
||||||
█ @
|
|
||||||
█████@
|
|
||||||
░█░█░ @
|
|
||||||
░█████@
|
|
||||||
░░░█░█@
|
|
||||||
█████@
|
|
||||||
░░░█░ @
|
|
||||||
░ @@
|
|
||||||
@
|
|
||||||
██ ██ @
|
|
||||||
░░ ██ @
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
██ ██ @
|
|
||||||
░░ ░░ @@
|
|
||||||
██ @
|
|
||||||
█░ █ @
|
|
||||||
░ ██ @
|
|
||||||
█░ █ █@
|
|
||||||
█ ░ █ @
|
|
||||||
░█ ░█ @
|
|
||||||
░ ████ █@
|
|
||||||
░░░░ ░ @@
|
|
||||||
██@
|
|
||||||
░░█@
|
|
||||||
░ @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
██@
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░░██ @
|
|
||||||
░░██@
|
|
||||||
░░ @@
|
|
||||||
██ @
|
|
||||||
░░██ @
|
|
||||||
░░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
░░ @@
|
|
||||||
██ @
|
|
||||||
██ ░██ ██ @
|
|
||||||
░░██ ░██ ██ @
|
|
||||||
██████████████@
|
|
||||||
░░░██░░██░░██░ @
|
|
||||||
██ ░██ ░░██ @
|
|
||||||
░░ ░██ ░░ @
|
|
||||||
░░ @@
|
|
||||||
@
|
|
||||||
█ @
|
|
||||||
░█ @
|
|
||||||
█████████@
|
|
||||||
░░░░░█░░░ @
|
|
||||||
░█ @
|
|
||||||
░ @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██@
|
|
||||||
░░█@
|
|
||||||
░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
█████@
|
|
||||||
░░░░░ @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██@
|
|
||||||
░██@
|
|
||||||
░░ @@
|
|
||||||
██@
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
░░ @@
|
|
||||||
████ @
|
|
||||||
█░░░██@
|
|
||||||
░█ █░█@
|
|
||||||
░█ █ ░█@
|
|
||||||
░██ ░█@
|
|
||||||
░█ ░█@
|
|
||||||
░ ████ @
|
|
||||||
░░░░ @@
|
|
||||||
██ @
|
|
||||||
███ @
|
|
||||||
░░██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
████@
|
|
||||||
░░░░ @@
|
|
||||||
████ @
|
|
||||||
█░░░ █@
|
|
||||||
░ ░█@
|
|
||||||
███ @
|
|
||||||
█░░ @
|
|
||||||
█ @
|
|
||||||
░██████@
|
|
||||||
░░░░░░ @@
|
|
||||||
████ @
|
|
||||||
█░░░ █@
|
|
||||||
░ ░█@
|
|
||||||
███ @
|
|
||||||
░░░ █@
|
|
||||||
█ ░█@
|
|
||||||
░ ████ @
|
|
||||||
░░░░ @@
|
|
||||||
██ @
|
|
||||||
█░█ @
|
|
||||||
█ ░█ @
|
|
||||||
██████@
|
|
||||||
░░░░░█ @
|
|
||||||
░█ @
|
|
||||||
░█ @
|
|
||||||
░ @@
|
|
||||||
██████@
|
|
||||||
░█░░░░ @
|
|
||||||
░█████ @
|
|
||||||
░░░░░ █@
|
|
||||||
░█@
|
|
||||||
█ ░█@
|
|
||||||
░ ████ @
|
|
||||||
░░░░ @@
|
|
||||||
████ @
|
|
||||||
█░░░ █@
|
|
||||||
░█ ░ @
|
|
||||||
░█████ @
|
|
||||||
░█░░░ █@
|
|
||||||
░█ ░█@
|
|
||||||
░ ████ @
|
|
||||||
░░░░ @@
|
|
||||||
██████@
|
|
||||||
░░░░░░█@
|
|
||||||
░█@
|
|
||||||
█ @
|
|
||||||
█ @
|
|
||||||
█ @
|
|
||||||
█ @
|
|
||||||
░ @@
|
|
||||||
████ @
|
|
||||||
█░░░ █@
|
|
||||||
░█ ░█@
|
|
||||||
░ ████ @
|
|
||||||
█░░░ █@
|
|
||||||
░█ ░█@
|
|
||||||
░ ████ @
|
|
||||||
░░░░ @@
|
|
||||||
████ @
|
|
||||||
█░░░ █@
|
|
||||||
░█ ░█@
|
|
||||||
░ ████ @
|
|
||||||
░░░█ @
|
|
||||||
█ @
|
|
||||||
█ @
|
|
||||||
░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██@
|
|
||||||
░░ @
|
|
||||||
██@
|
|
||||||
░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██@
|
|
||||||
░░ @
|
|
||||||
██@
|
|
||||||
░░█@
|
|
||||||
░ @@
|
|
||||||
██@
|
|
||||||
██░ @
|
|
||||||
██░ @
|
|
||||||
██░ @
|
|
||||||
░░ ██ @
|
|
||||||
░░ ██ @
|
|
||||||
░░ ██@
|
|
||||||
░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██████@
|
|
||||||
░░░░░░ @
|
|
||||||
██████@
|
|
||||||
░░░░░░ @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
██ @
|
|
||||||
░░ ██ @
|
|
||||||
░░ ██ @
|
|
||||||
░░ ██@
|
|
||||||
██░ @
|
|
||||||
██░ @
|
|
||||||
██░ @
|
|
||||||
░░ @@
|
|
||||||
████ @
|
|
||||||
██░░██@
|
|
||||||
░██ ░██@
|
|
||||||
░░ ██ @
|
|
||||||
██ @
|
|
||||||
░░ @
|
|
||||||
██ @
|
|
||||||
░░ @@
|
|
||||||
████ @
|
|
||||||
█░░░ █@
|
|
||||||
░█ ██░█@
|
|
||||||
░█░█ ░█@
|
|
||||||
░█░ ██ @
|
|
||||||
░█ ░░ @
|
|
||||||
░ █████@
|
|
||||||
░░░░░ @@
|
|
||||||
██ @
|
|
||||||
████ @
|
|
||||||
██░░██ @
|
|
||||||
██ ░░██ @
|
|
||||||
██████████@
|
|
||||||
░██░░░░░░██@
|
|
||||||
░██ ░██@
|
|
||||||
░░ ░░ @@
|
|
||||||
██████ @
|
|
||||||
░█░░░░██ @
|
|
||||||
░█ ░██ @
|
|
||||||
░██████ @
|
|
||||||
░█░░░░ ██@
|
|
||||||
░█ ░██@
|
|
||||||
░███████ @
|
|
||||||
░░░░░░░ @@
|
|
||||||
██████ @
|
|
||||||
██░░░░██@
|
|
||||||
██ ░░ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░░██ ██@
|
|
||||||
░░██████ @
|
|
||||||
░░░░░░ @@
|
|
||||||
███████ @
|
|
||||||
░██░░░░██ @
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ██ @
|
|
||||||
░███████ @
|
|
||||||
░░░░░░░ @@
|
|
||||||
████████@
|
|
||||||
░██░░░░░ @
|
|
||||||
░██ @
|
|
||||||
░███████ @
|
|
||||||
░██░░░░ @
|
|
||||||
░██ @
|
|
||||||
░████████@
|
|
||||||
░░░░░░░░ @@
|
|
||||||
████████@
|
|
||||||
░██░░░░░ @
|
|
||||||
░██ @
|
|
||||||
░███████ @
|
|
||||||
░██░░░░ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░░ @@
|
|
||||||
████████ @
|
|
||||||
██░░░░░░██@
|
|
||||||
██ ░░ @
|
|
||||||
░██ @
|
|
||||||
░██ █████@
|
|
||||||
░░██ ░░░░██@
|
|
||||||
░░████████ @
|
|
||||||
░░░░░░░░ @@
|
|
||||||
██ ██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██████████@
|
|
||||||
░██░░░░░░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░░ ░░ @@
|
|
||||||
██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░░ @@
|
|
||||||
██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
██ ░██@
|
|
||||||
░░█████ @
|
|
||||||
░░░░░ @@
|
|
||||||
██ ██@
|
|
||||||
░██ ██ @
|
|
||||||
░██ ██ @
|
|
||||||
░████ @
|
|
||||||
░██░██ @
|
|
||||||
░██░░██ @
|
|
||||||
░██ ░░██@
|
|
||||||
░░ ░░ @@
|
|
||||||
██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░████████@
|
|
||||||
░░░░░░░░ @@
|
|
||||||
████ ████@
|
|
||||||
░██░██ ██░██@
|
|
||||||
░██░░██ ██ ░██@
|
|
||||||
░██ ░░███ ░██@
|
|
||||||
░██ ░░█ ░██@
|
|
||||||
░██ ░ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░░ ░░ @@
|
|
||||||
████ ██@
|
|
||||||
░██░██ ░██@
|
|
||||||
░██░░██ ░██@
|
|
||||||
░██ ░░██ ░██@
|
|
||||||
░██ ░░██░██@
|
|
||||||
░██ ░░████@
|
|
||||||
░██ ░░███@
|
|
||||||
░░ ░░░ @@
|
|
||||||
███████ @
|
|
||||||
██░░░░░██ @
|
|
||||||
██ ░░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░░██ ██ @
|
|
||||||
░░███████ @
|
|
||||||
░░░░░░░ @@
|
|
||||||
███████ @
|
|
||||||
░██░░░░██@
|
|
||||||
░██ ░██@
|
|
||||||
░███████ @
|
|
||||||
░██░░░░ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░░ @@
|
|
||||||
███████ @
|
|
||||||
██░░░░░██ @
|
|
||||||
██ ░░██ @
|
|
||||||
░██ ░██ @
|
|
||||||
░██ ██░██ @
|
|
||||||
░░██ ░░ ██ @
|
|
||||||
░░███████ ██@
|
|
||||||
░░░░░░░ ░░ @@
|
|
||||||
███████ @
|
|
||||||
░██░░░░██ @
|
|
||||||
░██ ░██ @
|
|
||||||
░███████ @
|
|
||||||
░██░░░██ @
|
|
||||||
░██ ░░██ @
|
|
||||||
░██ ░░██@
|
|
||||||
░░ ░░ @@
|
|
||||||
████████@
|
|
||||||
██░░░░░░ @
|
|
||||||
░██ @
|
|
||||||
░█████████@
|
|
||||||
░░░░░░░░██@
|
|
||||||
░██@
|
|
||||||
████████ @
|
|
||||||
░░░░░░░░ @@
|
|
||||||
██████████@
|
|
||||||
░░░░░██░░░ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░░ @@
|
|
||||||
██ ██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░░███████ @
|
|
||||||
░░░░░░░ @@
|
|
||||||
██ ██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░░██ ██ @
|
|
||||||
░░██ ██ @
|
|
||||||
░░████ @
|
|
||||||
░░██ @
|
|
||||||
░░ @@
|
|
||||||
██ ██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ █ ░██@
|
|
||||||
░██ ███ ░██@
|
|
||||||
░██ ██░██░██@
|
|
||||||
░████ ░░████@
|
|
||||||
░██░ ░░░██@
|
|
||||||
░░ ░░ @@
|
|
||||||
██ ██@
|
|
||||||
░░██ ██ @
|
|
||||||
░░██ ██ @
|
|
||||||
░░███ @
|
|
||||||
██░██ @
|
|
||||||
██ ░░██ @
|
|
||||||
██ ░░██@
|
|
||||||
░░ ░░ @@
|
|
||||||
██ ██@
|
|
||||||
░░██ ██ @
|
|
||||||
░░████ @
|
|
||||||
░░██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░░ @@
|
|
||||||
████████@
|
|
||||||
░░░░░░██ @
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
████████@
|
|
||||||
░░░░░░░░ @@
|
|
||||||
█████@
|
|
||||||
░██░░ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░█████@
|
|
||||||
░░░░░ @@
|
|
||||||
██ @
|
|
||||||
░░██ @
|
|
||||||
░░██ @
|
|
||||||
░░██ @
|
|
||||||
░░██ @
|
|
||||||
░░██ @
|
|
||||||
░░██@
|
|
||||||
░░ @@
|
|
||||||
█████@
|
|
||||||
░░░░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
█████@
|
|
||||||
░░░░░ @@
|
|
||||||
██ @
|
|
||||||
██░ ██ @
|
|
||||||
██ ░░ ██@
|
|
||||||
░░ ░░ @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
█████@
|
|
||||||
░░░░░ @@
|
|
||||||
██@
|
|
||||||
░█ @
|
|
||||||
░ @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██████ @
|
|
||||||
░░░░░░██ @
|
|
||||||
███████ @
|
|
||||||
██░░░░██ @
|
|
||||||
░░████████@
|
|
||||||
░░░░░░░░ @@
|
|
||||||
██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░██████ @
|
|
||||||
░██░░░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██████ @
|
|
||||||
░░░░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
█████ @
|
|
||||||
██░░░██@
|
|
||||||
░██ ░░ @
|
|
||||||
░██ ██@
|
|
||||||
░░█████ @
|
|
||||||
░░░░░ @@
|
|
||||||
██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
██████@
|
|
||||||
██░░░██@
|
|
||||||
░██ ░██@
|
|
||||||
░░██████@
|
|
||||||
░░░░░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
█████ @
|
|
||||||
██░░░██@
|
|
||||||
░███████@
|
|
||||||
░██░░░░ @
|
|
||||||
░░██████@
|
|
||||||
░░░░░░ @@
|
|
||||||
████@
|
|
||||||
░██░ @
|
|
||||||
██████@
|
|
||||||
░░░██░ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░░ @@
|
|
||||||
@
|
|
||||||
█████ @
|
|
||||||
██░░░██@
|
|
||||||
░██ ░██@
|
|
||||||
░░██████@
|
|
||||||
░░░░░██@
|
|
||||||
█████ @
|
|
||||||
░░░░░ @@
|
|
||||||
██ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░██████ @
|
|
||||||
░██░░░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░░ ░░ @@
|
|
||||||
██@
|
|
||||||
░░ @
|
|
||||||
██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░░ @@
|
|
||||||
██@
|
|
||||||
░░ @
|
|
||||||
██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
██░██@
|
|
||||||
░░███ @
|
|
||||||
░░░ @@
|
|
||||||
██ @
|
|
||||||
░██ @
|
|
||||||
░██ ██@
|
|
||||||
░██ ██ @
|
|
||||||
░████ @
|
|
||||||
░██░██ @
|
|
||||||
░██░░██@
|
|
||||||
░░ ░░ @@
|
|
||||||
██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
░██@
|
|
||||||
███@
|
|
||||||
░░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██████████ @
|
|
||||||
░░██░░██░░██@
|
|
||||||
░██ ░██ ░██@
|
|
||||||
░██ ░██ ░██@
|
|
||||||
███ ░██ ░██@
|
|
||||||
░░░ ░░ ░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
███████ @
|
|
||||||
░░██░░░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
███ ░██@
|
|
||||||
░░░ ░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██████ @
|
|
||||||
██░░░░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░░██████ @
|
|
||||||
░░░░░░ @@
|
|
||||||
@
|
|
||||||
██████ @
|
|
||||||
░██░░░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██████ @
|
|
||||||
░██░░░ @
|
|
||||||
░██ @
|
|
||||||
░░ @@
|
|
||||||
@
|
|
||||||
████ @
|
|
||||||
██░░██ @
|
|
||||||
░██ ░██ @
|
|
||||||
░░█████ @
|
|
||||||
░░░░██ @
|
|
||||||
░███@
|
|
||||||
░░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██████@
|
|
||||||
░░██░░█@
|
|
||||||
░██ ░ @
|
|
||||||
░██ @
|
|
||||||
░███ @
|
|
||||||
░░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██████@
|
|
||||||
██░░░░ @
|
|
||||||
░░█████ @
|
|
||||||
░░░░░██@
|
|
||||||
██████ @
|
|
||||||
░░░░░░ @@
|
|
||||||
██ @
|
|
||||||
░██ @
|
|
||||||
██████@
|
|
||||||
░░░██░ @
|
|
||||||
░██ @
|
|
||||||
░██ @
|
|
||||||
░░██ @
|
|
||||||
░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██ ██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░██ ░██@
|
|
||||||
░░██████@
|
|
||||||
░░░░░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██ ██@
|
|
||||||
░██ ░██@
|
|
||||||
░░██ ░██ @
|
|
||||||
░░████ @
|
|
||||||
░░██ @
|
|
||||||
░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
███ ██@
|
|
||||||
░░██ █ ░██@
|
|
||||||
░██ ███░██@
|
|
||||||
░████░████@
|
|
||||||
███░ ░░░██@
|
|
||||||
░░░ ░░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██ ██@
|
|
||||||
░░██ ██ @
|
|
||||||
░░███ @
|
|
||||||
██░██ @
|
|
||||||
██ ░░██@
|
|
||||||
░░ ░░ @@
|
|
||||||
@
|
|
||||||
██ ██@
|
|
||||||
░░██ ██ @
|
|
||||||
░░███ @
|
|
||||||
░██ @
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
░░ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
██████@
|
|
||||||
░░░░██ @
|
|
||||||
██ @
|
|
||||||
██ @
|
|
||||||
██████@
|
|
||||||
░░░░░░ @@
|
|
||||||
███@
|
|
||||||
██░ @
|
|
||||||
░██ @
|
|
||||||
███ @
|
|
||||||
░░░██ @
|
|
||||||
░██ @
|
|
||||||
░░███@
|
|
||||||
░░░ @@
|
|
||||||
█@
|
|
||||||
░█@
|
|
||||||
░█@
|
|
||||||
░ @
|
|
||||||
█@
|
|
||||||
░█@
|
|
||||||
░█@
|
|
||||||
░ @@
|
|
||||||
███ @
|
|
||||||
░░░██ @
|
|
||||||
░██ @
|
|
||||||
░░███@
|
|
||||||
██░ @
|
|
||||||
░██ @
|
|
||||||
███ @
|
|
||||||
░░░ @@
|
|
||||||
██ ███ @
|
|
||||||
░░███░░██@
|
|
||||||
░░░ ░░ @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@ -1,617 +0,0 @@
|
|||||||
flf2a$ 6 4 6 -1 4
|
|
||||||
3x5 font by Richard Kirk (rak@crosfield.co.uk).
|
|
||||||
Ported to figlet, and slightly changed (without permission :-})
|
|
||||||
by Daniel Cabeza Gras (bardo@dia.fi.upm.es)
|
|
||||||
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
@
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
# # @@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
## @
|
|
||||||
### @
|
|
||||||
## @
|
|
||||||
## @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# # @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
## @
|
|
||||||
# # @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
## @
|
|
||||||
@
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
# # @@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# # @
|
|
||||||
## @
|
|
||||||
# # @
|
|
||||||
## @@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
## @@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
## @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
## @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
# # @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# # @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
## @
|
|
||||||
# # @
|
|
||||||
# # @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
# # @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# # @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# # @
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
## @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# # @
|
|
||||||
## @
|
|
||||||
# # @
|
|
||||||
# # @@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
## @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
### @
|
|
||||||
# # @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# @
|
|
||||||
# # @
|
|
||||||
# # @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
## @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
## @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# # @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
## @
|
|
||||||
### @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
## @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
## @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
## @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# # @
|
|
||||||
## @
|
|
||||||
# # @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
## @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
## @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
## @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
# @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
### @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# @
|
|
||||||
# # @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
## @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
## @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @
|
|
||||||
# @@
|
|
||||||
@
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
## @
|
|
||||||
# @
|
|
||||||
## @@
|
|
||||||
@
|
|
||||||
# @
|
|
||||||
### @
|
|
||||||
# @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
# # @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
# # @
|
|
||||||
### @@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
## @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
@
|
|
||||||
# # @
|
|
||||||
### @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
### @
|
|
||||||
## @
|
|
||||||
# # @
|
|
||||||
## @
|
|
||||||
# @@
|
|
||||||
@ -1,411 +0,0 @@
|
|||||||
flf2a$ 4 4 18 16 2
|
|
||||||
4max.flf by Philip Menke (philippe@dds.nl)
|
|
||||||
April 1995
|
|
||||||
$ $#
|
|
||||||
$ $#
|
|
||||||
$ $#
|
|
||||||
$ $##
|
|
||||||
d8b$#
|
|
||||||
Y8P$#
|
|
||||||
`"'$#
|
|
||||||
(8)$##
|
|
||||||
o8o o8o$#
|
|
||||||
`"' `"'$#
|
|
||||||
$#
|
|
||||||
$##
|
|
||||||
__88_88__$#
|
|
||||||
""88"88""$#
|
|
||||||
__88_88__$#
|
|
||||||
""88"88""$##
|
|
||||||
.dPIIY8$#
|
|
||||||
`YbII "$#
|
|
||||||
o.`II8b$#
|
|
||||||
8boIIP'$##
|
|
||||||
.o. dP $#
|
|
||||||
`"'dP $#
|
|
||||||
dP.o.$#
|
|
||||||
dP `"'$##
|
|
||||||
d888 $#
|
|
||||||
dP_______$#
|
|
||||||
Yb"""88""$#
|
|
||||||
`Ybo 88 $##
|
|
||||||
.o.$#
|
|
||||||
,dP'$#
|
|
||||||
$#
|
|
||||||
$##
|
|
||||||
dP$#
|
|
||||||
dP $#
|
|
||||||
Yb $#
|
|
||||||
Yb$##
|
|
||||||
Yb $#
|
|
||||||
Yb$#
|
|
||||||
dP$#
|
|
||||||
dP $##
|
|
||||||
o $#
|
|
||||||
`8.8.8'$#
|
|
||||||
.8.8.8.$#
|
|
||||||
" $##
|
|
||||||
oo $#
|
|
||||||
___88___$#
|
|
||||||
"""88"""$#
|
|
||||||
"" $##
|
|
||||||
$#
|
|
||||||
$#
|
|
||||||
.o.$#
|
|
||||||
,dP'$##
|
|
||||||
$#
|
|
||||||
________$#
|
|
||||||
""""""""$#
|
|
||||||
$##
|
|
||||||
$#
|
|
||||||
$#
|
|
||||||
.o.$#
|
|
||||||
`"'$##
|
|
||||||
dP$#
|
|
||||||
dP $#
|
|
||||||
dP $#
|
|
||||||
dP $##
|
|
||||||
dP"Yb $#
|
|
||||||
dP Yb$#
|
|
||||||
Yb dP$#
|
|
||||||
YbodP $##
|
|
||||||
.d$#
|
|
||||||
.d88$#
|
|
||||||
88$#
|
|
||||||
88$##
|
|
||||||
oP"Yb.$#
|
|
||||||
"' dP'$#
|
|
||||||
dP' $#
|
|
||||||
.d8888$##
|
|
||||||
88888$#
|
|
||||||
.dP$#
|
|
||||||
o `Yb$#
|
|
||||||
YbodP$##
|
|
||||||
dP88 $#
|
|
||||||
dP 88 $#
|
|
||||||
d888888$#
|
|
||||||
88 $##
|
|
||||||
888888$#
|
|
||||||
88oo."$#
|
|
||||||
`8b$#
|
|
||||||
8888P'$##
|
|
||||||
dP' $#
|
|
||||||
.d8' $#
|
|
||||||
8P"""Yb$#
|
|
||||||
`YboodP$##
|
|
||||||
888888P$#
|
|
||||||
dP $#
|
|
||||||
dP $#
|
|
||||||
dP $##
|
|
||||||
.dP"o.$#
|
|
||||||
`8b.d'$#
|
|
||||||
d'`Y8b$#
|
|
||||||
`bodP'$##
|
|
||||||
dP""Yb$#
|
|
||||||
Ybood8$#
|
|
||||||
.8P'$#
|
|
||||||
.dP' $##
|
|
||||||
.o.$#
|
|
||||||
`"'$#
|
|
||||||
.o.$#
|
|
||||||
`"'$##
|
|
||||||
.o.$#
|
|
||||||
`"'$#
|
|
||||||
.o.$#
|
|
||||||
,dP'$##
|
|
||||||
.dP'$#
|
|
||||||
.dP' $#
|
|
||||||
`Yb. $#
|
|
||||||
`Yb.$##
|
|
||||||
$#
|
|
||||||
oooooo$#
|
|
||||||
______$#
|
|
||||||
""""""$##
|
|
||||||
`Yb. $#
|
|
||||||
`Yb.$#
|
|
||||||
.dP'$#
|
|
||||||
.dP' $##
|
|
||||||
oP"Yb.$#
|
|
||||||
"'.dP'$#
|
|
||||||
8P $#
|
|
||||||
(8) $##
|
|
||||||
dP""Yb $#
|
|
||||||
dP PY Yb$#
|
|
||||||
Yb boodP$#
|
|
||||||
Ybooo $##
|
|
||||||
db $#
|
|
||||||
dPYb $#
|
|
||||||
dP__Yb $#
|
|
||||||
dP""""Yb$##
|
|
||||||
88""Yb$#
|
|
||||||
88__dP$#
|
|
||||||
88""Yb$#
|
|
||||||
88oodP$##
|
|
||||||
dP""b8$#
|
|
||||||
dP `"$#
|
|
||||||
Yb $#
|
|
||||||
YboodP$##
|
|
||||||
8888b. $#
|
|
||||||
8I Yb$#
|
|
||||||
8I dY$#
|
|
||||||
8888Y" $##
|
|
||||||
888888$#
|
|
||||||
88__ $#
|
|
||||||
88"" $#
|
|
||||||
888888$##
|
|
||||||
888888$#
|
|
||||||
88__ $#
|
|
||||||
88"" $#
|
|
||||||
88 $##
|
|
||||||
dP""b8$#
|
|
||||||
dP `"$#
|
|
||||||
Yb "88$#
|
|
||||||
YboodP$##
|
|
||||||
88 88$#
|
|
||||||
88 88$#
|
|
||||||
888888$#
|
|
||||||
88 88$##
|
|
||||||
88$#
|
|
||||||
88$#
|
|
||||||
88$#
|
|
||||||
88$##
|
|
||||||
88888$#
|
|
||||||
88$#
|
|
||||||
o. 88$#
|
|
||||||
"bodP'$##
|
|
||||||
88 dP$#
|
|
||||||
88odP $#
|
|
||||||
88"Yb $#
|
|
||||||
88 Yb$##
|
|
||||||
88 $#
|
|
||||||
88 $#
|
|
||||||
88 .o$#
|
|
||||||
88ood8$##
|
|
||||||
8b d8$#
|
|
||||||
88b d88$#
|
|
||||||
88YbdP88$#
|
|
||||||
88 YY 88$##
|
|
||||||
88b 88$#
|
|
||||||
88Yb88$#
|
|
||||||
88 Y88$#
|
|
||||||
88 Y8$##
|
|
||||||
dP"Yb $#
|
|
||||||
dP Yb$#
|
|
||||||
Yb dP$#
|
|
||||||
YbodP $##
|
|
||||||
88""Yb$#
|
|
||||||
88__dP$#
|
|
||||||
88""" $#
|
|
||||||
88 $##
|
|
||||||
dP"Yb $#
|
|
||||||
dP Yb$#
|
|
||||||
Yb b dP$#
|
|
||||||
`"YoYo$##
|
|
||||||
88""Yb$#
|
|
||||||
88__dP$#
|
|
||||||
88"Yb $#
|
|
||||||
88 Yb$##
|
|
||||||
.dP"Y8$#
|
|
||||||
`Ybo."$#
|
|
||||||
o.`Y8b$#
|
|
||||||
8bodP'$##
|
|
||||||
888888$#
|
|
||||||
88 $#
|
|
||||||
88 $#
|
|
||||||
88 $##
|
|
||||||
88 88$#
|
|
||||||
88 88$#
|
|
||||||
Y8 8P$#
|
|
||||||
`YbodP'$##
|
|
||||||
Yb dP$#
|
|
||||||
Yb dP $#
|
|
||||||
YbdP $#
|
|
||||||
YP $##
|
|
||||||
Yb dP$#
|
|
||||||
Yb db dP $#
|
|
||||||
YbdPYbdP $#
|
|
||||||
YP YP $##
|
|
||||||
Yb dP$#
|
|
||||||
YbdP $#
|
|
||||||
dPYb $#
|
|
||||||
dP Yb$##
|
|
||||||
Yb dP$#
|
|
||||||
YbdP $#
|
|
||||||
8P $#
|
|
||||||
dP $##
|
|
||||||
8888P$#
|
|
||||||
dP $#
|
|
||||||
dP $#
|
|
||||||
d8888$##
|
|
||||||
88888$#
|
|
||||||
88 $#
|
|
||||||
88 $#
|
|
||||||
88888$##
|
|
||||||
Yb $#
|
|
||||||
Yb $#
|
|
||||||
Yb $#
|
|
||||||
Yb$##
|
|
||||||
88888$#
|
|
||||||
88$#
|
|
||||||
88$#
|
|
||||||
88888$##
|
|
||||||
.db. $#
|
|
||||||
.dP'`Yb.$#
|
|
||||||
$#
|
|
||||||
$##
|
|
||||||
$#
|
|
||||||
$#
|
|
||||||
$#
|
|
||||||
oooooooooo$##
|
|
||||||
.o. $#
|
|
||||||
`Yb.$#
|
|
||||||
$#
|
|
||||||
$##
|
|
||||||
db $#
|
|
||||||
dPYb $#
|
|
||||||
dP__Yb $#
|
|
||||||
dP""""Yb$##
|
|
||||||
88""Yb$#
|
|
||||||
88__dP$#
|
|
||||||
88""Yb$#
|
|
||||||
88oodP$##
|
|
||||||
dP""b8$#
|
|
||||||
dP `"$#
|
|
||||||
Yb $#
|
|
||||||
YboodP$##
|
|
||||||
8888b. $#
|
|
||||||
8I Yb$#
|
|
||||||
8I dY$#
|
|
||||||
8888Y" $##
|
|
||||||
888888$#
|
|
||||||
88__ $#
|
|
||||||
88"" $#
|
|
||||||
888888$##
|
|
||||||
888888$#
|
|
||||||
88__ $#
|
|
||||||
88"" $#
|
|
||||||
88 $##
|
|
||||||
dP""b8$#
|
|
||||||
dP `"$#
|
|
||||||
Yb "88$#
|
|
||||||
YboodP$##
|
|
||||||
88 88$#
|
|
||||||
88 88$#
|
|
||||||
888888$#
|
|
||||||
88 88$##
|
|
||||||
88$#
|
|
||||||
88$#
|
|
||||||
88$#
|
|
||||||
88$##
|
|
||||||
88888$#
|
|
||||||
88$#
|
|
||||||
o. 88$#
|
|
||||||
"bodP'$##
|
|
||||||
88 dP$#
|
|
||||||
88odP $#
|
|
||||||
88"Yb $#
|
|
||||||
88 Yb$##
|
|
||||||
88 $#
|
|
||||||
88 $#
|
|
||||||
88 .o$#
|
|
||||||
88ood8$##
|
|
||||||
8b d8$#
|
|
||||||
88b d88$#
|
|
||||||
88YbdP88$#
|
|
||||||
88 YY 88$##
|
|
||||||
88b 88$#
|
|
||||||
88Yb88$#
|
|
||||||
88 Y88$#
|
|
||||||
88 Y8$##
|
|
||||||
dP"Yb $#
|
|
||||||
dP Yb$#
|
|
||||||
Yb dP$#
|
|
||||||
YbodP $##
|
|
||||||
88""Yb$#
|
|
||||||
88__dP$#
|
|
||||||
88""" $#
|
|
||||||
88 $##
|
|
||||||
dP"Yb $#
|
|
||||||
dP Yb$#
|
|
||||||
Yb b dP$#
|
|
||||||
`"YoYo$##
|
|
||||||
88""Yb$#
|
|
||||||
88__dP$#
|
|
||||||
88"Yb $#
|
|
||||||
88 Yb$##
|
|
||||||
.dP"Y8$#
|
|
||||||
`Ybo."$#
|
|
||||||
o.`Y8b$#
|
|
||||||
8bodP'$##
|
|
||||||
888888$#
|
|
||||||
88 $#
|
|
||||||
88 $#
|
|
||||||
88 $##
|
|
||||||
88 88$#
|
|
||||||
88 88$#
|
|
||||||
Y8 8P$#
|
|
||||||
`YbodP'$##
|
|
||||||
Yb dP$#
|
|
||||||
Yb dP $#
|
|
||||||
YbdP $#
|
|
||||||
YP $##
|
|
||||||
Yb dP$#
|
|
||||||
Yb db dP $#
|
|
||||||
YbdPYbdP $#
|
|
||||||
YP YP $##
|
|
||||||
Yb dP$#
|
|
||||||
YbdP $#
|
|
||||||
dPYb $#
|
|
||||||
dP Yb$##
|
|
||||||
Yb dP$#
|
|
||||||
YbdP $#
|
|
||||||
8P $#
|
|
||||||
dP $##
|
|
||||||
8888P$#
|
|
||||||
dP $#
|
|
||||||
dP $#
|
|
||||||
d8888$##
|
|
||||||
d888$#
|
|
||||||
.dP $#
|
|
||||||
`Yb $#
|
|
||||||
Y888$##
|
|
||||||
II$#
|
|
||||||
II$#
|
|
||||||
II$#
|
|
||||||
II$##
|
|
||||||
888b $#
|
|
||||||
Yb.$#
|
|
||||||
dP'$#
|
|
||||||
888P $##
|
|
||||||
dP"Yb dP$#
|
|
||||||
dP `YbdP $#
|
|
||||||
$#
|
|
||||||
$##
|
|
||||||
db db db$#
|
|
||||||
""dPYb""$#
|
|
||||||
dP__Yb $#
|
|
||||||
dP""""Yb$##
|
|
||||||
db db $#
|
|
||||||
".oo." $#
|
|
||||||
dP Yb $#
|
|
||||||
YboodP $##
|
|
||||||
db db$#
|
|
||||||
"" ""$#
|
|
||||||
Yb dP$#
|
|
||||||
YbodP $##
|
|
||||||
db db db$#
|
|
||||||
""dPYb""$#
|
|
||||||
dP__Yb $#
|
|
||||||
dP""""Yb$##
|
|
||||||
db db $#
|
|
||||||
".oo." $#
|
|
||||||
dP Yb $#
|
|
||||||
YboodP $##
|
|
||||||
db db$#
|
|
||||||
"" ""$#
|
|
||||||
Y8 8P$#
|
|
||||||
YbodP $##
|
|
||||||
dP"o.$#
|
|
||||||
88.d'$#
|
|
||||||
88`8b$#
|
|
||||||
d8P P'$##
|
|
||||||
@ -1,617 +0,0 @@
|
|||||||
flf2a$ 6 6 20 15 4
|
|
||||||
5lineobl.flf 11/94 pk6811s@acad.drake.edu, updated 1/95 syb3@ABER.AC.UK
|
|
||||||
Definitely a 5-line font.
|
|
||||||
Changes: 6/2001 Markus Gebhard markus@jave.de
|
|
||||||
Removed topmost line. It IS a 6 line font! Baseline is 6.
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@@
|
|
||||||
$ @
|
|
||||||
$//$@
|
|
||||||
$//$ @
|
|
||||||
$//$ @
|
|
||||||
$ $ @
|
|
||||||
//$ @@
|
|
||||||
@
|
|
||||||
$| |$@
|
|
||||||
$$$ @
|
|
||||||
$$$ @
|
|
||||||
$$$ @
|
|
||||||
$$$ @@
|
|
||||||
@
|
|
||||||
$ __/__/_$@
|
|
||||||
$__/__/_$ @
|
|
||||||
$ / / $ @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
__//_ @
|
|
||||||
( // )$@
|
|
||||||
\\ @
|
|
||||||
(__//_)$ @
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
() //$@
|
|
||||||
// @
|
|
||||||
// @
|
|
||||||
// ()$@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
(( ))$@
|
|
||||||
\\ // @
|
|
||||||
$/\\/ $ @
|
|
||||||
// \\ @
|
|
||||||
((___\\$ @@
|
|
||||||
$$ @
|
|
||||||
$//$@
|
|
||||||
$$ @
|
|
||||||
$ @
|
|
||||||
$ @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
_ $@
|
|
||||||
// $ @
|
|
||||||
// $ @
|
|
||||||
// $ @
|
|
||||||
(( $ @@
|
|
||||||
@
|
|
||||||
))$@
|
|
||||||
//$ @
|
|
||||||
//$ @
|
|
||||||
//$ @
|
|
||||||
//$ @@
|
|
||||||
@
|
|
||||||
$ @
|
|
||||||
@
|
|
||||||
$_\\/_$@
|
|
||||||
$ //\$ @
|
|
||||||
$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$ $@
|
|
||||||
$_||_$@
|
|
||||||
$ || $@
|
|
||||||
$ $@@
|
|
||||||
@
|
|
||||||
$$ @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$$ @
|
|
||||||
$//$@@
|
|
||||||
$$$$ @
|
|
||||||
$$$$ @
|
|
||||||
$$$$ @
|
|
||||||
____ $@
|
|
||||||
$$$$ @
|
|
||||||
$$$$ @@
|
|
||||||
@
|
|
||||||
$ @
|
|
||||||
$ @
|
|
||||||
@
|
|
||||||
$$ @
|
|
||||||
() @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
//$@
|
|
||||||
// @
|
|
||||||
// @
|
|
||||||
//$ @@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
/_ /$ @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ /$ @@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
___/ / @
|
|
||||||
/ ____/ @
|
|
||||||
/ /____$ @@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
__ / / @
|
|
||||||
) ) @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
$@
|
|
||||||
//___/ / @
|
|
||||||
/____ / @
|
|
||||||
/ / @
|
|
||||||
/ /$ @@
|
|
||||||
@
|
|
||||||
____ $@
|
|
||||||
// @
|
|
||||||
//__ @
|
|
||||||
) ) @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
____$ @
|
|
||||||
// @
|
|
||||||
//__ @
|
|
||||||
// ) ) @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
___ $ @
|
|
||||||
// / / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ /$ @@
|
|
||||||
@
|
|
||||||
__ @
|
|
||||||
// ) )$@
|
|
||||||
((_ / / @
|
|
||||||
// ) ) @
|
|
||||||
((__/ /$ @@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// / /$ @
|
|
||||||
((___/ / @
|
|
||||||
/ / @
|
|
||||||
/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
()$@
|
|
||||||
()$ @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
()$@
|
|
||||||
@
|
|
||||||
//$ @@
|
|
||||||
@
|
|
||||||
$$ @
|
|
||||||
//$@
|
|
||||||
<< @
|
|
||||||
\\$@
|
|
||||||
$$ @@
|
|
||||||
$ $@
|
|
||||||
$ $@
|
|
||||||
$ ___$@
|
|
||||||
$/__/$@
|
|
||||||
$/__/$@
|
|
||||||
$ $@@
|
|
||||||
@
|
|
||||||
$$ @
|
|
||||||
\\ $@
|
|
||||||
>>$@
|
|
||||||
// $@
|
|
||||||
$$ @@
|
|
||||||
@
|
|
||||||
__ @
|
|
||||||
(( ) )$@
|
|
||||||
/ / @
|
|
||||||
( / @
|
|
||||||
()$ @@
|
|
||||||
@
|
|
||||||
__ $ @
|
|
||||||
// ) )$ @
|
|
||||||
// / / $ @
|
|
||||||
\\ () ) )$@
|
|
||||||
\\__/ /$ @@
|
|
||||||
@
|
|
||||||
// | |$@
|
|
||||||
//__| | @
|
|
||||||
/ ___ | @
|
|
||||||
// | | @
|
|
||||||
// | |$@@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
//___/ / @
|
|
||||||
/ __ ( @
|
|
||||||
// ) ) @
|
|
||||||
//____/ /$ @@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
// @
|
|
||||||
// @
|
|
||||||
// @
|
|
||||||
((____/ /$ @@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
//____/ /$ @@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
//____ @
|
|
||||||
/ ____ @
|
|
||||||
// @
|
|
||||||
//____/ /$ @@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
//___$ @
|
|
||||||
/ ___ $ @
|
|
||||||
// @
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
// @
|
|
||||||
// ____$ @
|
|
||||||
// / / @
|
|
||||||
((____/ /$ @@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
//___ / / @
|
|
||||||
/ ___ / @
|
|
||||||
// / / @
|
|
||||||
// / /$ @@
|
|
||||||
___ ___$@
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
__/ /___$ @@
|
|
||||||
@
|
|
||||||
/ /$@
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
$((___/ /$ @@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
//__ / / @
|
|
||||||
//__ /$ @
|
|
||||||
// \ \ @
|
|
||||||
// \ \$ @@
|
|
||||||
@
|
|
||||||
/ / $ @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ /____/ /$@@
|
|
||||||
@
|
|
||||||
/| //| |$@
|
|
||||||
//| // | | @
|
|
||||||
// | // | | @
|
|
||||||
// | // | | @
|
|
||||||
// |// | |$@@
|
|
||||||
@
|
|
||||||
/| / /$@
|
|
||||||
//| / / @
|
|
||||||
// | / / @
|
|
||||||
// | / / @
|
|
||||||
// |/ /$ @@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
//___/ / @
|
|
||||||
/ ____ /$ @
|
|
||||||
// @
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
// \ \ / @
|
|
||||||
((____\ \$ @@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
//___/ / @
|
|
||||||
/ ___ ( $ @
|
|
||||||
// | | @
|
|
||||||
// | |$ @@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
(( @
|
|
||||||
\\ @
|
|
||||||
) )$ @
|
|
||||||
((___ / / @@
|
|
||||||
@
|
|
||||||
/__ ___/$@
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / $ @@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
|| / /$@
|
|
||||||
|| / / @
|
|
||||||
|| / / @
|
|
||||||
||/ / @
|
|
||||||
| /$ @@
|
|
||||||
@
|
|
||||||
|| / | / /$@
|
|
||||||
|| / | / / @
|
|
||||||
|| / /||/ / @
|
|
||||||
||/ / | / @
|
|
||||||
| / | /$ @@
|
|
||||||
@
|
|
||||||
\\ / /$@
|
|
||||||
\ / @
|
|
||||||
/ / @
|
|
||||||
/ /\\ @
|
|
||||||
/ / \\$@@
|
|
||||||
@
|
|
||||||
\\ / /$@
|
|
||||||
\\ / / @
|
|
||||||
\\/ / @
|
|
||||||
/ / @
|
|
||||||
/ /$ @@
|
|
||||||
$___ $@
|
|
||||||
$ / /$@
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
$/ / @
|
|
||||||
/ /___$ @@
|
|
||||||
@
|
|
||||||
__$@
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ /__$ @@
|
|
||||||
@
|
|
||||||
$ @
|
|
||||||
\\ $ @
|
|
||||||
\\ $ @
|
|
||||||
\\$ @
|
|
||||||
\\$@@
|
|
||||||
@
|
|
||||||
$___ $@
|
|
||||||
/ /$@
|
|
||||||
$/ /$ @
|
|
||||||
/ /$ @
|
|
||||||
__/ /$ @@
|
|
||||||
$@
|
|
||||||
/ |$@
|
|
||||||
//| |$@
|
|
||||||
$@
|
|
||||||
@
|
|
||||||
$ @@
|
|
||||||
$$$$$ @
|
|
||||||
$$$$$ @
|
|
||||||
$$$$$ @
|
|
||||||
$$$$$ @
|
|
||||||
$$$$$ @
|
|
||||||
_____$@@
|
|
||||||
$$ @
|
|
||||||
$@
|
|
||||||
\\$@
|
|
||||||
$@
|
|
||||||
@
|
|
||||||
$$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
((___( ($ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
/ __ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// @
|
|
||||||
((____$ @@
|
|
||||||
@
|
|
||||||
$@
|
|
||||||
___ /$ @
|
|
||||||
// ) /$ @
|
|
||||||
// / /$ @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
//___) )$@
|
|
||||||
// @
|
|
||||||
((____$ @@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
__//__ $ @
|
|
||||||
// $ @
|
|
||||||
// $ @
|
|
||||||
// $ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
((___/ / @
|
|
||||||
//__ $ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
/ __ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
( )$ @
|
|
||||||
/ /$ @
|
|
||||||
/ / @
|
|
||||||
/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
( )$ @
|
|
||||||
/ /$ @
|
|
||||||
/ / @
|
|
||||||
(( / /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
/ ___$ @
|
|
||||||
//\ \ @
|
|
||||||
// \ \ @
|
|
||||||
// \ \$@@
|
|
||||||
@
|
|
||||||
$@
|
|
||||||
//$ @
|
|
||||||
//$ @
|
|
||||||
//$ @
|
|
||||||
//$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
_ __ @
|
|
||||||
// ) ) ) )$@
|
|
||||||
// / / / / @
|
|
||||||
// / / / /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
__ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
//___/ / @
|
|
||||||
// $ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
((___/ / @
|
|
||||||
( ($ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
__ @
|
|
||||||
// ) )$@
|
|
||||||
// @
|
|
||||||
// $ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
(( ) )$@
|
|
||||||
\ \ @
|
|
||||||
// ) )$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
__ ___$@
|
|
||||||
$/ / $ @
|
|
||||||
/ / @
|
|
||||||
/ / $ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
// / / @
|
|
||||||
((___( ($ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
|| / /$@
|
|
||||||
|| / / @
|
|
||||||
||/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// / / / /$@
|
|
||||||
// / / / / @
|
|
||||||
((__( (__/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
\\ / /$@
|
|
||||||
\/ / @
|
|
||||||
/ /\$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
((___/ / @
|
|
||||||
/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$___ @
|
|
||||||
$ / /$ @
|
|
||||||
/ / @
|
|
||||||
/ /__$ @@
|
|
||||||
@
|
|
||||||
_$@
|
|
||||||
// $@
|
|
||||||
<< $ @
|
|
||||||
// $ @
|
|
||||||
((_$ @@
|
|
||||||
$@
|
|
||||||
$@
|
|
||||||
||$@
|
|
||||||
||$@
|
|
||||||
||$@
|
|
||||||
||$@@
|
|
||||||
@
|
|
||||||
_ $@
|
|
||||||
))$@
|
|
||||||
//$ @
|
|
||||||
>>$ @
|
|
||||||
// $ @@
|
|
||||||
@
|
|
||||||
_ _$@
|
|
||||||
// \ \_// $@
|
|
||||||
$$$ @
|
|
||||||
$$$ @
|
|
||||||
@@
|
|
||||||
_ _ @
|
|
||||||
@
|
|
||||||
// | |$@
|
|
||||||
//__| | @
|
|
||||||
/ ___ | @
|
|
||||||
// | |$@@
|
|
||||||
_ _ @
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
_ _ @
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
_ _ @
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
((___( ($ @@
|
|
||||||
@
|
|
||||||
_ _ @
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
_ _ @
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
//__ / /$ @
|
|
||||||
/ __ ( @
|
|
||||||
//___ ) )$ @
|
|
||||||
// $ @@
|
|
||||||
@ -1,717 +0,0 @@
|
|||||||
flf2a$ 7 5 20 15 2
|
|
||||||
5lineobl.flf 11/94 pk6811s@acad.drake.edu, updated 1/95 syb3@ABER.AC.UK
|
|
||||||
Definitely a 5-line font.
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@
|
|
||||||
$$@@
|
|
||||||
@
|
|
||||||
$ @
|
|
||||||
$//$@
|
|
||||||
$//$ @
|
|
||||||
$//$ @
|
|
||||||
$ $ @
|
|
||||||
//$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$| |$@
|
|
||||||
$$$ @
|
|
||||||
$$$ @
|
|
||||||
$$$ @
|
|
||||||
$$$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$ __/__/_$@
|
|
||||||
$__/__/_$ @
|
|
||||||
$ / / $ @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
__//_ @
|
|
||||||
( // )$@
|
|
||||||
\\ @
|
|
||||||
(__//_)$ @
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
() //$@
|
|
||||||
// @
|
|
||||||
// @
|
|
||||||
// ()$@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
(( ))$@
|
|
||||||
\\ // @
|
|
||||||
$/\\/ $ @
|
|
||||||
// \\ @
|
|
||||||
((___\\$ @@
|
|
||||||
@
|
|
||||||
$$ @
|
|
||||||
$//$@
|
|
||||||
$$ @
|
|
||||||
$ @
|
|
||||||
$ @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
_ $@
|
|
||||||
// $ @
|
|
||||||
// $ @
|
|
||||||
// $ @
|
|
||||||
(( $ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
))$@
|
|
||||||
//$ @
|
|
||||||
//$ @
|
|
||||||
//$ @
|
|
||||||
//$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$ @
|
|
||||||
@
|
|
||||||
$_\\/_$@
|
|
||||||
$ //\$ @
|
|
||||||
$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$ $@
|
|
||||||
$_||_$@
|
|
||||||
$ || $@
|
|
||||||
$ $@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$$ @
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$$ @
|
|
||||||
$//$@@
|
|
||||||
@
|
|
||||||
$$$$ @
|
|
||||||
$$$$ @
|
|
||||||
$$$$ @
|
|
||||||
____ $@
|
|
||||||
$$$$ @
|
|
||||||
$$$$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$ @
|
|
||||||
$ @
|
|
||||||
@
|
|
||||||
$$ @
|
|
||||||
() @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
//$@
|
|
||||||
// @
|
|
||||||
// @
|
|
||||||
//$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
/_ /$ @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
___/ / @
|
|
||||||
/ ____/ @
|
|
||||||
/ /____$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
__ / / @
|
|
||||||
) ) @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$@
|
|
||||||
//___/ / @
|
|
||||||
/____ / @
|
|
||||||
/ / @
|
|
||||||
/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
____ $@
|
|
||||||
// @
|
|
||||||
//__ @
|
|
||||||
) ) @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
____$ @
|
|
||||||
// @
|
|
||||||
//__ @
|
|
||||||
// ) ) @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ $ @
|
|
||||||
// / / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
__ @
|
|
||||||
// ) )$@
|
|
||||||
((_ / / @
|
|
||||||
// ) ) @
|
|
||||||
((__/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// / /$ @
|
|
||||||
((___/ / @
|
|
||||||
/ / @
|
|
||||||
/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
()$@
|
|
||||||
()$ @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
()$@
|
|
||||||
@
|
|
||||||
//$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$$ @
|
|
||||||
//$@
|
|
||||||
<< @
|
|
||||||
\\$@
|
|
||||||
$$ @@
|
|
||||||
@
|
|
||||||
$ $@
|
|
||||||
$ $@
|
|
||||||
$ ___$@
|
|
||||||
$/__/$@
|
|
||||||
$/__/$@
|
|
||||||
$ $@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$$ @
|
|
||||||
\\ $@
|
|
||||||
>>$@
|
|
||||||
// $@
|
|
||||||
$$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
__ @
|
|
||||||
(( ) )$@
|
|
||||||
/ / @
|
|
||||||
( / @
|
|
||||||
()$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
__ $ @
|
|
||||||
// ) )$ @
|
|
||||||
// / / $ @
|
|
||||||
\\ () ) )$@
|
|
||||||
\\__/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// | |$@
|
|
||||||
//__| | @
|
|
||||||
/ ___ | @
|
|
||||||
// | | @
|
|
||||||
// | |$@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
//___/ / @
|
|
||||||
/ __ ( @
|
|
||||||
// ) ) @
|
|
||||||
//____/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
// @
|
|
||||||
// @
|
|
||||||
// @
|
|
||||||
((____/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
//____/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
//____ @
|
|
||||||
/ ____ @
|
|
||||||
// @
|
|
||||||
//____/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
//___$ @
|
|
||||||
/ ___ $ @
|
|
||||||
// @
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
// @
|
|
||||||
// ____$ @
|
|
||||||
// / / @
|
|
||||||
((____/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
//___ / / @
|
|
||||||
/ ___ / @
|
|
||||||
// / / @
|
|
||||||
// / /$ @@
|
|
||||||
@
|
|
||||||
___ ___$@
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
__/ /___$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
/ /$@
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
$((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
//__ / / @
|
|
||||||
//__ /$ @
|
|
||||||
// \ \ @
|
|
||||||
// \ \$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
/ / $ @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ /____/ /$@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
/| //| |$@
|
|
||||||
//| // | | @
|
|
||||||
// | // | | @
|
|
||||||
// | // | | @
|
|
||||||
// |// | |$@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
/| / /$@
|
|
||||||
//| / / @
|
|
||||||
// | / / @
|
|
||||||
// | / / @
|
|
||||||
// |/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
//___/ / @
|
|
||||||
/ ____ /$ @
|
|
||||||
// @
|
|
||||||
// @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
// \ \ / @
|
|
||||||
((____\ \$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
//___/ / @
|
|
||||||
/ ___ ( $ @
|
|
||||||
// | | @
|
|
||||||
// | |$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
(( @
|
|
||||||
\\ @
|
|
||||||
) )$ @
|
|
||||||
((___ / / @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
/__ ___/$@
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / $ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
|| / /$@
|
|
||||||
|| / / @
|
|
||||||
|| / / @
|
|
||||||
||/ / @
|
|
||||||
| /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
|| / | / /$@
|
|
||||||
|| / | / / @
|
|
||||||
|| / /||/ / @
|
|
||||||
||/ / | / @
|
|
||||||
| / | /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
\\ / /$@
|
|
||||||
\ / @
|
|
||||||
/ / @
|
|
||||||
/ /\\ @
|
|
||||||
/ / \\$@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
\\ / /$@
|
|
||||||
\\ / / @
|
|
||||||
\\/ / @
|
|
||||||
/ / @
|
|
||||||
/ /$ @@
|
|
||||||
@
|
|
||||||
$___ $@
|
|
||||||
$ / /$@
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
$/ / @
|
|
||||||
/ /___$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
__$@
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ / @
|
|
||||||
/ /__$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$ @
|
|
||||||
\\ $ @
|
|
||||||
\\ $ @
|
|
||||||
\\$ @
|
|
||||||
\\$@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$___ $@
|
|
||||||
/ /$@
|
|
||||||
$/ /$ @
|
|
||||||
/ /$ @
|
|
||||||
__/ /$ @@
|
|
||||||
@
|
|
||||||
$@
|
|
||||||
/ |$@
|
|
||||||
//| |$@
|
|
||||||
$@
|
|
||||||
@
|
|
||||||
$ @@
|
|
||||||
@
|
|
||||||
$$$$$ @
|
|
||||||
$$$$$ @
|
|
||||||
$$$$$ @
|
|
||||||
$$$$$ @
|
|
||||||
$$$$$ @
|
|
||||||
_____$@@
|
|
||||||
@
|
|
||||||
$$ @
|
|
||||||
$@
|
|
||||||
\\$@
|
|
||||||
$@
|
|
||||||
@
|
|
||||||
$$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
((___( ($ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
/ __ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// @
|
|
||||||
((____$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$@
|
|
||||||
___ /$ @
|
|
||||||
// ) /$ @
|
|
||||||
// / /$ @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
//___) )$@
|
|
||||||
// @
|
|
||||||
((____$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
__//__ $ @
|
|
||||||
// $ @
|
|
||||||
// $ @
|
|
||||||
// $ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
((___/ / @
|
|
||||||
//__ $ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
/ __ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
( )$ @
|
|
||||||
/ /$ @
|
|
||||||
/ / @
|
|
||||||
/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
( )$ @
|
|
||||||
/ /$ @
|
|
||||||
/ / @
|
|
||||||
(( / /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
/ ___$ @
|
|
||||||
//\ \ @
|
|
||||||
// \ \ @
|
|
||||||
// \ \$@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$@
|
|
||||||
//$ @
|
|
||||||
//$ @
|
|
||||||
//$ @
|
|
||||||
//$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
_ __ @
|
|
||||||
// ) ) ) )$@
|
|
||||||
// / / / / @
|
|
||||||
// / / / /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
__ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
//___/ / @
|
|
||||||
// $ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
((___/ / @
|
|
||||||
( ($ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
__ @
|
|
||||||
// ) )$@
|
|
||||||
// @
|
|
||||||
// $ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
___ @
|
|
||||||
(( ) )$@
|
|
||||||
\ \ @
|
|
||||||
// ) )$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
__ ___$@
|
|
||||||
$/ / $ @
|
|
||||||
/ / @
|
|
||||||
/ / $ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
// / / @
|
|
||||||
((___( ($ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
|| / /$@
|
|
||||||
|| / / @
|
|
||||||
||/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// / / / /$@
|
|
||||||
// / / / / @
|
|
||||||
((__( (__/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
\\ / /$@
|
|
||||||
\/ / @
|
|
||||||
/ /\$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
((___/ / @
|
|
||||||
/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
$___ @
|
|
||||||
$ / /$ @
|
|
||||||
/ / @
|
|
||||||
/ /__$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
_$@
|
|
||||||
// $@
|
|
||||||
<< $ @
|
|
||||||
// $ @
|
|
||||||
((_$ @@
|
|
||||||
@
|
|
||||||
$@
|
|
||||||
$@
|
|
||||||
||$@
|
|
||||||
||$@
|
|
||||||
||$@
|
|
||||||
||$@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
_ $@
|
|
||||||
))$@
|
|
||||||
//$ @
|
|
||||||
>>$ @
|
|
||||||
// $ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
_ _$@
|
|
||||||
// \ \_// $@
|
|
||||||
$$$ @
|
|
||||||
$$$ @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
_ _ @
|
|
||||||
@
|
|
||||||
// | |$@
|
|
||||||
//__| | @
|
|
||||||
/ ___ | @
|
|
||||||
// | |$@@
|
|
||||||
@
|
|
||||||
_ _ @
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
_ _ @
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
// / / @
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
_ _ @
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
((___( ($ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
_ _ @
|
|
||||||
___ @
|
|
||||||
// ) )$@
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
_ _ @
|
|
||||||
@
|
|
||||||
// / /$@
|
|
||||||
// / / @
|
|
||||||
((___/ /$ @@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
// ) )$@
|
|
||||||
//__ / /$ @
|
|
||||||
/ __ ( @
|
|
||||||
//___ ) )$ @
|
|
||||||
// $ @@
|
|
||||||
@ -1,427 +0,0 @@
|
|||||||
flf2a$ 4 3 10 -1 18
|
|
||||||
|
|
||||||
3 lines tall font by LESTER
|
|
||||||
=============================
|
|
||||||
|
|
||||||
|
|
||||||
-> Conversion to FigLet font by MEPH. (Part of ASCII Editor Service Pack I)
|
|
||||||
(http://studenten.freepage.de/meph/ascii/ascii/editor/_index.htm)
|
|
||||||
-> Defined: ASCII code alphanumeric + most used symbols
|
|
||||||
-> Uppercase characters only.
|
|
||||||
|
|
||||||
.-~~-.
|
|
||||||
(_^..^_)
|
|
||||||
Lester||||AMC - Anthony Cucchiara
|
|
||||||
*Mythos Online : Internet Magazine of Lovecraftian Horror - Dead Alice*
|
|
||||||
http://www.fortunecity.com/victorian/redlion/157/deadal.htm
|
|
||||||
*Visit my web page ANSI/ASCII/Fonts*
|
|
||||||
http://members.aol.com/lester5374/
|
|
||||||
|
|
||||||
$@
|
|
||||||
$@
|
|
||||||
$@
|
|
||||||
$@@
|
|
||||||
. @
|
|
||||||
| @
|
|
||||||
. @
|
|
||||||
@@
|
|
||||||
`' @
|
|
||||||
`; @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
`' @
|
|
||||||
`' @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
. @
|
|
||||||
( @
|
|
||||||
` @
|
|
||||||
@@
|
|
||||||
. @
|
|
||||||
) @
|
|
||||||
' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
, @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
. @
|
|
||||||
@@
|
|
||||||
, @
|
|
||||||
,' @
|
|
||||||
' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|\| @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
. @
|
|
||||||
'| @
|
|
||||||
' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
.'' @
|
|
||||||
`-- @
|
|
||||||
@@
|
|
||||||
-. @
|
|
||||||
-| @
|
|
||||||
-' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
`-| @
|
|
||||||
' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
``. @
|
|
||||||
--' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|-. @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
.' @
|
|
||||||
' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
)-( @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
`-| @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
| @
|
|
||||||
@
|
|
||||||
| @
|
|
||||||
@@
|
|
||||||
| @
|
|
||||||
@
|
|
||||||
| @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
.' @
|
|
||||||
. @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|-| @
|
|
||||||
` ' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|( @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
| @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
| )@
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|- @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|- @
|
|
||||||
' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|.. @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
|-| @
|
|
||||||
' ` @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
| @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
. @
|
|
||||||
| @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
|< @
|
|
||||||
' ` @
|
|
||||||
@@
|
|
||||||
. @
|
|
||||||
| @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
|\/| @
|
|
||||||
' ` @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
|\| @
|
|
||||||
' ` @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
| | @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|-' @
|
|
||||||
' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|.| @
|
|
||||||
`-`.@
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|( @
|
|
||||||
' ' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
`-. @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
| @
|
|
||||||
' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
| | @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
| | @
|
|
||||||
`.' @
|
|
||||||
@@
|
|
||||||
. . . @
|
|
||||||
| | | @
|
|
||||||
`.'.' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
)( @
|
|
||||||
' ` @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
| @
|
|
||||||
` @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
/ @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.' @
|
|
||||||
( @
|
|
||||||
`. @
|
|
||||||
@@
|
|
||||||
, @
|
|
||||||
`, @
|
|
||||||
` @
|
|
||||||
@@
|
|
||||||
`. @
|
|
||||||
) @
|
|
||||||
.' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|-| @
|
|
||||||
` ' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|( @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
| @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
| )@
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|- @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|- @
|
|
||||||
' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|.. @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
|-| @
|
|
||||||
' ` @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
| @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
. @
|
|
||||||
| @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
|< @
|
|
||||||
' ` @
|
|
||||||
@@
|
|
||||||
. @
|
|
||||||
| @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
|\/| @
|
|
||||||
' ` @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
|\| @
|
|
||||||
' ` @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
| | @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|-' @
|
|
||||||
' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|.| @
|
|
||||||
`-`.@
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
|( @
|
|
||||||
' ' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
`-. @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
| @
|
|
||||||
' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
| | @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
| | @
|
|
||||||
`.' @
|
|
||||||
@@
|
|
||||||
. . . @
|
|
||||||
| | | @
|
|
||||||
`.'.' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
)( @
|
|
||||||
' ` @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
| @
|
|
||||||
` @
|
|
||||||
@@
|
|
||||||
.-. @
|
|
||||||
/ @
|
|
||||||
`-' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@ -1,427 +0,0 @@
|
|||||||
flf2a$ 4 3 11 -1 18
|
|
||||||
|
|
||||||
3 line vertical font (tilt head to left) font by LESTER
|
|
||||||
=======================================================
|
|
||||||
|
|
||||||
|
|
||||||
-> Conversion to FigLet font by MEPH. (Part of ASCII Editor Service Pack I)
|
|
||||||
(http://studenten.freepage.de/meph/ascii/ascii/editor/_index.htm)
|
|
||||||
-> Defined: ASCII code alphanumeric
|
|
||||||
-> Uppercase characters only.
|
|
||||||
|
|
||||||
.-~~-.
|
|
||||||
(_^..^_)
|
|
||||||
Lester||||AMC - Anthony Cucchiara
|
|
||||||
*Mythos Online : Internet Magazine of Lovecraftian Horror - Dead Alice*
|
|
||||||
http://www.fortunecity.com/victorian/redlion/157/deadal.htm
|
|
||||||
*Visit my web page ANSI/ASCII/Fonts*
|
|
||||||
http://members.aol.com/lester5374/
|
|
||||||
|
|
||||||
$@
|
|
||||||
$@
|
|
||||||
$@
|
|
||||||
$@@
|
|
||||||
@
|
|
||||||
.:;s ;: @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
;: @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
S ./' S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
. @
|
|
||||||
.:;s;:: @
|
|
||||||
` ' @
|
|
||||||
@@
|
|
||||||
.:;. . @
|
|
||||||
S S S @
|
|
||||||
` `::' @
|
|
||||||
@@
|
|
||||||
.:;.;:. @
|
|
||||||
S S S @
|
|
||||||
` ' @
|
|
||||||
@@
|
|
||||||
.:;.;:. @
|
|
||||||
S @
|
|
||||||
`:;' @
|
|
||||||
@@
|
|
||||||
. .;:. @
|
|
||||||
S S S @
|
|
||||||
`:;' ' @
|
|
||||||
@@
|
|
||||||
. .;:. @
|
|
||||||
S S S @
|
|
||||||
`:;;;:' @
|
|
||||||
@@
|
|
||||||
.:;. @
|
|
||||||
S S @
|
|
||||||
` `;:' @
|
|
||||||
@@
|
|
||||||
.:;.;:. @
|
|
||||||
S S S @
|
|
||||||
`:;';:' @
|
|
||||||
@@
|
|
||||||
.:;;;:. @
|
|
||||||
S S S @
|
|
||||||
`:;' ' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;.;:. @
|
|
||||||
S S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;:. @
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
S S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.: ;:. @
|
|
||||||
S ' S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
.:;s;:' @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
.:;.;:. @
|
|
||||||
S @
|
|
||||||
:' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
`:s:' @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
:. @
|
|
||||||
S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
) @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
/ @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.::. @
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;S;:/ @
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;.;:. @
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.: S;:. @
|
|
||||||
S S S @
|
|
||||||
`:;S :' @
|
|
||||||
@@
|
|
||||||
. @
|
|
||||||
S:;s;:' @
|
|
||||||
` @
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;S;. @
|
|
||||||
:: @
|
|
||||||
`:;S;' @
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
( @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;.;:. @
|
|
||||||
S @
|
|
||||||
`:;';:' @
|
|
||||||
@@
|
|
||||||
.:;. @
|
|
||||||
S;;: @
|
|
||||||
`::' @
|
|
||||||
@@
|
|
||||||
.:;S . @
|
|
||||||
S S S @
|
|
||||||
` S;:' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;.;:. @
|
|
||||||
S S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;:. @
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
S S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.: ;:. @
|
|
||||||
S ' S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
.:;s;:' @
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
.:;.;:. @
|
|
||||||
S @
|
|
||||||
:' @
|
|
||||||
@@
|
|
||||||
. . @
|
|
||||||
`:s:' @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
:. @
|
|
||||||
S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
) @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
/ @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.::. @
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;S;:/ @
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;.;:. @
|
|
||||||
S S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.: S;:. @
|
|
||||||
S S S @
|
|
||||||
`:;S :' @
|
|
||||||
@@
|
|
||||||
. @
|
|
||||||
S:;s;:' @
|
|
||||||
` @
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
S @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;S;. @
|
|
||||||
:: @
|
|
||||||
`:;S;' @
|
|
||||||
@@
|
|
||||||
.:;S;:. @
|
|
||||||
( @
|
|
||||||
`:;S;:' @
|
|
||||||
@@
|
|
||||||
.:;.;:. @
|
|
||||||
S @
|
|
||||||
`:;';:' @
|
|
||||||
@@
|
|
||||||
.:;. @
|
|
||||||
S;;: @
|
|
||||||
`::' @
|
|
||||||
@@
|
|
||||||
.:;S . @
|
|
||||||
S S S @
|
|
||||||
` S;:' @
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@
|
|
||||||
@@
|
|
||||||