Compare commits

...

11 Commits

Author SHA1 Message Date
Sebastian Seedorf
5223214a26 ci: add test workflow
All checks were successful
test / test (push) Successful in 46s
2026-05-10 12:57:17 +02:00
Sebastian Seedorf
fadfa67574 Fixed name matching 2022-09-11 14:10:49 +02:00
Sebastian Seedorf
cd7a6a565f Quick fix 2022-09-09 21:48:41 +02:00
Sebastian Seedorf
2eaf8f719b Add button to show service statistics 2022-09-09 21:30:34 +02:00
Sebastian Seedorf
d964748a66 Styling of home 2022-08-22 17:04:39 +02:00
Sebastian Seedorf
537a18fb88 Added Nl translations 2022-08-20 14:58:34 +02:00
Sebastian Seedorf
2fd010e003 Finished translations / bug fixes 2022-08-20 14:47:04 +02:00
Sebastian Seedorf
664f766cb6 Fixed uran 2022-08-20 00:57:55 +02:00
Sebastian Seedorf
3fea0f851f Added German language 2022-08-20 00:30:49 +02:00
Sebastian Seedorf
f826537aec Added internationalization of factory names 2022-08-19 19:33:38 +02:00
Sebastian Seedorf
33a5b10fe3 Added internationalization 2022-08-19 19:06:36 +02:00
82 changed files with 3827 additions and 365 deletions

View File

@@ -2,7 +2,7 @@
"plugins": ["unused-imports", "@typescript-eslint"],
"extends": ["next/core-web-vitals", "plugin:@typescript-eslint/recommended"],
"parserOptions": {
"project": ["./tsconfig.json", "./tsconfig.test.json"],
"project": ["./tsconfig.json", "./tsconfig.test.json", "./tsconfig.node.json"],
"extraFileExtensions": [".json"]
},
"rules": {
@@ -49,6 +49,10 @@
{
"additionalHooks": "(useAsyncEffect)"
}
],
"react/jsx-no-literals": [
"error",
{ "noStrings": true, "allowedStrings": [], "ignoreProps": true, "noAttributeStrings": false }
]
},
"overrides": [

View File

@@ -0,0 +1,9 @@
name: test
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Hello
run: echo "Runner works!"

15
.idea/webResources.xml generated Normal file
View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="WebResourcesPaths">
<contentEntries>
<entry url="file://$PROJECT_DIR$">
<entryData>
<resourceRoots>
<path value="file://$PROJECT_DIR$/res" />
<path value="file://$PROJECT_DIR$/public" />
</resourceRoots>
</entryData>
</entry>
</contentEntries>
</component>
</project>

View File

@@ -1,4 +1,5 @@
{
"plugins": ["stylelint-use-logical"],
"extends": ["stylelint-config-standard", "stylelint-config-idiomatic-order"],
"rules": {
"selector-pseudo-class-no-unknown": [
@@ -12,6 +13,7 @@
"declaration-block-no-duplicate-properties": true,
"no-duplicate-selectors": true,
"selector-class-pattern": "^.*|([a-z][a-zA-Z0-9]+)$",
"custom-property-pattern": ".*"
"custom-property-pattern": ".*",
"csstools/use-logical": "always"
}
}

View File

@@ -0,0 +1,68 @@
import { createContext, FC, useContext, useMemo } from 'react'
import { EnrichedEntity } from '../../../src/types'
import { ReactNodeLike } from 'prop-types'
import { factories } from './prepare'
import { useLocale } from '../../../src/hooks/useLocale'
import de from '../../../res/translation-de.json'
import nl from '../../../res/translation-nl.json'
import { Dict } from '../../../src/types'
const factoryNames: Record<'de' | 'nl', Dict<string>> = {
de,
nl
}
interface Props {
children: ReactNodeLike
}
interface FactoryContextType {
factories: EnrichedEntity[]
findFactory(uid: string): EnrichedEntity | undefined
}
const defaultValues: FactoryContextType = {
factories: [],
findFactory() {
return undefined
}
}
const FactoryContext = createContext<FactoryContextType>(defaultValues)
export const useFactories = () => useContext(FactoryContext)
export const FactoryProvider: FC<Props> = ({ children }) => {
const locale = useLocale()
const internationalizedFactories = useMemo(() => {
if (locale !== 'en')
return factories.map(factory => ({
...factory,
name: factoryNames[locale]?.[factory.href] ?? factory.name
}))
return factories
}, [locale])
//const zip = 'bY3BCsNACET/xlP30KY9NODHGFeKsNld1JR+fjeQHgrBQZiReWYKwmsa8wSjEHTgjjdYteIEi5RA+XQT9xRG1XuzSHsMGrI6Un5TZcmJ1XjTmG2+P0BftZmgWqupl4G9cOtd7DBjeyinhQzWlrciJyCfZjn0azMtRf4OUoRjfBmwk94X'
//const zip = 'bU/RasMwDPwbP8UPXTboMvwxiqwVgWMbSR7t39cbTkm3YWHEnU53imAQTr6/dydgFNRhDS9u4xxmt1KyQNcqpOpNIGstYv4bdmy0aaBEaFIyo0cWbGyLLK9vE8QvyEjxGa1SsK/ifPEt7+AKZiS3oUNsW0tgRX4Ax5dchAKWWkl87QxN3A1H23+1br6CTNrSZxO3ldgSaTiu0nmhUX+jHck9zI5NwxhhTfQ0+c/lR/r3qXV+1EefO4+0XQ3I8SG9Aw=='
//const zip = 'bVHBcgMhCP0bT+WQpD10Z/wYmqXG6SoO4mw+v+qmU206coAHPB+woqI9QX3vRlDJZnNN9myCj/ZiPmhTS/cklDOoYMyJRaHBxiuFbJNPBMrghEtcF1lOLw3qTlYWdDWN8asDVxTHsKPj2OPPrfh1ijGQ3oR3koOqhPTT+VQBWkRIO07R+UhQom/x65vxLrKQ9cIR0lYHq2qItsM3gdeyUbaNNl8WetgkcMRH+hGfBNO5G/0rcu76HXvEu1hHKLDfqtbnXBd//HNseaz4c4kp1dY4AsMuHnTTrYbSbw=='
//const unzip = inflateRaw(Buffer.from(zip, 'base64'), {to: 'string'})
//console.log(unzip)
const findFactory = useMemo(() => {
const detailsMap = Object.fromEntries(
internationalizedFactories.map((detail: EnrichedEntity) => [detail.href, detail])
)
return (uid: string): EnrichedEntity | undefined => {
return detailsMap[uid]
}
}, [internationalizedFactories])
const value: FactoryContextType = useMemo(
() => ({
factories: internationalizedFactories,
findFactory
}),
[findFactory, internationalizedFactories]
)
return <FactoryContext.Provider value={value}>{children}</FactoryContext.Provider>
}

View File

@@ -1,7 +1,7 @@
import { EnrichedEntity, Entity } from '../types'
import details from '../../res/details.json'
import manual from '../../res/manual.json'
import exclude from '../../res/exclude.json'
import { EnrichedEntity, Entity } from '../../../src/types'
import details from '../../../res/details.json'
import manual from '../../../res/manual.json'
import exclude from '../../../res/exclude.json'
const manualEntities = manual as Entity[]
const manualKeys = new Set(manualEntities.map(entity => entity.href))
@@ -9,7 +9,7 @@ const detailEntities = (details as Entity[]).filter(detail => !manualKeys.has(de
const joined = [...detailEntities, ...manualEntities]
const factories = joined
export const factories = joined
.map((detail: EnrichedEntity) => {
detail.usedBy = joined.filter(f =>
Object.keys(f.recipe?.prerequisites ?? {}).includes(detail.href)
@@ -17,14 +17,3 @@ const factories = joined
return detail
})
.filter(detail => !(exclude as string[]).includes(detail.href))
const detailsMap = Object.fromEntries(
factories.map((detail: EnrichedEntity) => [detail.href, detail])
)
export const useFactories = () => ({
factories,
findFactory: (uid: string): EnrichedEntity | undefined => {
return detailsMap[uid]
}
})

View File

@@ -10,7 +10,7 @@ import {
SetFactoryArrayBody,
UploadDataBody
} from '../../src/types/ApiSchemasFrontend'
import { NextRouter, useRouter } from 'next/router'
import { useRouter } from 'next/router'
interface Props {
children: ReactNodeLike
@@ -33,7 +33,7 @@ interface GroupContextType {
setBaseFactories(factories: string[]): void
groups: Dict<Group>
addGroup(name: string, exported?: string[], malls?: string[]): void
addGroup(name: string, exported?: string[], malls?: string[]): boolean
removeGroup(name: string): void
renameGroup(name: string, newName: string): void
@@ -60,7 +60,7 @@ const defaultValues: GroupContextType = {
groups: {},
addGroup() {
return
return false
},
removeGroup() {
return
@@ -93,8 +93,8 @@ interface StoredFile {
excludedSuggestions: string[]
}
export const postFetchJson = async (router: NextRouter, url: string, body: unknown) => {
const res = await fetch(router.basePath + url, {
export const postFetchJson = async (base: string | undefined, url: string, body: unknown) => {
const res = await fetch((base ?? '') + url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
@@ -105,7 +105,7 @@ export const postFetchJson = async (router: NextRouter, url: string, body: unkno
}
export const GroupProvider: FC<Props> = ({ children, id, initial }) => {
const router = useRouter()
const { basePath, reload, query } = useRouter()
const [excludedSuggestions, _setExcludedSuggestions] = useState<string[]>(initial.ignored)
const [basicValues, _setBasicValues] = useState<string[]>(initial.base)
const [groups, setGroups] = useState<Dict<Group>>(initial.groups)
@@ -125,23 +125,23 @@ export const GroupProvider: FC<Props> = ({ children, id, initial }) => {
const setExcludedSuggestions = useCallback<typeof _setExcludedSuggestions>(
val => {
_setExcludedSuggestions(val)
postFetchJson(router, `/api/${fixedEncodeURIComponent(id)}/factories`, {
postFetchJson(basePath, `/api/${fixedEncodeURIComponent(id)}/factories`, {
type: 'ignored',
factories: val
} as SetFactoryArrayBody).catch(console.error)
},
[id, router]
[id, basePath]
)
const setBasicValues = useCallback<typeof _setBasicValues>(
val => {
_setBasicValues(val)
postFetchJson(router, `/api/${fixedEncodeURIComponent(id)}/factories`, {
postFetchJson(basePath, `/api/${fixedEncodeURIComponent(id)}/factories`, {
type: 'base',
factories: val
} as SetFactoryArrayBody).catch(console.error)
},
[id, router]
[id, basePath]
)
const addGroup = useCallback(
@@ -154,13 +154,13 @@ export const GroupProvider: FC<Props> = ({ children, id, initial }) => {
})
;(async () => {
await postFetchJson(
router,
basePath,
`/api/${fixedEncodeURIComponent(id)}/group/${fixedEncodeURIComponent(name)}/add`,
{}
)
if (exports.length) {
await postFetchJson(
router,
basePath,
`/api/${fixedEncodeURIComponent(id)}/group/${fixedEncodeURIComponent(name)}/factories`,
{
type: 'exports',
@@ -170,18 +170,18 @@ export const GroupProvider: FC<Props> = ({ children, id, initial }) => {
}
if (malls.length) {
await postFetchJson(
router,
basePath,
`/api/${fixedEncodeURIComponent(id)}/group/${fixedEncodeURIComponent(name)}/factories`,
{
type: 'malls',
factories: exports
factories: malls
} as GroupSetFactoryArrayBody
)
}
})().catch(console.error)
return true
},
[groups, id, router]
[groups, id, basePath]
)
const removeGroup = useCallback(
(name: string) => {
@@ -191,12 +191,12 @@ export const GroupProvider: FC<Props> = ({ children, id, initial }) => {
return { ...g }
})
postFetchJson(
router,
basePath,
`/api/${fixedEncodeURIComponent(id)}/group/${fixedEncodeURIComponent(name)}/remove`,
{}
).catch(console.error)
},
[id, router]
[id, basePath]
)
const renameGroup = useCallback(
(name: string, newName: string) => {
@@ -209,14 +209,14 @@ export const GroupProvider: FC<Props> = ({ children, id, initial }) => {
return { ...g }
})
postFetchJson(
router,
basePath,
`/api/${fixedEncodeURIComponent(id)}/group/${fixedEncodeURIComponent(name)}/rename`,
{
newName
} as GroupRenameBody
).catch(console.error)
},
[groups, id, router]
[groups, id, basePath]
)
const setFactories = useCallback(
@@ -227,7 +227,7 @@ export const GroupProvider: FC<Props> = ({ children, id, initial }) => {
return { ...g }
})
postFetchJson(
router,
basePath,
`/api/${fixedEncodeURIComponent(id)}/group/${fixedEncodeURIComponent(name)}/factories`,
{
type,
@@ -235,7 +235,7 @@ export const GroupProvider: FC<Props> = ({ children, id, initial }) => {
} as GroupSetFactoryArrayBody
).catch(console.error)
},
[id, router]
[id, basePath]
)
const getInputType = useCallback(
(uid: string) => {
@@ -263,14 +263,14 @@ export const GroupProvider: FC<Props> = ({ children, id, initial }) => {
const uncompressed = pako.inflate(compressed, { to: 'string' })
const value: StoredFile = JSON.parse(uncompressed)
if (!value.groups || !value.basicValues || !value.excludedSuggestions) return
await postFetchJson(router, `/api/${router.query.id}/upload`, {
await postFetchJson(basePath, `/api/${query.id}/upload`, {
groups: value.groups,
ignored: value.excludedSuggestions,
base: value.basicValues
} as UploadDataBody)
router.reload()
reload()
},
[router]
[basePath, query.id, reload]
)
const value: GroupContextType = useMemo(

View File

@@ -1,8 +1,8 @@
import { FC, HTMLProps, useMemo } from 'react'
import { Entity } from '../../../src/types'
import { useFactories } from '../../../src/hooks/useFactories'
import styles from './EntityIcon.module.css'
import cx from 'classnames'
import { useFactories } from '../../contexts/FactoryProvider'
interface Props extends Omit<HTMLProps<HTMLSpanElement>, 'value'> {
value: Entity | string

View File

@@ -1,35 +1,39 @@
.span {
background: lightgray;
font-size: 1em;
border: 1px solid white;
display: inline-block;
position: relative;
padding-inline: 0.2em;
display: inline-block;
border: 1px solid var(--md-sys-color-outline);
background: var(--md-sys-color-surface-variant);
border-radius: 4px;
color: var(--md-sys-color-on-surface-variant);
font-size: 1em;
padding-inline: 0.2em;
}
.spanSimple {
padding-inline-start: 0.2em;
position: relative;
display: inline-block;
padding-inline-start: 0.2em;
}
.tooltip {
--background: lightsalmon;
--arrow-width: 0.6em;
--arrow-height: 0.4em;
display: none;
--background: var(--md-sys-color-primary-container);
position: absolute;
left: calc(100% + var(--arrow-width));
top: -5000%;
bottom: -5000%;
margin: auto 0;
z-index: 1;
display: none;
width: max-content;
height: max-content;
background: var(--background);
padding: 0.5em;
margin: auto 0;
background: var(--background);
border-radius: 0.7em;
z-index: 1;
box-shadow: 0 0 6px 1px var(--md-sys-color-shadow);
color: var(--md-sys-color-on-primary-container);
inset-block: -5000%;
inset-inline-start: calc(100% + var(--arrow-width));
--arrow-width: 0.6em;
--arrow-height: 0.4em;
}
.span:is(:focus, :hover) > .tooltip {
@@ -37,16 +41,15 @@
}
.tooltip::before {
content: "";
border-style: solid;
top: 0;
bottom: 0;
margin: auto 0;
position: absolute;
height: max-content;
border-width: var(--arrow-height) var(--arrow-width) var(--arrow-height) 0;
border-style: solid;
border-color: transparent var(--background) transparent transparent;
position: absolute;
left: calc(var(--arrow-width) * -1 + 1px);
margin: auto 0;
content: "";
inset-block: 0;
inset-inline-start: calc(var(--arrow-width) * -1 + 1px);
}
.img {
@@ -58,11 +61,11 @@
}
.base {
color: darkgreen;
color: var(--md-sys-color-tertiary);
}
.produced {
color: darkgoldenrod;
color: var(--md-ref-palette-primary70);
}
.unknown {
@@ -89,32 +92,9 @@
.rightClick {
height: 1em;
transform: scaleX(-1) translateY(0.1em);
transform: scaleX(-1) translateY(0.1em) !important;
}
.clickBtn {
fill: red;
}
@media (prefers-color-scheme: dark) {
.span {
border-color: #111111;
background-color: #444;
}
.base {
color: lightgreen;
}
.produced {
color: lightsalmon;
}
.unknown {
color: lightgray;
}
.tooltip {
--background: darkred;
}
}

View File

@@ -1,11 +1,12 @@
import { FC, HTMLProps, memo, useMemo } from 'react'
import { EnrichedEntity } from '../../../src/types'
import { useFactories } from '../../../src/hooks/useFactories'
import styles from './EntitySpan.module.css'
import { RecipeSpan } from '../Recipe/Recipe'
import { LeftClickIcon } from '../LeftClickIcon/LeftClickIcon'
import { LeftClickIcon } from '../../icons/LeftClickIcon'
import cx from 'classnames'
import { EntityIcon } from '../EntityIcon/EntityIcon'
import { useFactories } from '../../contexts/FactoryProvider'
import { I18n } from '../../shared/I18n/I18n'
interface Props extends Omit<HTMLProps<HTMLSpanElement>, 'value'> {
value: EnrichedEntity | string
@@ -16,7 +17,7 @@ interface Props extends Omit<HTMLProps<HTMLSpanElement>, 'value'> {
className?: string
}
const EntitySpanUnmemo: FC<Props> = ({
const EntitySpanBase: FC<Props> = ({
className,
value,
state,
@@ -50,13 +51,17 @@ const EntitySpanUnmemo: FC<Props> = ({
<div className={styles.tooltip}>
{entity.recipe && (
<>
<div className={styles.strong}>Recipe</div>
<div className={styles.strong}>
<I18n id={'page.home.tooltip.recipe'} />
</div>
<RecipeSpan recipe={entity.recipe} />
</>
)}
{entity.usedBy?.length ? (
<>
<div className={styles.strong}>Used By</div>
<div className={styles.strong}>
<I18n id={'page.home.tooltip.used_by'} />
</div>
<div className={styles.usedBy}>
{entity.usedBy.map(used => (
<EntityIcon value={used} key={used.name} />
@@ -66,7 +71,9 @@ const EntitySpanUnmemo: FC<Props> = ({
) : null}
{(leftClickText || rightClickText) && (
<>
<div className={styles.strong}>Actions</div>
<div className={styles.strong}>
<I18n id={'page.home.tooltip.actions'} />
</div>
{leftClickText && (
<div>
<LeftClickIcon className={styles.leftClick} classClick={styles.clickBtn} />{' '}
@@ -86,4 +93,4 @@ const EntitySpanUnmemo: FC<Props> = ({
)
}
export const EntitySpan = memo(EntitySpanUnmemo)
export const EntitySpan = memo(EntitySpanBase)

View File

@@ -2,8 +2,8 @@ import { FC, memo, useCallback, useEffect, useMemo } from 'react'
import Select, { ActionMeta, CSSObjectWithLabel } from 'react-select'
import { isNonNullable } from '../../../src/utils'
import styles from './FactorySelect.module.css'
import { useFactories } from '../../../src/hooks/useFactories'
import { EntitySpan } from '../EntitySpan/EntitySpan'
import { useFactories } from '../../contexts/FactoryProvider'
interface Props {
id: string

View File

@@ -1,24 +1,53 @@
.root {
position: relative;
border: 2px solid black;
padding: 1em 0.5em;
border: 1px solid var(--md-sys-color-outline);
background-color: var(--md-sys-color-surface);
border-radius: 4px;
}
.heading {
display: inline-block;
margin-block-start: 0;
}
.heading:not(:focus-visible)::after {
display: inline-block;
width: 1em;
height: 1em;
background-color: var(--md-sys-color-on-background);
content: "";
mask: url("/factorio/pencil.svg") no-repeat 50% 50%;
opacity: 0.8;
padding-inline-start: 0.5em;
}
.quit {
--color: darkred;
--color: var(--md-sys-color-error);
position: absolute;
right: 1em;
top: 1em;
border-radius: 999999px;
background: transparent;
border: 1px solid var(--color);
background: transparent;
border-radius: 999999px;
color: var(--color);
font-weight: 700;
font-weight: 500;
inset-block-start: 1em;
inset-inline-end: 1em;
}
.quit:is(:focus, :hover) {
--color: red;
filter: drop-shadow(0px 0px 2px rgba(0, 0, 0, 0.5));
--color: var(--md-ref-palette-error60);
filter: drop-shadow(0 0 2px var(--md-ref-palette-neutral-variant70));
}
.label {
display: block;
}
.marginTop {
display: block;
margin-block-start: 1em;
}
.flex {
@@ -30,18 +59,3 @@
.flex > * {
width: max-content;
}
@media (prefers-color-scheme: dark) {
.root {
border-color: gray;
}
.quit {
--color: indianred;
}
.quit:is(:focus, :hover) {
--color: red;
filter: drop-shadow(0px 0px 2px rgba(255, 255, 255, 0.5));
}
}

View File

@@ -1,21 +1,25 @@
import { FC, memo, useCallback, useMemo, useState } from 'react'
import { FactorySelect } from '../FactorySelect/FactorySelect'
import { useFactories } from '../../../src/hooks/useFactories'
import { EnrichedEntity, Group } from '../../../src/types'
import styles from './GroupBox.module.css'
import { EntitySpan } from '../EntitySpan/EntitySpan'
import { useGroups } from '../../contexts/GroupProvider'
import { calculateInputs } from '../../../src/calculateInputs'
import { fixedEncodeURIComponent, uniquify } from '../../../src/utils'
import Link from 'next/link'
import { useRouter } from 'next/router'
import { uniquify } from '../../../src/utils'
import { useFactories } from '../../contexts/FactoryProvider'
import { i18n, I18n } from '../../shared/I18n/I18n'
import { useIntl } from 'react-intl'
import { ButtonVisualize } from '../../shared/ButtonVisualize/ButtonVisualize'
import { Heading } from '../../shared/Heading'
import typography from '../../../styles/typography.module.css'
import cx from 'classnames'
interface Props {
group: Group
}
const GroupBoxBase: FC<Props> = ({ group }) => {
const router = useRouter()
const intl = useIntl()
const { factories, findFactory } = useFactories()
const {
doNotSuggest,
@@ -29,6 +33,7 @@ const GroupBoxBase: FC<Props> = ({ group }) => {
getInputType
} = useGroups()
const { name, exports, malls } = group
const nameForId = useMemo(() => name.replace(/[^a-z\d_-]/gi, ''), [name])
const [isDeleteConfirm, setDeleteConfirm] = useState(false)
@@ -75,43 +80,63 @@ const GroupBoxBase: FC<Props> = ({ group }) => {
return (
<div className={styles.root}>
<h3
<ButtonVisualize groupId={group.name} />
<Heading
type={'subsection'}
className={styles.heading}
contentEditable={true}
suppressContentEditableWarning={true}
onBlur={event => {
event.currentTarget.innerText = event.currentTarget.innerText.trim()
renameGroup(name, event.currentTarget.innerText)
}}
>
{name}
</h3>
<Link
href={{
pathname: `/visualize/${fixedEncodeURIComponent(group.name)}`,
query: router.query
onKeyDown={event => {
if (event.key === 'Enter') {
event.preventDefault()
event.currentTarget.blur()
}
if (event.key === 'Escape') {
event.preventDefault()
event.currentTarget.innerText = name
event.currentTarget.blur()
}
}}
>
👁
</Link>
{name}
</Heading>
<button
className={styles.quit}
onBlur={() => setDeleteConfirm(false)}
onClick={() => (!isDeleteConfirm ? setDeleteConfirm(true) : removeGroup(name))}
style={{ display: 'block' }}
>
{isDeleteConfirm ? 'Delete GroupBox?' : 'X'}
{isDeleteConfirm ? i18n(intl, 'page.home.group.delete.confirmation') : 'X'}
</button>
<h4>Exported Factories</h4>
<FactorySelect
id={name + '-exports'}
factories={exports}
onSetFactories={setExportFactories}
/>
<h4>Mall Factories</h4>
<FactorySelect id={name + '-malls'} factories={malls} onSetFactories={setMallFactories} />
<label htmlFor={nameForId + '-exports'} className={styles.label}>
<span className={typography.titleMedium}>
<I18n id={'page.home.group.item.export'} />
</span>
<FactorySelect
id={nameForId + '-exports'}
factories={exports}
onSetFactories={setExportFactories}
/>
</label>
<label htmlFor={nameForId + '-exports'} className={cx(styles.label, styles.marginTop)}>
<span className={typography.titleMedium}>
<I18n id={'page.home.group.item.mall'} />
</span>
<FactorySelect
id={nameForId + '-malls'}
factories={malls}
onSetFactories={setMallFactories}
/>
</label>
{inputs.length ? (
<>
<h4>Input Factories ({inputs.length})</h4>
<span className={cx(typography.titleMedium, styles.marginTop)}>
<I18n id={'page.home.group.item.input'} values={{ amount: inputs.length }} />
</span>
<div className={styles.flex}>
{inputs.map(input => (
<EntitySpan
@@ -122,7 +147,7 @@ const GroupBoxBase: FC<Props> = ({ group }) => {
event.preventDefault()
setIgnoredFactories([...ignoredFactories, input])
}}
rightClickText={'Exclude this recipe from suggestions'}
rightClickText={i18n(intl, 'page.home.tooltip.action.exclude_suggestion')}
/>
))}
</div>
@@ -130,7 +155,12 @@ const GroupBoxBase: FC<Props> = ({ group }) => {
) : null}
{intermediates.length ? (
<>
<h4>Intermediate Factories ({intermediates.length})</h4>
<span className={cx(typography.titleMedium, styles.marginTop)}>
<I18n
id={'page.home.group.item.intermediate'}
values={{ amount: intermediates.length }}
/>
</span>
<div className={styles.flex}>
{intermediates.map(intermediate => (
<EntitySpan
@@ -144,7 +174,9 @@ const GroupBoxBase: FC<Props> = ({ group }) => {
) : null}
{suggestionsExport.length ? (
<>
<h4>Suggestions (Export)</h4>
<span className={cx(typography.titleMedium, styles.marginTop)}>
<I18n id={'page.home.group.item.suggestion.export'} />
</span>
<div className={styles.flex}>
{suggestionsExport.map(suggestion => (
<EntitySpan
@@ -155,8 +187,8 @@ const GroupBoxBase: FC<Props> = ({ group }) => {
event.preventDefault()
setIgnoredFactories([...ignoredFactories, suggestion.href])
}}
leftClickText={'Add to exported factories'}
rightClickText={'Exclude this recipe from suggestions'}
leftClickText={i18n(intl, 'page.home.tooltip.action.add_to_export')}
rightClickText={i18n(intl, 'page.home.tooltip.action.exclude_suggestion')}
/>
))}
</div>
@@ -164,7 +196,9 @@ const GroupBoxBase: FC<Props> = ({ group }) => {
) : null}
{suggestionMall.length ? (
<>
<h4>Suggestions (Mall)</h4>
<span className={cx(typography.titleMedium, styles.marginTop)}>
<I18n id={'page.home.group.item.suggestion.mall'} />
</span>
<div className={styles.flex}>
{suggestionMall.map(suggestion => (
<EntitySpan
@@ -175,8 +209,8 @@ const GroupBoxBase: FC<Props> = ({ group }) => {
event.preventDefault()
setIgnoredFactories([...ignoredFactories, suggestion.href])
}}
leftClickText={'Add to mall factories'}
rightClickText={'Exclude this recipe from suggestions'}
leftClickText={i18n(intl, 'page.home.tooltip.action.add_to_mall')}
rightClickText={i18n(intl, 'page.home.tooltip.action.exclude_suggestion')}
/>
))}
</div>

View File

@@ -1,17 +1,17 @@
.content {
max-width: 80ch;
margin: 0 auto;
text-align: justify;
}
.grid {
display: grid;
margin-top: 2em;
gap: 1em;
grid-template-columns: repeat(auto-fit, minmax(450px, max-content));
margin-block-start: -2em;
}
.missingFactories {
display: flex;
flex-wrap: wrap;
gap: 0.1em;
}
.missingFactories > * {
.entitySpanList > * {
width: max-content;
}

View File

@@ -1,110 +1,38 @@
import { FC, useMemo, useRef, useState } from 'react'
import { FC } from 'react'
import { GroupBox } from './GroupBox/GroupBox'
import styles from './Home.module.css'
import { useFactories } from '../../src/hooks/useFactories'
import { EnrichedEntity } from '../../src/types'
import { EntitySpan } from './EntitySpan/EntitySpan'
import { useGroups } from '../contexts/GroupProvider'
import { Preferences } from './Preferences/Preferences'
import { download, streamToArrayBuffer } from '../../src/download'
import Link from 'next/link'
import { useRouter } from 'next/router'
import { SectionPreferences } from './SectionPreferences/SectionPreferences'
import { I18n } from '../shared/I18n/I18n'
import { Heading } from '../shared/Heading'
import { Paragraph } from '../shared/Paragraph/Paragraph'
import { Section } from '../shared/Section/Section'
import { SectionAddMissing } from './SectionAddMissing/SectionAddMissing'
import { SectionShare } from './SectionShare/SectionShare'
import { ButtonVisualize } from '../shared/ButtonVisualize/ButtonVisualize'
export const Home: FC = () => {
const router = useRouter()
const { factories } = useFactories()
const { groups, addGroup, doNotSuggest, ignoredFactories, setIgnoredFactories, store, load } =
useGroups()
const [newGroupValue, setNewGroupValue] = useState('New group')
const inputRef = useRef<HTMLInputElement>(null)
const [missingExport, missingMall] = useMemo<[EnrichedEntity[], EnrichedEntity[]]>(() => {
return factories
.filter(factory => !doNotSuggest.has(factory.href) && factory.recipe)
.reduce(
(acc, factory) =>
(factory.usedBy?.length ?? 0) >= 3
? [[...acc[0], factory], acc[1]]
: [acc[0], [...acc[1], factory]],
[[], []] as [EnrichedEntity[], EnrichedEntity[]]
)
}, [factories, doNotSuggest])
const { groups } = useGroups()
return (
<main>
<h1>Factorio Microservices</h1>
<button
onClick={() => {
download('factorio-microservices.bin', store())
}}
>
Store
</button>
<input
type={'file'}
multiple={false}
ref={inputRef}
onChange={async evt => {
const stream = evt.currentTarget.files?.[0].stream() as
| globalThis.ReadableStream<Uint8Array>
| undefined
if (stream) {
const array = await streamToArrayBuffer(stream)
load(array)
if (inputRef.current) inputRef.current.value = null as unknown as string
}
}}
/>
<Link href={{ pathname: '/visualize', query: router.query }}>Visualize</Link>
<Preferences />
<fieldset>
<legend>Missing export factories</legend>
<div className={styles.missingFactories}>
{missingExport.map(missing => (
<EntitySpan
key={missing.href}
value={missing}
onClick={() => {
addGroup(newGroupValue !== 'New group' ? newGroupValue : missing.name, [
missing.href
])
setNewGroupValue('New group')
}}
onContextMenu={event => {
event.preventDefault()
setIgnoredFactories([...ignoredFactories, missing.href])
}}
leftClickText={'Create a new group with this name and item as exported factory'}
rightClickText={'Exclude this recipe from suggestions'}
/>
))}
</div>
</fieldset>
<fieldset>
<legend>Missing mall factories</legend>
<div className={styles.missingFactories}>
{missingMall.map(missing => (
<EntitySpan
key={missing.href}
value={missing}
onClick={() => {
addGroup(
newGroupValue !== 'New group' ? newGroupValue : missing.name,
[],
[missing.href]
)
setNewGroupValue('New group')
}}
onContextMenu={event => {
event.preventDefault()
setIgnoredFactories([...ignoredFactories, missing.href])
}}
leftClickText={'Create a new group with this name and item as mall factory'}
rightClickText={'Exclude this recipe from suggestions'}
/>
))}
</div>
</fieldset>
<Section>
<Heading type={'pageTitle'}>
<I18n id={'page.home.title'} />
</Heading>
<Paragraph size={'large'}>
<I18n id={'page.home.description'} />
</Paragraph>
</Section>
<SectionShare />
<SectionPreferences />
<SectionAddMissing />
<Section>
<Heading type={'section'}>
<I18n id={'page.home.group.title'} />
<ButtonVisualize large={true} />
</Heading>
</Section>
<div className={styles.grid}>
{Object.values(groups)
.sort((a, b) => a.name.localeCompare(b.name))

View File

@@ -1,43 +0,0 @@
import { FC, useState } from 'react'
import { FactorySelect } from '../FactorySelect/FactorySelect'
import { useGroups } from '../../contexts/GroupProvider'
export const Preferences: FC = () => {
const { addGroup, baseFactories, setBaseFactories, ignoredFactories, setIgnoredFactories } =
useGroups()
const [newGroupValue, setNewGroupValue] = useState('New group')
return (
<>
<fieldset>
<legend>Basic Values</legend>
<FactorySelect
id={'baseFactoriesSelect'}
factories={baseFactories}
onSetFactories={setBaseFactories}
fixInputs={true}
/>
</fieldset>
<fieldset>
<legend>Ignored Values</legend>
<FactorySelect
id={'ignoredFactoriesSelect'}
factories={ignoredFactories}
onSetFactories={setIgnoredFactories}
/>
</fieldset>
<fieldset>
<legend>Add new groups</legend>
<input value={newGroupValue} onChange={e => setNewGroupValue(e.target.value)} />
<button
disabled={!newGroupValue}
onClick={() => {
addGroup(newGroupValue)
setNewGroupValue('New group')
}}
>
Add group &quot;{newGroupValue}&quot;
</button>
</fieldset>
</>
)
}

View File

@@ -2,6 +2,7 @@ import { FC } from 'react'
import { Recipe } from '../../../src/types'
import { EntityIcon } from '../EntityIcon/EntityIcon'
import styles from './Recipe.module.css'
import { I18n } from '../../shared/I18n/I18n'
interface Props {
recipe: Recipe
@@ -23,7 +24,8 @@ export const RecipeSpan: FC<Props> = ({ recipe }) => {
const after = Object.entries({ ...recipe.output }).map(toEntityIcon)
return (
<span className={styles.recipe}>
{joinByPlus([toEntityIcon(['/Time', recipe.time]), ...before])} {joinByPlus(after)}
{joinByPlus([toEntityIcon(['/Time', recipe.time]), ...before])}{' '}
<I18n id={'component.recipe.arrow'} /> {joinByPlus(after)}
</span>
)
}

View File

@@ -0,0 +1,9 @@
.addBtn {
margin-inline: 1em;
}
.entitySpanList {
display: flex;
flex-wrap: wrap;
gap: 0.1em;
}

View File

@@ -0,0 +1,123 @@
import { FC, useCallback, useMemo, useState } from 'react'
import { Heading } from '../../shared/Heading'
import { i18n, I18n } from '../../shared/I18n/I18n'
import { Paragraph } from '../../shared/Paragraph/Paragraph'
import styles from './SectionAddMissing.module.css'
import { EntitySpan } from '../EntitySpan/EntitySpan'
import { Section } from '../../shared/Section/Section'
import { EnrichedEntity } from '../../../src/types'
import { useFactories } from '../../contexts/FactoryProvider'
import { useGroups } from '../../contexts/GroupProvider'
import { useIntl } from 'react-intl'
import { Input } from '../../shared/Input/Input'
import { Button } from '../../shared/Button/Button'
export const SectionAddMissing: FC = () => {
const intl = useIntl()
const DEFAULT_NAME = useMemo(() => i18n(intl, 'page.home.group.add.default_group_name'), [intl])
const { factories } = useFactories()
const { addGroup: addGroupCtx, doNotSuggest, ignoredFactories, setIgnoredFactories } = useGroups()
const [newGroupValue, setNewGroupValue] = useState(DEFAULT_NAME)
const addGroup = useCallback(
(preferredName: string, exported?: string[], mall?: string[]) => {
const name = newGroupValue !== DEFAULT_NAME ? newGroupValue : preferredName
const result = addGroupCtx(name, exported, mall)
result && setNewGroupValue(DEFAULT_NAME)
return result
},
[DEFAULT_NAME, addGroupCtx, newGroupValue]
)
const [missingExport, missingMall] = useMemo<[EnrichedEntity[], EnrichedEntity[]]>(() => {
return factories
.filter(factory => !doNotSuggest.has(factory.href) && factory.recipe)
.reduce(
(acc, factory) =>
(factory.usedBy?.length ?? 0) >= 3
? [[...acc[0], factory], acc[1]]
: [acc[0], [...acc[1], factory]],
[[], []] as [EnrichedEntity[], EnrichedEntity[]]
)
}, [factories, doNotSuggest])
return (
<Section color={'secondary'}>
<Heading type={'section'}>
<I18n id={'page.home.group.add.title'} />
</Heading>
<Input value={newGroupValue} onChange={e => setNewGroupValue(e.target.value)} />
<Button
className={styles.addBtn}
disabled={!newGroupValue}
onClick={() => {
addGroup(newGroupValue)
setNewGroupValue(DEFAULT_NAME)
}}
>
<I18n id={'page.home.group.add.button_text'} values={{ name: newGroupValue }} />
</Button>
<Heading type={'subsection'}>
<I18n id={'page.home.group.missing.export.title'} />
</Heading>
<Paragraph size={'subtitle'}>
<I18n id={'page.home.group.missing.export.description'} />
</Paragraph>
{missingExport.length ? (
<div className={styles.entitySpanList}>
{missingExport.map(missing => (
<EntitySpan
key={missing.href}
value={missing}
onClick={() => {
addGroup(missing.name, [missing.href])
}}
onContextMenu={event => {
event.preventDefault()
setIgnoredFactories([...ignoredFactories, missing.href])
}}
leftClickText={i18n(intl, 'page.home.tooltip.action.add_to_new_export')}
rightClickText={i18n(intl, 'page.home.tooltip.action.exclude_suggestion')}
/>
))}
</div>
) : (
<Paragraph size={'medium'}>
<em>
<I18n id={'page.home.group.missing.none'} />
</em>
</Paragraph>
)}
<Heading type={'subsection'}>
<I18n id={'page.home.group.missing.mall.title'} />
</Heading>
<Paragraph size={'subtitle'}>
<I18n id={'page.home.group.missing.mall.description'} />
</Paragraph>
{missingMall.length ? (
<div className={styles.entitySpanList}>
{missingMall.map(missing => (
<EntitySpan
key={missing.href}
value={missing}
onClick={() => {
addGroup(missing.name, undefined, [missing.href])
}}
onContextMenu={event => {
event.preventDefault()
setIgnoredFactories([...ignoredFactories, missing.href])
}}
leftClickText={i18n(intl, 'page.home.tooltip.action.add_to_new_mall')}
rightClickText={i18n(intl, 'page.home.tooltip.action.exclude_suggestion')}
/>
))}
</div>
) : (
<Paragraph size={'medium'}>
<em>
<I18n id={'page.home.group.missing.none'} />
</em>
</Paragraph>
)}
</Section>
)
}

View File

@@ -0,0 +1,3 @@
.margin-top {
margin-block-start: 2em;
}

View File

@@ -0,0 +1,45 @@
import { FC } from 'react'
import { FactorySelect } from '../FactorySelect/FactorySelect'
import { useGroups } from '../../contexts/GroupProvider'
import { I18n } from '../../shared/I18n/I18n'
import { Section } from '../../shared/Section/Section'
import { Heading } from '../../shared/Heading'
import { Paragraph } from '../../shared/Paragraph/Paragraph'
import { Collapsible } from '../../shared/Collapsible/Collapsible'
import styles from './SectionPreferences.module.css'
export const SectionPreferences: FC = () => {
const { baseFactories, setBaseFactories, ignoredFactories, setIgnoredFactories } = useGroups()
return (
<Section>
<Collapsible id={'collapseBase'}>
<Heading type={'section'}>
<I18n id={'page.home.pref.basic.title'} />
</Heading>
<Paragraph size={'subtitle'}>
<I18n id={'page.home.pref.basic.description'} />
</Paragraph>
<FactorySelect
id={'baseFactoriesSelect'}
factories={baseFactories}
onSetFactories={setBaseFactories}
fixInputs={true}
/>
</Collapsible>
<Collapsible id={'collapseIgnored'} className={styles.marginTop}>
<Heading type={'section'}>
<I18n id={'page.home.pref.ignored.title'} />
</Heading>
<Paragraph size={'subtitle'}>
<I18n id={'page.home.pref.ignored.description'} />
</Paragraph>
<FactorySelect
id={'ignoredFactoriesSelect'}
factories={ignoredFactories}
onSetFactories={setIgnoredFactories}
/>
</Collapsible>
</Section>
)
}

View File

@@ -0,0 +1,30 @@
.shareGrid {
display: grid;
gap: 3em;
grid-template-columns: repeat(auto-fit, minmax(30ch, 1fr));
}
.downloadBtn {
width: 100%;
}
.uploadInput {
display: inline-block;
width: 100%;
padding: 2em 0.5em;
border: 1px dashed var(--md-sys-color-on-secondary-container);
margin: 1em 0;
background-color: var(--md-sys-color-secondary-container);
border-radius: 4px;
color: var(--md-sys-color-on-secondary-container);
text-align: center;
}
.shareInput {
width: 100%;
}
.uploadInput > input {
width: 0;
visibility: hidden;
}

View File

@@ -0,0 +1,80 @@
import { FC, useEffect, useState } from 'react'
import styles from './SectionShare.module.css'
import { Heading } from '../../shared/Heading'
import { Paragraph } from '../../shared/Paragraph/Paragraph'
import { Button } from '../../shared/Button/Button'
import cx from 'classnames'
import typography from '../../../styles/typography.module.css'
import { download, streamToArrayBuffer } from '../../../src/download'
import { I18n } from '../../shared/I18n/I18n'
import { Input } from '../../shared/Input/Input'
import { Section } from '../../shared/Section/Section'
import { useGroups } from '../../contexts/GroupProvider'
export const SectionShare: FC = () => {
const { store, load } = useGroups()
const [location, setLocation] = useState('')
useEffect(() => {
setLocation(window.location.href)
}, [])
return (
<Section color={'primary'}>
<div className={styles.shareGrid}>
<div>
<Heading type={'section'}>
<I18n id={'page.home.share.download.title'} />
</Heading>
<Paragraph size={'medium'}>
<I18n id={'page.home.share.download.description'} />
</Paragraph>
<Button
className={cx(styles.downloadBtn, typography.bodyLarge)}
onClick={() => {
download('factorio-microservices.bin', store())
}}
>
<I18n id={'page.home.pref.download'} />
</Button>
<label className={styles.uploadInput}>
<I18n id={'page.home.share.download.upload_text'} />
<input
type={'file'}
multiple={false}
onChange={async evt => {
const stream = evt.currentTarget.files?.[0].stream() as
| globalThis.ReadableStream<Uint8Array>
| undefined
if (stream) {
const array = await streamToArrayBuffer(stream)
load(array)
evt.currentTarget.value = null as unknown as string
}
}}
/>
</label>
</div>
<div>
<Heading type={'section'}>
<I18n id={'page.home.share.link.title'} />
</Heading>
<Paragraph size={'medium'}>
<I18n id={'page.home.share.link.description'} />
</Paragraph>
<Paragraph size={'medium'}>
<strong>
<I18n id={'page.home.share.link.warning'} />
</strong>
</Paragraph>
<Input
className={styles.shareInput}
readOnly={true}
value={location}
onClick={e => e.currentTarget.select()}
/>
</div>
</div>
</Section>
)
}

View File

@@ -0,0 +1,24 @@
import { FC } from 'react'
import styles from './Icon.module.css'
import cx from 'classnames'
interface Props {
className?: string
}
export const GraphIcon: FC<Props> = ({ className }) => {
return (
<svg
version='1.1'
viewBox='0 0 50 50'
xmlSpace='preserve'
xmlns='http://www.w3.org/2000/svg'
xmlnsXlink='http://www.w3.org/1999/xlink'
className={cx(styles.icon, className)}
>
<g id='Layer_1'>
<path d='M13,37H8V26h16v11h-5v12h12V37h-5V26h16v11h-5v12h12V37h-5V24H26V13h7V1H17v12h7v11H6v13H1v12h12V37z M29,47h-8v-8h8V47z M47,47h-8v-8h8V47z M19,3h12v8H19V3z M11,47H3v-8h8V47z' />
</g>
</svg>
)
}

View File

@@ -0,0 +1,7 @@
.icon {
height: 1em;
fill: currentcolor;
padding-inline: 0.5ch;
stroke: currentcolor;
transform: translateY(0.1em);
}

View File

@@ -1,4 +1,6 @@
import { FC } from 'react'
import styles from './Icon.module.css'
import cx from 'classnames'
interface Props {
className?: string
@@ -14,7 +16,7 @@ export const LeftClickIcon: FC<Props> = ({ className, classBody, classClick }) =
x='0px'
y='0px'
viewBox='0 0 100 100'
className={className}
className={cx(styles.icon, className)}
>
<path
className={classBody}

View File

@@ -0,0 +1,13 @@
.root {
padding: 1em;
border: 0;
background-color: var(--md-sys-color-secondary);
border-radius: 4px;
color: var(--md-sys-color-on-secondary);
transition: box-shadow 0.075s linear;
}
.root:hover,
.root:focus-visible {
box-shadow: 2px 2px 5px 1px rgba(0 0 0 / 50%);
}

View File

@@ -0,0 +1,13 @@
import { ButtonHTMLAttributes, FC } from 'react'
import cx from 'classnames'
import styles from './Button.module.css'
type Props = ButtonHTMLAttributes<HTMLButtonElement>
export const Button: FC<Props> = ({ className, children, ...rest }) => {
return (
<button className={cx(styles.root, className)} {...rest}>
{children}
</button>
)
}

View File

@@ -0,0 +1,15 @@
.root {
display: inline-block;
margin-block-start: -0.4em;
padding-inline: 0.5em;
vertical-align: middle;
}
.link {
display: inline;
padding: 0.2em;
border-radius: 4px;
box-shadow: 0 0 0 1px var(--md-sys-color-tertiary);
color: var(--md-sys-color-tertiary);
font-size: var(--md-sys-typescale-body-small-font-size);
}

View File

@@ -0,0 +1,25 @@
import { FC } from 'react'
import { I18n } from '../I18n/I18n'
import { GraphIcon } from '../../icons/GraphIcon'
import Link from 'next/link'
import { useRouter } from 'next/router'
import styles from './ButtonVisualize.module.css'
interface Props {
groupId?: string
large?: true
}
export const ButtonVisualize: FC<Props> = ({ groupId, large }) => {
const { query } = useRouter()
return (
<span className={styles.root}>
<Link href={{ pathname: !groupId ? '/visualize' : `/visualize/${groupId}`, query }}>
<a className={styles.link}>
{large ? <I18n id={'page.home.pref.visualize'} /> : null}
<GraphIcon />
</a>
</Link>
</span>
)
}

View File

@@ -0,0 +1,58 @@
.collapsible {
position: relative;
}
.toggle {
display: none;
}
.label {
position: absolute;
z-index: 100;
inset-block-start: 0;
inset-inline-end: 0;
}
.label::before {
display: block;
width: 1em;
height: 1em;
border: 1px solid var(--md-ref-palette-neutral-variant80);
border-radius: 4px;
content: "-";
font-size: 0.5em;
line-height: 1em;
margin-block-start: 0.5em;
text-align: center;
}
.content {
position: relative;
overflow: hidden;
max-height: 100vh;
transition: max-height 0.25s ease-in;
}
.content::after {
position: absolute;
height: 3em;
background: linear-gradient(to bottom, rgba(0 0 0 / 0%) 0%, var(--color-bg) 100%);
content: "";
inset-block-end: 0;
inset-inline: 0;
pointer-events: none;
transition: height 0.25s ease-in-out;
}
.toggle:checked + .label::before {
content: "+";
}
.toggle:not(:checked) + .label + .content::after {
height: 0;
}
.toggle:checked + .label + .content {
max-height: 5em;
transition: max-height 0.25s ease-out;
}

View File

@@ -0,0 +1,25 @@
import { FC, PropsWithChildren } from 'react'
import styles from './Collapsible.module.css'
import cx from 'classnames'
import typography from '../../../styles/typography.module.css'
interface Props {
id: string
className?: string
}
export const Collapsible: FC<PropsWithChildren<Props>> = ({ id, className, children }) => {
return (
<div className={cx(styles.collapsible, className)}>
<input id={id} className={styles.toggle} type='checkbox' defaultChecked={true} />
{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}
<label
htmlFor={id}
id={id}
className={cx(styles.label, typography.displaySmall)}
defaultChecked={true}
/>
<div className={styles.content}>{children}</div>
</div>
)
}

View File

@@ -0,0 +1,35 @@
import { createElement, FC, HTMLAttributes, PropsWithChildren } from 'react'
import cx from 'classnames'
import typography from '../../styles/typography.module.css'
interface Props extends HTMLAttributes<HTMLSpanElement & HTMLHeadingElement> {
tag?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'span'
type: 'pageTitle' | 'section' | 'subsection'
className?: string
}
export const Heading: FC<PropsWithChildren<Props>> = ({
tag,
type,
className,
children,
...rest
}) => {
const TAG: Record<Props['type'], Exclude<Props['tag'], undefined>> = {
pageTitle: 'h1',
section: 'h2',
subsection: 'h3'
}
return createElement(
tag ?? TAG[type],
{
className: cx(className, {
[typography.displayLarge]: type === 'pageTitle',
[typography.headlineMedium]: type === 'section',
[typography.titleLarge]: type === 'subsection'
}),
...rest
},
children
)
}

View File

@@ -0,0 +1,20 @@
import { ComponentProps, FC } from 'react'
import { FormattedMessage, IntlShape } from 'react-intl'
import { useMessages } from '../../../src/i18n'
import { FormatXMLElementFn, PrimitiveType } from 'intl-messageformat'
interface Props extends ComponentProps<typeof FormattedMessage> {
id: keyof ReturnType<typeof useMessages>['en']
}
export const I18n: FC<Props> = ({ children, ...props }) => {
return <FormattedMessage {...props}>{children}</FormattedMessage>
}
export const i18n = (
intl: IntlShape,
id: keyof ReturnType<typeof useMessages>['en'],
values?: Record<string, PrimitiveType | FormatXMLElementFn<string, string>>
) => {
return intl.formatMessage({ id }, values, { ignoreTag: true })
}

View File

@@ -0,0 +1,8 @@
.root {
padding: 1em 0.5em;
border: 1px solid var(--color-text, var(--md-sys-color-on-background));
margin: 0 0 1em;
background-color: var(--color-bg, var(--md-sys-color-background));
border-radius: 4px;
font-size: var(--md-sys-typescale-body-small-font-size);
}

View File

@@ -0,0 +1,9 @@
import { FC, InputHTMLAttributes } from 'react'
import styles from './Input.module.css'
import cx from 'classnames'
type Props = InputHTMLAttributes<HTMLInputElement>
export const Input: FC<Props> = ({ className, ...rest }) => {
return <input className={cx(className, styles.root)} {...rest} />
}

View File

@@ -0,0 +1,3 @@
.subtitle {
margin-block-start: -2em;
}

View File

@@ -0,0 +1,23 @@
import { FC, PropsWithChildren } from 'react'
import cx from 'classnames'
import typography from '../../../styles/typography.module.css'
import styles from './Paragraph.module.css'
interface Props {
size: 'large' | 'medium' | 'small' | 'subtitle'
}
export const Paragraph: FC<PropsWithChildren<Props>> = ({ size, children }) => {
return (
<p
className={cx({
[typography.bodyLarge]: size === 'large',
[typography.bodyMedium]: size === 'medium',
[typography.bodySmall]: size === 'small' || size === 'subtitle',
[styles.subtitle]: size === 'subtitle'
})}
>
{children}
</p>
)
}

View File

@@ -0,0 +1,33 @@
.content {
max-width: 80ch;
margin: 0 auto;
padding-block: 2em;
text-align: justify;
--color-bg: var(--md-sys-color-background);
--color-text: var(--md-sys-color-on-background);
}
.primary {
--color-bg: var(--md-sys-color-primary-container);
--color-text: var(--md-sys-color-on-primary-container);
}
.secondary {
--color-bg: var(--md-sys-color-secondary-container);
--color-text: var(--md-sys-color-on-secondary-container);
}
.tertiary {
--color-bg: var(--md-sys-color-tertiary-container);
--color-text: var(--md-sys-color-on-tertiary-container);
}
.primary,
.secondary,
.tertiary {
background-color: var(--color-bg);
box-shadow: 0 0 0 100vmax var(--color-bg);
clip-path: inset(0 -100vmax);
color: var(--color-text);
}

View File

@@ -0,0 +1,26 @@
import { createContext, FC, PropsWithChildren, useContext } from 'react'
import styles from './Section.module.css'
import cx from 'classnames'
type SectionContextType = 'primary' | 'secondary' | 'tertiary' | undefined
interface Props {
color?: SectionContextType
}
const SectionContext = createContext<SectionContextType>(undefined)
export const useSectionColor = () => useContext(SectionContext)
export const Section: FC<PropsWithChildren<Props>> = ({ color, children }) => {
return (
<div
className={cx(styles.content, {
[styles.primary]: color === 'primary',
[styles.secondary]: color === 'secondary',
[styles.tertiary]: color === 'tertiary'
})}
>
<SectionContext.Provider value={color}>{children}</SectionContext.Provider>
</div>
)
}

View File

@@ -2,11 +2,10 @@ import { FC, HTMLProps } from 'react'
import { EnrichedEntity } from '../../../src/types'
import cx from 'classnames'
import styles from './NodeOverview.module.css'
import Link from 'next/link'
import { EntityIcon } from '../../home/EntityIcon/EntityIcon'
import { GraphNode } from '../../../src/graph-untangle/types'
import { fixedEncodeURIComponent } from '../../../src/utils'
import { useRouter } from 'next/router'
import { I18n } from '../../shared/I18n/I18n'
import { ButtonVisualize } from '../../shared/ButtonVisualize/ButtonVisualize'
export type OverviewGraphNode = GraphNode<{
icons: (EnrichedEntity | string)[]
@@ -17,20 +16,10 @@ interface Props extends HTMLProps<HTMLDivElement> {
}
export const NodeOverview: FC<Props> = ({ node, className, ...props }) => {
const router = useRouter()
return (
<div {...props} className={cx(className, styles.root)}>
<h3>
<span className={styles.linkOut}>
<Link
href={{
pathname: `/visualize/${fixedEncodeURIComponent(node.name)}`,
query: router.query
}}
>
👁
</Link>
</span>
<ButtonVisualize groupId={node.name} />
{node.name}
</h3>
{node.icons?.length ? (
@@ -40,7 +29,9 @@ export const NodeOverview: FC<Props> = ({ node, className, ...props }) => {
))}
</div>
) : null}
<h4>Inputs</h4>
<h4>
<I18n id={'page.visualize.overview.imports'} />
</h4>
<div className={styles.small}>
{node.inputs.map(input => (
<EntityIcon key={input} value={input} />
@@ -48,7 +39,9 @@ export const NodeOverview: FC<Props> = ({ node, className, ...props }) => {
</div>
{node.outputs.length ? (
<>
<h4>Outputs</h4>
<h4>
<I18n id={'page.visualize.overview.exports'} />
</h4>
<div className={styles.small}>
{node.outputs.map(input => (
<EntityIcon key={input} value={input} />

View File

@@ -1,7 +1,6 @@
import { useRouter } from 'next/router'
import { useGroups } from '../contexts/GroupProvider'
import { useFactories } from '../../src/hooks/useFactories'
import { FC, useMemo } from 'react'
import { FC, useMemo, useState } from 'react'
import { calculateInputs } from '../../src/calculateInputs'
import { DetailGraphNode, NodeDetails } from './NodeDetails/NodeDetails'
import { groupBy, isNonNullable, uniquify } from '../../src/utils'
@@ -9,8 +8,14 @@ import { EnrichedEntity } from '../../src/types'
import Head from 'next/head'
import { ScrollContainer } from './ScrollContainer/ScrollContainer'
import { ProducingGraph } from './ProducingGraph/ProducingGraph'
import { useFactories } from '../contexts/FactoryProvider'
import { i18n, I18n } from '../shared/I18n/I18n'
import { useIntl } from 'react-intl'
import { Button } from '../shared/Button/Button'
import { useAsyncEffect } from '../../src/hooks/useAsyncEffect'
export const PageDetails: FC = () => {
const intl = useIntl()
const {
query: { name }
} = useRouter()
@@ -58,15 +63,124 @@ export const PageDetails: FC = () => {
)
}, [findFactory, group, intermediateFactories])
const [savingModuleText, setSavingModuleText] = useState<string | undefined>()
// eslint-disable-next-line react-hooks/exhaustive-deps
useAsyncEffect(async () => {
const res = await fetch('/factorio/modules/energy-saving.csv')
if (res.ok) setSavingModuleText(await res.text())
}, [])
const [optimalModuleText, setOptimalModuleText] = useState<string | undefined>()
// eslint-disable-next-line react-hooks/exhaustive-deps
useAsyncEffect(async () => {
const res = await fetch('/factorio/modules/few-beacons.csv')
if (res.ok) setOptimalModuleText(await res.text())
}, [])
const statisticsUrl = useMemo(() => {
const toDashedKey = (n: string) => {
const key = n.slice(1).toLowerCase().replace(/_/g, '-').replace('efficiency', 'effectivity')
return (
{
wall: 'stone-wall',
lamp: 'small-lamp',
'active-provider-chest': 'logistic-chest-active-provider',
'passive-provider-chest': 'logistic-chest-passive-provider',
'storage-chest': 'logistic-chest-storage',
'buffer-chest': 'logistic-chest-buffer',
'requester-chest': 'logistic-chest-requester',
'uranium-235': 'uranium-ore',
'uranium-238': 'uranium-ore',
exoskeleton: 'exoskeleton-equipment',
'portable-fusion-reactor': 'fusion-reactor-equipment'
}[key] ?? key
)
}
const checkIfPresent = (dashedKey: string) => {
const b = !!optimalModuleText?.match(new RegExp(`\\n${dashedKey};`))
if (optimalModuleText && !b) console.warn('Not found element', dashedKey)
return b
}
const getModuleString = (dashedKey: string, powerSaving?: boolean) => {
const match = (powerSaving ? savingModuleText : optimalModuleText)?.match(
new RegExp(`${dashedKey};.*;(\\d+);(\\d+);(\\d+);(\\d+)`)
)
if (match) {
const map = 'spe'
const [beacons, ...modules] = match.slice(1).map(x => +x)
let beaconModules = beacons == 1 ? 8 : beacons == 5 ? 12 : 0
const maxIdx = modules.reduce((m, c, i, arr) => (c > arr[m] ? i : m), 0)
modules[maxIdx] -= beaconModules
if (modules[maxIdx] < 0) {
const newMaxIdx = modules.reduce((m, c, i, arr) => (c > arr[m] ? i : m), 0)
modules[newMaxIdx] += modules[maxIdx]
beaconModules += modules[maxIdx]
modules[maxIdx] = 0
}
let res = [
dashedKey,
...[0, 1, 2].flatMap(idx => Array(modules[idx]).fill(`${map[idx]}3`))
].join(':')
if (beacons + modules[0] + modules[1] === 0 && modules[2] === 2)
res = res.replace(/e3/g, 'e2')
else if (beacons + modules[0] + modules[1] === 0 && modules[2] >= 3)
res = res.replace(/e3/g, 'ee')
// console.log(beacons, modules, res, dashedKey)
return res + (beaconModules ? `;${map[maxIdx]}3:${beaconModules}` : '')
}
return dashedKey
}
const params = {
data: '1-1-19',
rate: 's',
cp: '2',
min: '3',
belt: 'express-transport-belt',
items: [
...(group?.malls
.map(toDashedKey)
.filter(checkIfPresent)
.map(n => `${n}:r:1`) ?? []),
...(group?.exports
.map(toDashedKey)
.filter(checkIfPresent)
.map(n => `${n}:r:45`) ?? [])
].join(','),
ignore: inputFactories.map(toDashedKey).filter(checkIfPresent).join(','),
modules: [
...([...(group?.exports ?? []), ...intermediateFactories, ...inputFactories]
.map(toDashedKey)
.filter(checkIfPresent)
.map(n => getModuleString(n)) ?? []),
...((group?.malls ?? [])
.map(toDashedKey)
.filter(checkIfPresent)
.map(n => getModuleString(n, true)) ?? [])
].join(',')
}
const paramString = Object.entries(params)
.map(keyValue => keyValue.join('='))
.join('&')
// console.log('params', 'https://kirkmcdonald.github.io/calc.html#' + paramString)
return 'https://kirkmcdonald.github.io/calc.html#' + paramString
}, [group, inputFactories, savingModuleText, optimalModuleText, intermediateFactories])
return (
<>
<Head>
<title>Factorio Microservices</title>
<meta name='description' content='Create Factorio microservices' />
<title>
<I18n id={'page.visualize.details.title'} values={{ name: group?.name ?? '' }} />
</title>
<meta name='description' content={i18n(intl, 'page.home.head.meta.description')} />
</Head>
<main>
<ScrollContainer>
<h1>{name}</h1>
<h1>
<I18n id={'page.visualize.details.title'} values={{ name: group?.name ?? '' }} />
</h1>
<Button onClick={() => window.open(statisticsUrl, '_blank')}>
<I18n id={'page.visualize.details.statistics.button'} />
</Button>
<ProducingGraph
nodes={producingNodes}
inputs={inputFactories}

View File

@@ -1,13 +1,16 @@
import { useGroups } from '../contexts/GroupProvider'
import { useFactories } from '../../src/hooks/useFactories'
import { FC, useMemo } from 'react'
import { calculateInputs } from '../../src/calculateInputs'
import Head from 'next/head'
import { ScrollContainer } from './ScrollContainer/ScrollContainer'
import { ProducingGraph } from './ProducingGraph/ProducingGraph'
import { NodeOverview, OverviewGraphNode } from './NodeOverview/NodeOverview'
import { useFactories } from '../contexts/FactoryProvider'
import { i18n, I18n } from '../shared/I18n/I18n'
import { useIntl } from 'react-intl'
export const PageOverview: FC = () => {
const intl = useIntl()
const { exportedFactories, baseFactories, groups } = useGroups()
const { findFactory } = useFactories()
@@ -28,12 +31,16 @@ export const PageOverview: FC = () => {
return (
<>
<Head>
<title>Factorio Microservices</title>
<meta name='description' content='Create Factorio microservices' />
<title>
<I18n id={'page.visualize.overview.title'} />
</title>
<meta name='description' content={i18n(intl, 'page.home.head.meta.description')} />
</Head>
<main>
<ScrollContainer>
<h1>Factorio Microservices</h1>
<h1>
<I18n id={'page.visualize.overview.title'} />
</h1>
<ProducingGraph
nodes={producingNodes}
inputs={baseFactories}

View File

@@ -16,6 +16,27 @@ const nextConfig = {
publicRuntimeConfig: {
TENANT_TYPE: envVar.get('TENANT_TYPE').required(!isBuildStage).asString(),
NODE_ENV: envVar.get('NODE_ENV').asString()
},
i18n: {
locales: ['en', 'de', 'nl'],
defaultLocale: 'en',
localeDetection: false
},
webpack: config => {
config.module?.rules?.forEach(rule => {
rule.oneOf?.forEach(oneOf => {
const loader = oneOf?.use
if (!loader || !Array.isArray(loader)) return
loader.forEach(l => {
if (l.loader?.includes('/css-loader') && l.options.modules) {
// mde-ui needs camelCase as well as BEM, so preserve both
l.options.modules.exportLocalsConvention = 'camelCase'
}
})
})
})
return config
}
}

View File

@@ -26,6 +26,7 @@
"react": "18.2.0",
"react-dom": "18.2.0",
"react-indiana-drag-scroll": "^2.2.0",
"react-intl": "^6.0.5",
"react-select": "^5.4.0",
"react-tooltip": "^4.2.21",
"seedrandom": "^3.0.5"
@@ -51,6 +52,7 @@
"stylelint": "^14.10.0",
"stylelint-config-idiomatic-order": "^8.1.0",
"stylelint-config-standard": "^27.0.0",
"stylelint-use-logical": "^2.0.0",
"ts-node": "^10.9.1",
"typescript": "4.7.4"
}

View File

@@ -1,18 +1,29 @@
import '../styles/font-faces.css'
import '../styles/tokens.css'
import '../styles/theme.css'
import '../styles/globals.css'
import type { AppProps } from 'next/app'
import { FC } from 'react'
import Head from 'next/head'
import { useRouter } from 'next/router'
import { IntlProvider } from 'react-intl'
import { useMessages } from '../src/i18n'
import { FactoryProvider } from '../components/contexts/FactoryProvider'
import { useLocale } from '../src/hooks/useLocale'
const MyApp: FC<AppProps> = ({ Component, pageProps }) => {
const router = useRouter()
const { basePath } = useRouter()
const messages = useMessages()
const locale = useLocale()
return (
<>
<Head>
<link rel='icon' href={`${router.basePath}/favicon.ico`} />
</Head>
<Component {...pageProps} />
</>
<IntlProvider locale={locale} messages={messages[locale]}>
<FactoryProvider>
<Head>
<link rel='icon' href={`${basePath}/favicon.ico`} />
</Head>
<Component {...pageProps} />
</FactoryProvider>
</IntlProvider>
)
}

22
pages/_document.tsx Normal file
View File

@@ -0,0 +1,22 @@
import { DocumentProps, Head, Html, Main, NextScript } from 'next/document'
import { IntlProvider } from 'react-intl'
import { useMessages } from '../src/i18n'
import { FC } from 'react'
const MyDocument: FC<DocumentProps> = ({ locale: _locale }) => {
const messages = useMessages()
const locale = _locale ?? '' in messages ? (_locale as keyof typeof messages) : 'en'
return (
<IntlProvider locale={locale} messages={messages[locale]}>
<Html lang={locale}>
<Head />
<body>
<Main />
<NextScript />
</body>
</Html>
</IntlProvider>
)
}
export default MyDocument

View File

@@ -1,15 +1,18 @@
import type { NextPage } from 'next'
import Head from 'next/head'
import { Home } from '../components/home/Home'
import { GroupProvider } from '../components/contexts/GroupProvider'
import { getServerSidePropsGroupProvider, PropsGroupProvider } from '../src/getServerSideProps'
import Head from 'next/head'
import { useIntl } from 'react-intl'
import { i18n } from '../components/shared/I18n/I18n'
const Page: NextPage<PropsGroupProvider> = ({ id, ...initial }) => {
const intl = useIntl()
return (
<GroupProvider id={id} initial={initial}>
<Head>
<title>Factorio Microservices</title>
<meta name='description' content='Create Factorio microservices' />
<title>{i18n(intl, 'page.home.head.title')}</title>
<meta name='description' content={i18n(intl, 'page.home.head.meta.description')} />
</Head>
<Home />
</GroupProvider>

202
public/fonts/LICENSE.txt Normal file
View File

@@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,193 @@
name;work;time;beason;speed;prod;eff
pipe;114;0.3;0;1;0;3
flying-robot-frame;7092;10.7;0;1;0;3
empty-barrel;784;0.9;0;0;1;3
radar;3412;0.3;0;1;0;3
logistic-chest-buffer;8320;0.3;0;1;0;3
big-electric-pole;4722;0.3;0;1;0;3
speed-module;8919;8.0;0;1;0;3
combat-shotgun;13712;5.3;0;1;0;3
fusion-reactor-equipment;2002250;5.3;0;1;0;3
stone-furnace;200;0.3;0;1;0;3
gate;2768;0.3;0;1;0;3
power-switch;1400;1.1;0;1;0;3
rocket-control-unit;18867;16.0;0;1;0;3
steel-furnace;5952;1.6;0;1;0;3
logistic-science-pack;1005;3.2;0;1;0;3
refined-concrete;398;8.0;0;1;0;3
roboport;105638;2.7;0;1;0;3
fast-transport-belt;1216;0.3;0;1;0;3
iron-stick;57;0.3;0;1;0;3
centrifuge;207507;2.1;0;1;0;3
speed-module-2;87516;16.0;0;1;0;3
submachine-gun;3876;5.3;0;1;0;3
iron-plate;94;1.6;0;0;0;2
refined-hazard-concrete;399;0.1;0;1;0;3
crude-oil;2;1.0;0;0;0;2
rocket-part;214147;0.5;1;8;4;0
advanced-circuit;1380;3.2;0;1;0;3
logistic-chest-requester;8320;0.3;0;1;0;3
spidertron;6834741;5.3;0;1;0;3
modular-armor;79796;8.0;0;1;0;3
flamethrower-ammo;4212;6.0;0;0;0;3
automation-science-pack;501;2.7;0;1;0;3
fluid-wagon;20909;0.8;0;1;0;3
steam-turbine;17432;1.6;0;1;0;3
cluster-grenade;13198;4.3;0;1;0;3
fast-loader;12992;1.6;0;1;0;3
battery-equipment;12217;5.3;0;1;0;3
heavy-armor;47480;4.3;0;1;0;3
copper-cable;57;0.3;0;1;0;3
artillery-turret;89349;21.3;0;1;0;3
piercing-shotgun-shell;3289;4.3;0;1;0;3
electric-energy-interface;1627;0.3;0;1;0;3
accumulator;4844;5.3;0;1;0;3
boiler;674;0.3;0;1;0;3
logistic-robot;9872;0.3;0;1;0;3
stone-brick;130;1.6;0;0;0;2
fast-splitter;7562;1.1;0;1;0;3
iron-ore;36;2.0;0;0;0;3
poison-capsule;3800;4.3;0;1;0;3
utility-science-pack;12463;12.3;1;1;3;8
wooden-chest;20;0.3;0;1;0;3
effectivity-module-2;87516;16.0;0;1;0;3
heat-pipe;9472;0.5;0;1;0;3
rocket-silo;3222807;16.0;0;1;0;3
artillery-shell;16119;8.0;0;1;0;3
heat-exchanger;18176;1.6;0;1;0;3
locomotive;57488;2.1;0;1;0;3
pump;2540;1.1;0;1;0;3
electric-engine-unit;2981;5.3;0;1;0;3
fast-inserter;1380;0.3;0;1;0;3
pipe-to-ground;812;0.3;0;1;0;3
uranium-rounds-magazine;6228;5.3;0;1;0;3
filter-inserter;2536;0.3;0;1;0;3
long-handed-inserter;926;0.3;0;1;0;3
shotgun;3776;5.3;0;1;0;3
rocket-fuel;5868;16.0;0;1;0;3
assembling-machine-2;6170;0.3;0;1;0;3
flamethrower-turret;35676;10.7;0;1;0;3
personal-roboport-mk2-equipment;1356104;10.7;0;1;0;3
arithmetic-combinator;1724;0.3;0;1;0;3
stack-inserter;10148;0.3;0;1;0;3
logistic-chest-passive-provider;8320;0.3;0;1;0;3
satellite;3065250;2.7;0;1;0;3
rocket-launcher;3324;5.3;0;1;0;3
slowdown-capsule;2580;4.3;0;1;0;3
firearm-magazine;414;0.5;0;1;0;3
hazard-concrete;109;0.1;0;1;0;3
burner-mining-drill;1182;1.1;0;1;0;3
train-stop;4610;0.3;0;1;0;3
artillery-targeting-remote;12180;0.3;0;1;0;3
cannon-shell;2389;4.3;0;1;0;3
rocket;1004;4.3;0;1;0;3
oil-refinery;19004;4.3;0;1;0;3
beacon;42005;8.0;0;1;0;3
belt-immunity-equipment;14859;5.3;0;1;0;3
solar-panel-equipment;15848;5.3;0;1;0;3
fast-underground-belt;5073;1.1;0;1;0;3
steel-chest;6068;0.3;0;1;0;3
grenade;1148;4.3;0;1;0;3
cargo-wagon;19104;0.5;0;1;0;3
coal;36;2.0;0;0;0;3
battery;851;4.0;0;0;0;3
battery-mk2-equipment;279018;5.3;0;1;0;3
personal-roboport-equipment;75921;5.3;0;1;0;3
uranium-cannon-shell;6939;6.4;0;1;0;3
storage-tank;5772;1.6;0;1;0;3
express-loader;32754;5.3;0;1;0;3
light-armor;3864;1.6;0;1;0;3
low-density-structure;5046;10.7;0;1;0;3
offshore-pump;909;0.3;0;1;0;3
gun-turret;5200;4.3;0;1;0;3
lubricant;28;1.0;0;0;0;3
military-science-pack;2321;5.3;0;1;0;3
plastic-bar;172;1.0;0;0;0;3
productivity-module-3;490618;32.0;0;1;0;3
speed-module-3;490618;32.0;0;1;0;3
energy-shield-equipment;14859;5.3;0;1;0;3
small-lamp;568;0.3;0;1;0;3
defender-capsule;7069;4.3;0;1;0;3
express-transport-belt;3872;0.3;0;1;0;3
assembling-machine-1;2750;0.3;0;1;0;3
uranium-ore;320;4.0;0;0;0;3
power-armor;440581;10.7;0;1;0;3
energy-shield-mk2-equipment;217961;5.3;0;1;0;3
pistol;1136;2.7;0;1;0;3
steam-engine;3182;0.3;0;1;0;3
pumpjack;8608;2.7;0;1;0;3
power-armor-mk2;5172288;13.3;0;1;0;3
decider-combinator;1724;0.3;0;1;0;3
distractor-capsule;33015;8.0;0;1;0;3
landfill;740;0.3;0;1;0;3
effectivity-module;8919;8.0;0;1;0;3
shotgun-shell;494;1.6;0;1;0;3
explosives;212;4.0;0;0;0;3
copper-plate;94;1.6;0;0;0;2
production-science-pack;11997;12.3;1;1;3;8
programmable-speaker;2008;1.1;0;1;0;3
construction-robot;7680;0.3;0;1;0;3
chemical-plant;7004;2.7;0;1;0;3
uranium-fuel-cell;47366;1.3;1;8;4;0
green-wire;361;0.3;0;1;0;3
personal-laser-defense-equipment;359671;5.3;0;1;0;3
inserter;605;0.3;0;1;0;3
underground-belt;889;0.5;0;1;0;3
explosive-rocket;1749;4.3;0;1;0;3
night-vision-equipment;14859;5.3;0;1;0;3
repair-pack;1002;0.3;0;1;0;3
splitter;2570;0.5;0;1;0;3
artillery-wagon;163673;2.1;0;1;0;3
red-wire;361;0.3;0;1;0;3
lab;5634;1.1;0;1;0;3
discharge-defense-equipment;377432;5.3;0;1;0;3
atomic-bomb;17512225;26.7;0;1;0;3
logistic-chest-active-provider;8320;0.3;0;1;0;3
productivity-module-2;87516;16.0;0;1;0;3
rail-chain-signal;772;0.3;0;1;0;3
iron-gear-wheel;207;0.3;0;1;0;3
productivity-module;8919;8.0;0;1;0;3
burner-inserter;321;0.3;0;1;0;3
iron-chest;769;0.3;0;1;0;3
substation;14947;0.3;0;1;0;3
stone;36;2.0;0;0;0;3
sulfuric-acid;25;1.0;0;0;0;3
nuclear-fuel;520360;62.5;1;1;2;7
express-underground-belt;13965;1.1;0;1;0;3
electronic-circuit;284;0.3;0;1;0;3
stack-filter-inserter;11588;0.3;0;1;0;3
chemical-science-pack;4251;12.8;0;1;0;3
destroyer-capsule;141579;8.0;0;1;0;3
electric-furnace;15955;2.7;0;1;0;3
sulfur;221;1.0;0;0;0;3
rail;434;0.3;0;1;0;3
exoskeleton-equipment;192440;5.3;0;1;0;3
loader;6790;0.5;0;1;0;3
steel-plate;756;8.0;0;0;0;2
effectivity-module-3;490618;32.0;0;1;0;3
piercing-rounds-magazine;1758;1.6;0;1;0;3
processing-unit;8748;8.6;0;0;1;3
electric-mining-drill;2904;1.1;0;1;0;3
express-splitter;25768;1.1;0;1;0;3
assembling-machine-3;48038;0.3;0;1;0;3
transport-belt;160;0.3;0;1;0;3
copper-ore;36;2.0;0;0;0;3
explosive-cannon-shell;2602;4.3;0;1;0;3
flamethrower;6252;5.3;0;1;0;3
stone-wall;668;0.3;0;1;0;3
small-electric-pole;67;0.3;0;1;0;3
tank;105799;2.7;0;1;0;3
nuclear-reactor;1169253;4.3;0;1;0;3
concrete;108;5.3;0;1;0;3
rail-signal;772;0.3;0;1;0;3
constant-combinator;872;0.3;0;1;0;3
laser-turret;31817;10.7;0;1;0;3
car;18455;1.1;0;1;0;3
cliff-explosives;4377;4.3;0;1;0;3
medium-electric-pole;1946;0.3;0;1;0;3
explosive-uranium-cannon-shell;7151;6.4;0;1;0;3
discharge-defense-remote;304;0.3;0;1;0;3
land-mine;345;2.7;0;1;0;3
engine-unit;1590;5.3;0;1;0;3
logistic-chest-storage;8320;0.3;0;1;0;3
solar-panel;8908;5.3;0;1;0;3
1 name work time beason speed prod eff
2 pipe 114 0.3 0 1 0 3
3 flying-robot-frame 7092 10.7 0 1 0 3
4 empty-barrel 784 0.9 0 0 1 3
5 radar 3412 0.3 0 1 0 3
6 logistic-chest-buffer 8320 0.3 0 1 0 3
7 big-electric-pole 4722 0.3 0 1 0 3
8 speed-module 8919 8.0 0 1 0 3
9 combat-shotgun 13712 5.3 0 1 0 3
10 fusion-reactor-equipment 2002250 5.3 0 1 0 3
11 stone-furnace 200 0.3 0 1 0 3
12 gate 2768 0.3 0 1 0 3
13 power-switch 1400 1.1 0 1 0 3
14 rocket-control-unit 18867 16.0 0 1 0 3
15 steel-furnace 5952 1.6 0 1 0 3
16 logistic-science-pack 1005 3.2 0 1 0 3
17 refined-concrete 398 8.0 0 1 0 3
18 roboport 105638 2.7 0 1 0 3
19 fast-transport-belt 1216 0.3 0 1 0 3
20 iron-stick 57 0.3 0 1 0 3
21 centrifuge 207507 2.1 0 1 0 3
22 speed-module-2 87516 16.0 0 1 0 3
23 submachine-gun 3876 5.3 0 1 0 3
24 iron-plate 94 1.6 0 0 0 2
25 refined-hazard-concrete 399 0.1 0 1 0 3
26 crude-oil 2 1.0 0 0 0 2
27 rocket-part 214147 0.5 1 8 4 0
28 advanced-circuit 1380 3.2 0 1 0 3
29 logistic-chest-requester 8320 0.3 0 1 0 3
30 spidertron 6834741 5.3 0 1 0 3
31 modular-armor 79796 8.0 0 1 0 3
32 flamethrower-ammo 4212 6.0 0 0 0 3
33 automation-science-pack 501 2.7 0 1 0 3
34 fluid-wagon 20909 0.8 0 1 0 3
35 steam-turbine 17432 1.6 0 1 0 3
36 cluster-grenade 13198 4.3 0 1 0 3
37 fast-loader 12992 1.6 0 1 0 3
38 battery-equipment 12217 5.3 0 1 0 3
39 heavy-armor 47480 4.3 0 1 0 3
40 copper-cable 57 0.3 0 1 0 3
41 artillery-turret 89349 21.3 0 1 0 3
42 piercing-shotgun-shell 3289 4.3 0 1 0 3
43 electric-energy-interface 1627 0.3 0 1 0 3
44 accumulator 4844 5.3 0 1 0 3
45 boiler 674 0.3 0 1 0 3
46 logistic-robot 9872 0.3 0 1 0 3
47 stone-brick 130 1.6 0 0 0 2
48 fast-splitter 7562 1.1 0 1 0 3
49 iron-ore 36 2.0 0 0 0 3
50 poison-capsule 3800 4.3 0 1 0 3
51 utility-science-pack 12463 12.3 1 1 3 8
52 wooden-chest 20 0.3 0 1 0 3
53 effectivity-module-2 87516 16.0 0 1 0 3
54 heat-pipe 9472 0.5 0 1 0 3
55 rocket-silo 3222807 16.0 0 1 0 3
56 artillery-shell 16119 8.0 0 1 0 3
57 heat-exchanger 18176 1.6 0 1 0 3
58 locomotive 57488 2.1 0 1 0 3
59 pump 2540 1.1 0 1 0 3
60 electric-engine-unit 2981 5.3 0 1 0 3
61 fast-inserter 1380 0.3 0 1 0 3
62 pipe-to-ground 812 0.3 0 1 0 3
63 uranium-rounds-magazine 6228 5.3 0 1 0 3
64 filter-inserter 2536 0.3 0 1 0 3
65 long-handed-inserter 926 0.3 0 1 0 3
66 shotgun 3776 5.3 0 1 0 3
67 rocket-fuel 5868 16.0 0 1 0 3
68 assembling-machine-2 6170 0.3 0 1 0 3
69 flamethrower-turret 35676 10.7 0 1 0 3
70 personal-roboport-mk2-equipment 1356104 10.7 0 1 0 3
71 arithmetic-combinator 1724 0.3 0 1 0 3
72 stack-inserter 10148 0.3 0 1 0 3
73 logistic-chest-passive-provider 8320 0.3 0 1 0 3
74 satellite 3065250 2.7 0 1 0 3
75 rocket-launcher 3324 5.3 0 1 0 3
76 slowdown-capsule 2580 4.3 0 1 0 3
77 firearm-magazine 414 0.5 0 1 0 3
78 hazard-concrete 109 0.1 0 1 0 3
79 burner-mining-drill 1182 1.1 0 1 0 3
80 train-stop 4610 0.3 0 1 0 3
81 artillery-targeting-remote 12180 0.3 0 1 0 3
82 cannon-shell 2389 4.3 0 1 0 3
83 rocket 1004 4.3 0 1 0 3
84 oil-refinery 19004 4.3 0 1 0 3
85 beacon 42005 8.0 0 1 0 3
86 belt-immunity-equipment 14859 5.3 0 1 0 3
87 solar-panel-equipment 15848 5.3 0 1 0 3
88 fast-underground-belt 5073 1.1 0 1 0 3
89 steel-chest 6068 0.3 0 1 0 3
90 grenade 1148 4.3 0 1 0 3
91 cargo-wagon 19104 0.5 0 1 0 3
92 coal 36 2.0 0 0 0 3
93 battery 851 4.0 0 0 0 3
94 battery-mk2-equipment 279018 5.3 0 1 0 3
95 personal-roboport-equipment 75921 5.3 0 1 0 3
96 uranium-cannon-shell 6939 6.4 0 1 0 3
97 storage-tank 5772 1.6 0 1 0 3
98 express-loader 32754 5.3 0 1 0 3
99 light-armor 3864 1.6 0 1 0 3
100 low-density-structure 5046 10.7 0 1 0 3
101 offshore-pump 909 0.3 0 1 0 3
102 gun-turret 5200 4.3 0 1 0 3
103 lubricant 28 1.0 0 0 0 3
104 military-science-pack 2321 5.3 0 1 0 3
105 plastic-bar 172 1.0 0 0 0 3
106 productivity-module-3 490618 32.0 0 1 0 3
107 speed-module-3 490618 32.0 0 1 0 3
108 energy-shield-equipment 14859 5.3 0 1 0 3
109 small-lamp 568 0.3 0 1 0 3
110 defender-capsule 7069 4.3 0 1 0 3
111 express-transport-belt 3872 0.3 0 1 0 3
112 assembling-machine-1 2750 0.3 0 1 0 3
113 uranium-ore 320 4.0 0 0 0 3
114 power-armor 440581 10.7 0 1 0 3
115 energy-shield-mk2-equipment 217961 5.3 0 1 0 3
116 pistol 1136 2.7 0 1 0 3
117 steam-engine 3182 0.3 0 1 0 3
118 pumpjack 8608 2.7 0 1 0 3
119 power-armor-mk2 5172288 13.3 0 1 0 3
120 decider-combinator 1724 0.3 0 1 0 3
121 distractor-capsule 33015 8.0 0 1 0 3
122 landfill 740 0.3 0 1 0 3
123 effectivity-module 8919 8.0 0 1 0 3
124 shotgun-shell 494 1.6 0 1 0 3
125 explosives 212 4.0 0 0 0 3
126 copper-plate 94 1.6 0 0 0 2
127 production-science-pack 11997 12.3 1 1 3 8
128 programmable-speaker 2008 1.1 0 1 0 3
129 construction-robot 7680 0.3 0 1 0 3
130 chemical-plant 7004 2.7 0 1 0 3
131 uranium-fuel-cell 47366 1.3 1 8 4 0
132 green-wire 361 0.3 0 1 0 3
133 personal-laser-defense-equipment 359671 5.3 0 1 0 3
134 inserter 605 0.3 0 1 0 3
135 underground-belt 889 0.5 0 1 0 3
136 explosive-rocket 1749 4.3 0 1 0 3
137 night-vision-equipment 14859 5.3 0 1 0 3
138 repair-pack 1002 0.3 0 1 0 3
139 splitter 2570 0.5 0 1 0 3
140 artillery-wagon 163673 2.1 0 1 0 3
141 red-wire 361 0.3 0 1 0 3
142 lab 5634 1.1 0 1 0 3
143 discharge-defense-equipment 377432 5.3 0 1 0 3
144 atomic-bomb 17512225 26.7 0 1 0 3
145 logistic-chest-active-provider 8320 0.3 0 1 0 3
146 productivity-module-2 87516 16.0 0 1 0 3
147 rail-chain-signal 772 0.3 0 1 0 3
148 iron-gear-wheel 207 0.3 0 1 0 3
149 productivity-module 8919 8.0 0 1 0 3
150 burner-inserter 321 0.3 0 1 0 3
151 iron-chest 769 0.3 0 1 0 3
152 substation 14947 0.3 0 1 0 3
153 stone 36 2.0 0 0 0 3
154 sulfuric-acid 25 1.0 0 0 0 3
155 nuclear-fuel 520360 62.5 1 1 2 7
156 express-underground-belt 13965 1.1 0 1 0 3
157 electronic-circuit 284 0.3 0 1 0 3
158 stack-filter-inserter 11588 0.3 0 1 0 3
159 chemical-science-pack 4251 12.8 0 1 0 3
160 destroyer-capsule 141579 8.0 0 1 0 3
161 electric-furnace 15955 2.7 0 1 0 3
162 sulfur 221 1.0 0 0 0 3
163 rail 434 0.3 0 1 0 3
164 exoskeleton-equipment 192440 5.3 0 1 0 3
165 loader 6790 0.5 0 1 0 3
166 steel-plate 756 8.0 0 0 0 2
167 effectivity-module-3 490618 32.0 0 1 0 3
168 piercing-rounds-magazine 1758 1.6 0 1 0 3
169 processing-unit 8748 8.6 0 0 1 3
170 electric-mining-drill 2904 1.1 0 1 0 3
171 express-splitter 25768 1.1 0 1 0 3
172 assembling-machine-3 48038 0.3 0 1 0 3
173 transport-belt 160 0.3 0 1 0 3
174 copper-ore 36 2.0 0 0 0 3
175 explosive-cannon-shell 2602 4.3 0 1 0 3
176 flamethrower 6252 5.3 0 1 0 3
177 stone-wall 668 0.3 0 1 0 3
178 small-electric-pole 67 0.3 0 1 0 3
179 tank 105799 2.7 0 1 0 3
180 nuclear-reactor 1169253 4.3 0 1 0 3
181 concrete 108 5.3 0 1 0 3
182 rail-signal 772 0.3 0 1 0 3
183 constant-combinator 872 0.3 0 1 0 3
184 laser-turret 31817 10.7 0 1 0 3
185 car 18455 1.1 0 1 0 3
186 cliff-explosives 4377 4.3 0 1 0 3
187 medium-electric-pole 1946 0.3 0 1 0 3
188 explosive-uranium-cannon-shell 7151 6.4 0 1 0 3
189 discharge-defense-remote 304 0.3 0 1 0 3
190 land-mine 345 2.7 0 1 0 3
191 engine-unit 1590 5.3 0 1 0 3
192 logistic-chest-storage 8320 0.3 0 1 0 3
193 solar-panel 8908 5.3 0 1 0 3

193
public/modules/fast.csv Normal file
View File

@@ -0,0 +1,193 @@
name;work;time;beason;speed;prod;eff
pipe;1908;0.0;5;16;0;0
flying-robot-frame;75815;1.7;5;14;2;0
empty-barrel;10260;0.1;5;14;2;0
radar;49547;0.0;5;16;0;0
logistic-chest-buffer;120255;0.0;5;16;0;0
big-electric-pole;72746;0.0;5;16;0;0
speed-module;107459;1.3;5;16;0;0
combat-shotgun;214147;0.9;5;16;0;0
fusion-reactor-equipment;22393364;0.9;5;16;0;0
stone-furnace;4351;0.0;5;16;0;0
gate;42809;0.0;5;16;0;0
power-switch;20688;0.2;5;16;0;0
rocket-control-unit;187246;2.6;5;14;2;0
steel-furnace;94666;0.3;5;16;0;0
logistic-science-pack;12827;0.5;5;14;2;0
refined-concrete;6991;1.3;5;16;0;0
roboport;1375467;0.4;5;16;0;0
fast-transport-belt;17591;0.0;5;16;0;0
iron-stick;818;0.0;5;14;2;0
centrifuge;2677062;0.4;5;16;0;0
speed-module-2;1004494;2.7;5;16;0;0
submachine-gun;59855;0.9;5;16;0;0
iron-plate;1598;0.2;5;13;1;0
refined-hazard-concrete;7007;0.0;5;16;0;0
crude-oil;42;0.1;5;14;0;0
rocket-part;2625842;0.3;5;14;2;0
advanced-circuit;15949;0.5;5;14;2;0
logistic-chest-requester;120255;0.0;5;16;0;0
spidertron;78191991;0.9;5;16;0;0
modular-armor;1066751;1.3;5;16;0;0
flamethrower-ammo;65512;0.7;5;15;0;0
automation-science-pack;6857;0.4;5;14;2;0
fluid-wagon;322873;0.1;5;16;0;0
steam-turbine;268344;0.3;5;16;0;0
cluster-grenade;223261;0.7;5;16;0;0
fast-loader;186669;0.3;5;16;0;0
battery-equipment;170475;0.9;5;16;0;0
heavy-armor;743745;0.7;5;16;0;0
copper-cable;818;0.0;5;14;2;0
artillery-turret;1279618;3.6;5;16;0;0
piercing-shotgun-shell;52613;0.7;5;16;0;0
electric-energy-interface;21921;0.0;5;16;0;0
accumulator;57873;0.9;5;16;0;0
boiler;12293;0.0;5;16;0;0
logistic-robot;108022;0.0;5;16;0;0
stone-brick;2333;0.2;5;13;1;0
fast-splitter;104532;0.2;5;16;0;0
iron-ore;808;0.2;5;15;0;0
poison-capsule;58830;0.7;5;16;0;0
utility-science-pack;133832;1.8;5;14;2;0
wooden-chest;996;0.0;5;16;0;0
effectivity-module-2;1004494;2.7;5;16;0;0
heat-pipe;148377;0.1;5;16;0;0
rocket-silo;39742168;2.7;5;16;0;0
artillery-shell;229907;1.3;5;16;0;0
heat-exchanger;296536;0.3;5;16;0;0
locomotive;814849;0.4;5;16;0;0
pump;36135;0.2;5;16;0;0
electric-engine-unit;34309;0.9;5;14;2;0
fast-inserter;19431;0.0;5;16;0;0
pipe-to-ground;13690;0.0;5;16;0;0
uranium-rounds-magazine;85006;0.9;5;16;0;0
filter-inserter;34473;0.0;5;16;0;0
long-handed-inserter;13436;0.0;5;16;0;0
shotgun;62707;0.9;5;16;0;0
rocket-fuel;60949;2.6;5;14;2;0
assembling-machine-2;89944;0.0;5;16;0;0
flamethrower-turret;530436;1.8;5;16;0;0
personal-roboport-mk2-equipment;15634125;1.8;5;16;0;0
arithmetic-combinator;22817;0.0;5;16;0;0
stack-inserter;135461;0.0;5;16;0;0
logistic-chest-passive-provider;120255;0.0;5;16;0;0
satellite;38014271;0.4;5;16;0;0
rocket-launcher;47447;0.9;5;16;0;0
slowdown-capsule;39526;0.7;5;16;0;0
firearm-magazine;7012;0.1;5;16;0;0
hazard-concrete;2054;0.0;5;16;0;0
burner-mining-drill;19291;0.2;5;16;0;0
train-stop;67962;0.0;5;16;0;0
artillery-targeting-remote;145120;0.0;5;16;0;0
cannon-shell;34859;0.7;5;16;0;0
rocket;14474;0.7;5;16;0;0
oil-refinery;287577;0.7;5;16;0;0
beacon;525916;1.3;5;16;0;0
belt-immunity-equipment;201741;0.9;5;16;0;0
solar-panel-equipment;223329;0.9;5;16;0;0
fast-underground-belt;74386;0.2;5;16;0;0
steel-chest;92948;0.0;5;16;0;0
grenade;21032;0.7;5;16;0;0
cargo-wagon;293859;0.1;5;16;0;0
coal;808;0.2;5;15;0;0
battery;9695;0.5;5;13;2;0
battery-mk2-equipment;3473347;0.9;5;16;0;0
personal-roboport-equipment;952320;0.9;5;16;0;0
uranium-cannon-shell;92663;1.1;5;16;0;0
storage-tank;91718;0.3;5;16;0;0
express-loader;464618;0.9;5;16;0;0
light-armor;65780;0.3;5;16;0;0
low-density-structure;66691;1.7;5;14;2;0
offshore-pump;12552;0.0;5;16;0;0
gun-turret;82585;0.7;5;16;0;0
lubricant;338;0.1;5;13;2;0
military-science-pack;33644;0.9;5;14;2;0
plastic-bar;2052;0.1;5;13;2;0
productivity-module-3;5615731;5.3;5;16;0;0
speed-module-3;5615731;5.3;5;16;0;0
energy-shield-equipment;201741;0.9;5;16;0;0
small-lamp;8046;0.0;5;16;0;0
defender-capsule;110239;0.7;5;16;0;0
express-transport-belt;54350;0.0;5;16;0;0
assembling-machine-1;40583;0.0;5;16;0;0
uranium-ore;4487;0.5;5;15;0;0
power-armor;4972293;1.8;5;16;0;0
energy-shield-mk2-equipment;2833384;0.9;5;16;0;0
pistol;19080;0.4;5;16;0;0
steam-engine;49578;0.0;5;16;0;0
pumpjack;128178;0.4;5;16;0;0
power-armor-mk2;59329090;2.2;5;16;0;0
decider-combinator;22817;0.0;5;16;0;0
distractor-capsule;498103;1.3;5;16;0;0
landfill;16475;0.0;5;16;0;0
effectivity-module;107459;1.3;5;16;0;0
shotgun-shell;8252;0.3;5;16;0;0
explosives;2635;0.5;5;13;2;0
copper-plate;1598;0.2;5;13;1;0
production-science-pack;152099;1.8;5;14;2;0
programmable-speaker;28131;0.2;5;16;0;0
construction-robot;83491;0.0;5;16;0;0
chemical-plant;103796;0.4;5;16;0;0
uranium-fuel-cell;677064;0.9;5;14;2;0
green-wire;4811;0.0;5;16;0;0
personal-laser-defense-equipment;4414909;0.9;5;16;0;0
inserter;8559;0.0;5;16;0;0
underground-belt;14396;0.1;5;16;0;0
explosive-rocket;24705;0.7;5;16;0;0
night-vision-equipment;201741;0.9;5;16;0;0
repair-pack;13613;0.0;5;16;0;0
splitter;36778;0.1;5;16;0;0
artillery-wagon;2214932;0.4;5;16;0;0
red-wire;4811;0.0;5;16;0;0
lab;77507;0.2;5;16;0;0
discharge-defense-equipment;5054095;0.9;5;16;0;0
atomic-bomb;216266125;4.4;5;16;0;0
logistic-chest-active-provider;120255;0.0;5;16;0;0
productivity-module-2;1004494;2.7;5;16;0;0
rail-chain-signal;11983;0.0;5;16;0;0
iron-gear-wheel;2969;0.0;5;14;2;0
productivity-module;107459;1.3;5;16;0;0
burner-inserter;4876;0.0;5;16;0;0
iron-chest;13094;0.0;5;16;0;0
substation;203841;0.0;5;16;0;0
stone;808;0.2;5;15;0;0
sulfuric-acid;287;0.1;5;13;2;0
nuclear-fuel;6619632;11.1;5;13;1;0
express-underground-belt;200510;0.2;5;16;0;0
electronic-circuit;3683;0.0;5;14;2;0
stack-filter-inserter;154186;0.0;5;16;0;0
chemical-science-pack;46203;2.1;5;14;2;0
destroyer-capsule;2109170;1.3;5;16;0;0
electric-furnace;221969;0.4;5;16;0;0
sulfur;2647;0.1;5;13;2;0
rail;6758;0.0;5;16;0;0
exoskeleton-equipment;2219696;0.9;5;16;0;0
loader;96855;0.1;5;16;0;0
steel-plate;11580;1.0;5;13;1;0
effectivity-module-3;5615731;5.3;5;16;0;0
piercing-rounds-magazine;28442;0.3;5;16;0;0
processing-unit;95263;0.9;5;14;2;0
electric-mining-drill;43111;0.2;5;16;0;0
express-splitter;322001;0.2;5;16;0;0
assembling-machine-3;610033;0.0;5;16;0;0
transport-belt;2438;0.0;5;16;0;0
copper-ore;808;0.2;5;15;0;0
explosive-cannon-shell;37494;0.7;5;16;0;0
flamethrower;93784;0.9;5;16;0;0
stone-wall;11974;0.0;5;16;0;0
small-electric-pole;1145;0.0;5;16;0;0
tank;1471139;0.4;5;16;0;0
nuclear-reactor;15587539;0.7;5;16;0;0
concrete;2039;0.9;5;16;0;0
rail-signal;11983;0.0;5;16;0;0
constant-combinator;11768;0.0;5;16;0;0
laser-turret;433998;1.8;5;16;0;0
car;262358;0.2;5;16;0;0
cliff-explosives;62606;0.7;5;16;0;0
medium-electric-pole;29939;0.0;5;16;0;0
explosive-uranium-cannon-shell;95299;1.1;5;16;0;0
discharge-defense-remote;3993;0.0;5;16;0;0
land-mine;4988;0.4;5;16;0;0
engine-unit;21407;0.9;5;14;2;0
logistic-chest-storage;120255;0.0;5;16;0;0
solar-panel;127332;0.9;5;16;0;0
1 name work time beason speed prod eff
2 pipe 1908 0.0 5 16 0 0
3 flying-robot-frame 75815 1.7 5 14 2 0
4 empty-barrel 10260 0.1 5 14 2 0
5 radar 49547 0.0 5 16 0 0
6 logistic-chest-buffer 120255 0.0 5 16 0 0
7 big-electric-pole 72746 0.0 5 16 0 0
8 speed-module 107459 1.3 5 16 0 0
9 combat-shotgun 214147 0.9 5 16 0 0
10 fusion-reactor-equipment 22393364 0.9 5 16 0 0
11 stone-furnace 4351 0.0 5 16 0 0
12 gate 42809 0.0 5 16 0 0
13 power-switch 20688 0.2 5 16 0 0
14 rocket-control-unit 187246 2.6 5 14 2 0
15 steel-furnace 94666 0.3 5 16 0 0
16 logistic-science-pack 12827 0.5 5 14 2 0
17 refined-concrete 6991 1.3 5 16 0 0
18 roboport 1375467 0.4 5 16 0 0
19 fast-transport-belt 17591 0.0 5 16 0 0
20 iron-stick 818 0.0 5 14 2 0
21 centrifuge 2677062 0.4 5 16 0 0
22 speed-module-2 1004494 2.7 5 16 0 0
23 submachine-gun 59855 0.9 5 16 0 0
24 iron-plate 1598 0.2 5 13 1 0
25 refined-hazard-concrete 7007 0.0 5 16 0 0
26 crude-oil 42 0.1 5 14 0 0
27 rocket-part 2625842 0.3 5 14 2 0
28 advanced-circuit 15949 0.5 5 14 2 0
29 logistic-chest-requester 120255 0.0 5 16 0 0
30 spidertron 78191991 0.9 5 16 0 0
31 modular-armor 1066751 1.3 5 16 0 0
32 flamethrower-ammo 65512 0.7 5 15 0 0
33 automation-science-pack 6857 0.4 5 14 2 0
34 fluid-wagon 322873 0.1 5 16 0 0
35 steam-turbine 268344 0.3 5 16 0 0
36 cluster-grenade 223261 0.7 5 16 0 0
37 fast-loader 186669 0.3 5 16 0 0
38 battery-equipment 170475 0.9 5 16 0 0
39 heavy-armor 743745 0.7 5 16 0 0
40 copper-cable 818 0.0 5 14 2 0
41 artillery-turret 1279618 3.6 5 16 0 0
42 piercing-shotgun-shell 52613 0.7 5 16 0 0
43 electric-energy-interface 21921 0.0 5 16 0 0
44 accumulator 57873 0.9 5 16 0 0
45 boiler 12293 0.0 5 16 0 0
46 logistic-robot 108022 0.0 5 16 0 0
47 stone-brick 2333 0.2 5 13 1 0
48 fast-splitter 104532 0.2 5 16 0 0
49 iron-ore 808 0.2 5 15 0 0
50 poison-capsule 58830 0.7 5 16 0 0
51 utility-science-pack 133832 1.8 5 14 2 0
52 wooden-chest 996 0.0 5 16 0 0
53 effectivity-module-2 1004494 2.7 5 16 0 0
54 heat-pipe 148377 0.1 5 16 0 0
55 rocket-silo 39742168 2.7 5 16 0 0
56 artillery-shell 229907 1.3 5 16 0 0
57 heat-exchanger 296536 0.3 5 16 0 0
58 locomotive 814849 0.4 5 16 0 0
59 pump 36135 0.2 5 16 0 0
60 electric-engine-unit 34309 0.9 5 14 2 0
61 fast-inserter 19431 0.0 5 16 0 0
62 pipe-to-ground 13690 0.0 5 16 0 0
63 uranium-rounds-magazine 85006 0.9 5 16 0 0
64 filter-inserter 34473 0.0 5 16 0 0
65 long-handed-inserter 13436 0.0 5 16 0 0
66 shotgun 62707 0.9 5 16 0 0
67 rocket-fuel 60949 2.6 5 14 2 0
68 assembling-machine-2 89944 0.0 5 16 0 0
69 flamethrower-turret 530436 1.8 5 16 0 0
70 personal-roboport-mk2-equipment 15634125 1.8 5 16 0 0
71 arithmetic-combinator 22817 0.0 5 16 0 0
72 stack-inserter 135461 0.0 5 16 0 0
73 logistic-chest-passive-provider 120255 0.0 5 16 0 0
74 satellite 38014271 0.4 5 16 0 0
75 rocket-launcher 47447 0.9 5 16 0 0
76 slowdown-capsule 39526 0.7 5 16 0 0
77 firearm-magazine 7012 0.1 5 16 0 0
78 hazard-concrete 2054 0.0 5 16 0 0
79 burner-mining-drill 19291 0.2 5 16 0 0
80 train-stop 67962 0.0 5 16 0 0
81 artillery-targeting-remote 145120 0.0 5 16 0 0
82 cannon-shell 34859 0.7 5 16 0 0
83 rocket 14474 0.7 5 16 0 0
84 oil-refinery 287577 0.7 5 16 0 0
85 beacon 525916 1.3 5 16 0 0
86 belt-immunity-equipment 201741 0.9 5 16 0 0
87 solar-panel-equipment 223329 0.9 5 16 0 0
88 fast-underground-belt 74386 0.2 5 16 0 0
89 steel-chest 92948 0.0 5 16 0 0
90 grenade 21032 0.7 5 16 0 0
91 cargo-wagon 293859 0.1 5 16 0 0
92 coal 808 0.2 5 15 0 0
93 battery 9695 0.5 5 13 2 0
94 battery-mk2-equipment 3473347 0.9 5 16 0 0
95 personal-roboport-equipment 952320 0.9 5 16 0 0
96 uranium-cannon-shell 92663 1.1 5 16 0 0
97 storage-tank 91718 0.3 5 16 0 0
98 express-loader 464618 0.9 5 16 0 0
99 light-armor 65780 0.3 5 16 0 0
100 low-density-structure 66691 1.7 5 14 2 0
101 offshore-pump 12552 0.0 5 16 0 0
102 gun-turret 82585 0.7 5 16 0 0
103 lubricant 338 0.1 5 13 2 0
104 military-science-pack 33644 0.9 5 14 2 0
105 plastic-bar 2052 0.1 5 13 2 0
106 productivity-module-3 5615731 5.3 5 16 0 0
107 speed-module-3 5615731 5.3 5 16 0 0
108 energy-shield-equipment 201741 0.9 5 16 0 0
109 small-lamp 8046 0.0 5 16 0 0
110 defender-capsule 110239 0.7 5 16 0 0
111 express-transport-belt 54350 0.0 5 16 0 0
112 assembling-machine-1 40583 0.0 5 16 0 0
113 uranium-ore 4487 0.5 5 15 0 0
114 power-armor 4972293 1.8 5 16 0 0
115 energy-shield-mk2-equipment 2833384 0.9 5 16 0 0
116 pistol 19080 0.4 5 16 0 0
117 steam-engine 49578 0.0 5 16 0 0
118 pumpjack 128178 0.4 5 16 0 0
119 power-armor-mk2 59329090 2.2 5 16 0 0
120 decider-combinator 22817 0.0 5 16 0 0
121 distractor-capsule 498103 1.3 5 16 0 0
122 landfill 16475 0.0 5 16 0 0
123 effectivity-module 107459 1.3 5 16 0 0
124 shotgun-shell 8252 0.3 5 16 0 0
125 explosives 2635 0.5 5 13 2 0
126 copper-plate 1598 0.2 5 13 1 0
127 production-science-pack 152099 1.8 5 14 2 0
128 programmable-speaker 28131 0.2 5 16 0 0
129 construction-robot 83491 0.0 5 16 0 0
130 chemical-plant 103796 0.4 5 16 0 0
131 uranium-fuel-cell 677064 0.9 5 14 2 0
132 green-wire 4811 0.0 5 16 0 0
133 personal-laser-defense-equipment 4414909 0.9 5 16 0 0
134 inserter 8559 0.0 5 16 0 0
135 underground-belt 14396 0.1 5 16 0 0
136 explosive-rocket 24705 0.7 5 16 0 0
137 night-vision-equipment 201741 0.9 5 16 0 0
138 repair-pack 13613 0.0 5 16 0 0
139 splitter 36778 0.1 5 16 0 0
140 artillery-wagon 2214932 0.4 5 16 0 0
141 red-wire 4811 0.0 5 16 0 0
142 lab 77507 0.2 5 16 0 0
143 discharge-defense-equipment 5054095 0.9 5 16 0 0
144 atomic-bomb 216266125 4.4 5 16 0 0
145 logistic-chest-active-provider 120255 0.0 5 16 0 0
146 productivity-module-2 1004494 2.7 5 16 0 0
147 rail-chain-signal 11983 0.0 5 16 0 0
148 iron-gear-wheel 2969 0.0 5 14 2 0
149 productivity-module 107459 1.3 5 16 0 0
150 burner-inserter 4876 0.0 5 16 0 0
151 iron-chest 13094 0.0 5 16 0 0
152 substation 203841 0.0 5 16 0 0
153 stone 808 0.2 5 15 0 0
154 sulfuric-acid 287 0.1 5 13 2 0
155 nuclear-fuel 6619632 11.1 5 13 1 0
156 express-underground-belt 200510 0.2 5 16 0 0
157 electronic-circuit 3683 0.0 5 14 2 0
158 stack-filter-inserter 154186 0.0 5 16 0 0
159 chemical-science-pack 46203 2.1 5 14 2 0
160 destroyer-capsule 2109170 1.3 5 16 0 0
161 electric-furnace 221969 0.4 5 16 0 0
162 sulfur 2647 0.1 5 13 2 0
163 rail 6758 0.0 5 16 0 0
164 exoskeleton-equipment 2219696 0.9 5 16 0 0
165 loader 96855 0.1 5 16 0 0
166 steel-plate 11580 1.0 5 13 1 0
167 effectivity-module-3 5615731 5.3 5 16 0 0
168 piercing-rounds-magazine 28442 0.3 5 16 0 0
169 processing-unit 95263 0.9 5 14 2 0
170 electric-mining-drill 43111 0.2 5 16 0 0
171 express-splitter 322001 0.2 5 16 0 0
172 assembling-machine-3 610033 0.0 5 16 0 0
173 transport-belt 2438 0.0 5 16 0 0
174 copper-ore 808 0.2 5 15 0 0
175 explosive-cannon-shell 37494 0.7 5 16 0 0
176 flamethrower 93784 0.9 5 16 0 0
177 stone-wall 11974 0.0 5 16 0 0
178 small-electric-pole 1145 0.0 5 16 0 0
179 tank 1471139 0.4 5 16 0 0
180 nuclear-reactor 15587539 0.7 5 16 0 0
181 concrete 2039 0.9 5 16 0 0
182 rail-signal 11983 0.0 5 16 0 0
183 constant-combinator 11768 0.0 5 16 0 0
184 laser-turret 433998 1.8 5 16 0 0
185 car 262358 0.2 5 16 0 0
186 cliff-explosives 62606 0.7 5 16 0 0
187 medium-electric-pole 29939 0.0 5 16 0 0
188 explosive-uranium-cannon-shell 95299 1.1 5 16 0 0
189 discharge-defense-remote 3993 0.0 5 16 0 0
190 land-mine 4988 0.4 5 16 0 0
191 engine-unit 21407 0.9 5 14 2 0
192 logistic-chest-storage 120255 0.0 5 16 0 0
193 solar-panel 127332 0.9 5 16 0 0

View File

@@ -0,0 +1,193 @@
name;work;time;beason;speed;prod;eff
pipe;114;0.3;0;1;0;3
flying-robot-frame;7158;10.7;0;1;0;3
empty-barrel;784;0.9;0;0;1;3
radar;3412;0.3;0;1;0;3
logistic-chest-buffer;8320;0.3;0;1;0;3
big-electric-pole;4722;0.3;0;1;0;3
speed-module;10539;4.0;1;4;0;8
combat-shotgun;17889;1.1;1;12;0;0
fusion-reactor-equipment;2579133;1.1;1;12;0;0
stone-furnace;200;0.3;0;1;0;3
gate;2768;0.3;0;1;0;3
power-switch;1616;0.5;1;4;0;8
rocket-control-unit;25290;9.3;1;3;1;8
steel-furnace;7205;0.3;1;12;0;0
logistic-science-pack;1005;3.2;0;1;0;3
refined-concrete;398;8.0;0;1;0;3
roboport;107727;0.6;1;12;0;0
fast-transport-belt;1216;0.3;0;1;0;3
iron-stick;57;0.3;0;1;0;3
centrifuge;209178;0.5;1;12;0;0
speed-module-2;120845;3.4;1;12;0;0
submachine-gun;3876;5.3;0;1;0;3
iron-plate;94;1.6;0;0;0;2
refined-hazard-concrete;399;0.1;0;1;0;3
crude-oil;2;1.0;0;0;0;2
rocket-part;273351;0.5;1;8;4;0
advanced-circuit;1380;3.2;0;1;0;3
logistic-chest-requester;8320;0.3;0;1;0;3
spidertron;8638749;1.1;1;12;0;0
modular-armor;86062;1.7;1;12;0;0
flamethrower-ammo;6090;0.9;1;11;0;0
automation-science-pack;501;2.7;0;1;0;3
fluid-wagon;22789;0.2;1;12;0;0
steam-turbine;18685;0.3;1;12;0;0
cluster-grenade;16540;0.9;1;12;0;0
fast-loader;14245;0.3;1;12;0;0
battery-equipment;13936;2.3;1;5;0;7
heavy-armor;50822;0.9;1;12;0;0
copper-cable;57;0.3;0;1;0;3
artillery-turret;106058;4.6;1;12;0;0
piercing-shotgun-shell;3289;4.3;0;1;0;3
electric-energy-interface;1627;0.3;0;1;0;3
accumulator;5009;5.3;0;1;0;3
boiler;674;0.3;0;1;0;3
logistic-robot;9938;0.3;0;1;0;3
stone-brick;130;1.6;0;0;0;2
fast-splitter;8397;0.2;1;12;0;0
iron-ore;36;2.0;0;0;0;3
poison-capsule;3800;4.3;0;1;0;3
utility-science-pack;14615;2.7;1;8;4;0
wooden-chest;20;0.3;0;1;0;3
effectivity-module-2;120845;3.4;1;12;0;0
heat-pipe;9472;0.5;0;1;0;3
rocket-silo;3808044;3.4;1;12;0;0
artillery-shell;17739;4.0;1;4;0;8
heat-exchanger;19429;0.3;1;12;0;0
locomotive;59159;0.5;1;12;0;0
pump;3375;0.2;1;12;0;0
electric-engine-unit;2981;5.3;0;1;0;3
fast-inserter;1380;0.3;0;1;0;3
pipe-to-ground;812;0.3;0;1;0;3
uranium-rounds-magazine;7797;2.7;1;4;0;8
filter-inserter;2536;0.3;0;1;0;3
long-handed-inserter;926;0.3;0;1;0;3
shotgun;3776;5.3;0;1;0;3
rocket-fuel;7734;16.0;0;1;0;3
assembling-machine-2;6170;0.3;0;1;0;3
flamethrower-turret;44030;2.3;1;12;0;0
personal-roboport-mk2-equipment;1679084;2.3;1;12;0;0
arithmetic-combinator;1724;0.3;0;1;0;3
stack-inserter;10148;0.3;0;1;0;3
logistic-chest-passive-provider;8320;0.3;0;1;0;3
satellite;3571402;0.6;1;12;0;0
rocket-launcher;3324;5.3;0;1;0;3
slowdown-capsule;2580;4.3;0;1;0;3
firearm-magazine;414;0.5;0;1;0;3
hazard-concrete;109;0.1;0;1;0;3
burner-mining-drill;1398;0.5;1;4;0;8
train-stop;4610;0.3;0;1;0;3
artillery-targeting-remote;15043;0.3;0;1;0;3
cannon-shell;2389;4.3;0;1;0;3
rocket;1004;4.3;0;1;0;3
oil-refinery;22346;0.9;1;12;0;0
beacon;48271;1.7;1;12;0;0
belt-immunity-equipment;19036;1.1;1;12;0;0
solar-panel-equipment;21105;1.1;1;12;0;0
fast-underground-belt;5491;0.2;1;12;0;0
steel-chest;6068;0.3;0;1;0;3
grenade;1148;4.3;0;1;0;3
cargo-wagon;19104;0.5;0;1;0;3
coal;36;2.0;0;0;0;3
battery;884;4.0;0;0;0;3
battery-mk2-equipment;343332;1.1;1;12;0;0
personal-roboport-equipment;81576;1.1;1;12;0;0
uranium-cannon-shell;8400;3.2;1;4;0;8
storage-tank;7025;0.3;1;12;0;0
express-loader;38184;1.1;1;12;0;0
light-armor;5117;0.3;1;12;0;0
low-density-structure;5046;10.7;0;1;0;3
offshore-pump;909;0.3;0;1;0;3
gun-turret;6064;2.1;1;4;0;8
lubricant;28;1.0;0;0;0;3
military-science-pack;2483;5.3;0;1;0;3
plastic-bar;172;1.0;0;0;0;3
productivity-module-3;696644;6.9;1;12;0;0
speed-module-3;696644;6.9;1;12;0;0
energy-shield-equipment;19036;1.1;1;12;0;0
small-lamp;568;0.3;0;1;0;3
defender-capsule;8905;2.1;1;4;0;8
express-transport-belt;3872;0.3;0;1;0;3
assembling-machine-1;2750;0.3;0;1;0;3
uranium-ore;337;4.0;0;0;0;3
power-armor;563477;2.3;1;12;0;0
energy-shield-mk2-equipment;278227;1.1;1;12;0;0
pistol;1136;2.7;0;1;0;3
steam-engine;3182;0.3;0;1;0;3
pumpjack;10697;0.6;1;12;0;0
power-armor-mk2;7020996;2.9;1;12;0;0
decider-combinator;1724;0.3;0;1;0;3
distractor-capsule;46625;1.7;1;12;0;0
landfill;740;0.3;0;1;0;3
effectivity-module;10539;4.0;1;4;0;8
shotgun-shell;494;1.6;0;1;0;3
explosives;212;4.0;0;0;0;3
copper-plate;94;1.6;0;0;0;2
production-science-pack;13686;2.7;1;8;4;0
programmable-speaker;2224;0.5;1;4;0;8
construction-robot;7746;0.3;0;1;0;3
chemical-plant;9093;0.6;1;12;0;0
uranium-fuel-cell;49266;1.3;1;8;4;0
green-wire;361;0.3;0;1;0;3
personal-laser-defense-equipment;464860;1.1;1;12;0;0
inserter;605;0.3;0;1;0;3
underground-belt;889;0.5;0;1;0;3
explosive-rocket;1749;4.3;0;1;0;3
night-vision-equipment;19036;1.1;1;12;0;0
repair-pack;1002;0.3;0;1;0;3
splitter;2570;0.5;0;1;0;3
artillery-wagon;165343;0.5;1;12;0;0
red-wire;361;0.3;0;1;0;3
lab;6469;0.2;1;12;0;0
discharge-defense-equipment;483409;1.1;1;12;0;0
atomic-bomb;18300848;5.7;1;12;0;0
logistic-chest-active-provider;8320;0.3;0;1;0;3
productivity-module-2;120845;3.4;1;12;0;0
rail-chain-signal;772;0.3;0;1;0;3
iron-gear-wheel;207;0.3;0;1;0;3
productivity-module;10539;4.0;1;4;0;8
burner-inserter;321;0.3;0;1;0;3
iron-chest;769;0.3;0;1;0;3
substation;14947;0.3;0;1;0;3
stone;36;2.0;0;0;0;3
sulfuric-acid;26;0.2;1;8;3;0
nuclear-fuel;560540;16.0;1;8;2;0
express-underground-belt;14800;0.2;1;12;0;0
electronic-circuit;284;0.3;0;1;0;3
stack-filter-inserter;11588;0.3;0;1;0;3
chemical-science-pack;4251;12.8;0;1;0;3
destroyer-capsule;203903;1.7;1;12;0;0
electric-furnace;18044;0.6;1;12;0;0
sulfur;221;1.0;0;0;0;3
rail;434;0.3;0;1;0;3
exoskeleton-equipment;225253;1.1;1;12;0;0
loader;6790;0.5;0;1;0;3
steel-plate;756;8.0;0;0;0;2
effectivity-module-3;696644;6.9;1;12;0;0
piercing-rounds-magazine;2082;0.8;1;4;0;8
processing-unit;11611;1.2;1;9;3;0
electric-mining-drill;3739;0.2;1;12;0;0
express-splitter;27439;0.2;1;12;0;0
assembling-machine-3;54518;0.3;0;1;0;3
transport-belt;160;0.3;0;1;0;3
copper-ore;36;2.0;0;0;0;3
explosive-cannon-shell;2602;4.3;0;1;0;3
flamethrower;7332;2.7;1;4;0;8
stone-wall;668;0.3;0;1;0;3
small-electric-pole;67;0.3;0;1;0;3
tank;107888;0.6;1;12;0;0
nuclear-reactor;1172595;0.9;1;12;0;0
concrete;108;5.3;0;1;0;3
rail-signal;772;0.3;0;1;0;3
constant-combinator;872;0.3;0;1;0;3
laser-turret;40566;2.3;1;12;0;0
car;19291;0.2;1;12;0;0
cliff-explosives;4377;4.3;0;1;0;3
medium-electric-pole;1946;0.3;0;1;0;3
explosive-uranium-cannon-shell;8613;3.2;1;4;0;8
discharge-defense-remote;304;0.3;0;1;0;3
land-mine;345;2.7;0;1;0;3
engine-unit;1590;5.3;0;1;0;3
logistic-chest-storage;8320;0.3;0;1;0;3
solar-panel;9988;2.7;1;4;0;8
1 name work time beason speed prod eff
2 pipe 114 0.3 0 1 0 3
3 flying-robot-frame 7158 10.7 0 1 0 3
4 empty-barrel 784 0.9 0 0 1 3
5 radar 3412 0.3 0 1 0 3
6 logistic-chest-buffer 8320 0.3 0 1 0 3
7 big-electric-pole 4722 0.3 0 1 0 3
8 speed-module 10539 4.0 1 4 0 8
9 combat-shotgun 17889 1.1 1 12 0 0
10 fusion-reactor-equipment 2579133 1.1 1 12 0 0
11 stone-furnace 200 0.3 0 1 0 3
12 gate 2768 0.3 0 1 0 3
13 power-switch 1616 0.5 1 4 0 8
14 rocket-control-unit 25290 9.3 1 3 1 8
15 steel-furnace 7205 0.3 1 12 0 0
16 logistic-science-pack 1005 3.2 0 1 0 3
17 refined-concrete 398 8.0 0 1 0 3
18 roboport 107727 0.6 1 12 0 0
19 fast-transport-belt 1216 0.3 0 1 0 3
20 iron-stick 57 0.3 0 1 0 3
21 centrifuge 209178 0.5 1 12 0 0
22 speed-module-2 120845 3.4 1 12 0 0
23 submachine-gun 3876 5.3 0 1 0 3
24 iron-plate 94 1.6 0 0 0 2
25 refined-hazard-concrete 399 0.1 0 1 0 3
26 crude-oil 2 1.0 0 0 0 2
27 rocket-part 273351 0.5 1 8 4 0
28 advanced-circuit 1380 3.2 0 1 0 3
29 logistic-chest-requester 8320 0.3 0 1 0 3
30 spidertron 8638749 1.1 1 12 0 0
31 modular-armor 86062 1.7 1 12 0 0
32 flamethrower-ammo 6090 0.9 1 11 0 0
33 automation-science-pack 501 2.7 0 1 0 3
34 fluid-wagon 22789 0.2 1 12 0 0
35 steam-turbine 18685 0.3 1 12 0 0
36 cluster-grenade 16540 0.9 1 12 0 0
37 fast-loader 14245 0.3 1 12 0 0
38 battery-equipment 13936 2.3 1 5 0 7
39 heavy-armor 50822 0.9 1 12 0 0
40 copper-cable 57 0.3 0 1 0 3
41 artillery-turret 106058 4.6 1 12 0 0
42 piercing-shotgun-shell 3289 4.3 0 1 0 3
43 electric-energy-interface 1627 0.3 0 1 0 3
44 accumulator 5009 5.3 0 1 0 3
45 boiler 674 0.3 0 1 0 3
46 logistic-robot 9938 0.3 0 1 0 3
47 stone-brick 130 1.6 0 0 0 2
48 fast-splitter 8397 0.2 1 12 0 0
49 iron-ore 36 2.0 0 0 0 3
50 poison-capsule 3800 4.3 0 1 0 3
51 utility-science-pack 14615 2.7 1 8 4 0
52 wooden-chest 20 0.3 0 1 0 3
53 effectivity-module-2 120845 3.4 1 12 0 0
54 heat-pipe 9472 0.5 0 1 0 3
55 rocket-silo 3808044 3.4 1 12 0 0
56 artillery-shell 17739 4.0 1 4 0 8
57 heat-exchanger 19429 0.3 1 12 0 0
58 locomotive 59159 0.5 1 12 0 0
59 pump 3375 0.2 1 12 0 0
60 electric-engine-unit 2981 5.3 0 1 0 3
61 fast-inserter 1380 0.3 0 1 0 3
62 pipe-to-ground 812 0.3 0 1 0 3
63 uranium-rounds-magazine 7797 2.7 1 4 0 8
64 filter-inserter 2536 0.3 0 1 0 3
65 long-handed-inserter 926 0.3 0 1 0 3
66 shotgun 3776 5.3 0 1 0 3
67 rocket-fuel 7734 16.0 0 1 0 3
68 assembling-machine-2 6170 0.3 0 1 0 3
69 flamethrower-turret 44030 2.3 1 12 0 0
70 personal-roboport-mk2-equipment 1679084 2.3 1 12 0 0
71 arithmetic-combinator 1724 0.3 0 1 0 3
72 stack-inserter 10148 0.3 0 1 0 3
73 logistic-chest-passive-provider 8320 0.3 0 1 0 3
74 satellite 3571402 0.6 1 12 0 0
75 rocket-launcher 3324 5.3 0 1 0 3
76 slowdown-capsule 2580 4.3 0 1 0 3
77 firearm-magazine 414 0.5 0 1 0 3
78 hazard-concrete 109 0.1 0 1 0 3
79 burner-mining-drill 1398 0.5 1 4 0 8
80 train-stop 4610 0.3 0 1 0 3
81 artillery-targeting-remote 15043 0.3 0 1 0 3
82 cannon-shell 2389 4.3 0 1 0 3
83 rocket 1004 4.3 0 1 0 3
84 oil-refinery 22346 0.9 1 12 0 0
85 beacon 48271 1.7 1 12 0 0
86 belt-immunity-equipment 19036 1.1 1 12 0 0
87 solar-panel-equipment 21105 1.1 1 12 0 0
88 fast-underground-belt 5491 0.2 1 12 0 0
89 steel-chest 6068 0.3 0 1 0 3
90 grenade 1148 4.3 0 1 0 3
91 cargo-wagon 19104 0.5 0 1 0 3
92 coal 36 2.0 0 0 0 3
93 battery 884 4.0 0 0 0 3
94 battery-mk2-equipment 343332 1.1 1 12 0 0
95 personal-roboport-equipment 81576 1.1 1 12 0 0
96 uranium-cannon-shell 8400 3.2 1 4 0 8
97 storage-tank 7025 0.3 1 12 0 0
98 express-loader 38184 1.1 1 12 0 0
99 light-armor 5117 0.3 1 12 0 0
100 low-density-structure 5046 10.7 0 1 0 3
101 offshore-pump 909 0.3 0 1 0 3
102 gun-turret 6064 2.1 1 4 0 8
103 lubricant 28 1.0 0 0 0 3
104 military-science-pack 2483 5.3 0 1 0 3
105 plastic-bar 172 1.0 0 0 0 3
106 productivity-module-3 696644 6.9 1 12 0 0
107 speed-module-3 696644 6.9 1 12 0 0
108 energy-shield-equipment 19036 1.1 1 12 0 0
109 small-lamp 568 0.3 0 1 0 3
110 defender-capsule 8905 2.1 1 4 0 8
111 express-transport-belt 3872 0.3 0 1 0 3
112 assembling-machine-1 2750 0.3 0 1 0 3
113 uranium-ore 337 4.0 0 0 0 3
114 power-armor 563477 2.3 1 12 0 0
115 energy-shield-mk2-equipment 278227 1.1 1 12 0 0
116 pistol 1136 2.7 0 1 0 3
117 steam-engine 3182 0.3 0 1 0 3
118 pumpjack 10697 0.6 1 12 0 0
119 power-armor-mk2 7020996 2.9 1 12 0 0
120 decider-combinator 1724 0.3 0 1 0 3
121 distractor-capsule 46625 1.7 1 12 0 0
122 landfill 740 0.3 0 1 0 3
123 effectivity-module 10539 4.0 1 4 0 8
124 shotgun-shell 494 1.6 0 1 0 3
125 explosives 212 4.0 0 0 0 3
126 copper-plate 94 1.6 0 0 0 2
127 production-science-pack 13686 2.7 1 8 4 0
128 programmable-speaker 2224 0.5 1 4 0 8
129 construction-robot 7746 0.3 0 1 0 3
130 chemical-plant 9093 0.6 1 12 0 0
131 uranium-fuel-cell 49266 1.3 1 8 4 0
132 green-wire 361 0.3 0 1 0 3
133 personal-laser-defense-equipment 464860 1.1 1 12 0 0
134 inserter 605 0.3 0 1 0 3
135 underground-belt 889 0.5 0 1 0 3
136 explosive-rocket 1749 4.3 0 1 0 3
137 night-vision-equipment 19036 1.1 1 12 0 0
138 repair-pack 1002 0.3 0 1 0 3
139 splitter 2570 0.5 0 1 0 3
140 artillery-wagon 165343 0.5 1 12 0 0
141 red-wire 361 0.3 0 1 0 3
142 lab 6469 0.2 1 12 0 0
143 discharge-defense-equipment 483409 1.1 1 12 0 0
144 atomic-bomb 18300848 5.7 1 12 0 0
145 logistic-chest-active-provider 8320 0.3 0 1 0 3
146 productivity-module-2 120845 3.4 1 12 0 0
147 rail-chain-signal 772 0.3 0 1 0 3
148 iron-gear-wheel 207 0.3 0 1 0 3
149 productivity-module 10539 4.0 1 4 0 8
150 burner-inserter 321 0.3 0 1 0 3
151 iron-chest 769 0.3 0 1 0 3
152 substation 14947 0.3 0 1 0 3
153 stone 36 2.0 0 0 0 3
154 sulfuric-acid 26 0.2 1 8 3 0
155 nuclear-fuel 560540 16.0 1 8 2 0
156 express-underground-belt 14800 0.2 1 12 0 0
157 electronic-circuit 284 0.3 0 1 0 3
158 stack-filter-inserter 11588 0.3 0 1 0 3
159 chemical-science-pack 4251 12.8 0 1 0 3
160 destroyer-capsule 203903 1.7 1 12 0 0
161 electric-furnace 18044 0.6 1 12 0 0
162 sulfur 221 1.0 0 0 0 3
163 rail 434 0.3 0 1 0 3
164 exoskeleton-equipment 225253 1.1 1 12 0 0
165 loader 6790 0.5 0 1 0 3
166 steel-plate 756 8.0 0 0 0 2
167 effectivity-module-3 696644 6.9 1 12 0 0
168 piercing-rounds-magazine 2082 0.8 1 4 0 8
169 processing-unit 11611 1.2 1 9 3 0
170 electric-mining-drill 3739 0.2 1 12 0 0
171 express-splitter 27439 0.2 1 12 0 0
172 assembling-machine-3 54518 0.3 0 1 0 3
173 transport-belt 160 0.3 0 1 0 3
174 copper-ore 36 2.0 0 0 0 3
175 explosive-cannon-shell 2602 4.3 0 1 0 3
176 flamethrower 7332 2.7 1 4 0 8
177 stone-wall 668 0.3 0 1 0 3
178 small-electric-pole 67 0.3 0 1 0 3
179 tank 107888 0.6 1 12 0 0
180 nuclear-reactor 1172595 0.9 1 12 0 0
181 concrete 108 5.3 0 1 0 3
182 rail-signal 772 0.3 0 1 0 3
183 constant-combinator 872 0.3 0 1 0 3
184 laser-turret 40566 2.3 1 12 0 0
185 car 19291 0.2 1 12 0 0
186 cliff-explosives 4377 4.3 0 1 0 3
187 medium-electric-pole 1946 0.3 0 1 0 3
188 explosive-uranium-cannon-shell 8613 3.2 1 4 0 8
189 discharge-defense-remote 304 0.3 0 1 0 3
190 land-mine 345 2.7 0 1 0 3
191 engine-unit 1590 5.3 0 1 0 3
192 logistic-chest-storage 8320 0.3 0 1 0 3
193 solar-panel 9988 2.7 1 4 0 8

193
public/modules/mix.csv Normal file
View File

@@ -0,0 +1,193 @@
name;work;time;beason;speed;prod;eff
pipe;858;0.0;5;16;0;0
flying-robot-frame;39987;1.8;5;12;4;0
empty-barrel;5380;0.1;5;12;4;0
radar;18643;0.0;5;16;0;0
logistic-chest-buffer;65811;0.0;5;16;0;0
big-electric-pole;39096;0.0;5;16;0;0
speed-module;54897;1.3;5;16;0;0
combat-shotgun;116808;0.9;5;16;0;0
fusion-reactor-equipment;9301922;0.9;5;16;0;0
stone-furnace;490;0.0;5;16;0;0
gate;19762;0.0;5;16;0;0
power-switch;8693;0.2;5;16;0;0
rocket-control-unit;85810;2.7;5;12;4;0
steel-furnace;47549;0.3;5;16;0;0
logistic-science-pack;7103;0.5;5;13;3;0
refined-concrete;3709;1.3;5;16;0;0
roboport;695748;0.4;5;16;0;0
fast-transport-belt;6794;0.0;5;16;0;0
iron-stick;355;0.0;5;12;4;0
centrifuge;1301180;0.4;5;16;0;0
speed-module-2;469031;2.7;5;16;0;0
submachine-gun;25429;0.9;5;16;0;0
iron-plate;548;0.3;1;10;0;0
refined-hazard-concrete;3725;0.0;5;16;0;0
crude-oil;2;1.0;0;0;0;2
rocket-part;1079288;0.3;5;12;4;0
advanced-circuit;7650;0.5;5;12;4;0
logistic-chest-requester;65811;0.0;5;16;0;0
spidertron;34466987;0.9;5;16;0;0
modular-armor;570868;1.3;5;16;0;0
flamethrower-ammo;36787;0.7;5;15;0;0
automation-science-pack;4362;0.4;5;13;3;0
fluid-wagon;171096;0.1;5;16;0;0
steam-turbine;101467;0.3;5;16;0;0
cluster-grenade;99632;0.7;5;16;0;0
fast-loader;74084;0.3;5;16;0;0
battery-equipment;93318;0.9;5;16;0;0
heavy-armor;391837;0.7;5;16;0;0
copper-cable;355;0.0;5;12;4;0
artillery-turret;675260;3.6;5;16;0;0
piercing-shotgun-shell;29087;0.7;5;16;0;0
electric-energy-interface;8754;0.0;5;16;0;0
accumulator;27999;0.9;5;16;0;0
boiler;4232;0.0;5;16;0;0
logistic-robot;55596;0.0;5;16;0;0
stone-brick;584;0.3;1;10;0;0
fast-splitter;41573;0.2;5;16;0;0
iron-ore;36;2.0;0;0;0;3
poison-capsule;29654;0.7;5;16;0;0
utility-science-pack;55058;1.9;5;12;4;0
wooden-chest;20;0.3;0;1;0;3
effectivity-module-2;469031;2.7;5;16;0;0
heat-pipe;77995;0.1;5;16;0;0
rocket-silo;19132739;2.7;5;16;0;0
artillery-shell;121086;1.3;5;16;0;0
heat-exchanger;131655;0.3;5;16;0;0
locomotive;478777;0.4;5;16;0;0
pump;21857;0.2;5;16;0;0
electric-engine-unit;18837;0.9;5;12;4;0
fast-inserter;7774;0.0;5;16;0;0
pipe-to-ground;5815;0.0;5;16;0;0
uranium-rounds-magazine;41658;0.9;5;16;0;0
filter-inserter;13963;0.0;5;16;0;0
long-handed-inserter;5388;0.0;5;16;0;0
shotgun;25405;0.9;5;16;0;0
rocket-fuel;33191;2.6;5;13;3;0
assembling-machine-2;38663;0.0;5;16;0;0
flamethrower-turret;302329;1.8;5;16;0;0
personal-roboport-mk2-equipment;6730531;1.8;5;16;0;0
arithmetic-combinator;9432;0.0;5;16;0;0
stack-inserter;54293;0.0;5;16;0;0
logistic-chest-passive-provider;65811;0.0;5;16;0;0
satellite;18010852;0.4;5;16;0;0
rocket-launcher;21793;0.9;5;16;0;0
slowdown-capsule;21362;0.7;5;16;0;0
firearm-magazine;2812;0.1;5;16;0;0
hazard-concrete;931;0.0;5;16;0;0
burner-mining-drill;6677;0.2;5;16;0;0
train-stop;33000;0.0;5;16;0;0
artillery-targeting-remote;57472;0.0;5;16;0;0
cannon-shell;20259;0.7;5;16;0;0
rocket;8534;0.7;5;16;0;0
oil-refinery;144709;0.7;5;16;0;0
beacon;261651;1.3;5;16;0;0
belt-immunity-equipment;110864;0.9;5;16;0;0
solar-panel-equipment;118900;0.9;5;16;0;0
fast-underground-belt;28137;0.2;5;16;0;0
steel-chest;53442;0.0;5;16;0;0
grenade;8060;0.7;5;16;0;0
cargo-wagon;155420;0.1;5;16;0;0
coal;36;2.0;0;0;0;3
battery;4141;0.5;5;12;3;0
battery-mk2-equipment;1676362;0.9;5;16;0;0
personal-roboport-equipment;445893;0.9;5;16;0;0
uranium-cannon-shell;49104;1.1;5;16;0;0
storage-tank;46028;0.3;5;16;0;0
express-loader;180242;0.9;5;16;0;0
light-armor;23780;0.3;5;16;0;0
low-density-structure;31839;1.8;5;12;4;0
offshore-pump;5208;0.0;5;16;0;0
gun-turret;32409;0.7;5;16;0;0
lubricant;94;0.1;5;12;3;0
military-science-pack;13386;0.9;5;12;4;0
plastic-bar;504;0.1;5;12;3;0
productivity-module-3;2613198;5.3;5;16;0;0
speed-module-3;2613198;5.3;5;16;0;0
energy-shield-equipment;110864;0.9;5;16;0;0
small-lamp;3392;0.0;5;16;0;0
defender-capsule;54833;0.7;5;16;0;0
express-transport-belt;19992;0.0;5;16;0;0
assembling-machine-1;15156;0.0;5;16;0;0
uranium-ore;1431;0.6;1;11;0;0
power-armor;2195560;1.8;5;16;0;0
energy-shield-mk2-equipment;1466627;0.9;5;16;0;0
pistol;8580;0.4;5;16;0;0
steam-engine;18888;0.0;5;16;0;0
pumpjack;63246;0.4;5;16;0;0
power-armor-mk2;27486823;2.2;5;16;0;0
decider-combinator;9432;0.0;5;16;0;0
distractor-capsule;251579;1.3;5;16;0;0
landfill;1030;0.0;5;16;0;0
effectivity-module;54897;1.3;5;16;0;0
shotgun-shell;4052;0.3;5;16;0;0
explosives;1009;0.6;1;10;1;0
copper-plate;548;0.3;1;10;0;0
production-science-pack;70795;1.9;5;12;4;0
programmable-speaker;11956;0.2;5;16;0;0
construction-robot;43236;0.0;5;16;0;0
chemical-plant;53451;0.4;5;16;0;0
uranium-fuel-cell;246961;0.9;5;12;4;0
green-wire;2134;0.0;5;16;0;0
personal-laser-defense-equipment;2057333;0.9;5;16;0;0
inserter;3429;0.0;5;16;0;0
underground-belt;5499;0.1;5;16;0;0
explosive-rocket;15512;0.7;5;16;0;0
night-vision-equipment;110864;0.9;5;16;0;0
repair-pack;5451;0.0;5;16;0;0
splitter;14626;0.1;5;16;0;0
artillery-wagon;1285403;0.4;5;16;0;0
red-wire;2134;0.0;5;16;0;0
lab;30864;0.2;5;16;0;0
discharge-defense-equipment;2574747;0.9;5;16;0;0
atomic-bomb;91990796;4.4;5;16;0;0
logistic-chest-active-provider;65811;0.0;5;16;0;0
productivity-module-2;469031;2.7;5;16;0;0
rail-chain-signal;4520;0.0;5;16;0;0
iron-gear-wheel;1101;0.0;5;12;4;0
productivity-module;54897;1.3;5;16;0;0
burner-inserter;1959;0.0;5;16;0;0
iron-chest;4694;0.0;5;16;0;0
substation;107714;0.0;5;16;0;0
stone;36;2.0;0;0;0;3
sulfuric-acid;65;0.1;5;12;3;0
nuclear-fuel;2627944;11.2;5;12;2;0
express-underground-belt;74673;0.2;5;16;0;0
electronic-circuit;1470;0.0;5;12;4;0
stack-filter-inserter;61952;0.0;5;16;0;0
chemical-science-pack;25411;2.1;5;12;4;0
destroyer-capsule;1070514;1.3;5;16;0;0
electric-furnace;113604;0.4;5;16;0;0
sulfur;592;0.1;5;12;3;0
rail;3671;0.0;5;16;0;0
exoskeleton-equipment;1089331;0.9;5;16;0;0
loader;38254;0.1;5;16;0;0
steel-plate;6642;1.0;5;12;2;0
effectivity-module-3;2613198;5.3;5;16;0;0
piercing-rounds-magazine;14054;0.3;5;16;0;0
processing-unit;38519;0.9;5;12;4;0
electric-mining-drill;16634;0.2;5;16;0;0
express-splitter;137831;0.2;5;16;0;0
assembling-machine-3;297223;0.0;5;16;0;0
transport-belt;979;0.0;5;16;0;0
copper-ore;36;2.0;0;0;0;3
explosive-cannon-shell;21268;0.7;5;16;0;0
flamethrower;50417;0.9;5;16;0;0
stone-wall;3230;0.0;5;16;0;0
small-electric-pole;510;0.0;5;16;0;0
tank;847953;0.4;5;16;0;0
nuclear-reactor;7882375;0.7;5;16;0;0
concrete;916;0.9;5;16;0;0
rail-signal;4520;0.0;5;16;0;0
constant-combinator;5023;0.0;5;16;0;0
laser-turret;224312;1.8;5;16;0;0
car;150349;0.2;5;16;0;0
cliff-explosives;28488;0.7;5;16;0;0
medium-electric-pole;16108;0.0;5;16;0;0
explosive-uranium-cannon-shell;50113;1.1;5;16;0;0
discharge-defense-remote;1780;0.0;5;16;0;0
land-mine;2940;0.4;5;16;0;0
engine-unit;13118;0.9;5;12;4;0
logistic-chest-storage;65811;0.0;5;16;0;0
solar-panel;64193;0.9;5;16;0;0
1 name work time beason speed prod eff
2 pipe 858 0.0 5 16 0 0
3 flying-robot-frame 39987 1.8 5 12 4 0
4 empty-barrel 5380 0.1 5 12 4 0
5 radar 18643 0.0 5 16 0 0
6 logistic-chest-buffer 65811 0.0 5 16 0 0
7 big-electric-pole 39096 0.0 5 16 0 0
8 speed-module 54897 1.3 5 16 0 0
9 combat-shotgun 116808 0.9 5 16 0 0
10 fusion-reactor-equipment 9301922 0.9 5 16 0 0
11 stone-furnace 490 0.0 5 16 0 0
12 gate 19762 0.0 5 16 0 0
13 power-switch 8693 0.2 5 16 0 0
14 rocket-control-unit 85810 2.7 5 12 4 0
15 steel-furnace 47549 0.3 5 16 0 0
16 logistic-science-pack 7103 0.5 5 13 3 0
17 refined-concrete 3709 1.3 5 16 0 0
18 roboport 695748 0.4 5 16 0 0
19 fast-transport-belt 6794 0.0 5 16 0 0
20 iron-stick 355 0.0 5 12 4 0
21 centrifuge 1301180 0.4 5 16 0 0
22 speed-module-2 469031 2.7 5 16 0 0
23 submachine-gun 25429 0.9 5 16 0 0
24 iron-plate 548 0.3 1 10 0 0
25 refined-hazard-concrete 3725 0.0 5 16 0 0
26 crude-oil 2 1.0 0 0 0 2
27 rocket-part 1079288 0.3 5 12 4 0
28 advanced-circuit 7650 0.5 5 12 4 0
29 logistic-chest-requester 65811 0.0 5 16 0 0
30 spidertron 34466987 0.9 5 16 0 0
31 modular-armor 570868 1.3 5 16 0 0
32 flamethrower-ammo 36787 0.7 5 15 0 0
33 automation-science-pack 4362 0.4 5 13 3 0
34 fluid-wagon 171096 0.1 5 16 0 0
35 steam-turbine 101467 0.3 5 16 0 0
36 cluster-grenade 99632 0.7 5 16 0 0
37 fast-loader 74084 0.3 5 16 0 0
38 battery-equipment 93318 0.9 5 16 0 0
39 heavy-armor 391837 0.7 5 16 0 0
40 copper-cable 355 0.0 5 12 4 0
41 artillery-turret 675260 3.6 5 16 0 0
42 piercing-shotgun-shell 29087 0.7 5 16 0 0
43 electric-energy-interface 8754 0.0 5 16 0 0
44 accumulator 27999 0.9 5 16 0 0
45 boiler 4232 0.0 5 16 0 0
46 logistic-robot 55596 0.0 5 16 0 0
47 stone-brick 584 0.3 1 10 0 0
48 fast-splitter 41573 0.2 5 16 0 0
49 iron-ore 36 2.0 0 0 0 3
50 poison-capsule 29654 0.7 5 16 0 0
51 utility-science-pack 55058 1.9 5 12 4 0
52 wooden-chest 20 0.3 0 1 0 3
53 effectivity-module-2 469031 2.7 5 16 0 0
54 heat-pipe 77995 0.1 5 16 0 0
55 rocket-silo 19132739 2.7 5 16 0 0
56 artillery-shell 121086 1.3 5 16 0 0
57 heat-exchanger 131655 0.3 5 16 0 0
58 locomotive 478777 0.4 5 16 0 0
59 pump 21857 0.2 5 16 0 0
60 electric-engine-unit 18837 0.9 5 12 4 0
61 fast-inserter 7774 0.0 5 16 0 0
62 pipe-to-ground 5815 0.0 5 16 0 0
63 uranium-rounds-magazine 41658 0.9 5 16 0 0
64 filter-inserter 13963 0.0 5 16 0 0
65 long-handed-inserter 5388 0.0 5 16 0 0
66 shotgun 25405 0.9 5 16 0 0
67 rocket-fuel 33191 2.6 5 13 3 0
68 assembling-machine-2 38663 0.0 5 16 0 0
69 flamethrower-turret 302329 1.8 5 16 0 0
70 personal-roboport-mk2-equipment 6730531 1.8 5 16 0 0
71 arithmetic-combinator 9432 0.0 5 16 0 0
72 stack-inserter 54293 0.0 5 16 0 0
73 logistic-chest-passive-provider 65811 0.0 5 16 0 0
74 satellite 18010852 0.4 5 16 0 0
75 rocket-launcher 21793 0.9 5 16 0 0
76 slowdown-capsule 21362 0.7 5 16 0 0
77 firearm-magazine 2812 0.1 5 16 0 0
78 hazard-concrete 931 0.0 5 16 0 0
79 burner-mining-drill 6677 0.2 5 16 0 0
80 train-stop 33000 0.0 5 16 0 0
81 artillery-targeting-remote 57472 0.0 5 16 0 0
82 cannon-shell 20259 0.7 5 16 0 0
83 rocket 8534 0.7 5 16 0 0
84 oil-refinery 144709 0.7 5 16 0 0
85 beacon 261651 1.3 5 16 0 0
86 belt-immunity-equipment 110864 0.9 5 16 0 0
87 solar-panel-equipment 118900 0.9 5 16 0 0
88 fast-underground-belt 28137 0.2 5 16 0 0
89 steel-chest 53442 0.0 5 16 0 0
90 grenade 8060 0.7 5 16 0 0
91 cargo-wagon 155420 0.1 5 16 0 0
92 coal 36 2.0 0 0 0 3
93 battery 4141 0.5 5 12 3 0
94 battery-mk2-equipment 1676362 0.9 5 16 0 0
95 personal-roboport-equipment 445893 0.9 5 16 0 0
96 uranium-cannon-shell 49104 1.1 5 16 0 0
97 storage-tank 46028 0.3 5 16 0 0
98 express-loader 180242 0.9 5 16 0 0
99 light-armor 23780 0.3 5 16 0 0
100 low-density-structure 31839 1.8 5 12 4 0
101 offshore-pump 5208 0.0 5 16 0 0
102 gun-turret 32409 0.7 5 16 0 0
103 lubricant 94 0.1 5 12 3 0
104 military-science-pack 13386 0.9 5 12 4 0
105 plastic-bar 504 0.1 5 12 3 0
106 productivity-module-3 2613198 5.3 5 16 0 0
107 speed-module-3 2613198 5.3 5 16 0 0
108 energy-shield-equipment 110864 0.9 5 16 0 0
109 small-lamp 3392 0.0 5 16 0 0
110 defender-capsule 54833 0.7 5 16 0 0
111 express-transport-belt 19992 0.0 5 16 0 0
112 assembling-machine-1 15156 0.0 5 16 0 0
113 uranium-ore 1431 0.6 1 11 0 0
114 power-armor 2195560 1.8 5 16 0 0
115 energy-shield-mk2-equipment 1466627 0.9 5 16 0 0
116 pistol 8580 0.4 5 16 0 0
117 steam-engine 18888 0.0 5 16 0 0
118 pumpjack 63246 0.4 5 16 0 0
119 power-armor-mk2 27486823 2.2 5 16 0 0
120 decider-combinator 9432 0.0 5 16 0 0
121 distractor-capsule 251579 1.3 5 16 0 0
122 landfill 1030 0.0 5 16 0 0
123 effectivity-module 54897 1.3 5 16 0 0
124 shotgun-shell 4052 0.3 5 16 0 0
125 explosives 1009 0.6 1 10 1 0
126 copper-plate 548 0.3 1 10 0 0
127 production-science-pack 70795 1.9 5 12 4 0
128 programmable-speaker 11956 0.2 5 16 0 0
129 construction-robot 43236 0.0 5 16 0 0
130 chemical-plant 53451 0.4 5 16 0 0
131 uranium-fuel-cell 246961 0.9 5 12 4 0
132 green-wire 2134 0.0 5 16 0 0
133 personal-laser-defense-equipment 2057333 0.9 5 16 0 0
134 inserter 3429 0.0 5 16 0 0
135 underground-belt 5499 0.1 5 16 0 0
136 explosive-rocket 15512 0.7 5 16 0 0
137 night-vision-equipment 110864 0.9 5 16 0 0
138 repair-pack 5451 0.0 5 16 0 0
139 splitter 14626 0.1 5 16 0 0
140 artillery-wagon 1285403 0.4 5 16 0 0
141 red-wire 2134 0.0 5 16 0 0
142 lab 30864 0.2 5 16 0 0
143 discharge-defense-equipment 2574747 0.9 5 16 0 0
144 atomic-bomb 91990796 4.4 5 16 0 0
145 logistic-chest-active-provider 65811 0.0 5 16 0 0
146 productivity-module-2 469031 2.7 5 16 0 0
147 rail-chain-signal 4520 0.0 5 16 0 0
148 iron-gear-wheel 1101 0.0 5 12 4 0
149 productivity-module 54897 1.3 5 16 0 0
150 burner-inserter 1959 0.0 5 16 0 0
151 iron-chest 4694 0.0 5 16 0 0
152 substation 107714 0.0 5 16 0 0
153 stone 36 2.0 0 0 0 3
154 sulfuric-acid 65 0.1 5 12 3 0
155 nuclear-fuel 2627944 11.2 5 12 2 0
156 express-underground-belt 74673 0.2 5 16 0 0
157 electronic-circuit 1470 0.0 5 12 4 0
158 stack-filter-inserter 61952 0.0 5 16 0 0
159 chemical-science-pack 25411 2.1 5 12 4 0
160 destroyer-capsule 1070514 1.3 5 16 0 0
161 electric-furnace 113604 0.4 5 16 0 0
162 sulfur 592 0.1 5 12 3 0
163 rail 3671 0.0 5 16 0 0
164 exoskeleton-equipment 1089331 0.9 5 16 0 0
165 loader 38254 0.1 5 16 0 0
166 steel-plate 6642 1.0 5 12 2 0
167 effectivity-module-3 2613198 5.3 5 16 0 0
168 piercing-rounds-magazine 14054 0.3 5 16 0 0
169 processing-unit 38519 0.9 5 12 4 0
170 electric-mining-drill 16634 0.2 5 16 0 0
171 express-splitter 137831 0.2 5 16 0 0
172 assembling-machine-3 297223 0.0 5 16 0 0
173 transport-belt 979 0.0 5 16 0 0
174 copper-ore 36 2.0 0 0 0 3
175 explosive-cannon-shell 21268 0.7 5 16 0 0
176 flamethrower 50417 0.9 5 16 0 0
177 stone-wall 3230 0.0 5 16 0 0
178 small-electric-pole 510 0.0 5 16 0 0
179 tank 847953 0.4 5 16 0 0
180 nuclear-reactor 7882375 0.7 5 16 0 0
181 concrete 916 0.9 5 16 0 0
182 rail-signal 4520 0.0 5 16 0 0
183 constant-combinator 5023 0.0 5 16 0 0
184 laser-turret 224312 1.8 5 16 0 0
185 car 150349 0.2 5 16 0 0
186 cliff-explosives 28488 0.7 5 16 0 0
187 medium-electric-pole 16108 0.0 5 16 0 0
188 explosive-uranium-cannon-shell 50113 1.1 5 16 0 0
189 discharge-defense-remote 1780 0.0 5 16 0 0
190 land-mine 2940 0.4 5 16 0 0
191 engine-unit 13118 0.9 5 12 4 0
192 logistic-chest-storage 65811 0.0 5 16 0 0
193 solar-panel 64193 0.9 5 16 0 0

View File

@@ -0,0 +1,193 @@
name;work;time;beason;speed;prod;eff
pipe;618;0.4;0;0;0;0
flying-robot-frame;40236;16.0;0;0;0;0
empty-barrel;4080;0.8;0;0;0;0
radar;17985;0.4;0;0;0;0
logistic-chest-buffer;43024;0.4;0;0;0;0
big-electric-pole;23862;0.4;0;0;0;0
speed-module;51472;12.0;0;0;0;0
combat-shotgun;69810;8.0;0;0;0;0
fusion-reactor-equipment;11408210;8.0;0;0;0;0
stone-furnace;1050;0.4;0;0;0;0
gate;14190;0.4;0;0;0;0
power-switch;7575;1.6;0;0;0;0
rocket-control-unit;110691;24.0;0;0;0;0
steel-furnace;30060;2.4;0;0;0;0
logistic-science-pack;5901;4.8;0;0;0;0
refined-concrete;2359;12.0;0;0;0;0
roboport;573690;4.0;0;0;0;0
fast-transport-belt;6432;0.4;0;0;0;0
iron-stick;309;0.4;0;0;0;0
centrifuge;1147933;3.2;0;0;0;0
speed-module-2;505228;24.0;0;0;0;0
submachine-gun;20880;8.0;0;0;0;0
iron-plate;468;1.6;0;0;0;0
refined-hazard-concrete;2367;0.2;0;0;0;0
crude-oil;9;1.0;0;0;0;0
rocket-part;1703340;3.0;0;0;0;0
advanced-circuit;7849;4.8;0;0;0;0
logistic-chest-requester;43024;0.4;0;0;0;0
spidertron;38853633;8.0;0;0;0;0
modular-armor;428980;12.0;0;0;0;0
flamethrower-ammo;21060;6.0;0;0;0;0
automation-science-pack;3054;4.0;0;0;0;0
fluid-wagon;105894;1.2;0;0;0;0
steam-turbine;90960;2.4;0;0;0;0
cluster-grenade;72392;6.4;0;0;0;0
fast-loader;69360;2.4;0;0;0;0
battery-equipment;62086;8.0;0;0;0;0
heavy-armor;238200;6.4;0;0;0;0
copper-cable;309;0.4;0;0;0;0
artillery-turret;477747;32.0;0;0;0;0
piercing-shotgun-shell;17844;6.4;0;0;0;0
electric-energy-interface;8811;0.4;0;0;0;0
accumulator;25222;8.0;0;0;0;0
boiler;3672;0.4;0;0;0;0
logistic-robot;56085;0.4;0;0;0;0
stone-brick;648;1.6;0;0;0;0
fast-splitter;40683;1.6;0;0;0;0
iron-ore;180;2.0;0;0;0;0
poison-capsule;20175;6.4;0;0;0;0
utility-science-pack;76220;16.8;0;0;0;0
wooden-chest;150;0.4;0;0;0;0
effectivity-module-2;505228;24.0;0;0;0;0
heat-pipe;47460;0.8;0;0;0;0
rocket-silo;17997993;24.0;0;0;0;0
artillery-shell;86218;12.0;0;0;0;0
heat-exchanger;91680;2.4;0;0;0;0
locomotive;312090;3.2;0;0;0;0
pump;14100;1.6;0;0;0;0
electric-engine-unit;17307;8.0;0;0;0;0
fast-inserter;7425;0.4;0;0;0;0
pipe-to-ground;4335;0.4;0;0;0;0
uranium-rounds-magazine;32540;8.0;0;0;0;0
filter-inserter;13755;0.4;0;0;0;0
long-handed-inserter;4953;0.4;0;0;0;0
shotgun;20130;8.0;0;0;0;0
rocket-fuel;32340;24.0;0;0;0;0
assembling-machine-2;32202;0.4;0;0;0;0
flamethrower-turret;187380;16.0;0;0;0;0
personal-roboport-mk2-equipment;7533000;16.0;0;0;0;0
arithmetic-combinator;9420;0.4;0;0;0;0
stack-inserter;54889;0.4;0;0;0;0
logistic-chest-passive-provider;43024;0.4;0;0;0;0
satellite;16716855;4.0;0;0;0;0
rocket-launcher;18495;8.0;0;0;0;0
slowdown-capsule;13950;6.4;0;0;0;0
firearm-magazine;2172;0.8;0;0;0;0
hazard-concrete;650;0.2;0;0;0;0
burner-mining-drill;6312;1.6;0;0;0;0
train-stop;23877;0.4;0;0;0;0
artillery-targeting-remote;68354;0.4;0;0;0;0
cannon-shell;12746;6.4;0;0;0;0
rocket;5944;6.4;0;0;0;0
oil-refinery;98070;6.4;0;0;0;0
beacon;233277;12.0;0;0;0;0
belt-immunity-equipment;80047;8.0;0;0;0;0
solar-panel-equipment;85014;8.0;0;0;0;0
fast-underground-belt;26640;1.6;0;0;0;0
steel-chest;30390;0.4;0;0;0;0
grenade;6540;6.4;0;0;0;0
cargo-wagon;96120;0.8;0;0;0;0
coal;180;2.0;0;0;0;0
battery;4257;4.0;0;0;0;0
battery-mk2-equipment;1513286;8.0;0;0;0;0
personal-roboport-equipment;392107;8.0;0;0;0;0
uranium-cannon-shell;36694;9.6;0;0;0;0
storage-tank;29160;2.4;0;0;0;0
express-loader;173670;8.0;0;0;0;0
light-armor;19620;2.4;0;0;0;0
low-density-structure;27228;16.0;0;0;0;0
offshore-pump;4944;0.4;0;0;0;0
gun-turret;27300;6.4;0;0;0;0
lubricant;141;1.0;0;0;0;0
military-science-pack;12756;8.0;0;0;0;0
plastic-bar;862;1.0;0;0;0;0
productivity-module-3;2834482;48.0;0;0;0;0
speed-module-3;2834482;48.0;0;0;0;0
energy-shield-equipment;80047;8.0;0;0;0;0
small-lamp;3090;0.4;0;0;0;0
defender-capsule;37869;6.4;0;0;0;0
express-transport-belt;20262;0.4;0;0;0;0
assembling-machine-1;14427;0.4;0;0;0;0
uranium-ore;1601;4.0;0;0;0;0
power-armor;2512099;16.0;0;0;0;0
energy-shield-mk2-equipment;1190703;8.0;0;0;0;0
pistol;6180;4.0;0;0;0;0
steam-engine;16608;0.4;0;0;0;0
pumpjack;45165;4.0;0;0;0;0
power-armor-mk2;29791176;20.0;0;0;0;0
decider-combinator;9420;0.4;0;0;0;0
distractor-capsule;179524;12.0;0;0;0;0
landfill;3750;0.4;0;0;0;0
effectivity-module;51472;12.0;0;0;0;0
shotgun-shell;2772;2.4;0;0;0;0
explosives;1062;4.0;0;0;0;0
copper-plate;468;1.6;0;0;0;0
production-science-pack;69694;16.8;0;0;0;0
programmable-speaker;10965;1.6;0;0;0;0
construction-robot;43476;0.4;0;0;0;0
chemical-plant;36645;4.0;0;0;0;0
uranium-fuel-cell;328087;8.0;0;0;0;0
green-wire;2004;0.4;0;0;0;0
personal-laser-defense-equipment;1961453;8.0;0;0;0;0
inserter;3249;0.4;0;0;0;0
underground-belt;4620;0.8;0;0;0;0
explosive-rocket;10468;6.4;0;0;0;0
night-vision-equipment;80047;8.0;0;0;0;0
repair-pack;5412;0.4;0;0;0;0
splitter;13773;0.8;0;0;0;0
artillery-wagon;912663;3.2;0;0;0;0
red-wire;2004;0.4;0;0;0;0
lab;30318;1.6;0;0;0;0
discharge-defense-equipment;1965559;8.0;0;0;0;0
atomic-bomb;87729674;40.0;0;0;0;0
logistic-chest-active-provider;43024;0.4;0;0;0;0
productivity-module-2;505228;24.0;0;0;0;0
rail-chain-signal;4035;0.4;0;0;0;0
iron-gear-wheel;1086;0.4;0;0;0;0
productivity-module;51472;12.0;0;0;0;0
burner-inserter;1704;0.4;0;0;0;0
iron-chest;3894;0.4;0;0;0;0
substation;79537;0.4;0;0;0;0
stone;180;2.0;0;0;0;0
sulfuric-acid;124;1.0;0;0;0;0
nuclear-fuel;2950411;90.0;0;0;0;0
express-underground-belt;73200;1.6;0;0;0;0
electronic-circuit;1545;0.4;0;0;0;0
stack-filter-inserter;62764;0.4;0;0;0;0
chemical-science-pack;25029;19.2;0;0;0;0
destroyer-capsule;774068;12.0;0;0;0;0
electric-furnace;85027;4.0;0;0;0;0
sulfur;1105;1.0;0;0;0;0
rail;2210;0.4;0;0;0;0
exoskeleton-equipment;1100000;8.0;0;0;0;0
loader;36300;0.8;0;0;0;0
steel-plate;3780;8.0;0;0;0;0
effectivity-module-3;2834482;48.0;0;0;0;0
piercing-rounds-magazine;9192;2.4;0;0;0;0
processing-unit;50219;8.0;0;0;0;0
electric-mining-drill;15345;1.6;0;0;0;0
express-splitter;141916;1.6;0;0;0;0
assembling-machine-3;270441;0.4;0;0;0;0
transport-belt;852;0.4;0;0;0;0
copper-ore;180;2.0;0;0;0;0
explosive-cannon-shell;13808;6.4;0;0;0;0
flamethrower;32760;8.0;0;0;0;0
stone-wall;3390;0.4;0;0;0;0
small-electric-pole;384;0.4;0;0;0;0
tank;576547;4.0;0;0;0;0
nuclear-reactor;6372067;6.4;0;0;0;0
concrete;642;8.0;0;0;0;0
rail-signal;4035;0.4;0;0;0;0
constant-combinator;4785;0.4;0;0;0;0
laser-turret;163586;16.0;0;0;0;0
car;101676;1.6;0;0;0;0
cliff-explosives;23645;6.4;0;0;0;0
medium-electric-pole;9882;0.4;0;0;0;0
explosive-uranium-cannon-shell;37757;9.6;0;0;0;0
discharge-defense-remote;1695;0.4;0;0;0;0
land-mine;1851;4.0;0;0;0;0
engine-unit;9102;8.0;0;0;0;0
logistic-chest-storage;43024;0.4;0;0;0;0
solar-panel;47415;8.0;0;0;0;0
1 name work time beason speed prod eff
2 pipe 618 0.4 0 0 0 0
3 flying-robot-frame 40236 16.0 0 0 0 0
4 empty-barrel 4080 0.8 0 0 0 0
5 radar 17985 0.4 0 0 0 0
6 logistic-chest-buffer 43024 0.4 0 0 0 0
7 big-electric-pole 23862 0.4 0 0 0 0
8 speed-module 51472 12.0 0 0 0 0
9 combat-shotgun 69810 8.0 0 0 0 0
10 fusion-reactor-equipment 11408210 8.0 0 0 0 0
11 stone-furnace 1050 0.4 0 0 0 0
12 gate 14190 0.4 0 0 0 0
13 power-switch 7575 1.6 0 0 0 0
14 rocket-control-unit 110691 24.0 0 0 0 0
15 steel-furnace 30060 2.4 0 0 0 0
16 logistic-science-pack 5901 4.8 0 0 0 0
17 refined-concrete 2359 12.0 0 0 0 0
18 roboport 573690 4.0 0 0 0 0
19 fast-transport-belt 6432 0.4 0 0 0 0
20 iron-stick 309 0.4 0 0 0 0
21 centrifuge 1147933 3.2 0 0 0 0
22 speed-module-2 505228 24.0 0 0 0 0
23 submachine-gun 20880 8.0 0 0 0 0
24 iron-plate 468 1.6 0 0 0 0
25 refined-hazard-concrete 2367 0.2 0 0 0 0
26 crude-oil 9 1.0 0 0 0 0
27 rocket-part 1703340 3.0 0 0 0 0
28 advanced-circuit 7849 4.8 0 0 0 0
29 logistic-chest-requester 43024 0.4 0 0 0 0
30 spidertron 38853633 8.0 0 0 0 0
31 modular-armor 428980 12.0 0 0 0 0
32 flamethrower-ammo 21060 6.0 0 0 0 0
33 automation-science-pack 3054 4.0 0 0 0 0
34 fluid-wagon 105894 1.2 0 0 0 0
35 steam-turbine 90960 2.4 0 0 0 0
36 cluster-grenade 72392 6.4 0 0 0 0
37 fast-loader 69360 2.4 0 0 0 0
38 battery-equipment 62086 8.0 0 0 0 0
39 heavy-armor 238200 6.4 0 0 0 0
40 copper-cable 309 0.4 0 0 0 0
41 artillery-turret 477747 32.0 0 0 0 0
42 piercing-shotgun-shell 17844 6.4 0 0 0 0
43 electric-energy-interface 8811 0.4 0 0 0 0
44 accumulator 25222 8.0 0 0 0 0
45 boiler 3672 0.4 0 0 0 0
46 logistic-robot 56085 0.4 0 0 0 0
47 stone-brick 648 1.6 0 0 0 0
48 fast-splitter 40683 1.6 0 0 0 0
49 iron-ore 180 2.0 0 0 0 0
50 poison-capsule 20175 6.4 0 0 0 0
51 utility-science-pack 76220 16.8 0 0 0 0
52 wooden-chest 150 0.4 0 0 0 0
53 effectivity-module-2 505228 24.0 0 0 0 0
54 heat-pipe 47460 0.8 0 0 0 0
55 rocket-silo 17997993 24.0 0 0 0 0
56 artillery-shell 86218 12.0 0 0 0 0
57 heat-exchanger 91680 2.4 0 0 0 0
58 locomotive 312090 3.2 0 0 0 0
59 pump 14100 1.6 0 0 0 0
60 electric-engine-unit 17307 8.0 0 0 0 0
61 fast-inserter 7425 0.4 0 0 0 0
62 pipe-to-ground 4335 0.4 0 0 0 0
63 uranium-rounds-magazine 32540 8.0 0 0 0 0
64 filter-inserter 13755 0.4 0 0 0 0
65 long-handed-inserter 4953 0.4 0 0 0 0
66 shotgun 20130 8.0 0 0 0 0
67 rocket-fuel 32340 24.0 0 0 0 0
68 assembling-machine-2 32202 0.4 0 0 0 0
69 flamethrower-turret 187380 16.0 0 0 0 0
70 personal-roboport-mk2-equipment 7533000 16.0 0 0 0 0
71 arithmetic-combinator 9420 0.4 0 0 0 0
72 stack-inserter 54889 0.4 0 0 0 0
73 logistic-chest-passive-provider 43024 0.4 0 0 0 0
74 satellite 16716855 4.0 0 0 0 0
75 rocket-launcher 18495 8.0 0 0 0 0
76 slowdown-capsule 13950 6.4 0 0 0 0
77 firearm-magazine 2172 0.8 0 0 0 0
78 hazard-concrete 650 0.2 0 0 0 0
79 burner-mining-drill 6312 1.6 0 0 0 0
80 train-stop 23877 0.4 0 0 0 0
81 artillery-targeting-remote 68354 0.4 0 0 0 0
82 cannon-shell 12746 6.4 0 0 0 0
83 rocket 5944 6.4 0 0 0 0
84 oil-refinery 98070 6.4 0 0 0 0
85 beacon 233277 12.0 0 0 0 0
86 belt-immunity-equipment 80047 8.0 0 0 0 0
87 solar-panel-equipment 85014 8.0 0 0 0 0
88 fast-underground-belt 26640 1.6 0 0 0 0
89 steel-chest 30390 0.4 0 0 0 0
90 grenade 6540 6.4 0 0 0 0
91 cargo-wagon 96120 0.8 0 0 0 0
92 coal 180 2.0 0 0 0 0
93 battery 4257 4.0 0 0 0 0
94 battery-mk2-equipment 1513286 8.0 0 0 0 0
95 personal-roboport-equipment 392107 8.0 0 0 0 0
96 uranium-cannon-shell 36694 9.6 0 0 0 0
97 storage-tank 29160 2.4 0 0 0 0
98 express-loader 173670 8.0 0 0 0 0
99 light-armor 19620 2.4 0 0 0 0
100 low-density-structure 27228 16.0 0 0 0 0
101 offshore-pump 4944 0.4 0 0 0 0
102 gun-turret 27300 6.4 0 0 0 0
103 lubricant 141 1.0 0 0 0 0
104 military-science-pack 12756 8.0 0 0 0 0
105 plastic-bar 862 1.0 0 0 0 0
106 productivity-module-3 2834482 48.0 0 0 0 0
107 speed-module-3 2834482 48.0 0 0 0 0
108 energy-shield-equipment 80047 8.0 0 0 0 0
109 small-lamp 3090 0.4 0 0 0 0
110 defender-capsule 37869 6.4 0 0 0 0
111 express-transport-belt 20262 0.4 0 0 0 0
112 assembling-machine-1 14427 0.4 0 0 0 0
113 uranium-ore 1601 4.0 0 0 0 0
114 power-armor 2512099 16.0 0 0 0 0
115 energy-shield-mk2-equipment 1190703 8.0 0 0 0 0
116 pistol 6180 4.0 0 0 0 0
117 steam-engine 16608 0.4 0 0 0 0
118 pumpjack 45165 4.0 0 0 0 0
119 power-armor-mk2 29791176 20.0 0 0 0 0
120 decider-combinator 9420 0.4 0 0 0 0
121 distractor-capsule 179524 12.0 0 0 0 0
122 landfill 3750 0.4 0 0 0 0
123 effectivity-module 51472 12.0 0 0 0 0
124 shotgun-shell 2772 2.4 0 0 0 0
125 explosives 1062 4.0 0 0 0 0
126 copper-plate 468 1.6 0 0 0 0
127 production-science-pack 69694 16.8 0 0 0 0
128 programmable-speaker 10965 1.6 0 0 0 0
129 construction-robot 43476 0.4 0 0 0 0
130 chemical-plant 36645 4.0 0 0 0 0
131 uranium-fuel-cell 328087 8.0 0 0 0 0
132 green-wire 2004 0.4 0 0 0 0
133 personal-laser-defense-equipment 1961453 8.0 0 0 0 0
134 inserter 3249 0.4 0 0 0 0
135 underground-belt 4620 0.8 0 0 0 0
136 explosive-rocket 10468 6.4 0 0 0 0
137 night-vision-equipment 80047 8.0 0 0 0 0
138 repair-pack 5412 0.4 0 0 0 0
139 splitter 13773 0.8 0 0 0 0
140 artillery-wagon 912663 3.2 0 0 0 0
141 red-wire 2004 0.4 0 0 0 0
142 lab 30318 1.6 0 0 0 0
143 discharge-defense-equipment 1965559 8.0 0 0 0 0
144 atomic-bomb 87729674 40.0 0 0 0 0
145 logistic-chest-active-provider 43024 0.4 0 0 0 0
146 productivity-module-2 505228 24.0 0 0 0 0
147 rail-chain-signal 4035 0.4 0 0 0 0
148 iron-gear-wheel 1086 0.4 0 0 0 0
149 productivity-module 51472 12.0 0 0 0 0
150 burner-inserter 1704 0.4 0 0 0 0
151 iron-chest 3894 0.4 0 0 0 0
152 substation 79537 0.4 0 0 0 0
153 stone 180 2.0 0 0 0 0
154 sulfuric-acid 124 1.0 0 0 0 0
155 nuclear-fuel 2950411 90.0 0 0 0 0
156 express-underground-belt 73200 1.6 0 0 0 0
157 electronic-circuit 1545 0.4 0 0 0 0
158 stack-filter-inserter 62764 0.4 0 0 0 0
159 chemical-science-pack 25029 19.2 0 0 0 0
160 destroyer-capsule 774068 12.0 0 0 0 0
161 electric-furnace 85027 4.0 0 0 0 0
162 sulfur 1105 1.0 0 0 0 0
163 rail 2210 0.4 0 0 0 0
164 exoskeleton-equipment 1100000 8.0 0 0 0 0
165 loader 36300 0.8 0 0 0 0
166 steel-plate 3780 8.0 0 0 0 0
167 effectivity-module-3 2834482 48.0 0 0 0 0
168 piercing-rounds-magazine 9192 2.4 0 0 0 0
169 processing-unit 50219 8.0 0 0 0 0
170 electric-mining-drill 15345 1.6 0 0 0 0
171 express-splitter 141916 1.6 0 0 0 0
172 assembling-machine-3 270441 0.4 0 0 0 0
173 transport-belt 852 0.4 0 0 0 0
174 copper-ore 180 2.0 0 0 0 0
175 explosive-cannon-shell 13808 6.4 0 0 0 0
176 flamethrower 32760 8.0 0 0 0 0
177 stone-wall 3390 0.4 0 0 0 0
178 small-electric-pole 384 0.4 0 0 0 0
179 tank 576547 4.0 0 0 0 0
180 nuclear-reactor 6372067 6.4 0 0 0 0
181 concrete 642 8.0 0 0 0 0
182 rail-signal 4035 0.4 0 0 0 0
183 constant-combinator 4785 0.4 0 0 0 0
184 laser-turret 163586 16.0 0 0 0 0
185 car 101676 1.6 0 0 0 0
186 cliff-explosives 23645 6.4 0 0 0 0
187 medium-electric-pole 9882 0.4 0 0 0 0
188 explosive-uranium-cannon-shell 37757 9.6 0 0 0 0
189 discharge-defense-remote 1695 0.4 0 0 0 0
190 land-mine 1851 4.0 0 0 0 0
191 engine-unit 9102 8.0 0 0 0 0
192 logistic-chest-storage 43024 0.4 0 0 0 0
193 solar-panel 47415 8.0 0 0 0 0

View File

@@ -0,0 +1,193 @@
name;work;time;beason;speed;prod;eff
pipe;114;0.3;0;1;0;3
flying-robot-frame;7158;10.7;0;1;0;3
empty-barrel;784;0.9;0;0;1;3
radar;3412;0.3;0;1;0;3
logistic-chest-buffer;8320;0.3;0;1;0;3
big-electric-pole;4722;0.3;0;1;0;3
speed-module;10539;4.0;1;4;0;8
combat-shotgun;17889;1.1;1;12;0;0
fusion-reactor-equipment;2755376;0.9;5;16;0;0
stone-furnace;200;0.3;0;1;0;3
gate;2768;0.3;0;1;0;3
power-switch;1616;0.5;1;4;0;8
rocket-control-unit;32763;3.7;1;9;3;0
steel-furnace;7205;0.3;1;12;0;0
logistic-science-pack;1005;3.2;0;1;0;3
refined-concrete;398;8.0;0;1;0;3
roboport;108538;0.4;5;16;0;0
fast-transport-belt;1216;0.3;0;1;0;3
iron-stick;57;0.3;0;1;0;3
centrifuge;209827;0.4;5;16;0;0
speed-module-2;130079;2.7;5;16;0;0
submachine-gun;3876;5.3;0;1;0;3
iron-plate;94;1.6;0;0;0;2
refined-hazard-concrete;399;0.1;0;1;0;3
crude-oil;2;1.0;0;0;0;2
rocket-part;327164;0.3;5;12;4;0
advanced-circuit;1380;3.2;0;1;0;3
logistic-chest-requester;8320;0.3;0;1;0;3
spidertron;9274393;0.9;5;16;0;0
modular-armor;88496;1.3;5;16;0;0
flamethrower-ammo;6090;0.9;1;11;0;0
automation-science-pack;501;2.7;0;1;0;3
fluid-wagon;23032;0.1;5;16;0;0
steam-turbine;19172;0.3;5;16;0;0
cluster-grenade;16540;0.9;1;12;0;0
fast-loader;14732;0.3;5;16;0;0
battery-equipment;13936;2.3;1;5;0;7
heavy-armor;52120;0.7;5;16;0;0
copper-cable;57;0.3;0;1;0;3
artillery-turret;112549;3.6;5;16;0;0
piercing-shotgun-shell;3289;4.3;0;1;0;3
electric-energy-interface;1627;0.3;0;1;0;3
accumulator;5009;5.3;0;1;0;3
boiler;674;0.3;0;1;0;3
logistic-robot;9938;0.3;0;1;0;3
stone-brick;130;1.6;0;0;0;2
fast-splitter;8722;0.2;5;16;0;0
iron-ore;36;2.0;0;0;0;3
poison-capsule;3800;4.3;0;1;0;3
utility-science-pack;15706;1.9;5;12;4;0
wooden-chest;20;0.3;0;1;0;3
effectivity-module-2;130079;2.7;5;16;0;0
heat-pipe;9472;0.5;0;1;0;3
rocket-silo;3987533;2.7;5;16;0;0
artillery-shell;17739;4.0;1;4;0;8
heat-exchanger;19916;0.3;5;16;0;0
locomotive;59808;0.4;5;16;0;0
pump;3375;0.2;1;12;0;0
electric-engine-unit;2981;5.3;0;1;0;3
fast-inserter;1380;0.3;0;1;0;3
pipe-to-ground;812;0.3;0;1;0;3
uranium-rounds-magazine;7797;2.7;1;4;0;8
filter-inserter;2536;0.3;0;1;0;3
long-handed-inserter;926;0.3;0;1;0;3
shotgun;3776;5.3;0;1;0;3
rocket-fuel;7734;16.0;0;1;0;3
assembling-machine-2;6170;0.3;0;1;0;3
flamethrower-turret;44030;2.3;1;12;0;0
personal-roboport-mk2-equipment;1777754;1.8;5;16;0;0
arithmetic-combinator;1724;0.3;0;1;0;3
stack-inserter;10148;0.3;0;1;0;3
logistic-chest-passive-provider;8320;0.3;0;1;0;3
satellite;3659524;0.4;5;16;0;0
rocket-launcher;3324;5.3;0;1;0;3
slowdown-capsule;2580;4.3;0;1;0;3
firearm-magazine;414;0.5;0;1;0;3
hazard-concrete;109;0.1;0;1;0;3
burner-mining-drill;1398;0.5;1;4;0;8
train-stop;4610;0.3;0;1;0;3
artillery-targeting-remote;15916;0.3;0;1;0;3
cannon-shell;2389;4.3;0;1;0;3
rocket;1004;4.3;0;1;0;3
oil-refinery;23644;0.7;5;16;0;0
beacon;50705;1.3;5;16;0;0
belt-immunity-equipment;19036;1.1;1;12;0;0
solar-panel-equipment;21105;1.1;1;12;0;0
fast-underground-belt;5653;0.2;5;16;0;0
steel-chest;6068;0.3;0;1;0;3
grenade;1148;4.3;0;1;0;3
cargo-wagon;19104;0.5;0;1;0;3
coal;36;2.0;0;0;0;3
battery;884;4.0;0;0;0;3
battery-mk2-equipment;358052;0.9;5;16;0;0
personal-roboport-equipment;83199;0.9;5;16;0;0
uranium-cannon-shell;8400;3.2;1;4;0;8
storage-tank;7025;0.3;1;12;0;0
express-loader;40294;0.9;5;16;0;0
light-armor;5117;0.3;1;12;0;0
low-density-structure;5046;10.7;0;1;0;3
offshore-pump;909;0.3;0;1;0;3
gun-turret;6064;2.1;1;4;0;8
lubricant;28;1.0;0;0;0;3
military-science-pack;2483;5.3;0;1;0;3
plastic-bar;172;1.0;0;0;0;3
productivity-module-3;756917;5.3;5;16;0;0
speed-module-3;756917;5.3;5;16;0;0
energy-shield-equipment;19036;1.1;1;12;0;0
small-lamp;568;0.3;0;1;0;3
defender-capsule;8905;2.1;1;4;0;8
express-transport-belt;3872;0.3;0;1;0;3
assembling-machine-1;2750;0.3;0;1;0;3
uranium-ore;337;4.0;0;0;0;3
power-armor;601647;1.8;5;16;0;0
energy-shield-mk2-equipment;284215;0.9;5;16;0;0
pistol;1136;2.7;0;1;0;3
steam-engine;3182;0.3;0;1;0;3
pumpjack;10697;0.6;1;12;0;0
power-armor-mk2;7539143;2.2;5;16;0;0
decider-combinator;1724;0.3;0;1;0;3
distractor-capsule;49059;1.3;5;16;0;0
landfill;740;0.3;0;1;0;3
effectivity-module;10539;4.0;1;4;0;8
shotgun-shell;494;1.6;0;1;0;3
explosives;212;4.0;0;0;0;3
copper-plate;94;1.6;0;0;0;2
production-science-pack;14555;1.9;5;12;4;0
programmable-speaker;2224;0.5;1;4;0;8
construction-robot;7746;0.3;0;1;0;3
chemical-plant;9093;0.6;1;12;0;0
uranium-fuel-cell;49362;0.9;5;12;4;0
green-wire;361;0.3;0;1;0;3
personal-laser-defense-equipment;483945;0.9;5;16;0;0
inserter;605;0.3;0;1;0;3
underground-belt;889;0.5;0;1;0;3
explosive-rocket;1749;4.3;0;1;0;3
night-vision-equipment;19036;1.1;1;12;0;0
repair-pack;1002;0.3;0;1;0;3
splitter;2570;0.5;0;1;0;3
artillery-wagon;165993;0.4;5;16;0;0
red-wire;361;0.3;0;1;0;3
lab;6794;0.2;5;16;0;0
discharge-defense-equipment;489398;0.9;5;16;0;0
atomic-bomb;18383696;4.4;5;16;0;0
logistic-chest-active-provider;8320;0.3;0;1;0;3
productivity-module-2;130079;2.7;5;16;0;0
rail-chain-signal;772;0.3;0;1;0;3
iron-gear-wheel;207;0.3;0;1;0;3
productivity-module;10539;4.0;1;4;0;8
burner-inserter;321;0.3;0;1;0;3
iron-chest;769;0.3;0;1;0;3
substation;14947;0.3;0;1;0;3
stone;36;2.0;0;0;0;3
sulfuric-acid;26;0.2;1;8;3;0
nuclear-fuel;577045;11.2;5;12;2;0
express-underground-belt;15125;0.2;5;16;0;0
electronic-circuit;284;0.3;0;1;0;3
stack-filter-inserter;11588;0.3;0;1;0;3
chemical-science-pack;4251;12.8;0;1;0;3
destroyer-capsule;216075;1.3;5;16;0;0
electric-furnace;18855;0.4;5;16;0;0
sulfur;221;1.0;0;0;0;3
rail;434;0.3;0;1;0;3
exoskeleton-equipment;235607;0.9;5;16;0;0
loader;6790;0.5;0;1;0;3
steel-plate;756;8.0;0;0;0;2
effectivity-module-3;756917;5.3;5;16;0;0
piercing-rounds-magazine;2082;0.8;1;4;0;8
processing-unit;12484;0.9;5;12;4;0
electric-mining-drill;3739;0.2;1;12;0;0
express-splitter;28088;0.2;5;16;0;0
assembling-machine-3;54518;0.3;0;1;0;3
transport-belt;160;0.3;0;1;0;3
copper-ore;36;2.0;0;0;0;3
explosive-cannon-shell;2602;4.3;0;1;0;3
flamethrower;7332;2.7;1;4;0;8
stone-wall;668;0.3;0;1;0;3
small-electric-pole;67;0.3;0;1;0;3
tank;108699;0.4;5;16;0;0
nuclear-reactor;1173893;0.7;5;16;0;0
concrete;108;5.3;0;1;0;3
rail-signal;772;0.3;0;1;0;3
constant-combinator;872;0.3;0;1;0;3
laser-turret;40566;2.3;1;12;0;0
car;19615;0.2;5;16;0;0
cliff-explosives;4377;4.3;0;1;0;3
medium-electric-pole;1946;0.3;0;1;0;3
explosive-uranium-cannon-shell;8613;3.2;1;4;0;8
discharge-defense-remote;304;0.3;0;1;0;3
land-mine;345;2.7;0;1;0;3
engine-unit;1590;5.3;0;1;0;3
logistic-chest-storage;8320;0.3;0;1;0;3
solar-panel;9988;2.7;1;4;0;8
1 name work time beason speed prod eff
2 pipe 114 0.3 0 1 0 3
3 flying-robot-frame 7158 10.7 0 1 0 3
4 empty-barrel 784 0.9 0 0 1 3
5 radar 3412 0.3 0 1 0 3
6 logistic-chest-buffer 8320 0.3 0 1 0 3
7 big-electric-pole 4722 0.3 0 1 0 3
8 speed-module 10539 4.0 1 4 0 8
9 combat-shotgun 17889 1.1 1 12 0 0
10 fusion-reactor-equipment 2755376 0.9 5 16 0 0
11 stone-furnace 200 0.3 0 1 0 3
12 gate 2768 0.3 0 1 0 3
13 power-switch 1616 0.5 1 4 0 8
14 rocket-control-unit 32763 3.7 1 9 3 0
15 steel-furnace 7205 0.3 1 12 0 0
16 logistic-science-pack 1005 3.2 0 1 0 3
17 refined-concrete 398 8.0 0 1 0 3
18 roboport 108538 0.4 5 16 0 0
19 fast-transport-belt 1216 0.3 0 1 0 3
20 iron-stick 57 0.3 0 1 0 3
21 centrifuge 209827 0.4 5 16 0 0
22 speed-module-2 130079 2.7 5 16 0 0
23 submachine-gun 3876 5.3 0 1 0 3
24 iron-plate 94 1.6 0 0 0 2
25 refined-hazard-concrete 399 0.1 0 1 0 3
26 crude-oil 2 1.0 0 0 0 2
27 rocket-part 327164 0.3 5 12 4 0
28 advanced-circuit 1380 3.2 0 1 0 3
29 logistic-chest-requester 8320 0.3 0 1 0 3
30 spidertron 9274393 0.9 5 16 0 0
31 modular-armor 88496 1.3 5 16 0 0
32 flamethrower-ammo 6090 0.9 1 11 0 0
33 automation-science-pack 501 2.7 0 1 0 3
34 fluid-wagon 23032 0.1 5 16 0 0
35 steam-turbine 19172 0.3 5 16 0 0
36 cluster-grenade 16540 0.9 1 12 0 0
37 fast-loader 14732 0.3 5 16 0 0
38 battery-equipment 13936 2.3 1 5 0 7
39 heavy-armor 52120 0.7 5 16 0 0
40 copper-cable 57 0.3 0 1 0 3
41 artillery-turret 112549 3.6 5 16 0 0
42 piercing-shotgun-shell 3289 4.3 0 1 0 3
43 electric-energy-interface 1627 0.3 0 1 0 3
44 accumulator 5009 5.3 0 1 0 3
45 boiler 674 0.3 0 1 0 3
46 logistic-robot 9938 0.3 0 1 0 3
47 stone-brick 130 1.6 0 0 0 2
48 fast-splitter 8722 0.2 5 16 0 0
49 iron-ore 36 2.0 0 0 0 3
50 poison-capsule 3800 4.3 0 1 0 3
51 utility-science-pack 15706 1.9 5 12 4 0
52 wooden-chest 20 0.3 0 1 0 3
53 effectivity-module-2 130079 2.7 5 16 0 0
54 heat-pipe 9472 0.5 0 1 0 3
55 rocket-silo 3987533 2.7 5 16 0 0
56 artillery-shell 17739 4.0 1 4 0 8
57 heat-exchanger 19916 0.3 5 16 0 0
58 locomotive 59808 0.4 5 16 0 0
59 pump 3375 0.2 1 12 0 0
60 electric-engine-unit 2981 5.3 0 1 0 3
61 fast-inserter 1380 0.3 0 1 0 3
62 pipe-to-ground 812 0.3 0 1 0 3
63 uranium-rounds-magazine 7797 2.7 1 4 0 8
64 filter-inserter 2536 0.3 0 1 0 3
65 long-handed-inserter 926 0.3 0 1 0 3
66 shotgun 3776 5.3 0 1 0 3
67 rocket-fuel 7734 16.0 0 1 0 3
68 assembling-machine-2 6170 0.3 0 1 0 3
69 flamethrower-turret 44030 2.3 1 12 0 0
70 personal-roboport-mk2-equipment 1777754 1.8 5 16 0 0
71 arithmetic-combinator 1724 0.3 0 1 0 3
72 stack-inserter 10148 0.3 0 1 0 3
73 logistic-chest-passive-provider 8320 0.3 0 1 0 3
74 satellite 3659524 0.4 5 16 0 0
75 rocket-launcher 3324 5.3 0 1 0 3
76 slowdown-capsule 2580 4.3 0 1 0 3
77 firearm-magazine 414 0.5 0 1 0 3
78 hazard-concrete 109 0.1 0 1 0 3
79 burner-mining-drill 1398 0.5 1 4 0 8
80 train-stop 4610 0.3 0 1 0 3
81 artillery-targeting-remote 15916 0.3 0 1 0 3
82 cannon-shell 2389 4.3 0 1 0 3
83 rocket 1004 4.3 0 1 0 3
84 oil-refinery 23644 0.7 5 16 0 0
85 beacon 50705 1.3 5 16 0 0
86 belt-immunity-equipment 19036 1.1 1 12 0 0
87 solar-panel-equipment 21105 1.1 1 12 0 0
88 fast-underground-belt 5653 0.2 5 16 0 0
89 steel-chest 6068 0.3 0 1 0 3
90 grenade 1148 4.3 0 1 0 3
91 cargo-wagon 19104 0.5 0 1 0 3
92 coal 36 2.0 0 0 0 3
93 battery 884 4.0 0 0 0 3
94 battery-mk2-equipment 358052 0.9 5 16 0 0
95 personal-roboport-equipment 83199 0.9 5 16 0 0
96 uranium-cannon-shell 8400 3.2 1 4 0 8
97 storage-tank 7025 0.3 1 12 0 0
98 express-loader 40294 0.9 5 16 0 0
99 light-armor 5117 0.3 1 12 0 0
100 low-density-structure 5046 10.7 0 1 0 3
101 offshore-pump 909 0.3 0 1 0 3
102 gun-turret 6064 2.1 1 4 0 8
103 lubricant 28 1.0 0 0 0 3
104 military-science-pack 2483 5.3 0 1 0 3
105 plastic-bar 172 1.0 0 0 0 3
106 productivity-module-3 756917 5.3 5 16 0 0
107 speed-module-3 756917 5.3 5 16 0 0
108 energy-shield-equipment 19036 1.1 1 12 0 0
109 small-lamp 568 0.3 0 1 0 3
110 defender-capsule 8905 2.1 1 4 0 8
111 express-transport-belt 3872 0.3 0 1 0 3
112 assembling-machine-1 2750 0.3 0 1 0 3
113 uranium-ore 337 4.0 0 0 0 3
114 power-armor 601647 1.8 5 16 0 0
115 energy-shield-mk2-equipment 284215 0.9 5 16 0 0
116 pistol 1136 2.7 0 1 0 3
117 steam-engine 3182 0.3 0 1 0 3
118 pumpjack 10697 0.6 1 12 0 0
119 power-armor-mk2 7539143 2.2 5 16 0 0
120 decider-combinator 1724 0.3 0 1 0 3
121 distractor-capsule 49059 1.3 5 16 0 0
122 landfill 740 0.3 0 1 0 3
123 effectivity-module 10539 4.0 1 4 0 8
124 shotgun-shell 494 1.6 0 1 0 3
125 explosives 212 4.0 0 0 0 3
126 copper-plate 94 1.6 0 0 0 2
127 production-science-pack 14555 1.9 5 12 4 0
128 programmable-speaker 2224 0.5 1 4 0 8
129 construction-robot 7746 0.3 0 1 0 3
130 chemical-plant 9093 0.6 1 12 0 0
131 uranium-fuel-cell 49362 0.9 5 12 4 0
132 green-wire 361 0.3 0 1 0 3
133 personal-laser-defense-equipment 483945 0.9 5 16 0 0
134 inserter 605 0.3 0 1 0 3
135 underground-belt 889 0.5 0 1 0 3
136 explosive-rocket 1749 4.3 0 1 0 3
137 night-vision-equipment 19036 1.1 1 12 0 0
138 repair-pack 1002 0.3 0 1 0 3
139 splitter 2570 0.5 0 1 0 3
140 artillery-wagon 165993 0.4 5 16 0 0
141 red-wire 361 0.3 0 1 0 3
142 lab 6794 0.2 5 16 0 0
143 discharge-defense-equipment 489398 0.9 5 16 0 0
144 atomic-bomb 18383696 4.4 5 16 0 0
145 logistic-chest-active-provider 8320 0.3 0 1 0 3
146 productivity-module-2 130079 2.7 5 16 0 0
147 rail-chain-signal 772 0.3 0 1 0 3
148 iron-gear-wheel 207 0.3 0 1 0 3
149 productivity-module 10539 4.0 1 4 0 8
150 burner-inserter 321 0.3 0 1 0 3
151 iron-chest 769 0.3 0 1 0 3
152 substation 14947 0.3 0 1 0 3
153 stone 36 2.0 0 0 0 3
154 sulfuric-acid 26 0.2 1 8 3 0
155 nuclear-fuel 577045 11.2 5 12 2 0
156 express-underground-belt 15125 0.2 5 16 0 0
157 electronic-circuit 284 0.3 0 1 0 3
158 stack-filter-inserter 11588 0.3 0 1 0 3
159 chemical-science-pack 4251 12.8 0 1 0 3
160 destroyer-capsule 216075 1.3 5 16 0 0
161 electric-furnace 18855 0.4 5 16 0 0
162 sulfur 221 1.0 0 0 0 3
163 rail 434 0.3 0 1 0 3
164 exoskeleton-equipment 235607 0.9 5 16 0 0
165 loader 6790 0.5 0 1 0 3
166 steel-plate 756 8.0 0 0 0 2
167 effectivity-module-3 756917 5.3 5 16 0 0
168 piercing-rounds-magazine 2082 0.8 1 4 0 8
169 processing-unit 12484 0.9 5 12 4 0
170 electric-mining-drill 3739 0.2 1 12 0 0
171 express-splitter 28088 0.2 5 16 0 0
172 assembling-machine-3 54518 0.3 0 1 0 3
173 transport-belt 160 0.3 0 1 0 3
174 copper-ore 36 2.0 0 0 0 3
175 explosive-cannon-shell 2602 4.3 0 1 0 3
176 flamethrower 7332 2.7 1 4 0 8
177 stone-wall 668 0.3 0 1 0 3
178 small-electric-pole 67 0.3 0 1 0 3
179 tank 108699 0.4 5 16 0 0
180 nuclear-reactor 1173893 0.7 5 16 0 0
181 concrete 108 5.3 0 1 0 3
182 rail-signal 772 0.3 0 1 0 3
183 constant-combinator 872 0.3 0 1 0 3
184 laser-turret 40566 2.3 1 12 0 0
185 car 19615 0.2 5 16 0 0
186 cliff-explosives 4377 4.3 0 1 0 3
187 medium-electric-pole 1946 0.3 0 1 0 3
188 explosive-uranium-cannon-shell 8613 3.2 1 4 0 8
189 discharge-defense-remote 304 0.3 0 1 0 3
190 land-mine 345 2.7 0 1 0 3
191 engine-unit 1590 5.3 0 1 0 3
192 logistic-chest-storage 8320 0.3 0 1 0 3
193 solar-panel 9988 2.7 1 4 0 8

View File

@@ -0,0 +1,193 @@
name;work;time;beason;speed;prod;eff
pipe;683;0.1;1;5;0;7
flying-robot-frame;39191;1.8;5;12;4;0
empty-barrel;4359;0.1;5;12;4;0
radar;19549;0.0;5;16;0;0
logistic-chest-buffer;55150;0.0;5;16;0;0
big-electric-pole;32236;0.0;5;16;0;0
speed-module;58246;1.3;5;16;0;0
combat-shotgun;95990;0.9;5;16;0;0
fusion-reactor-equipment;9656642;0.9;5;16;0;0
stone-furnace;200;0.3;0;1;0;3
gate;17166;0.0;5;16;0;0
power-switch;9053;0.2;5;16;0;0
rocket-control-unit;89517;2.7;5;12;4;0
steel-furnace;39278;0.3;5;16;0;0
logistic-science-pack;7101;0.5;5;12;4;0
refined-concrete;1740;4.0;1;4;0;8
roboport;661453;0.4;5;16;0;0
fast-transport-belt;7102;0.0;5;16;0;0
iron-stick;368;0.0;5;12;4;0
centrifuge;1240015;0.4;5;16;0;0
speed-module-2;494705;2.7;5;16;0;0
submachine-gun;24887;1.1;1;12;0;0
iron-plate;585;0.3;1;8;2;0
refined-hazard-concrete;1755;0.0;5;16;0;0
crude-oil;2;1.0;0;0;0;2
rocket-part;1128959;0.3;5;12;4;0
advanced-circuit;8265;0.5;5;12;4;0
logistic-chest-requester;55150;0.0;5;16;0;0
spidertron;35416686;0.9;5;16;0;0
modular-armor;517823;1.3;5;16;0;0
flamethrower-ammo;29636;0.7;5;15;0;0
automation-science-pack;3940;0.6;1;8;4;0
fluid-wagon;140927;0.1;5;16;0;0
steam-turbine;102439;0.3;5;16;0;0
cluster-grenade;62720;0.7;5;16;0;0
fast-loader;77292;0.3;5;16;0;0
battery-equipment;79770;0.9;5;16;0;0
heavy-armor;324026;0.7;5;16;0;0
copper-cable;368;0.0;5;12;4;0
artillery-turret;569998;3.6;5;16;0;0
piercing-shotgun-shell;23875;0.7;5;16;0;0
electric-energy-interface;9101;0.0;5;16;0;0
accumulator;28825;0.9;5;16;0;0
boiler;3240;0.0;5;16;0;0
logistic-robot;56031;0.0;5;16;0;0
stone-brick;615;0.3;1;8;2;0
fast-splitter;43282;0.2;5;16;0;0
iron-ore;36;2.0;0;0;0;3
poison-capsule;25527;0.7;5;16;0;0
utility-science-pack;55554;1.9;5;12;4;0
wooden-chest;20;0.3;0;1;0;3
effectivity-module-2;494705;2.7;5;16;0;0
heat-pipe;64433;0.1;5;16;0;0
rocket-silo;17459151;2.7;5;16;0;0
artillery-shell;112721;1.3;5;16;0;0
heat-exchanger;119291;0.3;5;16;0;0
locomotive;411735;0.4;5;16;0;0
pump;19017;0.2;5;16;0;0
electric-engine-unit;18689;0.9;5;12;4;0
fast-inserter;8101;0.0;5;16;0;0
pipe-to-ground;5030;0.0;5;16;0;0
uranium-rounds-magazine;37499;0.9;5;16;0;0
filter-inserter;14508;0.0;5;16;0;0
long-handed-inserter;5621;0.0;5;16;0;0
shotgun;24968;1.1;1;12;0;0
rocket-fuel;36705;2.7;5;12;4;0
assembling-machine-2;36989;0.0;5;16;0;0
flamethrower-turret;252293;1.8;5;16;0;0
personal-roboport-mk2-equipment;6841351;1.8;5;16;0;0
arithmetic-combinator;9771;0.0;5;16;0;0
stack-inserter;56845;0.0;5;16;0;0
logistic-chest-passive-provider;55150;0.0;5;16;0;0
satellite;17816293;0.4;5;16;0;0
rocket-launcher;20891;1.1;1;12;0;0
slowdown-capsule;17313;0.9;1;12;0;0
firearm-magazine;2960;0.1;5;16;0;0
hazard-concrete;367;0.0;5;16;0;0
burner-mining-drill;6656;0.2;5;16;0;0
train-stop;29283;0.0;5;16;0;0
artillery-targeting-remote;60218;0.0;5;16;0;0
cannon-shell;17086;0.9;1;12;0;0
rocket;4308;4.3;0;1;0;3
oil-refinery;122887;0.7;5;16;0;0
beacon;260878;1.3;5;16;0;0
belt-immunity-equipment;99640;0.9;5;16;0;0
solar-panel-equipment;106834;0.9;5;16;0;0
fast-underground-belt;29488;0.2;5;16;0;0
steel-chest;42002;0.0;5;16;0;0
grenade;3604;4.3;0;1;0;3
cargo-wagon;128085;0.1;5;16;0;0
coal;36;2.0;0;0;0;3
battery;4291;0.7;1;8;3;0
battery-mk2-equipment;1567148;0.9;5;16;0;0
personal-roboport-equipment;432318;0.9;5;16;0;0
uranium-cannon-shell;42869;1.1;5;16;0;0
storage-tank;39615;0.3;5;16;0;0
express-loader;193749;0.9;5;16;0;0
light-armor;25256;0.3;5;16;0;0
low-density-structure;31572;1.8;5;12;4;0
offshore-pump;5195;0.0;5;16;0;0
gun-turret;34043;0.7;5;16;0;0
lubricant;155;0.2;1;8;3;0
military-science-pack;11513;0.9;5;12;4;0
plastic-bar;853;0.2;1;8;3;0
productivity-module-3;2753844;5.3;5;16;0;0
speed-module-3;2753844;5.3;5;16;0;0
energy-shield-equipment;99640;0.9;5;16;0;0
small-lamp;3523;0.0;5;16;0;0
defender-capsule;51860;0.7;5;16;0;0
express-transport-belt;22051;0.0;5;16;0;0
assembling-machine-1;15915;0.0;5;16;0;0
uranium-ore;1330;2.7;0;1;0;2
power-armor;2209018;1.8;5;16;0;0
energy-shield-mk2-equipment;1362253;0.9;5;16;0;0
pistol;6826;1.1;1;5;0;7
steam-engine;18801;0.0;5;16;0;0
pumpjack;55142;0.4;5;16;0;0
power-armor-mk2;28867013;2.2;5;16;0;0
decider-combinator;9771;0.0;5;16;0;0
distractor-capsule;241537;1.3;5;16;0;0
landfill;949;0.1;1;12;0;0
effectivity-module;58246;1.3;5;16;0;0
shotgun-shell;2784;0.8;1;4;0;8
explosives;1294;0.7;1;8;3;0
copper-plate;585;0.3;1;8;2;0
production-science-pack;63933;1.9;5;12;4;0
programmable-speaker;12403;0.2;5;16;0;0
construction-robot;42550;0.0;5;16;0;0
chemical-plant;45960;0.4;5;16;0;0
uranium-fuel-cell;211814;0.9;5;12;4;0
green-wire;2202;0.0;5;16;0;0
personal-laser-defense-equipment;1964282;0.9;5;16;0;0
inserter;3573;0.0;5;16;0;0
underground-belt;5795;0.1;5;16;0;0
explosive-rocket;8081;2.1;1;4;0;8
night-vision-equipment;99640;0.9;5;16;0;0
repair-pack;5666;0.0;5;16;0;0
splitter;15263;0.1;5;16;0;0
artillery-wagon;1159229;0.4;5;16;0;0
red-wire;2202;0.0;5;16;0;0
lab;32116;0.2;5;16;0;0
discharge-defense-equipment;2298302;0.9;5;16;0;0
atomic-bomb;79002735;4.4;5;16;0;0
logistic-chest-active-provider;55150;0.0;5;16;0;0
productivity-module-2;494705;2.7;5;16;0;0
rail-chain-signal;4759;0.0;5;16;0;0
iron-gear-wheel;1154;0.0;5;12;4;0
productivity-module;58246;1.3;5;16;0;0
burner-inserter;2049;0.0;5;16;0;0
iron-chest;4989;0.0;5;16;0;0
substation;96674;0.0;5;16;0;0
stone;36;2.0;0;0;0;3
sulfuric-acid;116;0.1;5;12;3;0
nuclear-fuel;2268984;11.2;5;12;2;0
express-underground-belt;79356;0.2;5;16;0;0
electronic-circuit;1524;0.0;5;12;4;0
stack-filter-inserter;64776;0.0;5;16;0;0
chemical-science-pack;25422;2.1;5;12;4;0
destroyer-capsule;1033693;1.3;5;16;0;0
electric-furnace;102689;0.4;5;16;0;0
sulfur;1245;0.1;5;12;3;0
rail;2963;0.0;5;16;0;0
exoskeleton-equipment;1074703;0.9;5;16;0;0
loader;39920;0.1;5;16;0;0
steel-plate;5212;1.4;1;8;2;0
effectivity-module-3;2753844;5.3;5;16;0;0
piercing-rounds-magazine;12956;0.3;5;16;0;0
processing-unit;40359;0.9;5;12;4;0
electric-mining-drill;17430;0.2;5;16;0;0
express-splitter;151118;0.2;5;16;0;0
assembling-machine-3;307272;0.0;5;16;0;0
transport-belt;1024;0.0;5;16;0;0
copper-ore;36;2.0;0;0;0;3
explosive-cannon-shell;18380;0.9;1;12;0;0
flamethrower;43794;0.9;5;16;0;0
stone-wall;3384;0.0;5;16;0;0
small-electric-pole;482;0.1;1;12;0;0
tank;743896;0.4;5;16;0;0
nuclear-reactor;7211144;0.7;5;16;0;0
concrete;351;5.3;0;1;0;3
rail-signal;4759;0.0;5;16;0;0
constant-combinator;5198;0.0;5;16;0;0
laser-turret;198608;1.8;5;16;0;0
car;134062;0.2;5;16;0;0
cliff-explosives;25865;0.7;5;16;0;0
medium-electric-pole;13375;0.0;5;16;0;0
explosive-uranium-cannon-shell;44163;1.1;5;16;0;0
discharge-defense-remote;1834;0.0;5;16;0;0
land-mine;2522;0.6;1;12;0;0
engine-unit;11883;0.9;5;12;4;0
logistic-chest-storage;55150;0.0;5;16;0;0
solar-panel;58046;0.9;5;16;0;0
1 name work time beason speed prod eff
2 pipe 683 0.1 1 5 0 7
3 flying-robot-frame 39191 1.8 5 12 4 0
4 empty-barrel 4359 0.1 5 12 4 0
5 radar 19549 0.0 5 16 0 0
6 logistic-chest-buffer 55150 0.0 5 16 0 0
7 big-electric-pole 32236 0.0 5 16 0 0
8 speed-module 58246 1.3 5 16 0 0
9 combat-shotgun 95990 0.9 5 16 0 0
10 fusion-reactor-equipment 9656642 0.9 5 16 0 0
11 stone-furnace 200 0.3 0 1 0 3
12 gate 17166 0.0 5 16 0 0
13 power-switch 9053 0.2 5 16 0 0
14 rocket-control-unit 89517 2.7 5 12 4 0
15 steel-furnace 39278 0.3 5 16 0 0
16 logistic-science-pack 7101 0.5 5 12 4 0
17 refined-concrete 1740 4.0 1 4 0 8
18 roboport 661453 0.4 5 16 0 0
19 fast-transport-belt 7102 0.0 5 16 0 0
20 iron-stick 368 0.0 5 12 4 0
21 centrifuge 1240015 0.4 5 16 0 0
22 speed-module-2 494705 2.7 5 16 0 0
23 submachine-gun 24887 1.1 1 12 0 0
24 iron-plate 585 0.3 1 8 2 0
25 refined-hazard-concrete 1755 0.0 5 16 0 0
26 crude-oil 2 1.0 0 0 0 2
27 rocket-part 1128959 0.3 5 12 4 0
28 advanced-circuit 8265 0.5 5 12 4 0
29 logistic-chest-requester 55150 0.0 5 16 0 0
30 spidertron 35416686 0.9 5 16 0 0
31 modular-armor 517823 1.3 5 16 0 0
32 flamethrower-ammo 29636 0.7 5 15 0 0
33 automation-science-pack 3940 0.6 1 8 4 0
34 fluid-wagon 140927 0.1 5 16 0 0
35 steam-turbine 102439 0.3 5 16 0 0
36 cluster-grenade 62720 0.7 5 16 0 0
37 fast-loader 77292 0.3 5 16 0 0
38 battery-equipment 79770 0.9 5 16 0 0
39 heavy-armor 324026 0.7 5 16 0 0
40 copper-cable 368 0.0 5 12 4 0
41 artillery-turret 569998 3.6 5 16 0 0
42 piercing-shotgun-shell 23875 0.7 5 16 0 0
43 electric-energy-interface 9101 0.0 5 16 0 0
44 accumulator 28825 0.9 5 16 0 0
45 boiler 3240 0.0 5 16 0 0
46 logistic-robot 56031 0.0 5 16 0 0
47 stone-brick 615 0.3 1 8 2 0
48 fast-splitter 43282 0.2 5 16 0 0
49 iron-ore 36 2.0 0 0 0 3
50 poison-capsule 25527 0.7 5 16 0 0
51 utility-science-pack 55554 1.9 5 12 4 0
52 wooden-chest 20 0.3 0 1 0 3
53 effectivity-module-2 494705 2.7 5 16 0 0
54 heat-pipe 64433 0.1 5 16 0 0
55 rocket-silo 17459151 2.7 5 16 0 0
56 artillery-shell 112721 1.3 5 16 0 0
57 heat-exchanger 119291 0.3 5 16 0 0
58 locomotive 411735 0.4 5 16 0 0
59 pump 19017 0.2 5 16 0 0
60 electric-engine-unit 18689 0.9 5 12 4 0
61 fast-inserter 8101 0.0 5 16 0 0
62 pipe-to-ground 5030 0.0 5 16 0 0
63 uranium-rounds-magazine 37499 0.9 5 16 0 0
64 filter-inserter 14508 0.0 5 16 0 0
65 long-handed-inserter 5621 0.0 5 16 0 0
66 shotgun 24968 1.1 1 12 0 0
67 rocket-fuel 36705 2.7 5 12 4 0
68 assembling-machine-2 36989 0.0 5 16 0 0
69 flamethrower-turret 252293 1.8 5 16 0 0
70 personal-roboport-mk2-equipment 6841351 1.8 5 16 0 0
71 arithmetic-combinator 9771 0.0 5 16 0 0
72 stack-inserter 56845 0.0 5 16 0 0
73 logistic-chest-passive-provider 55150 0.0 5 16 0 0
74 satellite 17816293 0.4 5 16 0 0
75 rocket-launcher 20891 1.1 1 12 0 0
76 slowdown-capsule 17313 0.9 1 12 0 0
77 firearm-magazine 2960 0.1 5 16 0 0
78 hazard-concrete 367 0.0 5 16 0 0
79 burner-mining-drill 6656 0.2 5 16 0 0
80 train-stop 29283 0.0 5 16 0 0
81 artillery-targeting-remote 60218 0.0 5 16 0 0
82 cannon-shell 17086 0.9 1 12 0 0
83 rocket 4308 4.3 0 1 0 3
84 oil-refinery 122887 0.7 5 16 0 0
85 beacon 260878 1.3 5 16 0 0
86 belt-immunity-equipment 99640 0.9 5 16 0 0
87 solar-panel-equipment 106834 0.9 5 16 0 0
88 fast-underground-belt 29488 0.2 5 16 0 0
89 steel-chest 42002 0.0 5 16 0 0
90 grenade 3604 4.3 0 1 0 3
91 cargo-wagon 128085 0.1 5 16 0 0
92 coal 36 2.0 0 0 0 3
93 battery 4291 0.7 1 8 3 0
94 battery-mk2-equipment 1567148 0.9 5 16 0 0
95 personal-roboport-equipment 432318 0.9 5 16 0 0
96 uranium-cannon-shell 42869 1.1 5 16 0 0
97 storage-tank 39615 0.3 5 16 0 0
98 express-loader 193749 0.9 5 16 0 0
99 light-armor 25256 0.3 5 16 0 0
100 low-density-structure 31572 1.8 5 12 4 0
101 offshore-pump 5195 0.0 5 16 0 0
102 gun-turret 34043 0.7 5 16 0 0
103 lubricant 155 0.2 1 8 3 0
104 military-science-pack 11513 0.9 5 12 4 0
105 plastic-bar 853 0.2 1 8 3 0
106 productivity-module-3 2753844 5.3 5 16 0 0
107 speed-module-3 2753844 5.3 5 16 0 0
108 energy-shield-equipment 99640 0.9 5 16 0 0
109 small-lamp 3523 0.0 5 16 0 0
110 defender-capsule 51860 0.7 5 16 0 0
111 express-transport-belt 22051 0.0 5 16 0 0
112 assembling-machine-1 15915 0.0 5 16 0 0
113 uranium-ore 1330 2.7 0 1 0 2
114 power-armor 2209018 1.8 5 16 0 0
115 energy-shield-mk2-equipment 1362253 0.9 5 16 0 0
116 pistol 6826 1.1 1 5 0 7
117 steam-engine 18801 0.0 5 16 0 0
118 pumpjack 55142 0.4 5 16 0 0
119 power-armor-mk2 28867013 2.2 5 16 0 0
120 decider-combinator 9771 0.0 5 16 0 0
121 distractor-capsule 241537 1.3 5 16 0 0
122 landfill 949 0.1 1 12 0 0
123 effectivity-module 58246 1.3 5 16 0 0
124 shotgun-shell 2784 0.8 1 4 0 8
125 explosives 1294 0.7 1 8 3 0
126 copper-plate 585 0.3 1 8 2 0
127 production-science-pack 63933 1.9 5 12 4 0
128 programmable-speaker 12403 0.2 5 16 0 0
129 construction-robot 42550 0.0 5 16 0 0
130 chemical-plant 45960 0.4 5 16 0 0
131 uranium-fuel-cell 211814 0.9 5 12 4 0
132 green-wire 2202 0.0 5 16 0 0
133 personal-laser-defense-equipment 1964282 0.9 5 16 0 0
134 inserter 3573 0.0 5 16 0 0
135 underground-belt 5795 0.1 5 16 0 0
136 explosive-rocket 8081 2.1 1 4 0 8
137 night-vision-equipment 99640 0.9 5 16 0 0
138 repair-pack 5666 0.0 5 16 0 0
139 splitter 15263 0.1 5 16 0 0
140 artillery-wagon 1159229 0.4 5 16 0 0
141 red-wire 2202 0.0 5 16 0 0
142 lab 32116 0.2 5 16 0 0
143 discharge-defense-equipment 2298302 0.9 5 16 0 0
144 atomic-bomb 79002735 4.4 5 16 0 0
145 logistic-chest-active-provider 55150 0.0 5 16 0 0
146 productivity-module-2 494705 2.7 5 16 0 0
147 rail-chain-signal 4759 0.0 5 16 0 0
148 iron-gear-wheel 1154 0.0 5 12 4 0
149 productivity-module 58246 1.3 5 16 0 0
150 burner-inserter 2049 0.0 5 16 0 0
151 iron-chest 4989 0.0 5 16 0 0
152 substation 96674 0.0 5 16 0 0
153 stone 36 2.0 0 0 0 3
154 sulfuric-acid 116 0.1 5 12 3 0
155 nuclear-fuel 2268984 11.2 5 12 2 0
156 express-underground-belt 79356 0.2 5 16 0 0
157 electronic-circuit 1524 0.0 5 12 4 0
158 stack-filter-inserter 64776 0.0 5 16 0 0
159 chemical-science-pack 25422 2.1 5 12 4 0
160 destroyer-capsule 1033693 1.3 5 16 0 0
161 electric-furnace 102689 0.4 5 16 0 0
162 sulfur 1245 0.1 5 12 3 0
163 rail 2963 0.0 5 16 0 0
164 exoskeleton-equipment 1074703 0.9 5 16 0 0
165 loader 39920 0.1 5 16 0 0
166 steel-plate 5212 1.4 1 8 2 0
167 effectivity-module-3 2753844 5.3 5 16 0 0
168 piercing-rounds-magazine 12956 0.3 5 16 0 0
169 processing-unit 40359 0.9 5 12 4 0
170 electric-mining-drill 17430 0.2 5 16 0 0
171 express-splitter 151118 0.2 5 16 0 0
172 assembling-machine-3 307272 0.0 5 16 0 0
173 transport-belt 1024 0.0 5 16 0 0
174 copper-ore 36 2.0 0 0 0 3
175 explosive-cannon-shell 18380 0.9 1 12 0 0
176 flamethrower 43794 0.9 5 16 0 0
177 stone-wall 3384 0.0 5 16 0 0
178 small-electric-pole 482 0.1 1 12 0 0
179 tank 743896 0.4 5 16 0 0
180 nuclear-reactor 7211144 0.7 5 16 0 0
181 concrete 351 5.3 0 1 0 3
182 rail-signal 4759 0.0 5 16 0 0
183 constant-combinator 5198 0.0 5 16 0 0
184 laser-turret 198608 1.8 5 16 0 0
185 car 134062 0.2 5 16 0 0
186 cliff-explosives 25865 0.7 5 16 0 0
187 medium-electric-pole 13375 0.0 5 16 0 0
188 explosive-uranium-cannon-shell 44163 1.1 5 16 0 0
189 discharge-defense-remote 1834 0.0 5 16 0 0
190 land-mine 2522 0.6 1 12 0 0
191 engine-unit 11883 0.9 5 12 4 0
192 logistic-chest-storage 55150 0.0 5 16 0 0
193 solar-panel 58046 0.9 5 16 0 0

1
public/pencil.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" enable-background="new 0 0 50 50"><path d="M9.6 40.4l2.5-9.9L27 15.6l7.4 7.4-14.9 14.9-9.9 2.5zm4.3-8.9l-1.5 6.1 6.1-1.5L31.6 23 27 18.4 13.9 31.5z"/><path d="M17.8 37.3c-.6-2.5-2.6-4.5-5.1-5.1l.5-1.9c3.2.8 5.7 3.3 6.5 6.5l-1.9.5z"/><path d="M29.298 19.287l1.414 1.414-13.01 13.02-1.414-1.412z"/><path d="M11 39l2.9-.7c-.3-1.1-1.1-1.9-2.2-2.2L11 39z"/><path d="M35 22.4L27.6 15l3-3 .5.1c3.6.5 6.4 3.3 6.9 6.9l.1.5-3.1 2.9zM30.4 15l4.6 4.6.9-.9c-.5-2.3-2.3-4.1-4.6-4.6l-.9.9z"/></svg>

After

Width:  |  Height:  |  Size: 544 B

View File

@@ -3,5 +3,8 @@
"/Deconstruction_planner",
"/Upgrade_planner",
"/Blueprint_book",
"/Space_science_pack"
"/Space_science_pack",
"/Used_up_uranium_fuel_cell",
"/Kovarex_enrichment_process",
"/Uranium_processing"
]

48
res/i18n/de.json Normal file
View File

@@ -0,0 +1,48 @@
{
"page.home.head.title": "Factorio Mikroservices",
"page.home.head.meta.description": "Fasse Factorio Fabriken zu Microservices zusammen",
"page.home.title": "Factorio Mikroservices",
"page.home.description": "Auf dieser Seite kannst du alle Einstellungen vornehmen. Gruppiere alle Fabriken zu Microservices zusammen. Ein Microservice ist eine Ansammlung bestimmter Montagemaschinen und anderen Fertigungen, die sich Eingaben (durch Züge) teilen. Optimale Gruppen sollten daher nur wenige Eingaben haben und viele Gegenstände produzieren. \"Exportierte Fabriken\" sind Ausgaben, die z.B. mit Zügen abgeholt, und für andere Services als Eingabe zu Verfügung stehen. \"Einkaufszentren\" stellen mit Anbieterkisten die Waren zur Abholung durch den Spieler oder Roboter zur Verfügung. Die benötigten Eingabe-und Zwischenfabriken werden automatisch berechnet.",
"page.home.pref.download": "Herunterladen",
"page.home.pref.visualize": "Visualisieren",
"page.home.pref.basic.title": "Grundlegende Waren",
"page.home.pref.basic.description": "Grundlegende Waren können nicht in Fabriken hergestellt werden. Es kann sinnvoll sein hier z.B. Eisenplatten hinzuzufügen, wenn jene direkt beim Erz hergestellt werden.",
"page.home.pref.ignored.title": "Ignorierte Waren",
"page.home.pref.ignored.description": "Waren, die im Einkaufszentrum hergestellt werden sollen (z.B. Befeuerter Greifarm, weil es nicht benötigt wird) und auch nicht zwischen den Mikroservices exportiert werden sollen (z.B. Zahnräder, weil die bei Bedarf in der Fabrik selbst als Zwischenprodukt hergestellt wird).",
"page.home.share.download.title": "Download & Upload",
"page.home.share.download.description": "Lade hier deine Daten herunter, um sie für einen späteren Upload zu speichern. Alle auf dieser Seite vorgenommenen Änderungen werden automatisch gespeichert und können nicht rückgängig gemacht werden. Am besten lädst du daher die Daten daher herunter bevor du etwas ausprobierst.",
"page.home.share.download.upload_text": "Klicke zum Hochladen oder ziehe einen Speicherstand in diesen Bereich!",
"page.home.share.link.title": "Teile und Herrsche!",
"page.home.share.link.description": "Du kannst auch mit deinen Freunden zusammenarbeiten! Teile einfach den folgenden Link!",
"page.home.share.link.warning": "Warnung: Jeder mit diesem Link kann bearbeiten!",
"page.home.group.title": "Gruppen von Microservices",
"page.home.group.add.title": "Neue Gruppe hinzufügen",
"page.home.group.add.default_group_name": "Neue Gruppe",
"page.home.group.add.button_text": "Gruppe \"{name}\" hinzufügen",
"page.home.group.missing.export.title": "Fehlende Export-Fabriken",
"page.home.group.missing.export.description": "Eine Auflistung aller Waren, die keine grundlegenden oder ignorierten Waren sind, und bei noch keiner Gruppe exportiert werden oder als Einkaufszentrum hinzugefügt wurden. Nur in dieser Liste falls von mindestens 3 anderen Waren verwendet.",
"page.home.group.missing.mall.title": "Fehlende Einkaufszentren",
"page.home.group.missing.mall.description": "Eine Auflistung aller Waren, die keine grundlegenden oder ignorierten Waren sind, und bei noch keiner Gruppe exportiert werden oder als Einkaufszentrum hinzugefügt wurden. Nur in dieser Liste falls von maximal 2 anderen Waren verwendet.",
"page.home.group.missing.none": "Alle Fabriken hinzugefügt!",
"page.home.group.item.export": "Exportierte Waren",
"page.home.group.item.mall": "Waren als Einkaufszentrum",
"page.home.group.item.input": "Angelieferte Waren ({amount})",
"page.home.group.item.intermediate": "Zwischenprodukte ({amount})",
"page.home.group.item.suggestion.export": "Vorgeschlagene Exportwaren",
"page.home.group.item.suggestion.mall": "Vorgeschlagene Einkaufszentren",
"page.home.group.delete.confirmation": "Gruppe unwiderruflich löschen?",
"page.home.tooltip.recipe": "Rezept",
"page.home.tooltip.used_by": "Verwendet in",
"page.home.tooltip.actions": "Aktionen",
"page.home.tooltip.action.exclude_suggestion": "Diese Ware von Vorschlägen ausschließen",
"page.home.tooltip.action.add_to_new_mall": "Erstelle eine neue Gruppe mit diesem Namen und dieser Ware als Einkaufszentrum",
"page.home.tooltip.action.add_to_new_export": "Erstelle eine neue Gruppe mit diesem Namen und gut als exportierte Fabrik",
"page.home.tooltip.action.add_to_export": "Ware zu exportierten Fabriken hinzufügen",
"page.home.tooltip.action.add_to_mall": "Ware als Einkaufszentrum hinzufügen",
"page.visualize.overview.imports": "Importe",
"page.visualize.overview.exports": "Exporte",
"page.visualize.overview.title": "Zusammenhänge der Services",
"page.visualize.details.title": "Group \"{name}\"",
"page.visualize.details.statistics.button": "Öffne Statistiken",
"component.recipe.arrow": "→"
}

48
res/i18n/en.json Normal file
View File

@@ -0,0 +1,48 @@
{
"page.home.head.title": "Factorio Microservices",
"page.home.head.meta.description": "Group Factorio factories together into microservices",
"page.home.title": "Factorio Microservices",
"page.home.description": "On this page you can make all settings. Group all factories into microservices. A microservice is a collection of certain assembly machines and other fabrications that share inputs (through trains). Optimal groups should therefore have few inputs and produce many items. \"Exported factories\" are outputs that are picked up by trains, for example, and available to other services as inputs. \"Mall factories\" use vendor crates to make goods available for pickup by the player or robot. The required input and intermediate factories are calculated automatically.",
"page.home.pref.download": "Download",
"page.home.pref.visualize": "Visualize",
"page.home.pref.basic.title": "Basic goods",
"page.home.pref.basic.description": "Basic goods cannot be produced in factories. It may make sense to add iron plates here, for example, if they are produced directly at the ore.",
"page.home.pref.ignored.title": "Ignored goods",
"page.home.pref.ignored.description": "Goods that are to be manufactured in in the mall (e.g., burner inserter because it is not needed) and also are not to be exported between microservices (e.g., gears because that is manufactured in the factory itself as an intermediate product when needed).",
"page.home.share.download.title": "Download & Upload",
"page.home.share.download.description": "Download your data here to store it for later upload. All changes made on this page are automatically saved and cannot be undone. So it is recommended to store a stable state before testing something out.",
"page.home.share.download.upload_text": "Click to upload or drop save in this area!",
"page.home.share.link.title": "Divide and Conquer!",
"page.home.share.link.description": "You can also work together with your friends! Just share the following link!",
"page.home.share.link.warning": "Warning: Everyone with this link can edit!",
"page.home.group.title": "Groups of Microservices",
"page.home.group.add.title": "Add a new group",
"page.home.group.add.default_group_name": "New Group",
"page.home.group.add.button_text": "Add group \"{name}\"",
"page.home.group.missing.export.title": "Missing export factories",
"page.home.group.missing.export.description": "A listing of all goods that are not basic or ignored goods, and are not yet exported at any group or added as a mall factory. Only in this list if used by at least 3 other goods.",
"page.home.group.missing.mall.title": "Missing mall factories",
"page.home.group.missing.mall.description": "A listing of all goods that are not basic or ignored goods, and are not yet exported at any group or added as a mall factory. Only in this list if used by a maximum of 2 other goods.",
"page.home.group.missing.none": "All factories added!",
"page.home.group.item.export": "Exported goods",
"page.home.group.item.mall": "Mall goods",
"page.home.group.item.input": "Input goods ({amount})",
"page.home.group.item.intermediate": "Intermediate factories ({amount})",
"page.home.group.item.suggestion.export": "Suggested export goods",
"page.home.group.item.suggestion.mall": "Suggested mall goods",
"page.home.group.delete.confirmation": "Delete group permanently?",
"page.home.tooltip.recipe": "Recipe",
"page.home.tooltip.used_by": "Used by",
"page.home.tooltip.actions": "Actions",
"page.home.tooltip.action.exclude_suggestion": "Exclude this good from suggestions",
"page.home.tooltip.action.add_to_new_mall": "Create a new group with this name and good as mall factory",
"page.home.tooltip.action.add_to_new_export": "Create a new group with this name and good as exported factory",
"page.home.tooltip.action.add_to_export": "Add good to exported factories",
"page.home.tooltip.action.add_to_mall": "Add good to mall factories",
"page.visualize.overview.imports": "Imports",
"page.visualize.overview.exports": "Exports",
"page.visualize.overview.title": "Interrelationships of Groups",
"page.visualize.details.title": "Group \"{name}\"",
"page.visualize.details.statistics.button": "Open statistics",
"component.recipe.arrow": "→"
}

48
res/i18n/nl.json Normal file
View File

@@ -0,0 +1,48 @@
{
"page.home.head.title": "Factorio Microservices",
"page.home.head.meta.description": "Groepeer Factorio-fabrieken samen in microservices",
"page.home.title": "Factorio Microservices",
"page.home.description": "Op deze pagina kunt u alle instellingen maken. Groepeer alle fabrieken in microservices. Een microservice is een verzameling van bepaalde assemblagemachines en andere fabricages die inputs delen (via treinen). Optimale groepen moeten dus weinig inputs hebben en veel items produceren. \"Geëxporteerde fabrieken\" zijn outputs die worden opgepikt door bijvoorbeeld treinen en beschikbaar zijn voor andere diensten als inputs. \"Winkelcentrumfabrieken\" gebruiken kratten van verkopers om goederen beschikbaar te maken voor afhaling door de speler of de robot. De benodigde input en tussenliggende fabrieken worden automatisch berekend.",
"page.home.pref.download": "Download",
"page.home.pref.visualize": "Visualiseren",
"page.home.pref.basic.title": "Basisgoederen",
"page.home.pref.basic.description": "Basisgoederen kunnen niet in fabrieken worden geproduceerd. Het kan zinvol zijn om hier bijvoorbeeld ijzeren platen toe te voegen, als ze direct aan het erts worden geproduceerd.",
"page.home.pref.ignored.title": "Genegeerde goederen",
"page.home.pref.ignored.description": "Goederen die in in het winkelcentrum moeten worden gefabriceerd (bijv. branderinserter omdat die niet nodig is) en ook niet tussen microservices moeten worden geëxporteerd (bijv. tandwielen omdat dat in de fabriek zelf als tussenproduct wordt gefabriceerd als dat nodig is).",
"page.home.share.download.title": "Downloaden & uploaden",
"page.home.share.download.description": "Download hier je gegevens om ze op te slaan en later te uploaden. Alle wijzigingen op deze pagina worden automatisch opgeslagen en kunnen niet ongedaan worden gemaakt. Het is daarom het beste om de gegevens te downloaden voordat je iets uitprobeert.",
"page.home.share.download.upload_text": "Klik om een opgeslagen bestand te uploaden of te slepen naar dit gebied!",
"page.home.share.link.title": "Verdeel en heers!",
"page.home.share.link.description": "Je kunt ook samenwerken met je vrienden! Deel gewoon de volgende link!",
"page.home.share.link.warning": "Waarschuwing: iedereen met deze link kan bewerken!",
"page.home.group.title": "Microservices groepen",
"page.home.group.add.title": "Voeg een nieuwe groep toe",
"page.home.group.add.default_group_name": "Nieuwe groep",
"page.home.group.add.button_text": "Groep \"{name}\" toevoegen",
"page.home.group.missing.export.title": "Ontbrekende export fabrieken",
"page.home.group.missing.export.description": "Een lijst van alle goederen die geen basisgoederen of genegeerde goederen zijn, en die nog bij geen enkele groep worden geëxporteerd of als winkelcentrumfabriek zijn toegevoegd. Alleen in deze lijst indien gebruikt door ten minste 3 andere goederen.",
"page.home.group.missing.mall.title": "Ontbrekende winkelcentrumfabrieken",
"page.home.group.missing.mall.description": "Een lijst van alle goederen die geen basisgoederen of genegeerde goederen zijn, en nog niet bij een groep worden geëxporteerd of als mall-fabriek zijn toegevoegd. Alleen in deze lijst indien gebruikt door maximaal 2 andere goederen.",
"page.home.group.missing.none": "Alle fabrieken toegevoegd!",
"page.home.group.item.export": "Uitgevoerde goederen",
"page.home.group.item.mall": "Winkelcentrum goederen",
"page.home.group.item.input": "Ingevoerde goederen ({amount})",
"page.home.group.item.intermediate": "Tussenliggende fabrieken ({amount})",
"page.home.group.item.suggestion.export": "Voorgestelde exportgoederen",
"page.home.group.item.suggestion.mall": "Voorgestelde winkelcentrum goederen",
"page.home.group.delete.confirmation": "Groep permanent verwijderen?",
"page.home.tooltip.recipe": "Recept",
"page.home.tooltip.used_by": "Gebruikt door",
"page.home.tooltip.actions": "Acties",
"page.home.tooltip.action.exclude_suggestion": "Sluit dit goed uit van suggesties",
"page.home.tooltip.action.add_to_new_mall": "Maak een nieuwe groep met deze naam en goed als winkelcentrum fabriek",
"page.home.tooltip.action.add_to_new_export": "Maak een nieuwe groep met deze naam en goed als geëxporteerde fabriek",
"page.home.tooltip.action.add_to_export": "Voeg goed toe aan geëxporteerde fabrieken",
"page.home.tooltip.action.add_to_mall": "Goed toevoegen aan fabrieken in winkelcentrum",
"page.visualize.overview.imports": "Invoer",
"page.visualize.overview.exports": "Uitvoer",
"page.visualize.overview.title": "Microservice Relaties",
"page.visualize.details.title": "Groep \"{name}\"",
"page.visualize.details.statistics.button": "Open statistieken",
"component.recipe.arrow": "→"
}

View File

@@ -190,5 +190,33 @@
"/Steam": 1
}
}
},
{
"name": "Uranium-238",
"href": "/Uranium-238",
"image": "/images/thumb/Uranium-238.png/32px-Uranium-238.png",
"recipe": {
"prerequisites": {
"/Uranium_ore": 10
},
"time": 12,
"output": {
"/Uranium-238": 1
}
}
},
{
"name": "Uranium-235",
"href": "/Uranium-235",
"image": "/images/thumb/Uranium-235.png/32px-Uranium-235.png",
"recipe": {
"prerequisites": {
"/Uranium-238": 3
},
"time": 60,
"output": {
"/Uranium-235": 1
}
}
}
]

View File

@@ -2,7 +2,7 @@
import fetch from 'node-fetch'
import { HTMLElement, Node, parse, TextNode } from 'node-html-parser'
import { writeFile } from 'fs/promises'
import { promiseAllStepN } from '../utils/promiseAllStepN.js'
import { promiseAllStepN } from '../utils/promiseAllStepN'
import { retrieveRecipes } from '../utils/retrieveRecipes'
import { Entity, Recipe, UnfetchedEntity } from '../utils/types'

View File

@@ -94,6 +94,11 @@ export async function renameGroup(
return false
}
export async function getGroup(uuid: string, name: string) {
const data = await getData(uuid)
return data?.groups?.[name] ?? undefined
}
export async function addGroup(uuid: string, name: string): Promise<boolean> {
name = name.replace(/[.$]/g, '')
const data = await getData(uuid)

View File

@@ -0,0 +1,35 @@
import { DependencyList, useEffect } from 'react'
export const useAsyncEffect = <T>(
effect: (isMounted: () => boolean, signal: AbortSignal | undefined) => Promise<T>,
inputs?: DependencyList,
onDestroy?: (result: T | undefined) => void
) => {
const controller =
typeof AbortController !== 'undefined'
? new AbortController()
: {
signal: undefined,
abort() {
return
}
}
useEffect(() => {
let result: T | undefined = undefined
let mounted = true
const maybePromise = effect(() => mounted, controller.signal)
Promise.resolve(maybePromise).then(value => {
result = value
})
return () => {
mounted = false
controller.abort()
onDestroy?.(result)
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, inputs)
}

8
src/hooks/useLocale.ts Normal file
View File

@@ -0,0 +1,8 @@
import { useRouter } from 'next/router'
import { useMessages } from '../i18n'
export const useLocale = () => {
const { locale: _locale } = useRouter()
const messages = useMessages()
return _locale ?? '' in messages ? (_locale as keyof typeof messages) : 'en'
}

11
src/i18n.ts Normal file
View File

@@ -0,0 +1,11 @@
import en from '../res/i18n/en.json'
import de from '../res/i18n/de.json'
import nl from '../res/i18n/nl.json'
const messages = {
en,
de: { ...en, ...de },
nl: { ...en, ...nl }
}
export const useMessages = () => messages

231
styles/colors.module.css Normal file
View File

@@ -0,0 +1,231 @@
.primary {
background-color: var(--md-sys-color-primary);
}
.primary-text {
color: var(--md-sys-color-primary);
}
.on-primary {
background-color: var(--md-sys-color-on-primary);
}
.on-primary-text {
color: var(--md-sys-color-on-primary);
}
.primary-container {
background-color: var(--md-sys-color-primary-container);
}
.primary-container-text {
color: var(--md-sys-color-primary-container);
}
.on-primary-container {
background-color: var(--md-sys-color-on-primary-container);
}
.on-primary-container-text {
color: var(--md-sys-color-on-primary-container);
}
.secondary {
background-color: var(--md-sys-color-secondary);
}
.secondary-text {
color: var(--md-sys-color-secondary);
}
.on-secondary {
background-color: var(--md-sys-color-on-secondary);
}
.on-secondary-text {
color: var(--md-sys-color-on-secondary);
}
.secondary-container {
background-color: var(--md-sys-color-secondary-container);
}
.secondary-container-text {
color: var(--md-sys-color-secondary-container);
}
.on-secondary-container {
background-color: var(--md-sys-color-on-secondary-container);
}
.on-secondary-container-text {
color: var(--md-sys-color-on-secondary-container);
}
.tertiary {
background-color: var(--md-sys-color-tertiary);
}
.tertiary-text {
color: var(--md-sys-color-tertiary);
}
.on-tertiary {
background-color: var(--md-sys-color-on-tertiary);
}
.on-tertiary-text {
color: var(--md-sys-color-on-tertiary);
}
.tertiary-container {
background-color: var(--md-sys-color-tertiary-container);
}
.tertiary-container-text {
color: var(--md-sys-color-tertiary-container);
}
.on-tertiary-container {
background-color: var(--md-sys-color-on-tertiary-container);
}
.on-tertiary-container-text {
color: var(--md-sys-color-on-tertiary-container);
}
.error {
background-color: var(--md-sys-color-error);
}
.error-text {
color: var(--md-sys-color-error);
}
.error-container {
background-color: var(--md-sys-color-error-container);
}
.error-container-text {
color: var(--md-sys-color-error-container);
}
.on-error {
background-color: var(--md-sys-color-on-error);
}
.on-error-text {
color: var(--md-sys-color-on-error);
}
.on-error-container {
background-color: var(--md-sys-color-on-error-container);
}
.on-error-container-text {
color: var(--md-sys-color-on-error-container);
}
.background {
background-color: var(--md-sys-color-background);
}
.background-text {
color: var(--md-sys-color-background);
}
.on-background {
background-color: var(--md-sys-color-on-background);
}
.on-background-text {
color: var(--md-sys-color-on-background);
}
.surface {
background-color: var(--md-sys-color-surface);
}
.surface-text {
color: var(--md-sys-color-surface);
}
.on-surface {
background-color: var(--md-sys-color-on-surface);
}
.on-surface-text {
color: var(--md-sys-color-on-surface);
}
.surface-variant {
background-color: var(--md-sys-color-surface-variant);
}
.surface-variant-text {
color: var(--md-sys-color-surface-variant);
}
.on-surface-variant {
background-color: var(--md-sys-color-on-surface-variant);
}
.on-surface-variant-text {
color: var(--md-sys-color-on-surface-variant);
}
.outline {
background-color: var(--md-sys-color-outline);
}
.outline-text {
color: var(--md-sys-color-outline);
}
.inverse-on-surface {
background-color: var(--md-sys-color-inverse-on-surface);
}
.inverse-on-surface-text {
color: var(--md-sys-color-inverse-on-surface);
}
.inverse-surface {
background-color: var(--md-sys-color-inverse-surface);
}
.inverse-surface-text {
color: var(--md-sys-color-inverse-surface);
}
.inverse-primary {
background-color: var(--md-sys-color-inverse-primary);
}
.inverse-primary-text {
color: var(--md-sys-color-inverse-primary);
}
.shadow {
background-color: var(--md-sys-color-shadow);
}
.shadow-text {
color: var(--md-sys-color-shadow);
}
.surface-tint {
background-color: var(--md-sys-color-surface-tint);
}
.surface-tint-text {
color: var(--md-sys-color-surface-tint);
}
.surface-tint-color {
background-color: var(--md-sys-color-surface-tint-color);
}
.surface-tint-color-text {
color: var(--md-sys-color-surface-tint-color);
}

31
styles/font-faces.css Normal file
View File

@@ -0,0 +1,31 @@
@font-face {
font-display: swap;
font-family: Roboto;
font-style: normal;
font-weight: 400;
src: url("/factorio/fonts/Roboto-Regular.ttf") format("woff2");
}
@font-face {
font-display: swap;
font-family: Roboto;
font-style: italic;
font-weight: 400;
src: url("/factorio/fonts/Roboto-Italic.ttf") format("woff2");
}
@font-face {
font-display: swap;
font-family: Roboto;
font-style: normal;
font-weight: 500;
src: url("/factorio/fonts/Roboto-Medium.ttf") format("woff2");
}
@font-face {
font-display: swap;
font-family: Roboto;
font-style: italic;
font-weight: 500;
src: url("/factorio/fonts/Roboto-MediumItalic.ttf") format("woff2");
}

View File

@@ -17,9 +17,9 @@ body {
}
body {
padding: 2em;
background: #fafafa;
color: black;
padding: 0 2em;
background: var(--md-sys-color-background);
color: var(--md-sys-color-on-background);
}
body.scroll {
@@ -50,15 +50,14 @@ h4 {
margin-block: 1em 0.3em;
}
strong {
font-weight: 500;
}
@media (prefers-color-scheme: dark) {
html {
color-scheme: dark;
}
body {
background: #111;
color: white;
}
}
@media (max-width: 1200px) {

5
styles/theme.css Normal file
View File

@@ -0,0 +1,5 @@
@import "tokens.css";
@import "colors.module.css";
@import "typography.module.css";
@import "theme.light.css" (prefers-color-scheme: light);
@import "theme.dark.css" (prefers-color-scheme: dark);

31
styles/theme.dark.css Normal file
View File

@@ -0,0 +1,31 @@
:root {
--md-sys-color-primary: var(--md-sys-color-primary-dark);
--md-sys-color-on-primary: var(--md-sys-color-on-primary-dark);
--md-sys-color-primary-container: var(--md-sys-color-primary-container-dark);
--md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-dark);
--md-sys-color-secondary: var(--md-sys-color-secondary-dark);
--md-sys-color-on-secondary: var(--md-sys-color-on-secondary-dark);
--md-sys-color-secondary-container: var(--md-sys-color-secondary-container-dark);
--md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-dark);
--md-sys-color-tertiary: var(--md-sys-color-tertiary-dark);
--md-sys-color-on-tertiary: var(--md-sys-color-on-tertiary-dark);
--md-sys-color-tertiary-container: var(--md-sys-color-tertiary-container-dark);
--md-sys-color-on-tertiary-container: var(--md-sys-color-on-tertiary-container-dark);
--md-sys-color-error: var(--md-sys-color-error-dark);
--md-sys-color-error-container: var(--md-sys-color-error-container-dark);
--md-sys-color-on-error: var(--md-sys-color-on-error-dark);
--md-sys-color-on-error-container: var(--md-sys-color-on-error-container-dark);
--md-sys-color-background: var(--md-sys-color-background-dark);
--md-sys-color-on-background: var(--md-sys-color-on-background-dark);
--md-sys-color-surface: var(--md-sys-color-surface-dark);
--md-sys-color-on-surface: var(--md-sys-color-on-surface-dark);
--md-sys-color-surface-variant: var(--md-sys-color-surface-variant-dark);
--md-sys-color-on-surface-variant: var(--md-sys-color-on-surface-variant-dark);
--md-sys-color-outline: var(--md-sys-color-outline-dark);
--md-sys-color-inverse-on-surface: var(--md-sys-color-inverse-on-surface-dark);
--md-sys-color-inverse-surface: var(--md-sys-color-inverse-surface-dark);
--md-sys-color-inverse-primary: var(--md-sys-color-inverse-primary-dark);
--md-sys-color-shadow: var(--md-sys-color-shadow-dark);
--md-sys-color-surface-tint: var(--md-sys-color-surface-tint-dark);
--md-sys-color-surface-tint-color: var(--md-sys-color-surface-tint-color-dark);
}

31
styles/theme.light.css Normal file
View File

@@ -0,0 +1,31 @@
:root {
--md-sys-color-primary: var(--md-sys-color-primary-light);
--md-sys-color-on-primary: var(--md-sys-color-on-primary-light);
--md-sys-color-primary-container: var(--md-sys-color-primary-container-light);
--md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-light);
--md-sys-color-secondary: var(--md-sys-color-secondary-light);
--md-sys-color-on-secondary: var(--md-sys-color-on-secondary-light);
--md-sys-color-secondary-container: var(--md-sys-color-secondary-container-light);
--md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-light);
--md-sys-color-tertiary: var(--md-sys-color-tertiary-light);
--md-sys-color-on-tertiary: var(--md-sys-color-on-tertiary-light);
--md-sys-color-tertiary-container: var(--md-sys-color-tertiary-container-light);
--md-sys-color-on-tertiary-container: var(--md-sys-color-on-tertiary-container-light);
--md-sys-color-error: var(--md-sys-color-error-light);
--md-sys-color-error-container: var(--md-sys-color-error-container-light);
--md-sys-color-on-error: var(--md-sys-color-on-error-light);
--md-sys-color-on-error-container: var(--md-sys-color-on-error-container-light);
--md-sys-color-background: var(--md-sys-color-background-light);
--md-sys-color-on-background: var(--md-sys-color-on-background-light);
--md-sys-color-surface: var(--md-sys-color-surface-light);
--md-sys-color-on-surface: var(--md-sys-color-on-surface-light);
--md-sys-color-surface-variant: var(--md-sys-color-surface-variant-light);
--md-sys-color-on-surface-variant: var(--md-sys-color-on-surface-variant-light);
--md-sys-color-outline: var(--md-sys-color-outline-light);
--md-sys-color-inverse-on-surface: var(--md-sys-color-inverse-on-surface-light);
--md-sys-color-inverse-surface: var(--md-sys-color-inverse-surface-light);
--md-sys-color-inverse-primary: var(--md-sys-color-inverse-primary-light);
--md-sys-color-shadow: var(--md-sys-color-shadow-light);
--md-sys-color-surface-tint: var(--md-sys-color-surface-tint-light);
--md-sys-color-surface-tint-color: var(--md-sys-color-surface-tint-color-light);
}

293
styles/tokens.css Normal file
View File

@@ -0,0 +1,293 @@
:root {
--md-source: #e69100;
/* primary */
--md-ref-palette-primary0: #000;
--md-ref-palette-primary10: #2b1700;
--md-ref-palette-primary20: #472a00;
--md-ref-palette-primary25: #563400;
--md-ref-palette-primary30: #663e00;
--md-ref-palette-primary35: #764800;
--md-ref-palette-primary40: #865300;
--md-ref-palette-primary50: #a86900;
--md-ref-palette-primary60: #cb8000;
--md-ref-palette-primary70: #ef980f;
--md-ref-palette-primary80: #ffb963;
--md-ref-palette-primary90: #ffddb9;
--md-ref-palette-primary95: #ffeedf;
--md-ref-palette-primary98: #fff8f4;
--md-ref-palette-primary99: #fffbff;
--md-ref-palette-primary100: #fff;
/* secondary */
--md-ref-palette-secondary0: #000;
--md-ref-palette-secondary10: #001f2a;
--md-ref-palette-secondary20: #003546;
--md-ref-palette-secondary25: #004155;
--md-ref-palette-secondary30: #004d64;
--md-ref-palette-secondary35: #005a74;
--md-ref-palette-secondary40: #006684;
--md-ref-palette-secondary50: #0081a6;
--md-ref-palette-secondary60: #0d9cc8;
--md-ref-palette-secondary70: #42b7e4;
--md-ref-palette-secondary80: #69d3ff;
--md-ref-palette-secondary90: #bee9ff;
--md-ref-palette-secondary95: #e0f4ff;
--md-ref-palette-secondary98: #f4faff;
--md-ref-palette-secondary99: #fafcff;
--md-ref-palette-secondary100: #fff;
/* tertiary */
--md-ref-palette-tertiary0: #000;
--md-ref-palette-tertiary10: #002105;
--md-ref-palette-tertiary20: #00390e;
--md-ref-palette-tertiary25: #004613;
--md-ref-palette-tertiary30: #005318;
--md-ref-palette-tertiary35: #00601d;
--md-ref-palette-tertiary40: #0a6e24;
--md-ref-palette-tertiary50: #2f883b;
--md-ref-palette-tertiary60: #4ba352;
--md-ref-palette-tertiary70: #66be6a;
--md-ref-palette-tertiary80: #81da83;
--md-ref-palette-tertiary90: #9cf79c;
--md-ref-palette-tertiary95: #c7ffc2;
--md-ref-palette-tertiary98: #ebffe5;
--md-ref-palette-tertiary99: #f6fff0;
--md-ref-palette-tertiary100: #fff;
/* neutral */
--md-ref-palette-neutral0: #000;
--md-ref-palette-neutral10: #2b1700;
--md-ref-palette-neutral20: #472a00;
--md-ref-palette-neutral25: #573300;
--md-ref-palette-neutral30: #663e00;
--md-ref-palette-neutral35: #764800;
--md-ref-palette-neutral40: #875300;
--md-ref-palette-neutral50: #a86900;
--md-ref-palette-neutral60: #c8811e;
--md-ref-palette-neutral70: #e79b38;
--md-ref-palette-neutral80: #ffb963;
--md-ref-palette-neutral90: #ffddb9;
--md-ref-palette-neutral95: #ffeedf;
--md-ref-palette-neutral98: #fff8f4;
--md-ref-palette-neutral99: #fffbff;
--md-ref-palette-neutral100: #fff;
/* neutral-variant */
--md-ref-palette-neutral-variant0: #000;
--md-ref-palette-neutral-variant10: #231a11;
--md-ref-palette-neutral-variant20: #392f24;
--md-ref-palette-neutral-variant25: #443a2f;
--md-ref-palette-neutral-variant30: #504539;
--md-ref-palette-neutral-variant35: #5c5045;
--md-ref-palette-neutral-variant40: #685c50;
--md-ref-palette-neutral-variant50: #827568;
--md-ref-palette-neutral-variant60: #9d8e81;
--md-ref-palette-neutral-variant70: #b8a99a;
--md-ref-palette-neutral-variant80: #d4c4b5;
--md-ref-palette-neutral-variant90: #f1e0d0;
--md-ref-palette-neutral-variant95: #ffeedf;
--md-ref-palette-neutral-variant98: #fff8f4;
--md-ref-palette-neutral-variant99: #fffbff;
--md-ref-palette-neutral-variant100: #fff;
/* error */
--md-ref-palette-error0: #000;
--md-ref-palette-error10: #410002;
--md-ref-palette-error20: #690005;
--md-ref-palette-error25: #7e0007;
--md-ref-palette-error30: #93000a;
--md-ref-palette-error35: #a80710;
--md-ref-palette-error40: #ba1a1a;
--md-ref-palette-error50: #de3730;
--md-ref-palette-error60: #ff5449;
--md-ref-palette-error70: #ff897d;
--md-ref-palette-error80: #ffb4ab;
--md-ref-palette-error90: #ffdad6;
--md-ref-palette-error95: #ffedea;
--md-ref-palette-error98: #fff8f7;
--md-ref-palette-error99: #fffbff;
--md-ref-palette-error100: #fff;
/* light */
--md-sys-color-primary-light: #865300;
--md-sys-color-on-primary-light: #fff;
--md-sys-color-primary-container-light: #ffddb9;
--md-sys-color-on-primary-container-light: #2b1700;
--md-sys-color-secondary-light: #006684;
--md-sys-color-on-secondary-light: #fff;
--md-sys-color-secondary-container-light: #bee9ff;
--md-sys-color-on-secondary-container-light: #001f2a;
--md-sys-color-tertiary-light: #0a6e24;
--md-sys-color-on-tertiary-light: #fff;
--md-sys-color-tertiary-container-light: #9cf79c;
--md-sys-color-on-tertiary-container-light: #002105;
--md-sys-color-error-light: #ba1a1a;
--md-sys-color-error-container-light: #ffdad6;
--md-sys-color-on-error-light: #fff;
--md-sys-color-on-error-container-light: #410002;
--md-sys-color-background-light: #fffbff;
--md-sys-color-on-background-light: #2b1700;
--md-sys-color-surface-light: #fffbff;
--md-sys-color-on-surface-light: #2b1700;
--md-sys-color-surface-variant-light: #f1e0d0;
--md-sys-color-on-surface-variant-light: #504539;
--md-sys-color-outline-light: #827568;
--md-sys-color-inverse-on-surface-light: #ffeedf;
--md-sys-color-inverse-surface-light: #472a00;
--md-sys-color-inverse-primary-light: #ffb963;
--md-sys-color-shadow-light: #000;
--md-sys-color-surface-tint-light: #865300;
--md-sys-color-surface-tint-color-light: #865300;
/* dark */
--md-sys-color-primary-dark: #ffb963;
--md-sys-color-on-primary-dark: #472a00;
--md-sys-color-primary-container-dark: #663e00;
--md-sys-color-on-primary-container-dark: #ffddb9;
--md-sys-color-secondary-dark: #69d3ff;
--md-sys-color-on-secondary-dark: #003546;
--md-sys-color-secondary-container-dark: #004d64;
--md-sys-color-on-secondary-container-dark: #bee9ff;
--md-sys-color-tertiary-dark: #81da83;
--md-sys-color-on-tertiary-dark: #00390e;
--md-sys-color-tertiary-container-dark: #005318;
--md-sys-color-on-tertiary-container-dark: #9cf79c;
--md-sys-color-error-dark: #ffb4ab;
--md-sys-color-error-container-dark: #93000a;
--md-sys-color-on-error-dark: #690005;
--md-sys-color-on-error-container-dark: #ffdad6;
--md-sys-color-background-dark: #2b1700;
--md-sys-color-on-background-dark: #ffddb9;
--md-sys-color-surface-dark: #2b1700;
--md-sys-color-on-surface-dark: #ffddb9;
--md-sys-color-surface-variant-dark: #504539;
--md-sys-color-on-surface-variant-dark: #d4c4b5;
--md-sys-color-outline-dark: #9d8e81;
--md-sys-color-inverse-on-surface-dark: #2b1700;
--md-sys-color-inverse-surface-dark: #ffddb9;
--md-sys-color-inverse-primary-dark: #865300;
--md-sys-color-shadow-dark: #000;
--md-sys-color-surface-tint-dark: #ffb963;
--md-sys-color-surface-tint-color-dark: #ffb963;
/* label - small */
--md-sys-typescale-label-small-font-family-name: roboto;
--md-sys-typescale-label-small-font-family-style: normal;
--md-sys-typescale-label-small-font-weight: 500;
--md-sys-typescale-label-small-font-size: 11px;
--md-sys-typescale-label-small-letter-spacing: 0.5px;
--md-sys-typescale-label-small-line-height: 16px;
/* label - medium */
--md-sys-typescale-label-medium-font-family-name: roboto;
--md-sys-typescale-label-medium-font-family-style: normal;
--md-sys-typescale-label-medium-font-weight: 500;
--md-sys-typescale-label-medium-font-size: 12px;
--md-sys-typescale-label-medium-letter-spacing: 0.5px;
--md-sys-typescale-label-medium-line-height: 16px;
/* label - large */
--md-sys-typescale-label-large-font-family-name: roboto;
--md-sys-typescale-label-large-font-family-style: normal;
--md-sys-typescale-label-large-font-weight: 500;
--md-sys-typescale-label-large-font-size: 14px;
--md-sys-typescale-label-large-letter-spacing: 0.1px;
--md-sys-typescale-label-large-line-height: 20px;
/* body - small */
--md-sys-typescale-body-small-font-family-name: roboto;
--md-sys-typescale-body-small-font-family-style: normal;
--md-sys-typescale-body-small-font-weight: 400;
--md-sys-typescale-body-small-font-size: 12px;
--md-sys-typescale-body-small-letter-spacing: 0.4px;
--md-sys-typescale-body-small-line-height: 16px;
/* body - medium */
--md-sys-typescale-body-medium-font-family-name: roboto;
--md-sys-typescale-body-medium-font-family-style: normal;
--md-sys-typescale-body-medium-font-weight: 400;
--md-sys-typescale-body-medium-font-size: 14px;
--md-sys-typescale-body-medium-letter-spacing: 0.25px;
--md-sys-typescale-body-medium-line-height: 20px;
/* body - large */
--md-sys-typescale-body-large-font-family-name: roboto;
--md-sys-typescale-body-large-font-family-style: normal;
--md-sys-typescale-body-large-font-weight: 400;
--md-sys-typescale-body-large-font-size: 16px;
--md-sys-typescale-body-large-letter-spacing: 0.5px;
--md-sys-typescale-body-large-line-height: 24px;
/* headline - small */
--md-sys-typescale-headline-small-font-family-name: roboto;
--md-sys-typescale-headline-small-font-family-style: normal;
--md-sys-typescale-headline-small-font-weight: 400;
--md-sys-typescale-headline-small-font-size: 24px;
--md-sys-typescale-headline-small-letter-spacing: 0;
--md-sys-typescale-headline-small-line-height: 32px;
/* headline - medium */
--md-sys-typescale-headline-medium-font-family-name: roboto;
--md-sys-typescale-headline-medium-font-family-style: normal;
--md-sys-typescale-headline-medium-font-weight: 400;
--md-sys-typescale-headline-medium-font-size: 28px;
--md-sys-typescale-headline-medium-letter-spacing: 0;
--md-sys-typescale-headline-medium-line-height: 36px;
/* headline - large */
--md-sys-typescale-headline-large-font-family-name: roboto;
--md-sys-typescale-headline-large-font-family-style: normal;
--md-sys-typescale-headline-large-font-weight: 400;
--md-sys-typescale-headline-large-font-size: 32px;
--md-sys-typescale-headline-large-letter-spacing: 0;
--md-sys-typescale-headline-large-line-height: 40px;
/* display - small */
--md-sys-typescale-display-small-font-family-name: roboto;
--md-sys-typescale-display-small-font-family-style: normal;
--md-sys-typescale-display-small-font-weight: 400;
--md-sys-typescale-display-small-font-size: 36px;
--md-sys-typescale-display-small-letter-spacing: 0;
--md-sys-typescale-display-small-line-height: 44px;
/* display - medium */
--md-sys-typescale-display-medium-font-family-name: roboto;
--md-sys-typescale-display-medium-font-family-style: normal;
--md-sys-typescale-display-medium-font-weight: 400;
--md-sys-typescale-display-medium-font-size: 45px;
--md-sys-typescale-display-medium-letter-spacing: 0;
--md-sys-typescale-display-medium-line-height: 52px;
/* display - large */
--md-sys-typescale-display-large-font-family-name: roboto;
--md-sys-typescale-display-large-font-family-style: normal;
--md-sys-typescale-display-large-font-weight: 400;
--md-sys-typescale-display-large-font-size: 57px;
--md-sys-typescale-display-large-letter-spacing: -0.25px;
--md-sys-typescale-display-large-line-height: 64px;
/* title - small */
--md-sys-typescale-title-small-font-family-name: roboto;
--md-sys-typescale-title-small-font-family-style: normal;
--md-sys-typescale-title-small-font-weight: 500;
--md-sys-typescale-title-small-font-size: 14px;
--md-sys-typescale-title-small-letter-spacing: 0.1px;
--md-sys-typescale-title-small-line-height: 20px;
/* title - medium */
--md-sys-typescale-title-medium-font-family-name: roboto;
--md-sys-typescale-title-medium-font-family-style: normal;
--md-sys-typescale-title-medium-font-weight: 500;
--md-sys-typescale-title-medium-font-size: 16px;
--md-sys-typescale-title-medium-letter-spacing: 0.15px;
--md-sys-typescale-title-medium-line-height: 24px;
/* title - large */
--md-sys-typescale-title-large-font-family-name: roboto;
--md-sys-typescale-title-large-font-family-style: normal;
--md-sys-typescale-title-large-font-weight: 400;
--md-sys-typescale-title-large-font-size: 22px;
--md-sys-typescale-title-large-letter-spacing: 0;
--md-sys-typescale-title-large-line-height: 28px;
}

View File

@@ -0,0 +1,134 @@
.label-small {
font-family: var(--md-sys-typescale-label-small-font-family-name);
font-size: var(--md-sys-typescale-label-small-font-size);
font-style: var(--md-sys-typescale-label-small-font-family-style);
font-weight: var(--md-sys-typescale-label-small-font-weight);
letter-spacing: var(--md-sys-typescale-label-small-letter-spacing);
line-height: var(--md-sys-typescale-label-small-line-height);
}
.label-medium {
font-family: var(--md-sys-typescale-label-medium-font-family-name);
font-size: var(--md-sys-typescale-label-medium-font-size);
font-style: var(--md-sys-typescale-label-medium-font-family-style);
font-weight: var(--md-sys-typescale-label-medium-font-weight);
letter-spacing: var(--md-sys-typescale-label-medium-letter-spacing);
line-height: var(--md-sys-typescale-label-medium-line-height);
}
.label-large {
font-family: var(--md-sys-typescale-label-large-font-family-name);
font-size: var(--md-sys-typescale-label-large-font-size);
font-style: var(--md-sys-typescale-label-large-font-family-style);
font-weight: var(--md-sys-typescale-label-large-font-weight);
letter-spacing: var(--md-sys-typescale-label-large-letter-spacing);
line-height: var(--md-sys-typescale-label-large-line-height);
}
.body-small {
font-family: var(--md-sys-typescale-body-small-font-family-name);
font-size: var(--md-sys-typescale-body-small-font-size);
font-style: var(--md-sys-typescale-body-small-font-family-style);
font-weight: var(--md-sys-typescale-body-small-font-weight);
letter-spacing: var(--md-sys-typescale-body-small-letter-spacing);
line-height: var(--md-sys-typescale-body-small-line-height);
}
.body-medium {
font-family: var(--md-sys-typescale-body-medium-font-family-name);
font-size: var(--md-sys-typescale-body-medium-font-size);
font-style: var(--md-sys-typescale-body-medium-font-family-style);
font-weight: var(--md-sys-typescale-body-medium-font-weight);
letter-spacing: var(--md-sys-typescale-body-medium-letter-spacing);
line-height: var(--md-sys-typescale-body-medium-line-height);
}
.body-large {
font-family: var(--md-sys-typescale-body-large-font-family-name);
font-size: var(--md-sys-typescale-body-large-font-size);
font-style: var(--md-sys-typescale-body-large-font-family-style);
font-weight: var(--md-sys-typescale-body-large-font-weight);
letter-spacing: var(--md-sys-typescale-body-large-letter-spacing);
line-height: var(--md-sys-typescale-body-large-line-height);
}
.headline-small {
font-family: var(--md-sys-typescale-headline-small-font-family-name);
font-size: var(--md-sys-typescale-headline-small-font-size);
font-style: var(--md-sys-typescale-headline-small-font-family-style);
font-weight: var(--md-sys-typescale-headline-small-font-weight);
letter-spacing: var(--md-sys-typescale-headline-small-letter-spacing);
line-height: var(--md-sys-typescale-headline-small-line-height);
}
.headline-medium {
font-family: var(--md-sys-typescale-headline-medium-font-family-name);
font-size: var(--md-sys-typescale-headline-medium-font-size);
font-style: var(--md-sys-typescale-headline-medium-font-family-style);
font-weight: var(--md-sys-typescale-headline-medium-font-weight);
letter-spacing: var(--md-sys-typescale-headline-medium-letter-spacing);
line-height: var(--md-sys-typescale-headline-medium-line-height);
}
.headline-large {
font-family: var(--md-sys-typescale-headline-large-font-family-name);
font-size: var(--md-sys-typescale-headline-large-font-size);
font-style: var(--md-sys-typescale-headline-large-font-family-style);
font-weight: var(--md-sys-typescale-headline-large-font-weight);
letter-spacing: var(--md-sys-typescale-headline-large-letter-spacing);
line-height: var(--md-sys-typescale-headline-large-line-height);
}
.display-small {
font-family: var(--md-sys-typescale-display-small-font-family-name);
font-size: var(--md-sys-typescale-display-small-font-size);
font-style: var(--md-sys-typescale-display-small-font-family-style);
font-weight: var(--md-sys-typescale-display-small-font-weight);
letter-spacing: var(--md-sys-typescale-display-small-letter-spacing);
line-height: var(--md-sys-typescale-display-small-line-height);
}
.display-medium {
font-family: var(--md-sys-typescale-display-medium-font-family-name);
font-size: var(--md-sys-typescale-display-medium-font-size);
font-style: var(--md-sys-typescale-display-medium-font-family-style);
font-weight: var(--md-sys-typescale-display-medium-font-weight);
letter-spacing: var(--md-sys-typescale-display-medium-letter-spacing);
line-height: var(--md-sys-typescale-display-medium-line-height);
}
.display-large {
font-family: var(--md-sys-typescale-display-large-font-family-name);
font-size: var(--md-sys-typescale-display-large-font-size);
font-style: var(--md-sys-typescale-display-large-font-family-style);
font-weight: var(--md-sys-typescale-display-large-font-weight);
letter-spacing: var(--md-sys-typescale-display-large-letter-spacing);
line-height: var(--md-sys-typescale-display-large-line-height);
}
.title-small {
font-family: var(--md-sys-typescale-title-small-font-family-name);
font-size: var(--md-sys-typescale-title-small-font-size);
font-style: var(--md-sys-typescale-title-small-font-family-style);
font-weight: var(--md-sys-typescale-title-small-font-weight);
letter-spacing: var(--md-sys-typescale-title-small-letter-spacing);
line-height: var(--md-sys-typescale-title-small-line-height);
}
.title-medium {
font-family: var(--md-sys-typescale-title-medium-font-family-name);
font-size: var(--md-sys-typescale-title-medium-font-size);
font-style: var(--md-sys-typescale-title-medium-font-family-style);
font-weight: var(--md-sys-typescale-title-medium-font-weight);
letter-spacing: var(--md-sys-typescale-title-medium-letter-spacing);
line-height: var(--md-sys-typescale-title-medium-line-height);
}
.title-large {
font-family: var(--md-sys-typescale-title-large-font-family-name);
font-size: var(--md-sys-typescale-title-large-font-size);
font-style: var(--md-sys-typescale-title-large-font-family-style);
font-weight: var(--md-sys-typescale-title-large-font-weight);
letter-spacing: var(--md-sys-typescale-title-large-letter-spacing);
line-height: var(--md-sys-typescale-title-large-line-height);
}

View File

@@ -16,5 +16,5 @@
"incremental": true
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
"exclude": ["node_modules", "scripts", "styles/font-faces.css"]
}

View File

@@ -6,8 +6,7 @@
"jest.config.js",
"next.config.js",
"src/backend-custom-server/index",
"scripts/*",
"res/*.json"
"scripts/*"
],
"exclude": ["dist", ".next", "out", "node_modules", "cypress"]
"exclude": ["dist", ".next", "out", "node_modules", "cypress", "*.json"]
}

123
yarn.lock
View File

@@ -191,6 +191,76 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
"@formatjs/ecma402-abstract@1.11.8":
version "1.11.8"
resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.8.tgz#f4015dfb6a837369d94c6ba82455c609e45bce20"
integrity sha512-fgLqyWlwmTEuqV/TSLEL/t9JOmHNLFvCdgzXB0jc2w+WOItPCOJ1T0eyN6fQBQKRPfSqqNlu+kWj7ijcOVTVVQ==
dependencies:
"@formatjs/intl-localematcher" "0.2.28"
tslib "2.4.0"
"@formatjs/fast-memoize@1.2.4":
version "1.2.4"
resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.4.tgz#4b5ddce9eb7803ff0bd4052387672151a8b7f8a0"
integrity sha512-9ARYoLR8AEzXvj2nYrOVHY/h1dDMDWGTnKDLXSISF1uoPakSmfcZuSqjiqZX2wRkEUimPxdwTu/agyozBtZRHA==
dependencies:
tslib "2.4.0"
"@formatjs/icu-messageformat-parser@2.1.4":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.4.tgz#f1e32b9937f151c1dd5c30536ce3e920b7f23813"
integrity sha512-3PqMvKWV1oyok0BuiXUAHIaotdhdTJw6OICqCZbfUgKT+ZRwRWO4IlCgvXJeCITaKS5p+PY0XXKjf/vUyIpWjQ==
dependencies:
"@formatjs/ecma402-abstract" "1.11.8"
"@formatjs/icu-skeleton-parser" "1.3.10"
tslib "2.4.0"
"@formatjs/icu-skeleton-parser@1.3.10":
version "1.3.10"
resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.10.tgz#2f504e56ac80137ee2baad55c7fa0b5dc7f4e4df"
integrity sha512-kXJmtLDqFF5aLTf8IxdJXnhrIX1Qb4Qp3a9jqRecGDYfzOa9hMhi9U0nKyhrJJ4cXxBzptcgb+LWkyeHL6nlBQ==
dependencies:
"@formatjs/ecma402-abstract" "1.11.8"
tslib "2.4.0"
"@formatjs/intl-displaynames@6.0.3":
version "6.0.3"
resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.0.3.tgz#e648a91bccd9fb21519090eaafece3be9d15f480"
integrity sha512-Mxh6W1VOlmiEvO/QPBrBQHlXrIn5VxjJWyyEI0V7ZHNGl0ee8AjSlq7vIJG8GodRJqGUuutF6N3OB/6qFv0YWg==
dependencies:
"@formatjs/ecma402-abstract" "1.11.8"
"@formatjs/intl-localematcher" "0.2.28"
tslib "2.4.0"
"@formatjs/intl-listformat@7.0.3":
version "7.0.3"
resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.0.3.tgz#8627969b77849559d148bc9536d0884c2271e6de"
integrity sha512-ampNLRGZl/08epHa3i5sRmcHGLneC6JrknexbbgnexYFNSmJ6AbL/dCzgrQzw2Efl+5AZK7UbNFxcDYY3RePvw==
dependencies:
"@formatjs/ecma402-abstract" "1.11.8"
"@formatjs/intl-localematcher" "0.2.28"
tslib "2.4.0"
"@formatjs/intl-localematcher@0.2.28":
version "0.2.28"
resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.28.tgz#412ea7fefbfc7ed33cd6b43aa304fc14d816e564"
integrity sha512-FLsc6Gifs1np/8HnCn/7Q+lHMmenrD5fuDhRT82yj0gi9O19kfaFwjQUw1gZsyILuRyT93GuzdifHj7TKRhBcw==
dependencies:
tslib "2.4.0"
"@formatjs/intl@2.3.1":
version "2.3.1"
resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.3.1.tgz#eccd6d03e4db18c256181f235b1d0a7f7aaebf5a"
integrity sha512-f06qZ/ukpeN24gc01qFjh3P+r3FU/ikY4yG+fDJu6dPNvpUQzDy98lYogA1dr6ig2UtrnoEk3xncyFPL1e9cZw==
dependencies:
"@formatjs/ecma402-abstract" "1.11.8"
"@formatjs/fast-memoize" "1.2.4"
"@formatjs/icu-messageformat-parser" "2.1.4"
"@formatjs/intl-displaynames" "6.0.3"
"@formatjs/intl-listformat" "7.0.3"
intl-messageformat "10.1.1"
tslib "2.4.0"
"@humanwhocodes/config-array@^0.10.4":
version "0.10.4"
resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz"
@@ -371,6 +441,14 @@
"@types/minimatch" "*"
"@types/node" "*"
"@types/hoist-non-react-statics@^3.3.1":
version "3.3.1"
resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
dependencies:
"@types/react" "*"
hoist-non-react-statics "^3.3.0"
"@types/json-schema@^7.0.11", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.9":
version "7.0.11"
resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz"
@@ -448,7 +526,7 @@
dependencies:
"@types/react" "*"
"@types/react@*", "@types/react@18.0.17":
"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@18.0.17":
version "18.0.17"
resolved "https://registry.npmjs.org/@types/react/-/react-18.0.17.tgz"
integrity sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ==
@@ -1885,7 +1963,7 @@ he@1.2.0:
resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2:
hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2:
version "3.3.2"
resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
@@ -1979,6 +2057,16 @@ internal-slot@^1.0.3:
has "^1.0.3"
side-channel "^1.0.4"
intl-messageformat@10.1.1:
version "10.1.1"
resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.1.1.tgz#226767e7921fa86cef2cbe4a13911050716720bc"
integrity sha512-FeJne2oooYW6shLPbrqyjRX6hTELVrQ90Dn88z7NomLk/xZBCLxLPAkgaYaTQJBRBV78nZ933d8APHHkTQrD9Q==
dependencies:
"@formatjs/ecma402-abstract" "1.11.8"
"@formatjs/fast-memoize" "1.2.4"
"@formatjs/icu-messageformat-parser" "2.1.4"
tslib "2.4.0"
ip@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz"
@@ -2957,6 +3045,22 @@ react-indiana-drag-scroll@^2.2.0:
debounce "^1.2.0"
easy-bem "^1.1.1"
react-intl@^6.0.5:
version "6.0.5"
resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.0.5.tgz#8adcb9108682c82e625a8ce7826283afd3537f62"
integrity sha512-nDZ3BosuE8WdovcGxsrjj1aIgJZklSL5aORs5oah+5tLQTzUdOEstzJEYQPM+sxl1dkDOu7RCuw0z9oI9ENf9g==
dependencies:
"@formatjs/ecma402-abstract" "1.11.8"
"@formatjs/icu-messageformat-parser" "2.1.4"
"@formatjs/intl" "2.3.1"
"@formatjs/intl-displaynames" "6.0.3"
"@formatjs/intl-listformat" "7.0.3"
"@types/hoist-non-react-statics" "^3.3.1"
"@types/react" "16 || 17 || 18"
hoist-non-react-statics "^3.3.2"
intl-messageformat "10.1.1"
tslib "2.4.0"
react-is@^16.13.1, react-is@^16.7.0:
version "16.13.1"
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
@@ -3406,6 +3510,11 @@ stylelint-order@^3.1.1:
postcss "^7.0.17"
postcss-sorting "^5.0.1"
stylelint-use-logical@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/stylelint-use-logical/-/stylelint-use-logical-2.0.0.tgz#9fa9cffacf3d86ea4867477b0599127b05552f6e"
integrity sha512-4wRXETzWSF3yc9znj28VOZZ+VyVys1jeb6L341tit3KkKuAqib1PkGq5lQK0Xf2NhdoHkEHCaFSJfCL8u6UTOA==
stylelint@^14.10.0:
version "14.10.0"
resolved "https://registry.npmjs.org/stylelint/-/stylelint-14.10.0.tgz"
@@ -3588,16 +3697,16 @@ tsconfig-paths@^3.14.1:
minimist "^1.2.6"
strip-bom "^3.0.0"
tslib@2.4.0, tslib@^2.1.0, tslib@^2.4.0:
version "2.4.0"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz"
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
tslib@^1.8.1:
version "1.14.1"
resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^2.1.0, tslib@^2.4.0:
version "2.4.0"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz"
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
tsutils@^3.21.0:
version "3.21.0"
resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz"