ywana-core8 0.0.9 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/http/client.js","../src/http/session.js","../src/html/icon.js","../src/html/button.js","../src/site/siteContext.js","../src/html/text.js","../src/html/checkbox.js","../src/html/form.js","../src/html/header.js","../src/html/list.js","../src/html/menu.js","../src/html/progress.js","../src/html/tab.js","../src/html/textfield.js","../src/html/table.js","../src/html/tokenfield.js","../src/html/tree.js","../src/site/page.js","../src/site/site.js","../src/site/dialog.js","../src/domain/ContentType.js","../src/domain/ContentForm.js","../src/domain/ContentEditor.js","../src/domain/EditContentDialog.js","../src/domain/CollectionPage.js","../src/upload/UploadArea.js","../src/upload/uploader.js","../src/upload/UploadFile.js","../src/html/chip.js","../src/domain/CreateContentDialog.js","../src/widgets/kanban/Kanban.js","../src/widgets/login/LoginBox.js","../src/html/property.js","../src/html/radio.js","../src/widgets/login/ResetPasswordBox.js","../src/html/section.js","../src/upload/UploadDialog.js","../src/widgets/viewer/Viewer.js","../src/index.js"],"sourcesContent":["async function fetchAsync(method, URL, body = null, token) {\n\n console.log('FETCH', method, URL)\n\n const request = {\n method,\n mode: 'cors',\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"x-access-token\": token\n },\n body\n }\n\n try {\n var response = await fetch(URL, request);\n if (response.ok) {\n const json = await response.json();\n return json\n }\n throw response\n } catch (error) {\n if (error instanceof Error) { throw { error }}\n const json = await error.json()\n throw {\n success: false,\n message: json.message\n }\n }\n}\n\n\nexport const HTTPClient = (domain, securityCtx) => {\n return {\n\n GET: (URL) => {\n const token = securityCtx ? securityCtx.token() : null;\n return fetchAsync('GET', domain + URL, undefined, token);\n },\n\n POST: (URL, body) => {\n const token = securityCtx ? securityCtx.token() : null;\n return fetchAsync('POST', domain + URL, body, token);\n },\n\n PUT: (URL, body) => {\n const token = securityCtx ? securityCtx.token() : null;\n return fetchAsync('PUT', domain + URL, body, token);\n },\n\n PATCH: (URL, body) => {\n const token = securityCtx ? securityCtx.token() : null;\n return fetchAsync('PATCH', domain + URL, body, token);\n },\n\n DELETE: (URL) => {\n const token = securityCtx ? securityCtx.token() : null;\n return fetchAsync('DELETE', domain + URL, undefined, token);\n }\n }\n}","/**\n * Session store\n * implements securityCtx methods\n */\n\nconst SESSION_NAME = process.env.REACT_APP_SESSION || window && window.SESSION ? window.SESSION : 'YWANA-CORE6-SESSION';\n\nexport const Session = {\n\n token() {\n const item = sessionStorage.getItem(SESSION_NAME);\n const json = item ? JSON.parse(sessionStorage.getItem(SESSION_NAME)) : {};\n return json.token;\n },\n\n me() {\n const item = sessionStorage.getItem(SESSION_NAME);\n const json = item ? JSON.parse(sessionStorage.getItem(SESSION_NAME)) : {};\n return json.me;\n },\n\n init(token, me) {\n sessionStorage.setItem(SESSION_NAME, JSON.stringify({ token, me }));\n },\n\n refresh(token) {\n const me = this.me();\n sessionStorage.setItem(SESSION_NAME, JSON.stringify({ token, me }));\n },\n\n isLoggedIn() {\n return !!sessionStorage.DSSession;\n },\n\n logout() {\n sessionStorage.removeItem(SESSION_NAME);\n },\n\n}\n","import React from 'react'\nimport './icon.css'\n\n/**\n * Icon \n */\nexport const Icon = ({ icon, size = \"normal\", clickable = false, action }) => {\n\n function click (event) {\n event.stopPropagation()\n event.preventDefault();\n if (action) action()\n }\n\n const clicker = clickable ? \"clickable\" : \"\"\n return (\n <i className={`icon ${size} ${clicker} material-icons`} onClick={click}>\n {icon}\n </i>\n )\n}","import React from 'react'\nimport './button.css'\nimport { Icon } from './icon'\n\n/**\n * HTML Button\n */\nexport const Button = ({ label, icon, action, disabled = false, outlined, raised }) => {\n\n function click(event) {\n if (!disabled) {\n event.stopPropagation();\n event.preventDefault();\n if (action) action()\n }\n }\n\n let style = raised ? 'raised' : outlined ? 'outlined' : 'normal'\n if (disabled) style = `${style} disabled`\n return (\n <button className={`btn ${style}`} onClick={click}>\n { icon ? <Icon icon={icon} size=\"small\" /> : null }\n <span>{ label }</span>\n </button>\n )\n}","import React from 'react'\n\n/**\n * Site Context\n */\nexport const SiteContext = React.createContext({})","import { useContext } from \"react\"\nimport { SiteContext } from \"../site/siteContext\"\n\n/**\n * Text\n */\nexport const Text = ({ children }) => {\n\n const site = useContext(SiteContext)\n\n if (site) {\n const { lang, dictionary = {}} = site\n const term = dictionary[children]\n const text = term ? term[lang] : children\n return text ? <span>{text}</span> : ''\n }\n\n return children ? <span>{children}</span> : ''\n\n}","import React from 'react'\nimport { Text } from './text'\nimport './checkbox.css'\n\n/**\n * CheckBox\n */\nexport const CheckBox = (props) => {\n\n const { id, label, placeholder, value, onChange } = props\n\n function change(event) {\n const value = event.target.checked\n if (onChange) onChange(id, value)\n }\n\n const labelTxt = <Text>{label}</Text>\n \n console.log(label, value)\n return value === true ? (\n <div className=\"checkbox\" key={`${id}1`}>\n <input id={id} type=\"checkbox\" placeholder={placeholder} checked value={value} onChange={change} />\n <span class=\"checkmark\" />\n <label htmlFor={id}>{labelTxt}</label>\n </div>\n ) : (\n <div className=\"checkbox\" key={`${id}0`}>\n <input id={id} type=\"checkbox\" placeholder={placeholder} value={value} onChange={change} />\n <span class=\"checkmark\" />\n <label htmlFor={id}>{labelTxt}</label>\n </div>\n )\n}","import React, { Fragment, useState, useEffect } from 'react'\nimport { Text } from './text';\nimport './form.css'\n\n/**\n * Form\n */\nexport const Form = ({ title, columns = 1, children, outlined, onChange }) => {\n\n const [fields, setFields] = useState([])\n const isEmpty = (value) => value === void 0 || value === null || value === '';\n\n useEffect(() => {\n const initFields = React.Children\n .toArray(children)\n .filter(child => child !== null && child !== '')\n .map(child => {\n const { id, value, required = false, validation } = child.props\n const valid = required ? validation ? validation(value) : !isEmpty(value) : true\n return { id, value, required, validation, valid }\n })\n .filter(field => field.id !== void 0)\n setFields(initFields)\n }, [])\n\n useEffect(() => {\n if (onChange) {\n const valid = fields.every(({ valid }) => valid === true)\n const form = fields.reduce((form, { id, value }) => {\n if (value || value === false) form[id] = value\n return form\n }, {})\n onChange(form, valid)\n }\n }, [fields])\n\n const changeField = (id, value) => {\n const field = fields.find(f => f.id === id)\n if (field) {\n const valid = field.required ? field.validation ? field.validation(value) : !isEmpty(value) : true\n Object.assign(field, { value, valid })\n setFields(fields.slice())\n }\n }\n\n const items = React.Children\n .toArray(children)\n .filter(child => child !== null && child !== '')\n .map(child => {\n const { span = 1 } = child.props\n const field = React.cloneElement(child, {\n onChange: changeField,\n outlined: !!outlined\n })\n const columnLayout = { gridColumn: `span ${span}`}\n return (<FieldWrapper style={columnLayout}>{field}</FieldWrapper>)\n })\n\n\n const gridLayout = { gridTemplateColumns: `repeat(${columns}, 1fr)` }\n return (\n <Fragment>\n {title ? (<header className=\"form-header\"><Text use=\"headline6\">{title}</Text></header>) : ''}\n <form className=\"form-grid\" style={gridLayout}>\n {items}\n </form>\n </Fragment>\n )\n}\n\n/**\n * Form Field Wrapper\n */\nconst FieldWrapper = ({ style, children }) => {\n return (\n <div className=\"field-wrapper\" style={style}>\n {children}\n </div>\n )\n}","import React from 'react';\nimport { Icon } from './icon';\nimport { Text } from './text';\nimport './header.css';\n\n/**\n * Header\n */\nexport const Header = (props) => {\n\n const caption = props.caption ? 'caption' : ''\n const prominent = props.prominent ? 'prominent' : ''\n const dense = props.dense ? 'dense' : ''\n let theme = props.primary ? 'primary' : ''\n theme = props.secondary ? 'secondary' : theme\n let icon = props.icon ? <Icon icon={props.icon} clickable={props.clickable} action={props.action}/> : ''\n icon = props.iconSrc ? <img className=\"header-icon\" src={props.iconSrc} /> : icon;\n\n const style = props.img ? { backgroundImage: `url(${props.img })` } : {}\n\n const title=<Text>{props.title}</Text>\n return (\n <header className={`header ${caption} ${prominent} ${dense} ${theme} ${props.className}`} style={style}>\n {icon}\n {props.title ? <label>{title}</label> : null }\n <span className=\"actions\">{props.children}</span>\n </header>\n )\n}\n\n","import { Fragment } from 'react'\nimport { Icon } from './icon';\nimport { Text } from './text';\nimport \"./list.css\"\n\n/**\n * List\n */\nexport const List = (props) => {\n\n const { items = [], children, onSelect, groupBy } = props\n\n function select(id) {\n if (onSelect) onSelect(id)\n }\n\n return groupBy ? <GroupedList {...props} onSelect={select} /> : (\n <div className=\"list\">\n <ul>\n {items.map(item => <ListItem key={item.id} item={item} onSelect={select} />)}\n </ul>\n {children}\n </div>\n )\n}\n\n/**\n * Grouped List\n */\nconst GroupedList = (props) => {\n const { items = [], children, onSelect, groupBy } = props\n\n const groups = items.reduce((groups, item) => {\n let group = groups.find(g => g.name === item.content[groupBy])\n if (!group) {\n group = { name: item.content[groupBy], items: []}\n groups.push(group)\n } \n group.items.push(item)\n return groups\n }, [])\n\n return (\n <div className=\"list\">\n {groups.map(group => (\n <Fragment key={group.name}>\n <header key={`${group.name}-header`}><Text>{group.name}</Text></header>\n <ul key={`${group.name}-ul`}>\n {group.items.map(item => <ListItem key={item.id} item={item} onSelect={onSelect} />)}\n </ul>\n </Fragment>\n ))}\n {children}\n </div>\n )\n}\n\n/**\n * List Item\n */\nconst ListItem = ({ item, onSelect }) => {\n const { id, icon, line1, line2, meta } = item\n\n function select() {\n if (onSelect) onSelect(id)\n }\n\n return (\n <li id={id} onClick={select}>\n {icon ? <Icon icon={icon} size=\"small\" /> : null}\n <main>\n <div className=\"primary-line\"><Text>{line1}</Text></div>\n {line2 ? <div className=\"secondary-line\"><Text>{line2}</Text></div> : null}\n </main>\n {meta ? <div className=\"meta\">{meta}</div> : null}\n </li>\n )\n}","import React, { useContext, useState } from 'react'\nimport { Icon } from './icon';\nimport './menu.css'\n\n\n/**\n * Page Context\n */\nexport const MenuContext = React.createContext({})\n\n/** \n * Menu \n **/\nexport const Menu = (props) => {\n const { children } = props\n return (\n <ul>\n {children}\n </ul>\n )\n}\n\n/**\n * Menu Icon\n */\nexport const MenuIcon = (props) => {\n\n const { icon = \"more_vert\", children, align } = props\n const [open, setOpen] = useState(false)\n\n function toggle() {\n setOpen(!open)\n }\n\n return (\n <MenuContext.Provider value={[open, setOpen]}>\n <div className=\"menu-icon\">\n <Icon icon={icon} clickable action={toggle} />\n {open ? (\n <menu className={`${align}`}>\n {children}\n </menu>\n ) : null}\n {open ? <div className=\"overlay\" onClick={toggle}/> : null}\n </div>\n </MenuContext.Provider>\n )\n}\n\n/**\n * Menu Item\n */\nexport const MenuItem = (props) => {\n\n const { id, icon, label, meta, onSelect } = props\n const [open, setOpen] = useContext(MenuContext)\n\n function select() {\n if (onSelect) onSelect()\n setOpen(false)\n }\n return (\n <li className=\"menu-item\" onClick={select}>\n {icon ? <Icon icon={icon} /> : null}\n <label>{label}</label>\n {meta ? <div className=\"meta\">{meta}</div> : null}\n </li>\n )\n}\n\n/**\n * Menu Separator\n */\nexport const MenuSeparator = (props) => {\n return (\n <li>\n menuSeparator\n </li>\n )\n}","import { Icon } from './icon'\nimport './progress.css'\n\n/**\n * Circular Progress\n */\nexport const CircularProgress = (props) => {\n return (\n <div className=\"circular-progress\">\n <Icon icon=\"refresh\" size=\"small\" />\n </div>\n )\n}\n\n/**\n * Linear Progress\n */\nexport const LinearProgress = (props) => {\n\n const { progress= 0, max = 100 } = props\n\n return (\n <div className=\"linear-progress\">\n <progress value={progress} max={max}/>\n </div>\n )\n}","import React, { useState } from 'react'\nimport { Fragment } from 'react'\nimport './tab.css'\n\n/**\n * Tabs\n */\nexport const Tabs = (props) => {\n\n const { children, selected, onChange } = props\n\n const tabs = React.Children.map(children, (child, index) => {\n\n function select() {\n if (onChange) onChange(index)\n }\n\n return React.cloneElement(child, {\n selected: index === selected,\n onSelect: select\n })\n })\n\n return (\n <div class=\"tabs\">\n {tabs}\n <div class=\"tab-filler\" />\n </div>\n )\n}\n\n/**\n * Tab\n */\nexport const Tab = (props) => {\n\n const { label, selected, actions, onSelect } = props\n\n function select() {\n if (onSelect) onSelect()\n }\n\n const style = selected ? \"selected\" : \"\"\n return (\n <div className={`tab ${style}`} onClick={select}>\n {label}\n {actions ? actions : null}\n </div>\n )\n}\n\n/**\n * Stack\n */\n export const Stack = (props) => {\n\n const { selected = 0 } = props\n\n const child = React.Children\n .toArray(props.children)\n .filter((child, index) => index === selected )[0]\n \n return (\n <Fragment>\n {child}\n </Fragment>\n )\n}","import React, { useContext, useEffect, useState } from 'react'\nimport { SiteContext } from '../site/siteContext'\nimport { Icon } from './icon'\nimport { Text } from './text'\nimport './textfield-outlined.css'\nimport './textfield.css'\n\n/**\n * Text Field\n */\nexport const TextField = (props) => {\n\n const site = useContext(SiteContext)\n const { id, type = 'text', label, placeholder, value, outlined, readOnly=false, onChange, onEnter, onClick } = props\n\n function onKeyPress(event) {\n var key = event.charCode ? event.charCode : event.keyCode ? event.keyCode : 0;\n if (key == 13) {\n onEnter()\n }\n }\n\n function change(event) {\n event.stopPropagation()\n event.preventDefault()\n const value = event.target.value\n if (onChange) onChange(id, value)\n }\n\n function focus() {\n if (site) {\n site.changeFocus({ lose: () => {\n // DO NOTHING\n }})\n }\n }\n\n const borderStyle = outlined ? \"textfield-outlined\" : \"textfield\"\n const labelStyle = label ? \"\" : \"no-label\"\n const style = `${labelStyle} ${borderStyle}`\n const labelTxt = <Text>{label}</Text>\n return (\n <div className={`${style}`} onClick={onClick}>\n <input id={id} type={type} placeholder={placeholder} value={value} required onChange={change} onKeyDown={onKeyPress} onFocus={focus} readOnly={readOnly}/>\n <span className=\"bar\"></span>\n { label ? <label>{labelTxt}</label> : null }\n </div>\n )\n}\n\n/**\n * Dropdown\n */\nexport const DropDown = (props) => {\n\n const site = useContext(SiteContext)\n const { id, options = [], value, onChange } = props\n const [open, setOpen] = useState(false)\n const [label, setLabel] = useState()\n\n useEffect(() => {\n if (Array.isArray(options)) {\n const option = options.find(option => option.value === value)\n if (option) setLabel(option.label)\n }\n }, [value])\n\n\n function toggle() {\n if (site) {\n site.changeFocus({ lose: () => {\n setOpen(false) \n }})\n } \n setOpen(!open)\n }\n\n function select(event) {\n const next = event.target.getAttribute(\"value\")\n const option = options.find(option => option.value === next)\n if (onChange) onChange(id, next)\n setLabel(option.label)\n setOpen(false)\n }\n\n return (\n <div className=\"dropdown\">\n <TextField {...props} onClick={toggle} value={label} />\n <Icon icon=\"expand_more\" clickable size=\"small\" action={toggle} />\n {open == true ? (\n <menu>\n <ul onClick={select}>\n {Array.isArray(options) ? options.map(option => <li key={option.value} value={option.value}>{option.label}</li>) : null}\n </ul>\n </menu>\n ) : null}\n </div>\n )\n}\n","import { Fragment, useState } from 'react'\nimport { CheckBox } from './checkbox'\nimport { Icon } from './icon'\nimport { Text } from './text'\nimport { DropDown, TextField } from './textfield'\nimport './table.css'\n\n/**\n * DataTable\n */\nexport const DataTable = (props) => {\n\n const { columns = [], rows = [], onRowSelection, onSort, editable, outlined } = props\n const [sortDir, setSortDir] = useState({})\n\n function multiSort(array, sortObject = {}) {\n\n const sortKeys = Object.keys(sortObject);\n\n if (!sortKeys.length) {\n return array;\n }\n\n const keySort = (a, b, direction) => {\n direction = direction !== null ? direction : 1;\n\n if (a === b) { // If the values are the same, do not switch positions.\n return 0;\n }\n\n // If b > a, multiply by -1 to get the reverse direction.\n return a > b ? direction : -1 * direction;\n };\n\n return array.sort((a, b) => {\n let sorted = 0;\n let index = 0;\n\n // Loop until sorted (-1 or 1) or until the sort keys have been processed.\n while (sorted === 0 && index < sortKeys.length) {\n const key = sortKeys[index];\n\n if (key) {\n const direction = sortObject[key];\n\n sorted = keySort(a[key], b[key], direction);\n index++;\n }\n }\n\n return sorted;\n });\n }\n\n function select(row, event) {\n if (onRowSelection) onRowSelection(row, event)\n }\n\n function sort(dragged, dropped) {\n if (onSort) onSort(dragged, dropped)\n }\n\n const style = outlined ? \"outlined\" : \"\"\n return (\n <div className={`datatable8 ${style}`}>\n <table>\n <thead>\n <tr>\n {columns.map(({ id, label, sortable }) => {\n const sort = sortDir[id] ? sortDir[id] : null\n return (\n <th>\n <Text>{label}</Text>\n {sortable ? <Icon icon=\"arrow_up\" size=\"small\" clickable /> : null}\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody>\n {\n multiSort(rows, sortDir).map(row => (\n <DataTableRow key={row.id} row={row} columns={columns} onSelect={select} onDrop={sort} editable={editable}/>\n ))\n }\n </tbody>\n </table>\n </div>\n )\n}\n\n/**\n * DataTable Row\n */\nconst DataTableRow = (props) => {\n const { row, columns = [], onSelect, editable } = props\n const [isInfoOpen, toggleInfo] = useState(false)\n const infoIcon = isInfoOpen ? 'expand_more' : 'expand_less'\n\n const isFunction = value => value && (Object.prototype.toString.call(value) === \"[object Function]\" || \"function\" === typeof value || value instanceof Function);\n\n return (\n <Fragment>\n <tr onClick={ev => onSelect(row, ev)}>\n {columns.map(column => <DataTableCell row={row} column={column} cell={row[column.id]} editable={editable}/>)}\n {row.info ? <Icon icon={infoIcon} clickable action={() => toggleInfo(!isInfoOpen)} /> : null}\n </tr>\n {row.info && isInfoOpen ? (\n <tr className=\"table-row-info\">\n {isFunction(row.info) ? row.info() : row.info}\n </tr>\n ) : null}\n </Fragment>\n )\n}\n\n/**\n * DataTable Cell\n */\nconst DataTableCell = ({ row, column, cell, editable }) => {\n\n const render = (type) => {\n const { id, disabled = false, min, max, onChange, options } = column\n if (editable && onChange) {\n switch (type) {\n case \"ICON\": return <Icon icon={cell} />\n case \"BOOLEAN\": return <CheckBox id={id} value={cell} onChange={(id, value) => onChange(row.id, id, value)} disabled={disabled} />\n case \"Boolean\": return <CheckBox id={id} value={cell} onChange={(id, value) => onChange(row.id, id, value)} disabled={disabled} />\n case \"SELECTION\": return <DropDown id={id} value={cell} placeholder=\"--Select--\" options={options} onChange={(id, value) => onChange(row.id, id, value)} />\n case \"CHECK\": return <CheckBox id={id} value={cell} onChange={(id, value) => onChange(row.id, id, value)} disabled={row.disabled} />\n case \"CHECKABLE\": return cell && cell.value ? <CheckBox id={id} value={cell.checked || false} label={cell.value} onChange={(id, checked) => onChange(row.id, id, cell.value, checked, cell)} /> : ''\n case \"TEXTFIELD\": return <TextField id={id} value={cell} onChange={(id, value) => onChange(row.id, id, value)} />\n case \"String\": return <StringCellEditor id={id} value={cell} options={options} onChange={(id, value) => onChange(row.id, id, value)} />\n case \"Number\": return <TextField id={id} type=\"number\" value={cell} min={min} max={max} onChange={(id, value) => onChange(row.id, id, value)} />\n default: return cell\n }\n } else {\n switch (type) {\n case \"ICON\": return <Icon icon={cell} />\n case \"Boolean\": return <BooleanCellViewer id={id} value={cell} />\n case \"String\": return <StringCellViewer id={id} value={cell} options={options} />\n default: return cell\n }\n }\n }\n\n return (\n <td className={column.id}>{render(column.type)}</td>\n )\n}\n\n/**\n * Boolean Cell Viewer\n */\nconst BooleanCellViewer = ({ id, value = false }) => {\n const icon = value === true ? \"check_box\" : \"check_box_outline_blank\"\n return <Icon icon={icon} />\n}\n\n/**\n * String Cell Viewer\n */\nconst StringCellViewer = ({ id, value, options }) => {\n const option = options ? options.find( o => o.value === value) : null\n const text = option ? option.label : value\n return (<div className=\"field-editor string-editor\">{text}</div>)\n}\n\n/**\n * String Cell Editor\n */\nexport const StringCellEditor = ({ id, value = '', options, onChange }) => {\n\n function change(id, value) {\n if (onChange) onChange(id, value)\n }\n\n return (\n <div className='field-editor string-editor'>\n {options ?\n <DropDown outlined id={id} value={value} onChange={change} options={options} />\n : <TextField outlined id={id} value={value} onChange={change} />\n }\n </div>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Icon } from './icon';\nimport { Text } from './text';\nimport './tokenfield.css'\n\n/**\n * Token Field\n */\nexport const TokenField = ({ id, label, init, onChange }) => {\n const mounted = useRef(false)\n const [value, setValue] = useState()\n const [tokens, setTokens] = useState(init)\n\n useEffect(() => {\n if (mounted.current) {\n if (onChange) {\n if (tokens) onChange(id, tokens)\n }\n } else {\n mounted.current = true\n }\n }, [tokens])\n\n function remove(index) {\n const next = tokens.slice()\n next.splice(index, 1)\n setTokens(next)\n }\n\n function change(event) {\n const value = event.target.value\n setValue(value)\n }\n\n function onEnter(event) {\n if (event.key === 'Enter') {\n event.preventDefault()\n event.stopPropagation()\n const token = event.target.value\n const next = tokens.concat(token)\n setTokens(next)\n setValue('')\n }\n\n if (value === '' && tokens.length> 0 && event.key === 'Backspace') {\n const next = tokens.slice(0, -1)\n setTokens(next)\n }\n }\n\n return (\n <div className='tokenField'>\n <label>{label}</label>\n {tokens.map((text, index) => (\n <Token text={text} onDelete={() => remove(index)} />\n ))}\n <input type='text' value={value} onChange={change} onKeyDown={onEnter} />\n </div>\n )\n}\n\n/**\n * Token\n */\nconst Token = ({ text, onDelete }) => {\n return (\n <div className='token'>\n <Text use='caption' tag='div'>\n {text}\n </Text>\n <Icon icon='close' clickable action={onDelete} size=\"small\"/>\n </div>\n )\n}\n","import React from 'react'\nimport { Icon } from './icon'\nimport './tree.css'\n\n/**\n * Tree\n */\nexport const Tree = ({ nodes = [], children }) => {\n return (\n <div className=\"tree\">\n {nodes}\n {children}\n </div>\n )\n}\n\n/**\n * Tree Node\n */\nexport const TreeNode = ({ icon = 'folder', label, tooltip, open=false, children, actions }) => {\n return (\n <details className=\"tree-node\" open={open}>\n <summary className=\"tree-item\">\n { icon ? <Icon icon={icon} size=\"small\" small /> : null }\n <div className=\"label\">{label}</div>\n <div className=\"actions\">{actions}</div>\n </summary>\n {children}\n </details>\n )\n}\n\n/**\n * Tree Item\n */\nexport const TreeItem = ({ id, icon = 'description', label, actions, onSelect }) => {\n\n function select() {\n if (onSelect) onSelect(id)\n }\n\n return (\n <div className=\"tree-item final\" onClick={select}>\n <Icon icon={icon} size=\"small\" small />\n <div className=\"label\">{label}</div>\n <div className=\"actions\">{actions}</div>\n </div>\n )\n} ","import React, { useState, useEffect } from 'react'\nimport './page.css'\nimport './layouts.css'\n\n/**\n * Page Context\n */\nexport const PageContext = React.createContext({})\n\n/**\n * Page Provider\n */\nexport const PageProvider = ({ context = {}, children }) => {\n \n const [pageCtx, setPageCtx] = useState(context)\n\n return (\n <PageContext.Provider value={[pageCtx, setPageCtx]}>\n {children}\n </PageContext.Provider>\n )\n}\n\n/**\n * Page\n */\nexport const Page = (props) => {\n const { children, layout = \"simple\", context = {} } = props\n return (\n <PageProvider context={context}>\n <article className={`page6 ${layout}`}>\n {children}\n </article>\n </PageProvider>\n )\n}\n","import React, { Children, Fragment, useState, useContext, useEffect } from 'react'\nimport { Icon } from '../html/icon'\nimport { Tabs, Tab } from '../html/tab'\nimport { Header } from '../html/header'\nimport { Page } from './page'\nimport './site.css'\nimport { SiteContext } from './siteContext'\n\n\n\n/**\n * Site Provider\n */\nexport const SiteProvider = ({ children, siteLang, siteDictionary, showConsole }) => {\n\n const [lang, setLang] = useState(siteLang)\n const [dictionary, setDictionary] = useState(siteDictionary)\n const [sideNav, setSideNav] = useState('max')\n const [showNav, setShowNav] = useState(false)\n const [info, setInfo] = useState(null)\n const [console, setConsole] = useState(false)\n const [page, setPage] = useState()\n const [dialog, setDialog] = useState()\n const [preview, setPreview] = useState()\n const [breadcrumb, setBreadcrumb] = useState()\n const [focused, setFocused] = useState()\n\n const value = {\n\n lang,\n setLang,\n\n dictionary,\n setDictionary,\n\n focused,\n changeFocus: (next) => {\n if (focused) focused.lose()\n setFocused(next)\n },\n\n sideNav,\n setSideNav,\n\n showNav,\n setShowNav,\n\n info,\n openInfo: (info) => { setInfo(info) },\n closeInfo: () => { setInfo(null) },\n\n console,\n toggleConsole: () => { setConsole(!console) },\n\n breadcrumb,\n setBreadcrumb,\n\n page,\n goto: (id) => { setPage(id) },\n\n dialog,\n openDialog: (dialog) => { setDialog(dialog) },\n closeDialog: () => { setDialog(null) },\n\n preview,\n openPreview: (preview) => { setPreview(preview) },\n closePreview: () => { setPreview(null) }\n\n }\n\n return (\n <SiteContext.Provider value={value}>\n {children}\n </SiteContext.Provider>\n )\n}\n\n/**\n * Site\n */\nexport const Site = ({ icon, logo, title, toolbar, children, init, min, lang, dictionary }) => {\n return (\n <SiteProvider siteLang={lang} siteDictionary={dictionary}>\n <div className=\"site6\">\n <SiteHeader icon={icon} />\n <SiteToolBar >{toolbar}</SiteToolBar>\n <SiteMenu logo={logo} title={title} min={min} >{children}</SiteMenu>\n <SitePage init={init}>\n {children}\n <Page id=\"EMPTY\">EMPTY</Page>\n </SitePage>\n <SiteAside />\n <SiteConsole />\n <SiteDialog />\n <SitePreview />\n </div>\n </SiteProvider>\n )\n}\n\n/**\n * Site Header\n */\nconst SiteHeader = (props) => {\n const { icon = \"equalizer\", title } = props\n return (\n <Header icon={icon} title={title} />\n )\n}\n/**\n * Site ToolBar\n */\nconst SiteToolBar = ({ children }) => {\n const context = useContext(SiteContext)\n const { breadcrumb } = context\n return (\n <nav>\n {children}\n </nav>\n )\n}\n\n/**\n * Site Aside\n */\nconst SiteAside = () => {\n const context = useContext(SiteContext)\n return context.info ? (\n <aside>\n {context.info}\n </aside>\n ) : ''\n}\n\n/**\n * SiteMenu\n */\nconst SiteMenu = ({ logo, title, children, min }) => {\n\n const context = useContext(SiteContext)\n const { sideNav, showNav } = context\n const toggleIcon = sideNav === 'max' ? 'chevron_left' : 'chevron_right'\n\n useEffect(() => {\n if (min) context.setSideNav('min')\n }, [])\n\n const goto = (id) => {\n context.setShowNav(false)\n context.goto(id)\n }\n const sections = children ?\n Children.toArray(children).reduce((sections, page) => {\n const section = page.props ? page.props.section : '...'\n if (!sections[section]) sections[section] = []\n const { id, icon, title } = page.props\n if (title) sections[section].push({ id, icon, title })\n return sections\n }, {}) : {}\n\n return (\n <menu className={`min ${showNav ? 'show' : ''}`}>\n <main >\n {Object.keys(sections).map(title => (\n <Fragment key={title}>\n {sections[title].map(({ id, icon = 'info', title }) => {\n return (<Icon key={id} icon={icon} clickable checked={id === context.page} action={() => goto(id)} />)\n })}\n <div className=\"section-divider\" ></div>\n </Fragment>\n ))}\n </main>\n </menu>\n )\n}\n\n/**\n * SitePage\n */\nconst SitePage = ({ children, init }) => {\n const context = useContext(SiteContext)\n const { page } = context\n useEffect(() => {\n if (init) {\n context.goto(init)\n } else {\n context.goto(\"EMPTY\")\n }\n }, [])\n return (\n <main>\n {React.Children.toArray(children).filter(child => child.props ? child.props.id === page : false)}\n </main>\n )\n}\n\n/**\n * Site Dialog\n */\nconst SiteDialog = () => {\n const context = useContext(SiteContext)\n return context.dialog ? context.dialog : ''\n}\n\n/**\n * Site Preview\n */\nconst SitePreview = () => {\n const context = useContext(SiteContext)\n return context.preview ? (\n <div className=\"site-preview\" >\n {context.preview}\n </div>\n ) : ''\n}\n\n/**\n * Site Console\n */\nconst SiteConsole = () => {\n const context = useContext(SiteContext)\n return context.console ? (\n <footer className=\"site-console\" >\n <Header>\n <Tabs>\n <Tab label=\"Console\" />\n </Tabs>\n </Header>\n <main>\n\n </main>\n </footer>\n ) : ''\n}","import { Fragment, useContext } from 'react'\nimport { SiteContext } from './siteContext'\nimport { MenuIcon, Text } from '../html'\nimport './dialog.css'\n\n/**\n * Dialog\n * \n * <Dialog title={title} open={true} onAction={onAction} actions={actions}>\n */\nexport const Dialog = (props) => {\n const site = useContext(SiteContext)\n const { icon, title = \"Dialog\", children, onAction, actions } = props\n \n function close() {\n site.closeDialog()\n }\n \n function prevent(e) {\n e.preventDefault()\n e.stopPropagation()\n }\n \n return (\n <Fragment>\n <div className=\"overlay\" />\n <div className=\"dialog\" onClick={close}>\n <div className=\"dialog-panel\" onClick={prevent}>\n <header>\n {icon ? <MenuIcon icon={icon} /> : null}\n <Text>{title}</Text>\n </header>\n <main>\n {children}\n </main>\n <footer>\n {actions}\n </footer>\n </div>\n </div>\n </Fragment>\n )\n}","/**\n * TYPES\n */\nexport const TYPES = {\n STRING: 'String',\n NUMBER: 'Number',\n DATE: 'Date',\n BOOLEAN: 'Boolean',\n ARRAY: 'Array',\n ENTITY: 'Object',\n FUNCTION: 'Function',\n EMAIL: 'String'\n}\n\n/**\n * CHECK\n */\nexport const CHECK = Object.values(TYPES).reduce((obj, name) => {\n obj['is' + name] = x => toString.call(x) == '[object ' + name + ']';\n return obj;\n}, {});\n\n/**\n * Content Type\n */\nexport class ContentType {\n\n constructor(schema) {\n this._schema = schema\n }\n\n checkType({ type, item }, data) {\n let valid = true\n let validChildren = true\n if (item) {\n const child = new ContentType(item)\n switch (type) {\n case TYPES.ARRAY:\n valid = CHECK['is' + type](data)\n validChildren = data.every(element => child.validate(element))\n break\n case TYPES.ENTITY:\n valid = CHECK['is' + type](data)\n validChildren = child.validate(data)\n break\n case TYPES.NUMBER:\n valid = CHECK['is' + type](data.value)\n validChildren = true\n break\n default:\n valid = true\n validChildren = true;\n }\n }\n return valid && validChildren\n }\n\n /**\n * Validate entity data\n * - Inspect required attributes only\n * - Check attributes type\n */\n validate(data) {\n const attributes = Object.entries(this._schema)\n return attributes\n .filter(([name, attr]) => attr.required === true)\n .every(([name, attr]) => data[name] !== undefined ? this.checkType(attr, data[name]) : false)\n }\n\n /**\n * Content Type Form\n */\n form(data) {\n\n const entries = Object.entries(this._schema)\n\n const form = entries.reduce((form, [id, field]) => {\n form[id] = Object.assign({}, field, { value: data[id] })\n return form\n }, {})\n\n return form\n }\n\n /**\n * Content Type Sections\n */\n sections(data) {\n\n const form = this.form(data)\n const fields = Object.values(form)\n const sections = fields.reduce((sections, field) => {\n const { section } = field\n const title = section ? section : ''\n if (!sections.hasOwnProperty(title)) sections[title] = { title, fields: [] }\n sections[title].fields.push(field)\n return sections\n }, {});\n\n return Object.values(sections)\n }\n\n /**\n * value \n */\n value(data) {\n\n const fields = Object.entries(this._schema)\n const next = fields.reduce((next, [name, field]) => {\n\n const { type, item } = field\n const entryData = data ? data[name] : null\n\n switch (type) {\n\n case TYPES.STRING:\n next[name] = entryData || field.default\n break;\n\n case TYPES.NUMBER:\n next[name] = entryData || field.default\n break;\n\n case TYPES.BOOLEAN:\n next[name] = entryData || field.default\n break\n\n case TYPES.ENTITY:\n const child1 = new ContentType(item)\n next[name] = child1.value(entryData)\n break;\n\n case TYPES.ARRAY:\n if (item === TYPES.STRING) {\n next[name] = entryData ? entryData : []\n } else {\n const child2 = new ContentType(item)\n next[name] = entryData ? entryData.map(data2 => child2.value(data2)) : []\n }\n break;\n\n default:\n next[name] = field\n break;\n\n }\n\n return next\n\n }, {})\n\n return next\n }\n}\n\n\n/**\n * Content\n */\nexport class Content {\n\n constructor(type, value) {\n this.type = type\n this._type = new ContentType(type)\n this._value = value\n }\n\n isValid() {\n return this._type.validate(this._value)\n }\n\n value() {\n return this._type.value(this._value)\n }\n\n form() {\n return this._type.form(this._value)\n }\n\n sections() {\n return this._type.sections(this._value)\n }\n\n update(value) {\n this._value = value\n }\n}","import React from 'react';\nimport { TYPES } from './ContentType';\nimport { TextField, CheckBox, DropDown, Form } from '../html';\n\n/**\n * Content Form \n */\nexport const ContentForm = ({ content, columns = 1, filter, rules, onChange }) => {\n\n const form = content.form()\n console.log(form)\n\n const fields = Object.keys(form)\n .map(key => form[key])\n .filter( field => filter ? filter(field) : true)\n\n console.log(fields)\n \n return (\n <Form className=\"content-form\" columns={columns} outlined={true} onChange={onChange}>\n { fields.map(field => <ContentFormField key={field.id} {...field} />)}\n </Form>\n )\n}\n\n/**\n * Content Form Field\n */\nconst ContentFormField = (props) => {\n const { type, label } = props\n switch (type) {\n case TYPES.BOOLEAN:\n return <CheckBox key={props.id} {...props} />\n case TYPES.NUMBER:\n return <NumberField key={props.id} {...props} />\n default:\n return <StringField key={props.id} {...props} />\n }\n}\n\n/**\n* String Editor\n*/\nexport const StringField = ({ id, type, label, options, textarea, required = false, value, hidden, onChange, outlined }) => {\n\n const fieldTypes = {\n [TYPES.NUMBER] : 'number',\n [TYPES.DATE] : 'date',\n }\n\n function buildOptions() {\n const opts = typeof options === 'function' ? options() : options\n return opts\n }\n\n const fieldType = fieldTypes[type] || 'text'\n\n if (options) return <DropDown key={id} id={id} label={label} value={value} onChange={onChange} options={buildOptions()} outlined={outlined} />\n return <TextField key={id} id={id} type={fieldType} label={label} value={value} onChange={onChange} required={required} outlined={outlined} textarea={textarea}/>\n}\n\n/**\n* Number Editor\n*/\nexport const NumberField = ({ id, label, options, required = false, value, onChange, outlined }) => {\n\n function change(id, value) {\n const num = !!+value ? +value : value\n if (onChange) onChange(id, num)\n }\n\n if (options) return <DropDown key={id} id={id} label={label} value={value} onChange={change} options={options} outlined={outlined} />\n return <TextField key={id} id={id} type=\"number\" label={label} value={value} onChange={change} required={required} outlined={outlined} />\n}","import React, { Fragment, useState } from 'react';\nimport { Button, CheckBox, DataTable, DropDown, Icon, Stack, Tab, Tabs, Text, TextField, Tree, TreeNode, TreeItem, TokenField, Property } from '../html';\nimport { Content, TYPES } from './ContentType';\nimport './ContentEditor.css';\n\n/**\n * Content Editor\n */\nexport const ContentEditor = ({ content, filter, onChange }) => {\n\n function change(id, value) {\n const nextValue = Object.assign({}, content.value(), { [id]: value })\n if (onChange) onChange(nextValue)\n }\n\n const sections = content.sections()\n\n return (\n <div className='content-editor'>\n {sections.map((section) => {\n const { title, fields } = section\n return (\n <section key={title}>\n <header>{title}</header>\n <main>\n {fields\n .filter(field => field.id !== 'id')\n .filter(field => filter ? filter(field, content) : true)\n .map((field) => <FieldEditor key={field.id} field={field} onChange={change} />)}\n </main>\n </section>\n )\n })}\n </div>\n )\n}\n\n/**\n * Tabbed Content Editor\n */\nexport const TabbedContentEditor = ({ content, filter, grouped = false, onChange }) => {\n\n const [tab, setTab] = useState(0)\n\n function change(id, value) {\n const nextValue = Object.assign({}, content.value(), { [id]: value })\n if (onChange) onChange(nextValue)\n }\n\n function changeTab(tab) {\n setTab(tab)\n }\n\n function group(section) {\n const { fields = [] } = section\n const groups = fields.reduce((groups, field) => {\n const groupName = field.group || \"\"\n const group = groups[groupName] || { name: groupName, fields: [] }\n group.fields.push(field)\n groups[groupName] = group\n return groups\n }, {})\n return Object.values(groups)\n }\n\n const sections = content.sections()\n\n return (\n <div className='content-editor tabbed'>\n <Tabs selected={tab} onChange={changeTab}>\n {sections.map(section => <Tab label={section.title} />)}\n </Tabs>\n <Stack selected={tab}>\n {sections.map(section => {\n const { title, fields } = section\n return (\n <section key={title}>\n <nav>\n &nbsp;\n </nav>\n <main>\n {\n grouped ?\n group(section)\n .map(group => {\n return (\n <Fragment>\n {group.name.length > 0 ? <div className=\"group-caption\">{group.name}</div> : null}\n {\n group.fields\n .filter(field => field.id !== 'id')\n .filter(field => filter ? filter(field) : true)\n .map((field) => <FieldEditor key={field.id} field={field} onChange={change} content={content} />)\n }\n </Fragment>\n )\n })\n :\n fields\n .filter(field => field.id !== 'id')\n .filter(field => filter ? filter(field) : true)\n .map((field) => <FieldEditor key={field.id} field={field} onChange={change} content={content} />)\n }\n </main>\n </section>\n )\n })}\n </Stack>\n </div>\n )\n}\n\n/**\n * TreededContentEditor \n */\nexport const TreededContentEditor = ({ content, filter, onChange }) => {\n\n\n const value = content.value()\n const nodes = Object.values(content.type).filter(field => field.type === TYPES.ARRAY)\n const [selected, setSelected] = useState()\n\n function select(index, field, node) {\n const item = new Content(node.item, field)\n setSelected({ index, item, node, value: value[node.id] })\n }\n\n function change(form) {\n const nextNode = selected.value.slice()\n nextNode[selected.index] = form\n const nextContent = Object.assign({}, value, { [selected.node.id]: nextNode })\n if (onChange) onChange(nextContent)\n }\n\n function add() {\n //TODO\n }\n\n return (\n <div className=\"content-editor treeded-editor\">\n <menu>\n <header>\n <Text use='caption'>Tree Editor</Text>\n </header>\n <Tree>\n {nodes.map((node, index) => (\n <TreeNode icon=\"folder\" label={node.label} actions={[<Icon small icon=\"add\" clickable action={add} />]}>\n {\n value[node.id] ? value[node.id].map((field, index) => <TreeItem icon={field.icon || \"description\"} label={field.name || field.label} onSelect={() => select(index, field, node)} />) : null\n }\n </TreeNode>\n ))}\n </Tree>\n </menu>\n <div>\n {selected ? <TabbedContentEditor content={selected.item} onChange={change} /> : \"select\"}\n </div>\n </div>\n )\n}\n\n/**\n * FieldEditor\n */\nexport const FieldEditor = ({ field, onChange, content, outlined = false }) => {\n const { id, type, item, label, editable, options } = field\n\n function change(id, value) {\n if (onChange) onChange(id, value)\n }\n\n function renderField() {\n const value1 = field.value ? field.value : field.default\n switch (type) {\n case TYPES.ENTITY:\n return <EntityEditor field={field} value={value1} onChange={change} />\n case TYPES.STRING:\n return <StringEditor outlined={outlined} field={field} value={value1} onChange={change} content={content} />\n case TYPES.BOOLEAN:\n return <CheckBox outlined id={id} label={label} value={value1} onChange={change} />\n case TYPES.DATE:\n return <TextField outlined={outlined} id={id} type='date' label={label} value={value1} onChange={change} disabled={editable} />\n case TYPES.NUMBER:\n return <NumberEditor outlined={outlined} field={field} value={value1} onChange={change} />\n case TYPES.ARRAY:\n return item === TYPES.STRING ?\n options ? <MultiSelectionEditor content={content} field={field} value={value1} onChange={change} /> : <ListEditor field={field} value={value1} onChange={change} />\n : <CollectionEditor field={field} value={value1} onChange={change} />\n default:\n return <div>{label}</div>\n }\n }\n return renderField()\n}\n\n/**\n * Entity Editor\n */\nconst EntityEditor = ({ field, value = {}, onChange }) => {\n const { id, item, label } = field\n const content = new Content(item, value)\n\n function change(fid, value) {\n const next = Object.assign({}, content.value(), { [fid]: value })\n if (onChange) onChange(id, next)\n }\n\n const form = content.form()\n const fields = Object.keys(form).map((key) => form[key])\n\n return (\n <div className='entity-editor'>\n <header>\n <Text use='caption'>{label}</Text>\n </header>\n <main>\n {fields.map((field) => (\n <FieldEditor key={field.id} field={field} onChange={change} />\n ))}\n </main>\n </div>\n )\n}\n\n/**\n * String Editor\n */\nexport const StringEditor = ({ field, value = '', onChange, content, outlined }) => {\n const { id, label, options, editable = true, filter } = field\n\n function change(id, value) {\n if (onChange) onChange(id, value)\n }\n\n function buildOptions() {\n const opts = typeof options === 'function' ? options(field, content) : options\n return opts\n }\n\n return (\n <div className='field-editor string-editor'>\n {\n editable ?\n options ? (\n <DropDown outlined={outlined} id={id} label={label} value={value} onChange={change} options={buildOptions()} />\n ) : (\n <TextField outlined={outlined} id={id} label={label} value={value} onChange={change} />\n ) : (\n <TextField outlined={outlined} id={id} label={label} value={value} onChange={change} readOnly={true} />\n )\n }\n </div>\n )\n}\n\n/**\n * Number Editor\n */\nconst NumberEditor = ({ field, value, onChange }) => {\n const { id, label, editable = true } = field\n\n function change(id, value) {\n if (onChange) onChange(id, value)\n }\n\n const val = value || field.default\n const min = field.min\n const max = field.max\n const disabled = !editable\n\n return (\n <div className='field-editor number-editor'>\n <TextField outlined id={id} label={label} type='NUMBER' value={val} max={max} min={min} onChange={change} disabled={disabled} />\n </div>\n )\n}\n\n/**\n * List Editor\n */\nexport const ListEditor = ({ field, value = [], onChange }) => {\n\n const { label } = field\n\n function change(id, value) {\n if (onChange) onChange(id, value)\n }\n\n return (\n <div className=\"list-editor\">\n <TokenField id={field.id} label={label} init={value} onChange={change} />\n </div>\n )\n}\n\n/**\n * Multi Selection Editor\n */\nexport const MultiSelectionEditor = ({ field, value = [], content, onChange }) => {\n\n const { id, label, options } = field\n\n function change(v) {\n const index = value.indexOf(v)\n if (index >= 0) {\n value.splice(index, 1)\n } else {\n value.push(v)\n }\n if (onChange) onChange(id, value)\n }\n\n function buildOptions() {\n const opts = typeof options === 'function' ? options(field, content) : options\n return opts\n }\n\n return (\n <div className=\"multiselection-editor\">\n <label>{label}</label>\n {buildOptions().map(option => {\n const checked = value.includes(option.value)\n return <CheckBox value={checked} label={option.label} onChange={() => change(option.value)} />\n })}\n </div>\n )\n\n}\n\n/**\n * Collection Editor\n */\nexport const CollectionEditor = ({ field, value = [], onChange }) => {\n\n const { id, item, label, Feeder, Renderer, Adder = true, editable = true } = field\n\n function add(rows) {\n if (onChange) {\n const next = value.concat(rows)\n onChange(id, next)\n }\n }\n\n function remove(index) {\n if (onChange) {\n const next = value.filter((item, i) => i !== index)\n onChange(id, next)\n }\n }\n\n function change(index, cellId, cellValue) {\n if (onChange) {\n const next = value.slice()\n next[index][cellId] = cellValue\n onChange(id, next)\n }\n }\n\n const columns = Object.values(item).map((item) => ({ ...item, onChange: change }))\n columns.push({ id: 'actions', label: 'Actions' })\n\n const rows = value.map((item, index) => ({\n ...item,\n id: index,\n actions: [\n <Icon icon='delete' clickable action={() => remove(index)} small />\n ]\n }))\n\n const table = { columns, rows }\n\n return (\n <div className='collection-editor'>\n <header>\n <Text use='caption'>{label}</Text>\n <div className=\"actions\" >\n {Feeder ? <Feeder onAdd={add} /> : null}\n </div>\n </header>\n {Renderer ? <Renderer field={field} value={value} onRemove={remove} onChange={onChange} /> : <DataTable {...table} editable={editable} />}\n <footer>\n {Adder ? <CollectionAdder item={item} onAdd={add} /> : null}\n </footer>\n </div>\n )\n}\n\n/**\n * Collection Adder\n */\nconst CollectionAdder = ({ item, onAdd }) => {\n\n const [edit, setEdit] = useState(false)\n const [form, setForm] = useState({})\n\n function toggle() {\n setEdit(!edit)\n }\n\n function change(index, cellId, cellValue) {\n if (onAdd) {\n const next = Object.assign({}, form, { [cellId]: cellValue })\n setForm(next)\n }\n }\n\n function save() {\n if (onAdd) onAdd([form])\n toggle()\n }\n\n const columns = Object.values(item).map((item) => ({ ...item, type: 'String', onChange: change }))\n columns.push({ id: 'actions', label: '' })\n const rows = [{\n actions: [<Icon icon=\"done\" clickable action={save} />, <Icon icon=\"close\" clickable action={toggle} />]\n }]\n rows[0] = Object.assign({}, form, rows[0])\n const table = { columns, rows }\n\n return (\n <div className=\"collection-adder\">\n {edit ? <DataTable {...table} editable={true} /> : <Button icon='add' label='Add' action={toggle} />}\n </div>\n )\n}","import React, { Fragment, useState, useContext, useMemo } from 'react';\nimport { Dialog } from '../site'\nimport { SiteContext } from '../site/siteContext'\nimport { Text, Button } from '../html';\nimport { Content } from './ContentType'\nimport { ContentEditor } from './ContentEditor'\n\n/**\n * Edit Content Dialog\n */\nexport const EditContentDialog = ({ label, type, value = {}, filter, validator, onOK, onError }) => {\n\n const site = useContext(SiteContext);\n const [form, setForm] = useState(value)\n const [isValid, setValid] = useState(false)\n const [errors, setErrors] = useState([])\n\n function change(form) {\n setForm(form)\n if (validator) {\n const { validation, errors = [] } = validator(form)\n setValid(validation)\n setErrors(errors)\n } else {\n setValid(true)\n }\n }\n\n function onAction(action) {\n if (action === 'OK' && onOK) onOK(Object.assign({}, value, form))\n site.closeDialog();\n }\n\n const actions = (\n <Fragment>\n <Button label=\"CLOSE\" action={() => onAction(\"CLOSE\")} />\n <div className=\"expand\" />\n <Button label=\"OK\" action={() => onAction(\"OK\")} disabled={!isValid} raised />\n </Fragment>\n )\n\n const title = <Text use=\"headline6\">{label}</Text>\n const content = new Content(type, form)\n return (\n <Dialog title={title} open={true} onAction={onAction} actions={actions}>\n <ContentEditor content={content} onChange={change} filter={filter} />\n {errors.map(error => <Text use=\"overline\" tag=\"div\" className=\"error\">{error}</Text>)}\n </Dialog>\n )\n}","import equal from 'deep-equal'\nimport { Fragment, useContext, useEffect, useRef, useState } from 'react'\nimport { HTTPClient, Session } from '../http'\nimport { PageContext } from '../site'\nimport { Button, Header, Icon, List, Menu, MenuIcon, MenuItem, Text, Tree, TreeItem, TreeNode } from '../html'\nimport { Content } from './ContentType'\nimport { ContentEditor, TabbedContentEditor, TreededContentEditor } from './ContentEditor'\nimport { EditContentDialog } from './EditContentDialog'\nimport { SiteContext } from '../site/siteContext'\nimport \"./CollectionPage.css\"\n\n\nconst http = HTTPClient(window.API || process.env.REACT_APP_API, Session);\n\n/**\n * Collection Page\n */\nexport const CollectionPage = (props) => {\n\n const site = useContext(SiteContext)\n const { id = \"collection\", icon, title, name = \"Collection 1\", schema, url, groupBy, editor, field, autosave = false, delay = 1000, actions, levels } = props\n const [pageContext, setPageContext] = useContext(PageContext)\n const context = CollectionContext(url, field)\n\n useEffect(async () => {\n await context.load()\n setPageContext(context)\n }, [])\n\n async function reload() {\n await pageContext.load()\n setPageContext(Object.assign({}, pageContext))\n }\n\n function add() {\n const onOK = async (form) => {\n await pageContext.create(form);\n setPageContext(Object.assign({}, pageContext))\n }\n site.openDialog(<EditContentDialog label={`Crear ${name}`} type={schema} onOK={onOK} />);\n }\n\n return (\n <Fragment>\n <Header className=\"collection-page\" title={<Text>{title}</Text>}>\n <Button icon=\"add\" label=\"Add\" action={add} />\n <Button icon=\"refresh\" label=\"Reload\" action={reload} />\n {actions}\n </Header>\n <menu className=\"collection-page\">\n <Header title={<Text>Lista de {name}</Text>} >\n </Header>\n {levels ? <CollectionTree levels={levels} /> : <CollectionList groupBy={groupBy} />}\n </menu>\n <main key={id} className=\"collection-page\">\n <CollectionEditor icon={icon} schema={schema} layout={editor} autosave={autosave} delay={delay} />\n </main>\n </Fragment>\n )\n}\n\n/**\n * Collection List\n */\nconst CollectionList = (props) => {\n\n const { groupBy } = props\n const [pageContext, setPageContext] = useContext(PageContext)\n const { all = [] } = pageContext\n\n function clear() {\n pageContext.clear()\n setPageContext(Object.assign({}, pageContext))\n }\n\n async function select(id) {\n clear()\n await pageContext.select(id)\n setPageContext(Object.assign({}, pageContext))\n }\n\n const items = all ? all.map(content => ({\n id: content.id,\n line1: content.name,\n line2: content.description,\n content\n })) : []\n\n return (\n <List items={items} onSelect={select} groupBy={groupBy} />\n )\n}\n\n/**\n * Collection Tree\n */\nconst CollectionTree = (props) => {\n\n const { levels } = props\n const [pageContext, setPageContext] = useContext(PageContext)\n const { all = [] } = pageContext\n\n function clear() {\n pageContext.clear()\n setPageContext(Object.assign({}, pageContext))\n }\n\n async function select(id) {\n clear()\n await pageContext.select(id)\n setPageContext(Object.assign({}, pageContext))\n }\n\n function group(items, by) {\n return items.reduce((nodes, field) => {\n let node = nodes.find(n => n.name === field[by])\n if (!node) {\n let name = field[by]\n node = { name, items: [], field: by }\n nodes.push(node)\n }\n node.items.push(field)\n return nodes\n }, [])\n }\n\n function generateNodes(levels, items) {\n const by = levels[0]\n const nodes = group(items, by)\n if (levels.length > 1) nodes.forEach(node => node.nodes = generateNodes(levels.slice(1), node.items))\n return nodes\n }\n\n function renderNodes(nodes) {\n return nodes.map(node => {\n const title = typeof node.name === 'boolean' ? `${node.field} = ${node.name}` : node.name\n return (\n <TreeNode key={node.name} icon={null} label={title} open={true}>\n {node.nodes ? renderNodes(node.nodes) : node.items.map(item => <TreeItem key={item.id} id={item.id} label={item.name} onSelect={select}>item</TreeItem>)}\n </TreeNode>\n )\n })\n }\n\n const nodes = generateNodes(levels, all)\n return (\n <main>\n <Tree>\n {renderNodes(nodes)}\n </Tree>\n </main>\n )\n}\n\n/**\n * Collection Editor\n */\nconst CollectionEditor = (props) => {\n const [pageContext, setPageContext] = useContext(PageContext)\n const { selected } = pageContext\n const { icon, schema, layout, autosave = false, delay = 1000 } = props\n const timer = useRef(null)\n const [form, setForm] = useState(selected)\n\n useEffect(() => {\n setForm(selected)\n }, [selected])\n\n useEffect(() => {\n if (autosave) {\n clearTimeout(timer.current)\n timer.current = setTimeout(() => {\n if (canSave()) save()\n }, delay)\n }\n }, [form])\n\n function clear() {\n pageContext.clear()\n setPageContext(Object.assign({}, pageContext))\n }\n\n async function remove() {\n await pageContext.remove(selected.id)\n pageContext.clear()\n setPageContext(Object.assign({}, pageContext))\n }\n\n function change(next) {\n setForm(next)\n }\n\n function canSave() {\n const can = !equal(form, selected)\n return can\n }\n\n async function save() {\n console.log('saving.....')\n await pageContext.update(form)\n setPageContext(Object.assign({}, pageContext))\n }\n\n function renderEditor() {\n const content = new Content(schema, form)\n switch (layout) {\n case 'TABBED': return <TabbedContentEditor {...props} content={content} onChange={change} />\n case 'TREEDED': return <TreededContentEditor {...props} content={content} onChange={change} />\n default: return <ContentEditor {...props} content={content} onChange={change} />\n }\n }\n\n return selected && form ? (\n <Fragment>\n <Header icon={icon} title={<Text>{selected.name}</Text>}>\n <Icon icon=\"close\" clickable action={clear} />\n <MenuIcon align=\"alignRight\">\n <Menu>\n <MenuItem label=\"Eliminar\" onSelect={remove} />\n </Menu>\n </MenuIcon>\n {autosave === true ? null : <Button icon=\"save\" label=\"Guardar Cambios\" raised disabled={!canSave()} action={save} />}\n </Header>\n {renderEditor()}\n </Fragment>\n ) : null\n}\n\n/**\n * Collection Context\n */\nexport const CollectionContext = (url, field) => {\n\n const API = CollectionAPI(url)\n\n return {\n\n all: [],\n selected: null,\n\n async load() {\n try {\n const data = await API.all();\n this.all = field ? data[field] : data;\n } catch (error) {\n console.log(error)\n }\n return\n },\n\n select(id) {\n const result = this.all.find(item => item.id === id);\n this.selected = result;\n },\n\n clear() {\n this.selected = null\n },\n\n async create(form) {\n try {\n await API.create(form);\n await this.load();\n } catch (error) {\n console.log(\"CREATE ERROR\", error)\n }\n return\n },\n\n async update(form) {\n try {\n await API.update(form)\n await this.load()\n } catch (error) {\n console.log(error)\n }\n return\n },\n\n async patch(id, form) {\n try {\n await API.patch(id, form)\n await this.load()\n } catch (error) {\n console.log(error)\n }\n return\n },\n\n async updateProperty(id, propertyName, form) {\n try {\n await API.updateProperty(id, propertyName, form)\n await this.load()\n } catch (error) {\n console.log(error)\n }\n return\n },\n\n async remove(id) {\n try {\n await API.remove(id)\n await this.load()\n } catch (error) {\n console.log(error)\n }\n return\n },\n }\n}\n\n/**\n * Collection API\n */\nconst CollectionAPI = (url) => {\n\n return {\n all() {\n return http.GET(url)\n },\n\n find(id) {\n return http.GET(`${url}/${id}`)\n },\n\n create(form) {\n const body = JSON.stringify(form)\n return http.POST(url, body)\n },\n\n update(form) {\n const body = JSON.stringify(form)\n return http.PUT(`${url}/${form.id}`, body)\n },\n\n patch(id, form) {\n const body = JSON.stringify(form)\n return http.PATCH(`${url}/${id}`, body)\n },\n\n updateProperty(id, propertyName, form) {\n const body = JSON.stringify(form)\n return http.PUT(`${url}/${id}/${propertyName}`, body)\n },\n\n remove(id) {\n return http.DELETE(`${url}/${id}`)\n }\n\n }\n}","import React, { useState, useEffect, useRef } from 'react'\nimport { Icon, Text, CircularProgress } from '../html'\n\n/**\n * Component\n */\nexport const UploadArea = (props) => {\n\n const STATES = { 'IDLE': 0, 'RUNNING': 1, 'SUCCESS': 2, 'ERROR': 3 }\n\n const areaElement = useRef()\n const [drag, setDrag] = useState(false)\n\n useEffect(() => {\n const { resumable } = props\n if (resumable && areaElement) resumable.assignDrop(areaElement.current)\n }, [])\n\n const onDragOver = () => {\n setDrag(true)\n }\n\n const onDragLeave = () => {\n setDrag(false)\n }\n\n const { state = STATES.IDLE, label = 'Add file or drop file here...', error } = props\n const dragging = drag === true ? 'drag-over' : ''\n\n return (\n <div className={`upload-area6 ${dragging}`}\n onDragOver={onDragOver}\n onDragLeave={onDragLeave}\n ref={areaElement}\n >\n {state === STATES.IDLE ? <UploadIcon resumable={props.resumable} /> : ''}\n {state === STATES.IDLE ? <label>{label}</label> : ''}\n {state === STATES.RUNNING ? <CircularProgress size=\"xlarge\" /> : ''}\n {state === STATES.SUCCESS ? <Icon icon=\"done_all\" /> : ''}\n {state === STATES.ERROR ? <Text use=\"body1\">{error}</Text> : ''}\n {props.children}\n </div>\n )\n}\n\n/**\n * Component\n */\nconst UploadIcon = ({ resumable }) => {\n\n const iconElement = useRef()\n\n useEffect(() => {\n if (resumable && iconElement) resumable.assignBrowse(iconElement.current)\n }, [])\n\n return (\n <div className=\"upload-icon\" ref={iconElement}>\n <Icon icon=\"folder_open\" clickable/>\n </div>\n )\n}","import React, { useState, useMemo } from 'react'\nimport ResumableJS from 'resumablejs'\nimport { UploadArea } from './UploadArea'\nimport './uploader.css'\n\n/**\n * Uploader\n */\nexport const Uploader = ({ label, target, accept, className, onSuccess, onError, onComplete, errors = [] }) => {\n\n const STATES = { 'IDLE': 0, 'RUNNING': 1, 'SUCCESS': 2, 'ERROR': 3, 'COMPLETED': 4 }\n\n const resumable = useMemo(() => {\n const config = {\n target: target,\n chunkSize: 1 * 1024 * 1024,\n simultaneousUploads: 1,\n testChunks: false,\n throttleProgressCallbacks: 1,\n fileType: accept\n }\n const resumable = new ResumableJS(config)\n resumable.on('fileAdded', onFileAdded)\n resumable.on('fileProgress', onFileProgress)\n resumable.on('fileSuccess', onFileSuccess)\n resumable.on('fileError', onFileError)\n resumable.on('complete', onAllComplete)\n return resumable\n }, [])\n\n const [progress, setProgress] = useState(0)\n const [state, setState] = useState(STATES.IDLE)\n const [error, setError] = useState()\n const [files, setFiles] = useState([])\n\n function onFileAdded(file) {\n files.push(file)\n setFiles(files)\n resumable.upload()\n }\n\n function onFileProgress(file) {\n const progress = file.progress()\n setProgress(progress)\n }\n\n function onFileSuccess(file, message) {\n setState(STATES.SUCCESS)\n if (onSuccess) onSuccess(file, message)\n }\n\n function onFileError(file, message) {\n setError(message)\n setState(STATES.ERROR)\n if (onError) onError(file, message)\n }\n\n function onAllComplete() {\n setState(STATES.IDLE)\n if (onComplete) onComplete(files)\n }\n\n return (\n <div className={`uploader ${className}`}>\n <UploadArea resumable={resumable} state={state} label={label} error={error}/>\n </div>\n )\n}\n","import React, { Fragment } from 'react'\nimport { Icon, Text, LinearProgress } from '../html'\nimport './uploader.css'\n\n/**\n * Upload File\n */\nexport const UploadFile = ({ file, state, progress, error }) => {\n\n const STATES = { 'IDLE': 0, 'RUNNING': 1, 'SUCCESS': 2, 'ERROR': 3 }\n\n const icon = error ? <Icon icon=\"image\" className=\"error\"/> : <Icon icon=\"image\" />\n return state !== STATES.IDLE ? (\n <Fragment>\n\n <div className=\"upload-file\">\n {icon}\n <Text use=\"body1\" tag=\"label\">{file.fileName}</Text>\n {state === STATES.RUNNING ? <LinearProgress progress={progress} /> : ''}\n {state === STATES.RUNNING ? <Icon icon=\"close\" clickable /> : ''}\n {state === STATES.SUCCESS ? <Icon icon=\"done\" /> : ''}\n {state === STATES.ERROR ? <Icon icon=\"error\" /> : ''}\n </div>\n\n { error ? <div className=\"error\"><Text use=\"overline\">{error}</Text></div> : ''}\n\n </Fragment>\n ) : ''\n}","import { Icon } from './icon';\nimport { Text } from './text'\nimport './chip.css'\n\n/**\n * Chip\n */\nexport const Chip = (props) => {\n\n const { id, icon, label, action, outlined, selected, onSelect } = props\n\n function select(event) {\n event.stopPropagation();\n event.preventDefault();\n if (onSelect) onSelect(id)\n }\n\n let style = outlined ? \"outlined\" : \"normal\"\n if (selected) style = `${style} selected`\n return (\n <div className={`chip ${style}`} onClick={select}>\n {icon ? <Icon icon={icon} size=\"small\" /> : null}\n <main><Text>{label}</Text></main>\n {action ? <span className=\"meta\">{action}</span> : null}\n </div>\n )\n}\n\n/**\n * Chips\n */\nexport const Chips = (props) => {\n const { children } = props\n return (\n <div className=\"chips\">\n {children}\n </div>\n )\n}","import React, { Fragment, useContext, useMemo, useState } from 'react';\nimport { Button, Text } from '../html';\nimport { Dialog } from '../site/dialog'\nimport { SiteContext } from '../site/siteContext';\nimport { ContentForm } from './ContentForm';\nimport { Content } from './ContentType';\n\n/**\n * Create Content Dialog\n */\nexport const CreateContentDialog = ({ label, type, validator, onOK, onError, onActionClose = true }) => {\n\n const site = useContext(SiteContext);\n const [form, setForm] = useState({})\n const [isValid, setValid] = useState(false)\n const [errors, setErrors] = useState([])\n\n function change(form, validForm) {\n setForm(form)\n if (validator) {\n const { validation, errors = [] } = validator(form)\n setValid(validForm && validation)\n setErrors(errors) \n } else {\n setValid(validForm)\n }\n }\n \n function onAction(action) {\n if (action === 'OK' && onOK) onOK(form)\n if (action === 'CLOSE' || onActionClose === true) site.closeDialog();\n }\n \n function isRequired(field) {\n const { required = false } = field\n return required \n }\n\n function isOptional(field) {\n const { creation = false } = field\n return creation\n }\n \n const actions = (\n <Fragment>\n <Button label=\"CLOSE\" action={() => onAction(\"CLOSE\")}/>\n <Button label=\"OK\" action={() => onAction(\"OK\")} disabled={!isValid} raised />\n </Fragment>\n )\n \n const title = <Text use=\"headline6\">{label}</Text>\n const content = new Content(type, form)\n return (\n <Dialog title={title} open={true} onAction={onAction} actions={actions}>\n <ContentForm content={content} filter={(field) => isRequired(field) || isOptional(field)} onChange={change} />\n { errors.map ( error => <Text use=\"overline\" tag=\"div\" className=\"error\">{error}</Text> )}\n </Dialog>\n )\n}","import React, { useState } from 'react'\nimport { Icon, Text } from '../../html'\nimport './Kanban.css'\n\n/**\n * Kanban\n */\nexport const Kanban = ({ children }) => {\n return (\n <div className=\"kanban\">\n {children}\n </div>\n )\n}\n\n/**\n * Kanban Column\n */\nexport const KanbanColumn = ({ id, accept = [], icon, title, subtitle, badge, children, minified = false, disabled = false }) => {\n\n const [min, setMin] = useState(minified)\n\n function toggle() {\n setMin(!min)\n }\n\n return min ? (\n <div className={`kanban-column ${id} min`}>\n <main>\n {title}\n </main>\n <footer>\n <Icon icon=\"toggle_off\" onIcon=\"toggle_on\" clickable action={toggle} />\n </footer>\n </div>\n ) : (\n <div className={`kanban-column ${id} ${disabled ? 'disabled' : ''}`}>\n <header>\n <Icon icon={icon} />\n <div className=\"title\">\n <Text use=\"headline6\">{title}</Text>\n <Text className=\"secondary-text\" use=\"body2\">{subtitle}</Text>\n </div>\n <div className=\"badge\" >{badge}</div>\n </header>\n <main>\n {children}\n </main>\n <footer>\n <Icon icon=\"toggle_off\" onIcon=\"toggle_on\" clickable action={toggle} />\n </footer>\n </div>\n )\n}\n\n/**\n * Kanban Card\n */\nexport const KanbanCard = ({ id, type, color, children }) => {\n return (\n <div className={`kanban-card ${color}`} >\n {children}\n </div>\n )\n}","import React, { useState } from 'react'\nimport { Icon , Button, Text, TextField } from '../../html'\nimport './LoginBox.css'\n\n/**\n * Login Box\n */\nexport const LoginBox = ({\n logo, title,\n userLabel = \"User\",\n passwordLabel = \"Password\",\n loginLabel = \"Log In\", onOK,\n forgotLabel = \"Forgot Password ?\", onForgot,\n message,\n loading\n}) => {\n\n const [user, setUser] = useState('')\n const [password, setPassword] = useState('')\n\n function canOK() {\n return user && user.length > 0 && password && password.length > 0\n }\n\n function ok(forcedPwd) {\n if (onOK && canOK()) onOK(user, forcedPwd || password)\n }\n\n function canForgot() {\n return user && user.length > 0\n }\n\n function forgot() {\n if (onForgot) onForgot(user)\n }\n\n function tx(txt) {\n return <Text>{txt}</Text>\n }\n\n function changeUser(id, value) {\n setUser(value)\n }\n \n function changePassword(id, value) {\n setPassword(value)\n }\n\n return (\n <div className=\"login-box\">\n <header>\n {logo ? <img src={logo} /> : ''}\n <div className=\"title\"><Text>{title}</Text></div>\n </header>\n <main>\n <TextField label={tx(userLabel)} value={user} onChange={changeUser} onEnter={ok} outlined />\n <TextField label={tx(passwordLabel)} value={password} onChange={changePassword} onEnter={ok} type=\"password\" outlined />\n </main>\n <footer>\n { onForgot ? <Button label={tx(forgotLabel)} action={forgot} disabled={!canForgot()}/> : null }\n { loading ? <div className=\"load-box\"><Icon icon=\"refresh\" /></div> : <Button label={tx(loginLabel)} action={ok} disabled={!canOK()} raised /> }\n { message ? <div className=\"message\"><Text>{message}</Text></div> : null}\n </footer>\n </div>\n )\n}","import './property.css'\n\n/**\n * Property\n */\nexport const Property = (props) => {\n\n const { name, value} = props\n\n return (\n <div className=\"property\">\n <div className=\"property-name\">{name}</div>\n <div className=\"property-value\">{value}</div>\n </div>\n )\n}","import React from 'react'\nimport { Text } from './text';\nimport './radio.css'\n\n/**\n * Radio Button\n */\nexport const RadioButton = (props) => {\n\n const { id, name, label, placeholder, value, onChange } = props\n\n function change(event) {\n const value = event.target.value\n if (onChange) onChange(id, value)\n }\n\n const labelTxt = <Text>{label}</Text>\n return (\n <div className=\"radio\">\n <input id={id} name={name} type=\"radio\" placeholder={placeholder} value={value} onClick={change} />\n <span class=\"checkmark\" />\n <label htmlFor={id}>{labelTxt}</label>\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport { TextField, Text, Button } from '../../html'\nimport './ResetPasswordBox.css'\n\n/**\n * Reset Password\n */\nexport const ResetPasswordBox = ({ logo, title, children, onOK, onClose }) => {\n\n const [form, setForm ] = useState({})\n const [error, setError] = useState()\n\n function canOK() {\n return form.password1 && form.password2\n }\n\n function changeField(id, value) {\n const next = Object.assign({}, form, {[id]: value})\n setForm(next)\n }\n\n function ok() {\n if (onOK && canOK()) {\n if (form.password1 === form.password2 ) {\n setError(null)\n onOK(form)\n } else {\n setError(\"New Password and Confirm New Password do not match\")\n }\n }\n }\n\n function close() {\n if (onClose) onClose()\n }\n\n return (\n <div className=\"reset-password-box\">\n <header>\n {logo ? <img src={logo} /> : null}\n {title ? <div className=\"title\"><Text>{title}</Text></div> : null}\n { children }\n </header>\n <main>\n <Text use=\"headline6\">Change Password</Text>\n <TextField id=\"password1\" outlined icon=\"lock\" type=\"password\" label=\"New Password\" lapse={100} onChange={changeField} onEnter={ok}/>\n <TextField id=\"password2\" outlined icon=\"lock\" type=\"password\" label=\"Confirm New Password\" lapse={100} onChange={changeField} onEnter={ok}/>\n { error ? <div className=\"error\">{error}</div> : null}\n </main>\n <footer>\n <Button label=\"Close\" action={close}/>\n <Button label=\"OK\" raised disabled={!canOK()} action={ok}/>\n </footer>\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport { Icon } from './icon';\nimport { Header } from './header';\nimport './section.css'\n\n/**\n * Section\n */\nexport const Section = (props) => {\n\n const { icon, title = '', canCollapse = true, open = false, actions, children, className } = props\n const [isOpen, setOpen] = useState(open)\n\n useEffect(() => {\n setOpen(open)\n }, [open])\n\n const toggle = () => {\n setOpen(!open)\n }\n\n return (\n <section className={`section2 ${className}`}>\n <Header icon={{ icon }} title={title}>\n {actions}\n {canCollapse ? <Icon icon=\"expand_more\" onIcon=\"expand_less\" clickable action={toggle} /> : ''}\n </Header>\n {isOpen ? (<main>{children}</main>) : ''}\n </section>\n )\n}","import React, { Fragment, useContext, useState } from 'react';\nimport { Uploader } from './uploader'\nimport { Button, Text } from '../html';\nimport { SiteContext, Dialog } from '../site';\nimport { UploadFile } from './UploadFile';\n\n/**\n * Upload Dialog\n */\nexport const UploadDialog = ({ label, target, accept, onSuccess, onOK, onError, onClose, onActionClose = true }) => {\n\n const site = useContext(SiteContext);\n const [file, setFile] = useState();\n const [errors, setErrors] = useState([])\n\n function onComplete(uploads) {\n setFile(uploads[0]);\n if (onSuccess) onSuccess(uploads[0])\n }\n\n function onAction(action) {\n if (action === 'CLOSE' || onActionClose === true) {\n site.closeDialog();\n onClose()\n }\n }\n\n const actions = (\n <Fragment>\n <Button label=\"CLOSE\" action={() => onAction(\"CLOSE\")} />\n </Fragment>\n )\n\n const title = <Text use=\"headline6\">{label}</Text>\n return (\n <Dialog title={title} open={true} onAction={onAction} actions={actions}>\n {file ? <UploadFile file={file} /> : <Uploader label={label} accept={accept} target={target} onComplete={onComplete} />}\n {errors.map(error => <Text use=\"overline\" tag=\"div\" className=\"error\">{error}</Text>)}\n </Dialog>\n )\n}","import React, { useState } from 'react'\nimport { Icon, Header, Text } from '../../html'\nimport './Viewer.css'\n\n/**\n * Viewer\n */\nexport const Viewer = ({ title, src, info, actions = [], tools = false, onClose }) => {\n\n const [showDetails, setShowDetails] = useState(false)\n\n function toggleDetails() {\n setShowDetails(!showDetails)\n }\n\n const headerTitle = <Text use=\"headline6\">{title}</Text>\n return (\n <div className=\"viewer\">\n <Header icon={{ icon: 'close', clickable: true, action: onClose }} title={headerTitle} >\n {showDetails ? '' : <Icon icon=\"info\" clickable action={toggleDetails} />}\n {actions}\n </Header>\n <main>\n <div className=\"resizer\">\n <picture>\n <img src={src} />\n </picture>\n </div>\n </main>\n <aside className={`${showDetails ? 'open' : ''}`}>\n <Header title=\"Detalles\">\n <Icon icon=\"close\" clickable action={toggleDetails} />\n </Header>\n <main>\n {info}\n </main>\n </aside>\n {tools ? (\n <footer>\n <Icon clickable icon=\"zoom_out\" />\n <Icon clickable icon=\"zoom_out_map\" />\n <Icon clickable icon=\"zoom_in\" />\n </footer>\n ) : null }\n </div>\n )\n}","import 'material-design-icons-iconfont/dist/material-design-icons.css'\n\nexport * from './http'\nexport * from './html'\nexport * from './widgets'\nexport * from './site'\nexport * from './domain'\nexport * from './upload'\n\nexport const isFunction = value => value && (Object.prototype.toString.call(value) === \"[object Function]\" || \"function\" === typeof value || value instanceof Function);\n"],"names":["fetchAsync","method","URL","body","token","console","log","request","mode","headers","Accept","recover","result","fetch","response","ok","json","e","then","error","Error","success","message","HTTPClient","domain","securityCtx","GET","undefined","POST","PUT","PATCH","DELETE","SESSION_NAME","process","env","REACT_APP_SESSION","window","SESSION","Session","sessionStorage","getItem","JSON","parse","me","init","setItem","stringify","refresh","this","isLoggedIn","DSSession","logout","removeItem","Icon","size","clickable","action","className","onClick","event","stopPropagation","preventDefault","icon","Button","label","disabled","style","raised","outlined","h","SiteContext","React","createContext","Text","children","site","useContext","dictionary","term","text","lang","CheckBox","props","id","placeholder","value","onChange","change","target","checked","labelTxt","key","type","class","htmlFor","Form","title","columns","useState","fields","setFields","isEmpty","useEffect","initFields","Children","toArray","filter","child","map","required","validation","valid","field","every","form","reduce","changeField","find","f","Object","assign","slice","items","span","cloneElement","FieldWrapper","gridColumn","gridLayout","gridTemplateColumns","Fragment","use","Header","caption","prominent","dense","theme","primary","secondary","iconSrc","src","img","backgroundImage","List","onSelect","select","groupBy","GroupedList","item","ListItem","groups","group","g","name","content","push","line1","line2","meta","MenuContext","Menu","MenuIcon","align","open","setOpen","toggle","Provider","MenuItem","CircularProgress","LinearProgress","progress","max","Tabs","selected","tabs","index","Tab","actions","Stack","TextField","readOnly","onEnter","onKeyDown","charCode","keyCode","onFocus","changeFocus","lose","DropDown","options","setLabel","Array","isArray","option","next","getAttribute","DataTable","rows","onRowSelection","onSort","editable","sortDir","row","sort","dragged","dropped","sortable","array","sortObject","sortKeys","keys","length","keySort","a","b","direction","sorted","multiSort","DataTableRow","onDrop","isInfoOpen","toggleInfo","infoIcon","ev","column","DataTableCell","cell","info","prototype","toString","call","Function","min","StringCellEditor","BooleanCellViewer","StringCellViewer","render","o","TokenField","mounted","useRef","setValue","tokens","setTokens","current","Token","onDelete","splice","remove","concat","tag","Tree","nodes","TreeNode","small","TreeItem","PageContext","PageProvider","context","Page","layout","SiteProvider","siteDictionary","siteLang","setLang","setDictionary","sideNav","setSideNav","showNav","setShowNav","setInfo","setConsole","page","setPage","dialog","setDialog","preview","setPreview","breadcrumb","setBreadcrumb","focused","setFocused","openInfo","closeInfo","toggleConsole","goto","openDialog","closeDialog","openPreview","closePreview","SiteHeader","SiteToolBar","SiteAside","SiteMenu","logo","sections","section","SitePage","SiteDialog","SitePreview","SiteConsole","Dialog","TYPES","STRING","NUMBER","DATE","BOOLEAN","ARRAY","ENTITY","FUNCTION","EMAIL","CHECK","values","obj","x","ContentType","schema","_schema","checkType","data","validChildren","element","validate","entries","_this","hasOwnProperty","entryData","child1","child2","data2","Content","_type","_value","isValid","update","ContentForm","ContentFormField","NumberField","StringField","textarea","fieldType","ContentEditor","nextValue","FieldEditor","TabbedContentEditor","grouped","tab","setTab","groupName","TreededContentEditor","setSelected","add","node","nextNode","nextContent","value1","EntityEditor","StringEditor","NumberEditor","MultiSelectionEditor","ListEditor","CollectionEditor","renderField","fid","includes","indexOf","v","Feeder","Renderer","Adder","i","cellId","cellValue","table","onAdd","onRemove","CollectionAdder","edit","setEdit","setForm","EditContentDialog","validator","onOK","setValid","errors","setErrors","onAction","_catch","http","API","REACT_APP_API","CollectionList","pageContext","setPageContext","all","description","clear","CollectionTree","levels","generateNodes","by","n","forEach","renderNodes","save","autosave","delay","timer","canSave","equal","clearTimeout","setTimeout","renderEditor","CollectionContext","url","CollectionAPI","load","_this2","create","_this4","_this6","patch","_this8","updateProperty","propertyName","_this10","_this12","UploadArea","areaElement","drag","setDrag","resumable","assignDrop","state","onDragOver","onDragLeave","ref","UploadIcon","iconElement","assignBrowse","Uploader","accept","onSuccess","onError","onComplete","useMemo","ResumableJS","chunkSize","simultaneousUploads","testChunks","throttleProgressCallbacks","fileType","on","onFileAdded","onFileProgress","onFileSuccess","onFileError","onAllComplete","setProgress","setState","setError","files","setFiles","file","upload","UploadFile","fileName","editor","onActionClose","isRequired","creation","isOptional","validForm","color","subtitle","badge","minified","setMin","onIcon","userLabel","passwordLabel","loginLabel","forgotLabel","onForgot","loading","user","setUser","password","setPassword","canOK","forcedPwd","tx","txt","onClose","password1","password2","lapse","canCollapse","isOpen","toolbar","setFile","uploads","tools","showDetails","setShowDetails","toggleDetails","headerTitle"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/http/client.js","../src/http/session.js","../src/html/icon.js","../src/html/button.js","../src/site/siteContext.js","../src/html/text.js","../src/html/checkbox.js","../src/html/form.js","../src/html/header.js","../src/html/list.js","../src/html/menu.js","../src/html/progress.js","../src/html/tab.js","../src/html/textfield.js","../src/html/table.js","../src/html/tokenfield.js","../src/html/tree.js","../src/site/page.js","../src/site/site.js","../src/site/dialog.js","../src/domain/ContentType.js","../src/domain/ContentForm.js","../src/domain/ContentEditor.js","../src/domain/EditContentDialog.js","../src/domain/CollectionPage.js","../src/upload/UploadArea.js","../src/upload/uploader.js","../src/upload/UploadFile.js","../src/html/chip.js","../src/domain/CreateContentDialog.js","../src/widgets/kanban/Kanban.js","../src/widgets/login/LoginBox.js","../src/html/property.js","../src/html/radio.js","../src/widgets/login/ResetPasswordBox.js","../src/html/section.js","../src/upload/UploadDialog.js","../src/widgets/viewer/Viewer.js","../src/index.js"],"sourcesContent":["async function fetchAsync(method, URL, body = null, token) {\n\n console.log('FETCH', method, URL)\n\n const request = {\n method,\n mode: 'cors',\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n \"x-access-token\": token\n },\n body\n }\n\n try {\n var response = await fetch(URL, request);\n if (response.ok) {\n const json = await response.json();\n return json\n }\n throw response\n } catch (error) {\n if (error instanceof Error) { throw { error }}\n const json = await error.json()\n throw {\n success: false,\n message: json.message\n }\n }\n}\n\n\nexport const HTTPClient = (domain, securityCtx) => {\n return {\n\n GET: (URL) => {\n const token = securityCtx ? securityCtx.token() : null;\n return fetchAsync('GET', domain + URL, undefined, token);\n },\n\n POST: (URL, body) => {\n const token = securityCtx ? securityCtx.token() : null;\n return fetchAsync('POST', domain + URL, body, token);\n },\n\n PUT: (URL, body) => {\n const token = securityCtx ? securityCtx.token() : null;\n return fetchAsync('PUT', domain + URL, body, token);\n },\n\n PATCH: (URL, body) => {\n const token = securityCtx ? securityCtx.token() : null;\n return fetchAsync('PATCH', domain + URL, body, token);\n },\n\n DELETE: (URL) => {\n const token = securityCtx ? securityCtx.token() : null;\n return fetchAsync('DELETE', domain + URL, undefined, token);\n }\n }\n}","/**\n * Session store\n * implements securityCtx methods\n */\n\nconst SESSION_NAME = process.env.REACT_APP_SESSION || window && window.SESSION ? window.SESSION : 'YWANA-CORE6-SESSION';\n\nexport const Session = {\n\n token() {\n const item = sessionStorage.getItem(SESSION_NAME);\n const json = item ? JSON.parse(sessionStorage.getItem(SESSION_NAME)) : {};\n return json.token;\n },\n\n me() {\n const item = sessionStorage.getItem(SESSION_NAME);\n const json = item ? JSON.parse(sessionStorage.getItem(SESSION_NAME)) : {};\n return json.me;\n },\n\n init(token, me) {\n sessionStorage.setItem(SESSION_NAME, JSON.stringify({ token, me }));\n },\n\n refresh(token) {\n const me = this.me();\n sessionStorage.setItem(SESSION_NAME, JSON.stringify({ token, me }));\n },\n\n isLoggedIn() {\n return !!sessionStorage.DSSession;\n },\n\n logout() {\n sessionStorage.removeItem(SESSION_NAME);\n },\n\n}\n","import React from 'react'\nimport './icon.css'\n\n/**\n * Icon \n */\nexport const Icon = ({ icon, size = \"normal\", clickable = false, action }) => {\n\n function click (event) {\n event.stopPropagation()\n event.preventDefault();\n if (action) action()\n }\n\n const clicker = clickable ? \"clickable\" : \"\"\n return (\n <i className={`icon ${size} ${clicker} material-icons`} onClick={click}>\n {icon}\n </i>\n )\n}","import React from 'react'\nimport './button.css'\nimport { Icon } from './icon'\n\n/**\n * HTML Button\n */\nexport const Button = ({ label, icon, action, disabled = false, outlined, raised }) => {\n\n function click(event) {\n if (!disabled) {\n event.stopPropagation();\n event.preventDefault();\n if (action) action()\n }\n }\n\n let style = raised ? 'raised' : outlined ? 'outlined' : 'normal'\n if (disabled) style = `${style} disabled`\n return (\n <button className={`btn ${style}`} onClick={click}>\n { icon ? <Icon icon={icon} size=\"small\" /> : null }\n <span>{ label }</span>\n </button>\n )\n}","import React from 'react'\n\n/**\n * Site Context\n */\nexport const SiteContext = React.createContext({})","import React, { useContext } from \"react\"\nimport { SiteContext } from \"../site/siteContext\"\n\n/**\n * Text\n */\nexport const Text = ({ children }) => {\n\n const site = useContext(SiteContext)\n\n if (site) {\n const { lang, dictionary = {}} = site\n const term = dictionary[children]\n const text = term ? term[lang] : children\n return text ? <span>{text}</span> : ''\n }\n\n return children ? <span>{children}</span> : ''\n\n}","import React from 'react'\nimport { Text } from './text'\nimport './checkbox.css'\n\n/**\n * CheckBox\n */\nexport const CheckBox = (props) => {\n\n const { id, label, placeholder, value, onChange } = props\n\n function change(event) {\n const value = event.target.checked\n if (onChange) onChange(id, value)\n }\n\n const labelTxt = <Text>{label}</Text>\n \n console.log(label, value)\n return value === true ? (\n <div className=\"checkbox\" key={`${id}1`}>\n <input id={id} type=\"checkbox\" placeholder={placeholder} checked value={value} onChange={change} />\n <span class=\"checkmark\" />\n <label htmlFor={id}>{labelTxt}</label>\n </div>\n ) : (\n <div className=\"checkbox\" key={`${id}0`}>\n <input id={id} type=\"checkbox\" placeholder={placeholder} value={value} onChange={change} />\n <span class=\"checkmark\" />\n <label htmlFor={id}>{labelTxt}</label>\n </div>\n )\n}","import React, { Fragment, useState, useEffect } from 'react'\nimport { Text } from './text';\nimport './form.css'\n\n/**\n * Form\n */\nexport const Form = ({ title, columns = 1, children, outlined, onChange }) => {\n\n const [fields, setFields] = useState([])\n const isEmpty = (value) => value === void 0 || value === null || value === '';\n\n useEffect(() => {\n const initFields = React.Children\n .toArray(children)\n .filter(child => child !== null && child !== '')\n .map(child => {\n const { id, value, required = false, validation } = child.props\n const valid = required ? validation ? validation(value) : !isEmpty(value) : true\n return { id, value, required, validation, valid }\n })\n .filter(field => field.id !== void 0)\n setFields(initFields)\n }, [])\n\n useEffect(() => {\n if (onChange) {\n const valid = fields.every(({ valid }) => valid === true)\n const form = fields.reduce((form, { id, value }) => {\n if (value || value === false) form[id] = value\n return form\n }, {})\n onChange(form, valid)\n }\n }, [fields])\n\n const changeField = (id, value) => {\n const field = fields.find(f => f.id === id)\n if (field) {\n const valid = field.required ? field.validation ? field.validation(value) : !isEmpty(value) : true\n Object.assign(field, { value, valid })\n setFields(fields.slice())\n }\n }\n\n const items = React.Children\n .toArray(children)\n .filter(child => child !== null && child !== '')\n .map(child => {\n const { span = 1 } = child.props\n const field = React.cloneElement(child, {\n onChange: changeField,\n outlined: !!outlined\n })\n const columnLayout = { gridColumn: `span ${span}`}\n return (<FieldWrapper style={columnLayout}>{field}</FieldWrapper>)\n })\n\n\n const gridLayout = { gridTemplateColumns: `repeat(${columns}, 1fr)` }\n return (\n <Fragment>\n {title ? (<header className=\"form-header\"><Text use=\"headline6\">{title}</Text></header>) : ''}\n <form className=\"form-grid\" style={gridLayout}>\n {items}\n </form>\n </Fragment>\n )\n}\n\n/**\n * Form Field Wrapper\n */\nconst FieldWrapper = ({ style, children }) => {\n return (\n <div className=\"field-wrapper\" style={style}>\n {children}\n </div>\n )\n}","import React from 'react';\nimport { Icon } from './icon';\nimport { Text } from './text';\nimport './header.css';\n\n/**\n * Header\n */\nexport const Header = (props) => {\n\n const caption = props.caption ? 'caption' : ''\n const prominent = props.prominent ? 'prominent' : ''\n const dense = props.dense ? 'dense' : ''\n let theme = props.primary ? 'primary' : ''\n theme = props.secondary ? 'secondary' : theme\n let icon = props.icon ? <Icon icon={props.icon} clickable={props.clickable} action={props.action}/> : ''\n icon = props.iconSrc ? <img className=\"header-icon\" src={props.iconSrc} /> : icon;\n\n const style = props.img ? { backgroundImage: `url(${props.img })` } : {}\n\n const title=<Text>{props.title}</Text>\n return (\n <header className={`header ${caption} ${prominent} ${dense} ${theme} ${props.className}`} style={style}>\n {icon}\n {props.title ? <label>{title}</label> : null }\n <span className=\"actions\">{props.children}</span>\n </header>\n )\n}\n\n","import React, { Fragment } from 'react'\nimport { Icon } from './icon';\nimport { Text } from './text';\nimport \"./list.css\"\n\n/**\n * List\n */\nexport const List = (props) => {\n\n const { items = [], children, onSelect, groupBy } = props\n\n function select(id) {\n if (onSelect) onSelect(id)\n }\n\n return groupBy ? <GroupedList {...props} onSelect={select} /> : (\n <div className=\"list\">\n <ul>\n {items.map(item => <ListItem key={item.id} item={item} onSelect={select} />)}\n </ul>\n {children}\n </div>\n )\n}\n\n/**\n * Grouped List\n */\nconst GroupedList = (props) => {\n const { items = [], children, onSelect, groupBy } = props\n\n const groups = items.reduce((groups, item) => {\n let group = groups.find(g => g.name === item.content[groupBy])\n if (!group) {\n group = { name: item.content[groupBy], items: []}\n groups.push(group)\n } \n group.items.push(item)\n return groups\n }, [])\n\n return (\n <div className=\"list\">\n {groups.map(group => (\n <Fragment key={group.name}>\n <header key={`${group.name}-header`}><Text>{group.name}</Text></header>\n <ul key={`${group.name}-ul`}>\n {group.items.map(item => <ListItem key={item.id} item={item} onSelect={onSelect} />)}\n </ul>\n </Fragment>\n ))}\n {children}\n </div>\n )\n}\n\n/**\n * List Item\n */\nconst ListItem = ({ item, onSelect }) => {\n const { id, icon, line1, line2, meta } = item\n\n function select() {\n if (onSelect) onSelect(id)\n }\n\n return (\n <li id={id} onClick={select}>\n {icon ? <Icon icon={icon} size=\"small\" /> : null}\n <main>\n <div className=\"primary-line\"><Text>{line1}</Text></div>\n {line2 ? <div className=\"secondary-line\"><Text>{line2}</Text></div> : null}\n </main>\n {meta ? <div className=\"meta\">{meta}</div> : null}\n </li>\n )\n}","import React, { useContext, useState } from 'react'\nimport { Icon } from './icon';\nimport './menu.css'\n\n\n/**\n * Page Context\n */\nexport const MenuContext = React.createContext({})\n\n/** \n * Menu \n **/\nexport const Menu = (props) => {\n const { children } = props\n return (\n <ul>\n {children}\n </ul>\n )\n}\n\n/**\n * Menu Icon\n */\nexport const MenuIcon = (props) => {\n\n const { icon = \"more_vert\", children, align } = props\n const [open, setOpen] = useState(false)\n\n function toggle() {\n setOpen(!open)\n }\n\n return (\n <MenuContext.Provider value={[open, setOpen]}>\n <div className=\"menu-icon\">\n <Icon icon={icon} clickable action={toggle} />\n {open ? (\n <menu className={`${align}`}>\n {children}\n </menu>\n ) : null}\n {open ? <div className=\"overlay\" onClick={toggle}/> : null}\n </div>\n </MenuContext.Provider>\n )\n}\n\n/**\n * Menu Item\n */\nexport const MenuItem = (props) => {\n\n const { id, icon, label, meta, onSelect } = props\n const [open, setOpen] = useContext(MenuContext)\n\n function select() {\n if (onSelect) onSelect()\n setOpen(false)\n }\n return (\n <li className=\"menu-item\" onClick={select}>\n {icon ? <Icon icon={icon} /> : null}\n <label>{label}</label>\n {meta ? <div className=\"meta\">{meta}</div> : null}\n </li>\n )\n}\n\n/**\n * Menu Separator\n */\nexport const MenuSeparator = (props) => {\n return (\n <li>\n menuSeparator\n </li>\n )\n}","import React from 'react'\nimport { Icon } from './icon'\nimport './progress.css'\n\n/**\n * Circular Progress\n */\nexport const CircularProgress = (props) => {\n return (\n <div className=\"circular-progress\">\n <Icon icon=\"refresh\" size=\"small\" />\n </div>\n )\n}\n\n/**\n * Linear Progress\n */\nexport const LinearProgress = (props) => {\n\n const { progress= 0, max = 100 } = props\n\n return (\n <div className=\"linear-progress\">\n <progress value={progress} max={max}/>\n </div>\n )\n}","import React, { useState } from 'react'\nimport { Fragment } from 'react'\nimport './tab.css'\n\n/**\n * Tabs\n */\nexport const Tabs = (props) => {\n\n const { children, selected, onChange } = props\n\n const tabs = React.Children.map(children, (child, index) => {\n\n function select() {\n if (onChange) onChange(index)\n }\n\n return React.cloneElement(child, {\n selected: index === selected,\n onSelect: select\n })\n })\n\n return (\n <div class=\"tabs\">\n {tabs}\n <div class=\"tab-filler\" />\n </div>\n )\n}\n\n/**\n * Tab\n */\nexport const Tab = (props) => {\n\n const { label, selected, actions, onSelect } = props\n\n function select() {\n if (onSelect) onSelect()\n }\n\n const style = selected ? \"selected\" : \"\"\n return (\n <div className={`tab ${style}`} onClick={select}>\n {label}\n {actions ? actions : null}\n </div>\n )\n}\n\n/**\n * Stack\n */\n export const Stack = (props) => {\n\n const { selected = 0 } = props\n\n const child = React.Children\n .toArray(props.children)\n .filter((child, index) => index === selected )[0]\n \n return (\n <Fragment>\n {child}\n </Fragment>\n )\n}","import React, { useContext, useEffect, useState } from 'react'\nimport { SiteContext } from '../site/siteContext'\nimport { Icon } from './icon'\nimport { Text } from './text'\nimport './textfield-outlined.css'\nimport './textfield.css'\n\n/**\n * Text Field\n */\nexport const TextField = (props) => {\n\n const site = useContext(SiteContext)\n const { id, type = 'text', label, placeholder, value, outlined, readOnly=false, onChange, onEnter, onClick } = props\n\n function onKeyPress(event) {\n var key = event.charCode ? event.charCode : event.keyCode ? event.keyCode : 0;\n if (key == 13) {\n onEnter()\n }\n }\n\n function change(event) {\n event.stopPropagation()\n event.preventDefault()\n const value = event.target.value\n if (onChange) onChange(id, value)\n }\n\n function focus() {\n if (site) {\n site.changeFocus({ lose: () => {\n // DO NOTHING\n }})\n }\n }\n\n const borderStyle = outlined ? \"textfield-outlined\" : \"textfield\"\n const labelStyle = label ? \"\" : \"no-label\"\n const style = `${labelStyle} ${borderStyle}`\n const labelTxt = <Text>{label}</Text>\n return (\n <div className={`${style}`} onClick={onClick}>\n <input id={id} type={type} placeholder={placeholder} value={value} required onChange={change} onKeyDown={onKeyPress} onFocus={focus} readOnly={readOnly}/>\n <span className=\"bar\"></span>\n { label ? <label>{labelTxt}</label> : null }\n </div>\n )\n}\n\n/**\n * Dropdown\n */\nexport const DropDown = (props) => {\n\n const site = useContext(SiteContext)\n const { id, options = [], value, onChange } = props\n const [open, setOpen] = useState(false)\n const [label, setLabel] = useState()\n\n useEffect(() => {\n if (Array.isArray(options)) {\n const option = options.find(option => option.value === value)\n if (option) setLabel(option.label)\n }\n }, [value])\n\n\n function toggle() {\n if (site) {\n site.changeFocus({ lose: () => {\n setOpen(false) \n }})\n } \n setOpen(!open)\n }\n\n function select(event) {\n const next = event.target.getAttribute(\"value\")\n const option = options.find(option => option.value === next)\n if (onChange) onChange(id, next)\n setLabel(option.label)\n setOpen(false)\n }\n\n return (\n <div className=\"dropdown\">\n <TextField {...props} onClick={toggle} value={label} />\n <Icon icon=\"expand_more\" clickable size=\"small\" action={toggle} />\n {open == true ? (\n <menu>\n <ul onClick={select}>\n {Array.isArray(options) ? options.map(option => <li key={option.value} value={option.value}>{option.label}</li>) : null}\n </ul>\n </menu>\n ) : null}\n </div>\n )\n}\n","import React, { Fragment, useState } from 'react'\nimport { CheckBox } from './checkbox'\nimport { Icon } from './icon'\nimport { Text } from './text'\nimport { DropDown, TextField } from './textfield'\nimport './table.css'\n\n/**\n * DataTable\n */\nexport const DataTable = (props) => {\n\n const { columns = [], rows = [], onRowSelection, onSort, editable, outlined } = props\n const [sortDir, setSortDir] = useState({})\n\n function multiSort(array, sortObject = {}) {\n\n const sortKeys = Object.keys(sortObject);\n\n if (!sortKeys.length) {\n return array;\n }\n\n const keySort = (a, b, direction) => {\n direction = direction !== null ? direction : 1;\n\n if (a === b) { // If the values are the same, do not switch positions.\n return 0;\n }\n\n // If b > a, multiply by -1 to get the reverse direction.\n return a > b ? direction : -1 * direction;\n };\n\n return array.sort((a, b) => {\n let sorted = 0;\n let index = 0;\n\n // Loop until sorted (-1 or 1) or until the sort keys have been processed.\n while (sorted === 0 && index < sortKeys.length) {\n const key = sortKeys[index];\n\n if (key) {\n const direction = sortObject[key];\n\n sorted = keySort(a[key], b[key], direction);\n index++;\n }\n }\n\n return sorted;\n });\n }\n\n function select(row, event) {\n if (onRowSelection) onRowSelection(row, event)\n }\n\n function sort(dragged, dropped) {\n if (onSort) onSort(dragged, dropped)\n }\n\n const style = outlined ? \"outlined\" : \"\"\n return (\n <div className={`datatable8 ${style}`}>\n <table>\n <thead>\n <tr>\n {columns.map(({ id, label, sortable }) => {\n const sort = sortDir[id] ? sortDir[id] : null\n return (\n <th>\n <Text>{label}</Text>\n {sortable ? <Icon icon=\"arrow_up\" size=\"small\" clickable /> : null}\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody>\n {\n multiSort(rows, sortDir).map(row => (\n <DataTableRow key={row.id} row={row} columns={columns} onSelect={select} onDrop={sort} editable={editable}/>\n ))\n }\n </tbody>\n </table>\n </div>\n )\n}\n\n/**\n * DataTable Row\n */\nconst DataTableRow = (props) => {\n const { row, columns = [], onSelect, editable } = props\n const [isInfoOpen, toggleInfo] = useState(false)\n const infoIcon = isInfoOpen ? 'expand_more' : 'expand_less'\n\n const isFunction = value => value && (Object.prototype.toString.call(value) === \"[object Function]\" || \"function\" === typeof value || value instanceof Function);\n\n return (\n <Fragment>\n <tr onClick={ev => onSelect(row, ev)}>\n {columns.map(column => <DataTableCell row={row} column={column} cell={row[column.id]} editable={editable}/>)}\n {row.info ? <Icon icon={infoIcon} clickable action={() => toggleInfo(!isInfoOpen)} /> : null}\n </tr>\n {row.info && isInfoOpen ? (\n <tr className=\"table-row-info\">\n {isFunction(row.info) ? row.info() : row.info}\n </tr>\n ) : null}\n </Fragment>\n )\n}\n\n/**\n * DataTable Cell\n */\nconst DataTableCell = ({ row, column, cell, editable }) => {\n\n const render = (type) => {\n const { id, disabled = false, min, max, onChange, options } = column\n if (editable && onChange) {\n switch (type) {\n case \"ICON\": return <Icon icon={cell} />\n case \"BOOLEAN\": return <CheckBox id={id} value={cell} onChange={(id, value) => onChange(row.id, id, value)} disabled={disabled} />\n case \"Boolean\": return <CheckBox id={id} value={cell} onChange={(id, value) => onChange(row.id, id, value)} disabled={disabled} />\n case \"SELECTION\": return <DropDown id={id} value={cell} placeholder=\"--Select--\" options={options} onChange={(id, value) => onChange(row.id, id, value)} />\n case \"CHECK\": return <CheckBox id={id} value={cell} onChange={(id, value) => onChange(row.id, id, value)} disabled={row.disabled} />\n case \"CHECKABLE\": return cell && cell.value ? <CheckBox id={id} value={cell.checked || false} label={cell.value} onChange={(id, checked) => onChange(row.id, id, cell.value, checked, cell)} /> : ''\n case \"TEXTFIELD\": return <TextField id={id} value={cell} onChange={(id, value) => onChange(row.id, id, value)} />\n case \"String\": return <StringCellEditor id={id} value={cell} options={options} onChange={(id, value) => onChange(row.id, id, value)} />\n case \"Number\": return <TextField id={id} type=\"number\" value={cell} min={min} max={max} onChange={(id, value) => onChange(row.id, id, value)} />\n default: return cell\n }\n } else {\n switch (type) {\n case \"ICON\": return <Icon icon={cell} />\n case \"Boolean\": return <BooleanCellViewer id={id} value={cell} />\n case \"String\": return <StringCellViewer id={id} value={cell} options={options} />\n default: return cell\n }\n }\n }\n\n return (\n <td className={column.id}>{render(column.type)}</td>\n )\n}\n\n/**\n * Boolean Cell Viewer\n */\nconst BooleanCellViewer = ({ id, value = false }) => {\n const icon = value === true ? \"check_box\" : \"check_box_outline_blank\"\n return <Icon icon={icon} />\n}\n\n/**\n * String Cell Viewer\n */\nconst StringCellViewer = ({ id, value, options }) => {\n const option = options ? options.find( o => o.value === value) : null\n const text = option ? option.label : value\n return (<div className=\"field-editor string-editor\">{text}</div>)\n}\n\n/**\n * String Cell Editor\n */\nexport const StringCellEditor = ({ id, value = '', options, onChange }) => {\n\n function change(id, value) {\n if (onChange) onChange(id, value)\n }\n\n return (\n <div className='field-editor string-editor'>\n {options ?\n <DropDown outlined id={id} value={value} onChange={change} options={options} />\n : <TextField outlined id={id} value={value} onChange={change} />\n }\n </div>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Icon } from './icon';\nimport { Text } from './text';\nimport './tokenfield.css'\n\n/**\n * Token Field\n */\nexport const TokenField = ({ id, label, init, onChange }) => {\n const mounted = useRef(false)\n const [value, setValue] = useState()\n const [tokens, setTokens] = useState(init)\n\n useEffect(() => {\n if (mounted.current) {\n if (onChange) {\n if (tokens) onChange(id, tokens)\n }\n } else {\n mounted.current = true\n }\n }, [tokens])\n\n function remove(index) {\n const next = tokens.slice()\n next.splice(index, 1)\n setTokens(next)\n }\n\n function change(event) {\n const value = event.target.value\n setValue(value)\n }\n\n function onEnter(event) {\n if (event.key === 'Enter') {\n event.preventDefault()\n event.stopPropagation()\n const token = event.target.value\n const next = tokens.concat(token)\n setTokens(next)\n setValue('')\n }\n\n if (value === '' && tokens.length> 0 && event.key === 'Backspace') {\n const next = tokens.slice(0, -1)\n setTokens(next)\n }\n }\n\n return (\n <div className='tokenField'>\n <label>{label}</label>\n {tokens.map((text, index) => (\n <Token text={text} onDelete={() => remove(index)} />\n ))}\n <input type='text' value={value} onChange={change} onKeyDown={onEnter} />\n </div>\n )\n}\n\n/**\n * Token\n */\nconst Token = ({ text, onDelete }) => {\n return (\n <div className='token'>\n <Text use='caption' tag='div'>\n {text}\n </Text>\n <Icon icon='close' clickable action={onDelete} size=\"small\"/>\n </div>\n )\n}\n","import React from 'react'\nimport { Icon } from './icon'\nimport './tree.css'\n\n/**\n * Tree\n */\nexport const Tree = ({ nodes = [], children }) => {\n return (\n <div className=\"tree\">\n {nodes}\n {children}\n </div>\n )\n}\n\n/**\n * Tree Node\n */\nexport const TreeNode = ({ icon = 'folder', label, tooltip, open=false, children, actions }) => {\n return (\n <details className=\"tree-node\" open={open}>\n <summary className=\"tree-item\">\n { icon ? <Icon icon={icon} size=\"small\" small /> : null }\n <div className=\"label\">{label}</div>\n <div className=\"actions\">{actions}</div>\n </summary>\n {children}\n </details>\n )\n}\n\n/**\n * Tree Item\n */\nexport const TreeItem = ({ id, icon = 'description', label, actions, onSelect }) => {\n\n function select() {\n if (onSelect) onSelect(id)\n }\n\n return (\n <div className=\"tree-item final\" onClick={select}>\n <Icon icon={icon} size=\"small\" small />\n <div className=\"label\">{label}</div>\n <div className=\"actions\">{actions}</div>\n </div>\n )\n} ","import React, { useState, useEffect } from 'react'\nimport './page.css'\nimport './layouts.css'\n\n/**\n * Page Context\n */\nexport const PageContext = React.createContext({})\n\n/**\n * Page Provider\n */\nexport const PageProvider = ({ context = {}, children }) => {\n \n const [pageCtx, setPageCtx] = useState(context)\n\n return (\n <PageContext.Provider value={[pageCtx, setPageCtx]}>\n {children}\n </PageContext.Provider>\n )\n}\n\n/**\n * Page\n */\nexport const Page = (props) => {\n const { children, layout = \"simple\", context = {} } = props\n return (\n <PageProvider context={context}>\n <article className={`page6 ${layout}`}>\n {children}\n </article>\n </PageProvider>\n )\n}\n","import React, { Children, Fragment, useState, useContext, useEffect } from 'react'\nimport { Icon } from '../html/icon'\nimport { Tabs, Tab } from '../html/tab'\nimport { Header } from '../html/header'\nimport { Page } from './page'\nimport './site.css'\nimport { SiteContext } from './siteContext'\n\n\n\n/**\n * Site Provider\n */\nexport const SiteProvider = ({ children, siteLang, siteDictionary, showConsole }) => {\n\n const [lang, setLang] = useState(siteLang)\n const [dictionary, setDictionary] = useState(siteDictionary)\n const [sideNav, setSideNav] = useState('max')\n const [showNav, setShowNav] = useState(false)\n const [info, setInfo] = useState(null)\n const [console, setConsole] = useState(false)\n const [page, setPage] = useState()\n const [dialog, setDialog] = useState()\n const [preview, setPreview] = useState()\n const [breadcrumb, setBreadcrumb] = useState()\n const [focused, setFocused] = useState()\n\n const value = {\n\n lang,\n setLang,\n\n dictionary,\n setDictionary,\n\n focused,\n changeFocus: (next) => {\n if (focused) focused.lose()\n setFocused(next)\n },\n\n sideNav,\n setSideNav,\n\n showNav,\n setShowNav,\n\n info,\n openInfo: (info) => { setInfo(info) },\n closeInfo: () => { setInfo(null) },\n\n console,\n toggleConsole: () => { setConsole(!console) },\n\n breadcrumb,\n setBreadcrumb,\n\n page,\n goto: (id) => { setPage(id) },\n\n dialog,\n openDialog: (dialog) => { setDialog(dialog) },\n closeDialog: () => { setDialog(null) },\n\n preview,\n openPreview: (preview) => { setPreview(preview) },\n closePreview: () => { setPreview(null) }\n\n }\n\n return (\n <SiteContext.Provider value={value}>\n {children}\n </SiteContext.Provider>\n )\n}\n\n/**\n * Site\n */\nexport const Site = ({ icon, logo, title, toolbar, children, init, min, lang, dictionary }) => {\n return (\n <SiteProvider siteLang={lang} siteDictionary={dictionary}>\n <div className=\"site6\">\n <SiteHeader icon={icon} />\n <SiteToolBar >{toolbar}</SiteToolBar>\n <SiteMenu logo={logo} title={title} min={min} >{children}</SiteMenu>\n <SitePage init={init}>\n {children}\n <Page id=\"EMPTY\">EMPTY</Page>\n </SitePage>\n <SiteAside />\n <SiteConsole />\n <SiteDialog />\n <SitePreview />\n </div>\n </SiteProvider>\n )\n}\n\n/**\n * Site Header\n */\nconst SiteHeader = (props) => {\n const { icon = \"equalizer\", title } = props\n return (\n <Header icon={icon} title={title} />\n )\n}\n/**\n * Site ToolBar\n */\nconst SiteToolBar = ({ children }) => {\n const context = useContext(SiteContext)\n const { breadcrumb } = context\n return (\n <nav>\n {children}\n </nav>\n )\n}\n\n/**\n * Site Aside\n */\nconst SiteAside = () => {\n const context = useContext(SiteContext)\n return context.info ? (\n <aside>\n {context.info}\n </aside>\n ) : ''\n}\n\n/**\n * SiteMenu\n */\nconst SiteMenu = ({ logo, title, children, min }) => {\n\n const context = useContext(SiteContext)\n const { sideNav, showNav } = context\n const toggleIcon = sideNav === 'max' ? 'chevron_left' : 'chevron_right'\n\n useEffect(() => {\n if (min) context.setSideNav('min')\n }, [])\n\n const goto = (id) => {\n context.setShowNav(false)\n context.goto(id)\n }\n const sections = children ?\n Children.toArray(children).reduce((sections, page) => {\n const section = page.props ? page.props.section : '...'\n if (!sections[section]) sections[section] = []\n const { id, icon, title } = page.props\n if (title) sections[section].push({ id, icon, title })\n return sections\n }, {}) : {}\n\n return (\n <menu className={`min ${showNav ? 'show' : ''}`}>\n <main >\n {Object.keys(sections).map(title => (\n <Fragment key={title}>\n {sections[title].map(({ id, icon = 'info', title }) => {\n return (<Icon key={id} icon={icon} clickable checked={id === context.page} action={() => goto(id)} />)\n })}\n <div className=\"section-divider\" ></div>\n </Fragment>\n ))}\n </main>\n </menu>\n )\n}\n\n/**\n * SitePage\n */\nconst SitePage = ({ children, init }) => {\n const context = useContext(SiteContext)\n const { page } = context\n useEffect(() => {\n if (init) {\n context.goto(init)\n } else {\n context.goto(\"EMPTY\")\n }\n }, [])\n return (\n <main>\n {React.Children.toArray(children).filter(child => child.props ? child.props.id === page : false)}\n </main>\n )\n}\n\n/**\n * Site Dialog\n */\nconst SiteDialog = () => {\n const context = useContext(SiteContext)\n return context.dialog ? context.dialog : ''\n}\n\n/**\n * Site Preview\n */\nconst SitePreview = () => {\n const context = useContext(SiteContext)\n return context.preview ? (\n <div className=\"site-preview\" >\n {context.preview}\n </div>\n ) : ''\n}\n\n/**\n * Site Console\n */\nconst SiteConsole = () => {\n const context = useContext(SiteContext)\n return context.console ? (\n <footer className=\"site-console\" >\n <Header>\n <Tabs>\n <Tab label=\"Console\" />\n </Tabs>\n </Header>\n <main>\n\n </main>\n </footer>\n ) : ''\n}","import React, { Fragment, useContext } from 'react'\nimport { SiteContext } from './siteContext'\nimport { MenuIcon, Text } from '../html'\nimport './dialog.css'\n\n/**\n * Dialog\n * \n * <Dialog title={title} open={true} onAction={onAction} actions={actions}>\n */\nexport const Dialog = (props) => {\n const site = useContext(SiteContext)\n const { icon, title = \"Dialog\", children, onAction, actions } = props\n \n function close() {\n site.closeDialog()\n }\n \n function prevent(e) {\n e.preventDefault()\n e.stopPropagation()\n }\n \n return (\n <Fragment>\n <div className=\"overlay\" />\n <div className=\"dialog\" onClick={close}>\n <div className=\"dialog-panel\" onClick={prevent}>\n <header>\n {icon ? <MenuIcon icon={icon} /> : null}\n <Text>{title}</Text>\n </header>\n <main>\n {children}\n </main>\n <footer>\n {actions}\n </footer>\n </div>\n </div>\n </Fragment>\n )\n}","/**\n * TYPES\n */\nexport const TYPES = {\n STRING: 'String',\n NUMBER: 'Number',\n DATE: 'Date',\n BOOLEAN: 'Boolean',\n ARRAY: 'Array',\n ENTITY: 'Object',\n FUNCTION: 'Function',\n EMAIL: 'String'\n}\n\n/**\n * CHECK\n */\nexport const CHECK = Object.values(TYPES).reduce((obj, name) => {\n obj['is' + name] = x => toString.call(x) == '[object ' + name + ']';\n return obj;\n}, {});\n\n/**\n * Content Type\n */\nexport class ContentType {\n\n constructor(schema) {\n this._schema = schema\n }\n\n checkType({ type, item }, data) {\n let valid = true\n let validChildren = true\n if (item) {\n const child = new ContentType(item)\n switch (type) {\n case TYPES.ARRAY:\n valid = CHECK['is' + type](data)\n validChildren = data.every(element => child.validate(element))\n break\n case TYPES.ENTITY:\n valid = CHECK['is' + type](data)\n validChildren = child.validate(data)\n break\n case TYPES.NUMBER:\n valid = CHECK['is' + type](data.value)\n validChildren = true\n break\n default:\n valid = true\n validChildren = true;\n }\n }\n return valid && validChildren\n }\n\n /**\n * Validate entity data\n * - Inspect required attributes only\n * - Check attributes type\n */\n validate(data) {\n const attributes = Object.entries(this._schema)\n return attributes\n .filter(([name, attr]) => attr.required === true)\n .every(([name, attr]) => data[name] !== undefined ? this.checkType(attr, data[name]) : false)\n }\n\n /**\n * Content Type Form\n */\n form(data) {\n\n const entries = Object.entries(this._schema)\n\n const form = entries.reduce((form, [id, field]) => {\n form[id] = Object.assign({}, field, { value: data[id] })\n return form\n }, {})\n\n return form\n }\n\n /**\n * Content Type Sections\n */\n sections(data) {\n\n const form = this.form(data)\n const fields = Object.values(form)\n const sections = fields.reduce((sections, field) => {\n const { section } = field\n const title = section ? section : ''\n if (!sections.hasOwnProperty(title)) sections[title] = { title, fields: [] }\n sections[title].fields.push(field)\n return sections\n }, {});\n\n return Object.values(sections)\n }\n\n /**\n * value \n */\n value(data) {\n\n const fields = Object.entries(this._schema)\n const next = fields.reduce((next, [name, field]) => {\n\n const { type, item } = field\n const entryData = data ? data[name] : null\n\n switch (type) {\n\n case TYPES.STRING:\n next[name] = entryData || field.default\n break;\n\n case TYPES.NUMBER:\n next[name] = entryData || field.default\n break;\n\n case TYPES.BOOLEAN:\n next[name] = entryData || field.default\n break\n\n case TYPES.ENTITY:\n const child1 = new ContentType(item)\n next[name] = child1.value(entryData)\n break;\n\n case TYPES.ARRAY:\n if (item === TYPES.STRING) {\n next[name] = entryData ? entryData : []\n } else {\n const child2 = new ContentType(item)\n next[name] = entryData ? entryData.map(data2 => child2.value(data2)) : []\n }\n break;\n\n default:\n next[name] = field\n break;\n\n }\n\n return next\n\n }, {})\n\n return next\n }\n}\n\n\n/**\n * Content\n */\nexport class Content {\n\n constructor(type, value) {\n this.type = type\n this._type = new ContentType(type)\n this._value = value\n }\n\n isValid() {\n return this._type.validate(this._value)\n }\n\n value() {\n return this._type.value(this._value)\n }\n\n form() {\n return this._type.form(this._value)\n }\n\n sections() {\n return this._type.sections(this._value)\n }\n\n update(value) {\n this._value = value\n }\n}","import React from 'react';\nimport { TYPES } from './ContentType';\nimport { TextField, CheckBox, DropDown, Form } from '../html';\n\n/**\n * Content Form \n */\nexport const ContentForm = ({ content, columns = 1, filter, rules, onChange }) => {\n\n const form = content.form()\n console.log(form)\n\n const fields = Object.keys(form)\n .map(key => form[key])\n .filter( field => filter ? filter(field) : true)\n\n console.log(fields)\n \n return (\n <Form className=\"content-form\" columns={columns} outlined={true} onChange={onChange}>\n { fields.map(field => <ContentFormField key={field.id} {...field} />)}\n </Form>\n )\n}\n\n/**\n * Content Form Field\n */\nconst ContentFormField = (props) => {\n const { type, label } = props\n switch (type) {\n case TYPES.BOOLEAN:\n return <CheckBox key={props.id} {...props} />\n case TYPES.NUMBER:\n return <NumberField key={props.id} {...props} />\n default:\n return <StringField key={props.id} {...props} />\n }\n}\n\n/**\n* String Editor\n*/\nexport const StringField = ({ id, type, label, options, textarea, required = false, value, hidden, onChange, outlined }) => {\n\n const fieldTypes = {\n [TYPES.NUMBER] : 'number',\n [TYPES.DATE] : 'date',\n }\n\n function buildOptions() {\n const opts = typeof options === 'function' ? options() : options\n return opts\n }\n\n const fieldType = fieldTypes[type] || 'text'\n\n if (options) return <DropDown key={id} id={id} label={label} value={value} onChange={onChange} options={buildOptions()} outlined={outlined} />\n return <TextField key={id} id={id} type={fieldType} label={label} value={value} onChange={onChange} required={required} outlined={outlined} textarea={textarea}/>\n}\n\n/**\n* Number Editor\n*/\nexport const NumberField = ({ id, label, options, required = false, value, onChange, outlined }) => {\n\n function change(id, value) {\n const num = !!+value ? +value : value\n if (onChange) onChange(id, num)\n }\n\n if (options) return <DropDown key={id} id={id} label={label} value={value} onChange={change} options={options} outlined={outlined} />\n return <TextField key={id} id={id} type=\"number\" label={label} value={value} onChange={change} required={required} outlined={outlined} />\n}","import React, { Fragment, useState } from 'react';\nimport { Button, CheckBox, DataTable, DropDown, Icon, Stack, Tab, Tabs, Text, TextField, Tree, TreeNode, TreeItem, TokenField, Property } from '../html';\nimport { Content, TYPES } from './ContentType';\nimport './ContentEditor.css';\n\n/**\n * Content Editor\n */\nexport const ContentEditor = ({ content, filter, onChange }) => {\n\n function change(id, value) {\n const nextValue = Object.assign({}, content.value(), { [id]: value })\n if (onChange) onChange(nextValue)\n }\n\n const sections = content.sections()\n\n return (\n <div className='content-editor'>\n {sections.map((section) => {\n const { title, fields } = section\n return (\n <section key={title}>\n <header>{title}</header>\n <main>\n {fields\n .filter(field => field.id !== 'id')\n .filter(field => filter ? filter(field, content) : true)\n .map((field) => <FieldEditor key={field.id} field={field} onChange={change} />)}\n </main>\n </section>\n )\n })}\n </div>\n )\n}\n\n/**\n * Tabbed Content Editor\n */\nexport const TabbedContentEditor = ({ content, filter, grouped = false, onChange }) => {\n\n const [tab, setTab] = useState(0)\n\n function change(id, value) {\n const nextValue = Object.assign({}, content.value(), { [id]: value })\n if (onChange) onChange(nextValue)\n }\n\n function changeTab(tab) {\n setTab(tab)\n }\n\n function group(section) {\n const { fields = [] } = section\n const groups = fields.reduce((groups, field) => {\n const groupName = field.group || \"\"\n const group = groups[groupName] || { name: groupName, fields: [] }\n group.fields.push(field)\n groups[groupName] = group\n return groups\n }, {})\n return Object.values(groups)\n }\n\n const sections = content.sections()\n\n return (\n <div className='content-editor tabbed'>\n <Tabs selected={tab} onChange={changeTab}>\n {sections.map(section => <Tab label={section.title} />)}\n </Tabs>\n <Stack selected={tab}>\n {sections.map(section => {\n const { title, fields } = section\n return (\n <section key={title}>\n <nav>\n &nbsp;\n </nav>\n <main>\n {\n grouped ?\n group(section)\n .map(group => {\n return (\n <Fragment>\n {group.name.length > 0 ? <div className=\"group-caption\">{group.name}</div> : null}\n {\n group.fields\n .filter(field => field.id !== 'id')\n .filter(field => filter ? filter(field) : true)\n .map((field) => <FieldEditor key={field.id} field={field} onChange={change} content={content} />)\n }\n </Fragment>\n )\n })\n :\n fields\n .filter(field => field.id !== 'id')\n .filter(field => filter ? filter(field) : true)\n .map((field) => <FieldEditor key={field.id} field={field} onChange={change} content={content} />)\n }\n </main>\n </section>\n )\n })}\n </Stack>\n </div>\n )\n}\n\n/**\n * TreededContentEditor \n */\nexport const TreededContentEditor = ({ content, filter, onChange }) => {\n\n\n const value = content.value()\n const nodes = Object.values(content.type).filter(field => field.type === TYPES.ARRAY)\n const [selected, setSelected] = useState()\n\n function select(index, field, node) {\n const item = new Content(node.item, field)\n setSelected({ index, item, node, value: value[node.id] })\n }\n\n function change(form) {\n const nextNode = selected.value.slice()\n nextNode[selected.index] = form\n const nextContent = Object.assign({}, value, { [selected.node.id]: nextNode })\n if (onChange) onChange(nextContent)\n }\n\n function add() {\n //TODO\n }\n\n return (\n <div className=\"content-editor treeded-editor\">\n <menu>\n <header>\n <Text use='caption'>Tree Editor</Text>\n </header>\n <Tree>\n {nodes.map((node, index) => (\n <TreeNode icon=\"folder\" label={node.label} actions={[<Icon small icon=\"add\" clickable action={add} />]}>\n {\n value[node.id] ? value[node.id].map((field, index) => <TreeItem icon={field.icon || \"description\"} label={field.name || field.label} onSelect={() => select(index, field, node)} />) : null\n }\n </TreeNode>\n ))}\n </Tree>\n </menu>\n <div>\n {selected ? <TabbedContentEditor content={selected.item} onChange={change} /> : \"select\"}\n </div>\n </div>\n )\n}\n\n/**\n * FieldEditor\n */\nexport const FieldEditor = ({ field, onChange, content, outlined = false }) => {\n const { id, type, item, label, editable, options } = field\n\n function change(id, value) {\n if (onChange) onChange(id, value)\n }\n\n function renderField() {\n const value1 = field.value ? field.value : field.default\n switch (type) {\n case TYPES.ENTITY:\n return <EntityEditor field={field} value={value1} onChange={change} />\n case TYPES.STRING:\n return <StringEditor outlined={outlined} field={field} value={value1} onChange={change} content={content} />\n case TYPES.BOOLEAN:\n return <CheckBox outlined id={id} label={label} value={value1} onChange={change} />\n case TYPES.DATE:\n return <TextField outlined={outlined} id={id} type='date' label={label} value={value1} onChange={change} disabled={editable} />\n case TYPES.NUMBER:\n return <NumberEditor outlined={outlined} field={field} value={value1} onChange={change} />\n case TYPES.ARRAY:\n return item === TYPES.STRING ?\n options ? <MultiSelectionEditor content={content} field={field} value={value1} onChange={change} /> : <ListEditor field={field} value={value1} onChange={change} />\n : <CollectionEditor field={field} value={value1} onChange={change} />\n default:\n return <div>{label}</div>\n }\n }\n return renderField()\n}\n\n/**\n * Entity Editor\n */\nconst EntityEditor = ({ field, value = {}, onChange }) => {\n const { id, item, label } = field\n const content = new Content(item, value)\n\n function change(fid, value) {\n const next = Object.assign({}, content.value(), { [fid]: value })\n if (onChange) onChange(id, next)\n }\n\n const form = content.form()\n const fields = Object.keys(form).map((key) => form[key])\n\n return (\n <div className='entity-editor'>\n <header>\n <Text use='caption'>{label}</Text>\n </header>\n <main>\n {fields.map((field) => (\n <FieldEditor key={field.id} field={field} onChange={change} />\n ))}\n </main>\n </div>\n )\n}\n\n/**\n * String Editor\n */\nexport const StringEditor = ({ field, value = '', onChange, content, outlined }) => {\n const { id, label, options, editable = true, filter } = field\n\n function change(id, value) {\n if (onChange) onChange(id, value)\n }\n\n function buildOptions() {\n const opts = typeof options === 'function' ? options(field, content) : options\n return opts\n }\n\n return (\n <div className='field-editor string-editor'>\n {\n editable ?\n options ? (\n <DropDown outlined={outlined} id={id} label={label} value={value} onChange={change} options={buildOptions()} />\n ) : (\n <TextField outlined={outlined} id={id} label={label} value={value} onChange={change} />\n ) : (\n <TextField outlined={outlined} id={id} label={label} value={value} onChange={change} readOnly={true} />\n )\n }\n </div>\n )\n}\n\n/**\n * Number Editor\n */\nconst NumberEditor = ({ field, value, onChange }) => {\n const { id, label, editable = true } = field\n\n function change(id, value) {\n if (onChange) onChange(id, value)\n }\n\n const val = value || field.default\n const min = field.min\n const max = field.max\n const disabled = !editable\n\n return (\n <div className='field-editor number-editor'>\n <TextField outlined id={id} label={label} type='NUMBER' value={val} max={max} min={min} onChange={change} disabled={disabled} />\n </div>\n )\n}\n\n/**\n * List Editor\n */\nexport const ListEditor = ({ field, value = [], onChange }) => {\n\n const { label } = field\n\n function change(id, value) {\n if (onChange) onChange(id, value)\n }\n\n return (\n <div className=\"list-editor\">\n <TokenField id={field.id} label={label} init={value} onChange={change} />\n </div>\n )\n}\n\n/**\n * Multi Selection Editor\n */\nexport const MultiSelectionEditor = ({ field, value = [], content, onChange }) => {\n\n const { id, label, options } = field\n\n function change(v) {\n const index = value.indexOf(v)\n if (index >= 0) {\n value.splice(index, 1)\n } else {\n value.push(v)\n }\n if (onChange) onChange(id, value)\n }\n\n function buildOptions() {\n const opts = typeof options === 'function' ? options(field, content) : options\n return opts\n }\n\n return (\n <div className=\"multiselection-editor\">\n <label>{label}</label>\n {buildOptions().map(option => {\n const checked = value.includes(option.value)\n return <CheckBox value={checked} label={option.label} onChange={() => change(option.value)} />\n })}\n </div>\n )\n\n}\n\n/**\n * Collection Editor\n */\nexport const CollectionEditor = ({ field, value = [], onChange }) => {\n\n const { id, item, label, Feeder, Renderer, Adder = true, editable = true } = field\n\n function add(rows) {\n if (onChange) {\n const next = value.concat(rows)\n onChange(id, next)\n }\n }\n\n function remove(index) {\n if (onChange) {\n const next = value.filter((item, i) => i !== index)\n onChange(id, next)\n }\n }\n\n function change(index, cellId, cellValue) {\n if (onChange) {\n const next = value.slice()\n next[index][cellId] = cellValue\n onChange(id, next)\n }\n }\n\n const columns = Object.values(item).map((item) => ({ ...item, onChange: change }))\n columns.push({ id: 'actions', label: 'Actions' })\n\n const rows = value.map((item, index) => ({\n ...item,\n id: index,\n actions: [\n <Icon icon='delete' clickable action={() => remove(index)} small />\n ]\n }))\n\n const table = { columns, rows }\n\n return (\n <div className='collection-editor'>\n <header>\n <Text use='caption'>{label}</Text>\n <div className=\"actions\" >\n {Feeder ? <Feeder onAdd={add} /> : null}\n </div>\n </header>\n {Renderer ? <Renderer field={field} value={value} onRemove={remove} onChange={onChange} /> : <DataTable {...table} editable={editable} />}\n <footer>\n {Adder ? <CollectionAdder item={item} onAdd={add} /> : null}\n </footer>\n </div>\n )\n}\n\n/**\n * Collection Adder\n */\nconst CollectionAdder = ({ item, onAdd }) => {\n\n const [edit, setEdit] = useState(false)\n const [form, setForm] = useState({})\n\n function toggle() {\n setEdit(!edit)\n }\n\n function change(index, cellId, cellValue) {\n if (onAdd) {\n const next = Object.assign({}, form, { [cellId]: cellValue })\n setForm(next)\n }\n }\n\n function save() {\n if (onAdd) onAdd([form])\n toggle()\n }\n\n const columns = Object.values(item).map((item) => ({ ...item, type: 'String', onChange: change }))\n columns.push({ id: 'actions', label: '' })\n const rows = [{\n actions: [<Icon icon=\"done\" clickable action={save} />, <Icon icon=\"close\" clickable action={toggle} />]\n }]\n rows[0] = Object.assign({}, form, rows[0])\n const table = { columns, rows }\n\n return (\n <div className=\"collection-adder\">\n {edit ? <DataTable {...table} editable={true} /> : <Button icon='add' label='Add' action={toggle} />}\n </div>\n )\n}","import React, { Fragment, useState, useContext, useMemo } from 'react';\nimport { Dialog } from '../site'\nimport { SiteContext } from '../site/siteContext'\nimport { Text, Button } from '../html';\nimport { Content } from './ContentType'\nimport { ContentEditor } from './ContentEditor'\n\n/**\n * Edit Content Dialog\n */\nexport const EditContentDialog = ({ label, type, value = {}, filter, validator, onOK, onError }) => {\n\n const site = useContext(SiteContext);\n const [form, setForm] = useState(value)\n const [isValid, setValid] = useState(false)\n const [errors, setErrors] = useState([])\n\n function change(form) {\n setForm(form)\n if (validator) {\n const { validation, errors = [] } = validator(form)\n setValid(validation)\n setErrors(errors)\n } else {\n setValid(true)\n }\n }\n\n function onAction(action) {\n if (action === 'OK' && onOK) onOK(Object.assign({}, value, form))\n site.closeDialog();\n }\n\n const actions = (\n <Fragment>\n <Button label=\"CLOSE\" action={() => onAction(\"CLOSE\")} />\n <div className=\"expand\" />\n <Button label=\"OK\" action={() => onAction(\"OK\")} disabled={!isValid} raised />\n </Fragment>\n )\n\n const title = <Text use=\"headline6\">{label}</Text>\n const content = new Content(type, form)\n return (\n <Dialog title={title} open={true} onAction={onAction} actions={actions}>\n <ContentEditor content={content} onChange={change} filter={filter} />\n {errors.map(error => <Text use=\"overline\" tag=\"div\" className=\"error\">{error}</Text>)}\n </Dialog>\n )\n}","import equal from 'deep-equal'\nimport React, { Fragment, useContext, useEffect, useRef, useState } from 'react'\nimport { HTTPClient, Session } from '../http'\nimport { PageContext } from '../site'\nimport { Button, Header, Icon, List, Menu, MenuIcon, MenuItem, Text, Tree, TreeItem, TreeNode } from '../html'\nimport { Content } from './ContentType'\nimport { ContentEditor, TabbedContentEditor, TreededContentEditor } from './ContentEditor'\nimport { EditContentDialog } from './EditContentDialog'\nimport { SiteContext } from '../site/siteContext'\nimport \"./CollectionPage.css\"\n\n\nconst http = HTTPClient(window.API || process.env.REACT_APP_API, Session);\n\n/**\n * Collection Page\n */\nexport const CollectionPage = (props) => {\n\n const site = useContext(SiteContext)\n const { id = \"collection\", icon, title, name = \"Collection 1\", schema, url, groupBy, editor, field, autosave = false, delay = 1000, actions, levels } = props\n const [pageContext, setPageContext] = useContext(PageContext)\n const context = CollectionContext(url, field)\n\n useEffect(async () => {\n await context.load()\n setPageContext(context)\n }, [])\n\n async function reload() {\n await pageContext.load()\n setPageContext(Object.assign({}, pageContext))\n }\n\n function add() {\n const onOK = async (form) => {\n await pageContext.create(form);\n setPageContext(Object.assign({}, pageContext))\n }\n site.openDialog(<EditContentDialog label={`Crear ${name}`} type={schema} onOK={onOK} />);\n }\n\n return (\n <Fragment>\n <Header className=\"collection-page\" title={<Text>{title}</Text>}>\n <Button icon=\"add\" label=\"Add\" action={add} />\n <Button icon=\"refresh\" label=\"Reload\" action={reload} />\n {actions}\n </Header>\n <menu className=\"collection-page\">\n <Header title={<Text>Lista de {name}</Text>} >\n </Header>\n {levels ? <CollectionTree levels={levels} /> : <CollectionList groupBy={groupBy} />}\n </menu>\n <main key={id} className=\"collection-page\">\n <CollectionEditor icon={icon} schema={schema} layout={editor} autosave={autosave} delay={delay} />\n </main>\n </Fragment>\n )\n}\n\n/**\n * Collection List\n */\nconst CollectionList = (props) => {\n\n const { groupBy } = props\n const [pageContext, setPageContext] = useContext(PageContext)\n const { all = [] } = pageContext\n\n function clear() {\n pageContext.clear()\n setPageContext(Object.assign({}, pageContext))\n }\n\n async function select(id) {\n clear()\n await pageContext.select(id)\n setPageContext(Object.assign({}, pageContext))\n }\n\n const items = all ? all.map(content => ({\n id: content.id,\n line1: content.name,\n line2: content.description,\n content\n })) : []\n\n return (\n <List items={items} onSelect={select} groupBy={groupBy} />\n )\n}\n\n/**\n * Collection Tree\n */\nconst CollectionTree = (props) => {\n\n const { levels } = props\n const [pageContext, setPageContext] = useContext(PageContext)\n const { all = [] } = pageContext\n\n function clear() {\n pageContext.clear()\n setPageContext(Object.assign({}, pageContext))\n }\n\n async function select(id) {\n clear()\n await pageContext.select(id)\n setPageContext(Object.assign({}, pageContext))\n }\n\n function group(items, by) {\n return items.reduce((nodes, field) => {\n let node = nodes.find(n => n.name === field[by])\n if (!node) {\n let name = field[by]\n node = { name, items: [], field: by }\n nodes.push(node)\n }\n node.items.push(field)\n return nodes\n }, [])\n }\n\n function generateNodes(levels, items) {\n const by = levels[0]\n const nodes = group(items, by)\n if (levels.length > 1) nodes.forEach(node => node.nodes = generateNodes(levels.slice(1), node.items))\n return nodes\n }\n\n function renderNodes(nodes) {\n return nodes.map(node => {\n const title = typeof node.name === 'boolean' ? `${node.field} = ${node.name}` : node.name\n return (\n <TreeNode key={node.name} icon={null} label={title} open={true}>\n {node.nodes ? renderNodes(node.nodes) : node.items.map(item => <TreeItem key={item.id} id={item.id} label={item.name} onSelect={select}>item</TreeItem>)}\n </TreeNode>\n )\n })\n }\n\n const nodes = generateNodes(levels, all)\n return (\n <main>\n <Tree>\n {renderNodes(nodes)}\n </Tree>\n </main>\n )\n}\n\n/**\n * Collection Editor\n */\nconst CollectionEditor = (props) => {\n const [pageContext, setPageContext] = useContext(PageContext)\n const { selected } = pageContext\n const { icon, schema, layout, autosave = false, delay = 1000 } = props\n const timer = useRef(null)\n const [form, setForm] = useState(selected)\n\n useEffect(() => {\n setForm(selected)\n }, [selected])\n\n useEffect(() => {\n if (autosave) {\n clearTimeout(timer.current)\n timer.current = setTimeout(() => {\n if (canSave()) save()\n }, delay)\n }\n }, [form])\n\n function clear() {\n pageContext.clear()\n setPageContext(Object.assign({}, pageContext))\n }\n\n async function remove() {\n await pageContext.remove(selected.id)\n pageContext.clear()\n setPageContext(Object.assign({}, pageContext))\n }\n\n function change(next) {\n setForm(next)\n }\n\n function canSave() {\n const can = !equal(form, selected)\n return can\n }\n\n async function save() {\n console.log('saving.....')\n await pageContext.update(form)\n setPageContext(Object.assign({}, pageContext))\n }\n\n function renderEditor() {\n const content = new Content(schema, form)\n switch (layout) {\n case 'TABBED': return <TabbedContentEditor {...props} content={content} onChange={change} />\n case 'TREEDED': return <TreededContentEditor {...props} content={content} onChange={change} />\n default: return <ContentEditor {...props} content={content} onChange={change} />\n }\n }\n\n return selected && form ? (\n <Fragment>\n <Header icon={icon} title={<Text>{selected.name}</Text>}>\n <Icon icon=\"close\" clickable action={clear} />\n <MenuIcon align=\"alignRight\">\n <Menu>\n <MenuItem label=\"Eliminar\" onSelect={remove} />\n </Menu>\n </MenuIcon>\n {autosave === true ? null : <Button icon=\"save\" label=\"Guardar Cambios\" raised disabled={!canSave()} action={save} />}\n </Header>\n {renderEditor()}\n </Fragment>\n ) : null\n}\n\n/**\n * Collection Context\n */\nexport const CollectionContext = (url, field) => {\n\n const API = CollectionAPI(url)\n\n return {\n\n all: [],\n selected: null,\n\n async load() {\n try {\n const data = await API.all();\n this.all = field ? data[field] : data;\n } catch (error) {\n console.log(error)\n }\n return\n },\n\n select(id) {\n const result = this.all.find(item => item.id === id);\n this.selected = result;\n },\n\n clear() {\n this.selected = null\n },\n\n async create(form) {\n try {\n await API.create(form);\n await this.load();\n } catch (error) {\n console.log(\"CREATE ERROR\", error)\n }\n return\n },\n\n async update(form) {\n try {\n await API.update(form)\n await this.load()\n } catch (error) {\n console.log(error)\n }\n return\n },\n\n async patch(id, form) {\n try {\n await API.patch(id, form)\n await this.load()\n } catch (error) {\n console.log(error)\n }\n return\n },\n\n async updateProperty(id, propertyName, form) {\n try {\n await API.updateProperty(id, propertyName, form)\n await this.load()\n } catch (error) {\n console.log(error)\n }\n return\n },\n\n async remove(id) {\n try {\n await API.remove(id)\n await this.load()\n } catch (error) {\n console.log(error)\n }\n return\n },\n }\n}\n\n/**\n * Collection API\n */\nconst CollectionAPI = (url) => {\n\n return {\n all() {\n return http.GET(url)\n },\n\n find(id) {\n return http.GET(`${url}/${id}`)\n },\n\n create(form) {\n const body = JSON.stringify(form)\n return http.POST(url, body)\n },\n\n update(form) {\n const body = JSON.stringify(form)\n return http.PUT(`${url}/${form.id}`, body)\n },\n\n patch(id, form) {\n const body = JSON.stringify(form)\n return http.PATCH(`${url}/${id}`, body)\n },\n\n updateProperty(id, propertyName, form) {\n const body = JSON.stringify(form)\n return http.PUT(`${url}/${id}/${propertyName}`, body)\n },\n\n remove(id) {\n return http.DELETE(`${url}/${id}`)\n }\n\n }\n}","import React, { useState, useEffect, useRef } from 'react'\nimport { Icon, Text, CircularProgress } from '../html'\n\n/**\n * Component\n */\nexport const UploadArea = (props) => {\n\n const STATES = { 'IDLE': 0, 'RUNNING': 1, 'SUCCESS': 2, 'ERROR': 3 }\n\n const areaElement = useRef()\n const [drag, setDrag] = useState(false)\n\n useEffect(() => {\n const { resumable } = props\n if (resumable && areaElement) resumable.assignDrop(areaElement.current)\n }, [])\n\n const onDragOver = () => {\n setDrag(true)\n }\n\n const onDragLeave = () => {\n setDrag(false)\n }\n\n const { state = STATES.IDLE, label = 'Add file or drop file here...', error } = props\n const dragging = drag === true ? 'drag-over' : ''\n\n return (\n <div className={`upload-area6 ${dragging}`}\n onDragOver={onDragOver}\n onDragLeave={onDragLeave}\n ref={areaElement}\n >\n {state === STATES.IDLE ? <UploadIcon resumable={props.resumable} /> : ''}\n {state === STATES.IDLE ? <label>{label}</label> : ''}\n {state === STATES.RUNNING ? <CircularProgress size=\"xlarge\" /> : ''}\n {state === STATES.SUCCESS ? <Icon icon=\"done_all\" /> : ''}\n {state === STATES.ERROR ? <Text use=\"body1\">{error}</Text> : ''}\n {props.children}\n </div>\n )\n}\n\n/**\n * Component\n */\nconst UploadIcon = ({ resumable }) => {\n\n const iconElement = useRef()\n\n useEffect(() => {\n if (resumable && iconElement) resumable.assignBrowse(iconElement.current)\n }, [])\n\n return (\n <div className=\"upload-icon\" ref={iconElement}>\n <Icon icon=\"folder_open\" clickable/>\n </div>\n )\n}","import React, { useState, useMemo } from 'react'\nimport ResumableJS from 'resumablejs'\nimport { UploadArea } from './UploadArea'\nimport './uploader.css'\n\n/**\n * Uploader\n */\nexport const Uploader = ({ label, target, accept, className, onSuccess, onError, onComplete, errors = [] }) => {\n\n const STATES = { 'IDLE': 0, 'RUNNING': 1, 'SUCCESS': 2, 'ERROR': 3, 'COMPLETED': 4 }\n\n const resumable = useMemo(() => {\n const config = {\n target: target,\n chunkSize: 1 * 1024 * 1024,\n simultaneousUploads: 1,\n testChunks: false,\n throttleProgressCallbacks: 1,\n fileType: accept\n }\n const resumable = new ResumableJS(config)\n resumable.on('fileAdded', onFileAdded)\n resumable.on('fileProgress', onFileProgress)\n resumable.on('fileSuccess', onFileSuccess)\n resumable.on('fileError', onFileError)\n resumable.on('complete', onAllComplete)\n return resumable\n }, [])\n\n const [progress, setProgress] = useState(0)\n const [state, setState] = useState(STATES.IDLE)\n const [error, setError] = useState()\n const [files, setFiles] = useState([])\n\n function onFileAdded(file) {\n files.push(file)\n setFiles(files)\n resumable.upload()\n }\n\n function onFileProgress(file) {\n const progress = file.progress()\n setProgress(progress)\n }\n\n function onFileSuccess(file, message) {\n setState(STATES.SUCCESS)\n if (onSuccess) onSuccess(file, message)\n }\n\n function onFileError(file, message) {\n setError(message)\n setState(STATES.ERROR)\n if (onError) onError(file, message)\n }\n\n function onAllComplete() {\n setState(STATES.IDLE)\n if (onComplete) onComplete(files)\n }\n\n return (\n <div className={`uploader ${className}`}>\n <UploadArea resumable={resumable} state={state} label={label} error={error}/>\n </div>\n )\n}\n","import React, { Fragment } from 'react'\nimport { Icon, Text, LinearProgress } from '../html'\nimport './uploader.css'\n\n/**\n * Upload File\n */\nexport const UploadFile = ({ file, state, progress, error }) => {\n\n const STATES = { 'IDLE': 0, 'RUNNING': 1, 'SUCCESS': 2, 'ERROR': 3 }\n\n const icon = error ? <Icon icon=\"image\" className=\"error\"/> : <Icon icon=\"image\" />\n return state !== STATES.IDLE ? (\n <Fragment>\n\n <div className=\"upload-file\">\n {icon}\n <Text use=\"body1\" tag=\"label\">{file.fileName}</Text>\n {state === STATES.RUNNING ? <LinearProgress progress={progress} /> : ''}\n {state === STATES.RUNNING ? <Icon icon=\"close\" clickable /> : ''}\n {state === STATES.SUCCESS ? <Icon icon=\"done\" /> : ''}\n {state === STATES.ERROR ? <Icon icon=\"error\" /> : ''}\n </div>\n\n { error ? <div className=\"error\"><Text use=\"overline\">{error}</Text></div> : ''}\n\n </Fragment>\n ) : ''\n}","import React from 'react'\nimport { Icon } from './icon';\nimport { Text } from './text'\nimport './chip.css'\n\n/**\n * Chip\n */\nexport const Chip = (props) => {\n\n const { id, icon, label, action, outlined, selected, onSelect } = props\n\n function select(event) {\n event.stopPropagation();\n event.preventDefault();\n if (onSelect) onSelect(id)\n }\n\n let style = outlined ? \"outlined\" : \"normal\"\n if (selected) style = `${style} selected`\n return (\n <div className={`chip ${style}`} onClick={select}>\n {icon ? <Icon icon={icon} size=\"small\" /> : null}\n <main><Text>{label}</Text></main>\n {action ? <span className=\"meta\">{action}</span> : null}\n </div>\n )\n}\n\n/**\n * Chips\n */\nexport const Chips = (props) => {\n const { children } = props\n return (\n <div className=\"chips\">\n {children}\n </div>\n )\n}","import React, { Fragment, useContext, useMemo, useState } from 'react';\nimport { Button, Text } from '../html';\nimport { Dialog } from '../site/dialog'\nimport { SiteContext } from '../site/siteContext';\nimport { ContentForm } from './ContentForm';\nimport { Content } from './ContentType';\n\n/**\n * Create Content Dialog\n */\nexport const CreateContentDialog = ({ label, type, validator, onOK, onError, onActionClose = true }) => {\n\n const site = useContext(SiteContext);\n const [form, setForm] = useState({})\n const [isValid, setValid] = useState(false)\n const [errors, setErrors] = useState([])\n\n function change(form, validForm) {\n setForm(form)\n if (validator) {\n const { validation, errors = [] } = validator(form)\n setValid(validForm && validation)\n setErrors(errors) \n } else {\n setValid(validForm)\n }\n }\n \n function onAction(action) {\n if (action === 'OK' && onOK) onOK(form)\n if (action === 'CLOSE' || onActionClose === true) site.closeDialog();\n }\n \n function isRequired(field) {\n const { required = false } = field\n return required \n }\n\n function isOptional(field) {\n const { creation = false } = field\n return creation\n }\n \n const actions = (\n <Fragment>\n <Button label=\"CLOSE\" action={() => onAction(\"CLOSE\")}/>\n <Button label=\"OK\" action={() => onAction(\"OK\")} disabled={!isValid} raised />\n </Fragment>\n )\n \n const title = <Text use=\"headline6\">{label}</Text>\n const content = new Content(type, form)\n return (\n <Dialog title={title} open={true} onAction={onAction} actions={actions}>\n <ContentForm content={content} filter={(field) => isRequired(field) || isOptional(field)} onChange={change} />\n { errors.map ( error => <Text use=\"overline\" tag=\"div\" className=\"error\">{error}</Text> )}\n </Dialog>\n )\n}","import React, { useState } from 'react'\nimport { Icon, Text } from '../../html'\nimport './Kanban.css'\n\n/**\n * Kanban\n */\nexport const Kanban = ({ children }) => {\n return (\n <div className=\"kanban\">\n {children}\n </div>\n )\n}\n\n/**\n * Kanban Column\n */\nexport const KanbanColumn = ({ id, accept = [], icon, title, subtitle, badge, children, minified = false, disabled = false }) => {\n\n const [min, setMin] = useState(minified)\n\n function toggle() {\n setMin(!min)\n }\n\n return min ? (\n <div className={`kanban-column ${id} min`}>\n <main>\n {title}\n </main>\n <footer>\n <Icon icon=\"toggle_off\" onIcon=\"toggle_on\" clickable action={toggle} />\n </footer>\n </div>\n ) : (\n <div className={`kanban-column ${id} ${disabled ? 'disabled' : ''}`}>\n <header>\n <Icon icon={icon} />\n <div className=\"title\">\n <Text use=\"headline6\">{title}</Text>\n <Text className=\"secondary-text\" use=\"body2\">{subtitle}</Text>\n </div>\n <div className=\"badge\" >{badge}</div>\n </header>\n <main>\n {children}\n </main>\n <footer>\n <Icon icon=\"toggle_off\" onIcon=\"toggle_on\" clickable action={toggle} />\n </footer>\n </div>\n )\n}\n\n/**\n * Kanban Card\n */\nexport const KanbanCard = ({ id, type, color, children }) => {\n return (\n <div className={`kanban-card ${color}`} >\n {children}\n </div>\n )\n}","import React, { useState } from 'react'\nimport { Icon , Button, Text, TextField } from '../../html'\nimport './LoginBox.css'\n\n/**\n * Login Box\n */\nexport const LoginBox = ({\n logo, title,\n userLabel = \"User\",\n passwordLabel = \"Password\",\n loginLabel = \"Log In\", onOK,\n forgotLabel = \"Forgot Password ?\", onForgot,\n message,\n loading\n}) => {\n\n const [user, setUser] = useState('')\n const [password, setPassword] = useState('')\n\n function canOK() {\n return user && user.length > 0 && password && password.length > 0\n }\n\n function ok(forcedPwd) {\n if (onOK && canOK()) onOK(user, forcedPwd || password)\n }\n\n function canForgot() {\n return user && user.length > 0\n }\n\n function forgot() {\n if (onForgot) onForgot(user)\n }\n\n function tx(txt) {\n return <Text>{txt}</Text>\n }\n\n function changeUser(id, value) {\n setUser(value)\n }\n \n function changePassword(id, value) {\n setPassword(value)\n }\n\n return (\n <div className=\"login-box\">\n <header>\n {logo ? <img src={logo} /> : ''}\n <div className=\"title\"><Text>{title}</Text></div>\n </header>\n <main>\n <TextField label={tx(userLabel)} value={user} onChange={changeUser} onEnter={ok} outlined />\n <TextField label={tx(passwordLabel)} value={password} onChange={changePassword} onEnter={ok} type=\"password\" outlined />\n </main>\n <footer>\n { onForgot ? <Button label={tx(forgotLabel)} action={forgot} disabled={!canForgot()}/> : null }\n { loading ? <div className=\"load-box\"><Icon icon=\"refresh\" /></div> : <Button label={tx(loginLabel)} action={ok} disabled={!canOK()} raised /> }\n { message ? <div className=\"message\"><Text>{message}</Text></div> : null}\n </footer>\n </div>\n )\n}","import React from 'react'\nimport './property.css'\n\n/**\n * Property\n */\nexport const Property = (props) => {\n\n const { name, value} = props\n\n return (\n <div className=\"property\">\n <div className=\"property-name\">{name}</div>\n <div className=\"property-value\">{value}</div>\n </div>\n )\n}","import React from 'react'\nimport { Text } from './text';\nimport './radio.css'\n\n/**\n * Radio Button\n */\nexport const RadioButton = (props) => {\n\n const { id, name, label, placeholder, value, onChange } = props\n\n function change(event) {\n const value = event.target.value\n if (onChange) onChange(id, value)\n }\n\n const labelTxt = <Text>{label}</Text>\n return (\n <div className=\"radio\">\n <input id={id} name={name} type=\"radio\" placeholder={placeholder} value={value} onClick={change} />\n <span class=\"checkmark\" />\n <label htmlFor={id}>{labelTxt}</label>\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport { TextField, Text, Button } from '../../html'\nimport './ResetPasswordBox.css'\n\n/**\n * Reset Password\n */\nexport const ResetPasswordBox = ({ logo, title, children, onOK, onClose }) => {\n\n const [form, setForm ] = useState({})\n const [error, setError] = useState()\n\n function canOK() {\n return form.password1 && form.password2\n }\n\n function changeField(id, value) {\n const next = Object.assign({}, form, {[id]: value})\n setForm(next)\n }\n\n function ok() {\n if (onOK && canOK()) {\n if (form.password1 === form.password2 ) {\n setError(null)\n onOK(form)\n } else {\n setError(\"New Password and Confirm New Password do not match\")\n }\n }\n }\n\n function close() {\n if (onClose) onClose()\n }\n\n return (\n <div className=\"reset-password-box\">\n <header>\n {logo ? <img src={logo} /> : null}\n {title ? <div className=\"title\"><Text>{title}</Text></div> : null}\n { children }\n </header>\n <main>\n <Text use=\"headline6\">Change Password</Text>\n <TextField id=\"password1\" outlined icon=\"lock\" type=\"password\" label=\"New Password\" lapse={100} onChange={changeField} onEnter={ok}/>\n <TextField id=\"password2\" outlined icon=\"lock\" type=\"password\" label=\"Confirm New Password\" lapse={100} onChange={changeField} onEnter={ok}/>\n { error ? <div className=\"error\">{error}</div> : null}\n </main>\n <footer>\n <Button label=\"Close\" action={close}/>\n <Button label=\"OK\" raised disabled={!canOK()} action={ok}/>\n </footer>\n </div>\n )\n}","import React, { useEffect, useState } from 'react'\nimport { Icon } from './icon';\nimport { Header } from './header';\nimport './section.css'\n\n/**\n * Section\n */\nexport const Section = (props) => {\n\n const { icon, title = '', canCollapse = true, open = false, actions, children, className } = props\n const [isOpen, setOpen] = useState(open)\n\n useEffect(() => {\n setOpen(open)\n }, [open])\n\n const toggle = () => {\n setOpen(!open)\n }\n\n return (\n <section className={`section2 ${className}`}>\n <Header icon={{ icon }} title={title}>\n {actions}\n {canCollapse ? <Icon icon=\"expand_more\" onIcon=\"expand_less\" clickable action={toggle} /> : ''}\n </Header>\n {isOpen ? (<main>{children}</main>) : ''}\n </section>\n )\n}","import React, { Fragment, useContext, useState } from 'react';\nimport { Uploader } from './uploader'\nimport { Button, Text } from '../html';\nimport { SiteContext, Dialog } from '../site';\nimport { UploadFile } from './UploadFile';\n\n/**\n * Upload Dialog\n */\nexport const UploadDialog = ({ label, target, accept, onSuccess, onOK, onError, onClose, onActionClose = true }) => {\n\n const site = useContext(SiteContext);\n const [file, setFile] = useState();\n const [errors, setErrors] = useState([])\n\n function onComplete(uploads) {\n setFile(uploads[0]);\n if (onSuccess) onSuccess(uploads[0])\n }\n\n function onAction(action) {\n if (action === 'CLOSE' || onActionClose === true) {\n site.closeDialog();\n onClose()\n }\n }\n\n const actions = (\n <Fragment>\n <Button label=\"CLOSE\" action={() => onAction(\"CLOSE\")} />\n </Fragment>\n )\n\n const title = <Text use=\"headline6\">{label}</Text>\n return (\n <Dialog title={title} open={true} onAction={onAction} actions={actions}>\n {file ? <UploadFile file={file} /> : <Uploader label={label} accept={accept} target={target} onComplete={onComplete} />}\n {errors.map(error => <Text use=\"overline\" tag=\"div\" className=\"error\">{error}</Text>)}\n </Dialog>\n )\n}","import React, { useState } from 'react'\nimport { Icon, Header, Text } from '../../html'\nimport './Viewer.css'\n\n/**\n * Viewer\n */\nexport const Viewer = ({ title, src, info, actions = [], tools = false, onClose }) => {\n\n const [showDetails, setShowDetails] = useState(false)\n\n function toggleDetails() {\n setShowDetails(!showDetails)\n }\n\n const headerTitle = <Text use=\"headline6\">{title}</Text>\n return (\n <div className=\"viewer\">\n <Header icon={{ icon: 'close', clickable: true, action: onClose }} title={headerTitle} >\n {showDetails ? '' : <Icon icon=\"info\" clickable action={toggleDetails} />}\n {actions}\n </Header>\n <main>\n <div className=\"resizer\">\n <picture>\n <img src={src} />\n </picture>\n </div>\n </main>\n <aside className={`${showDetails ? 'open' : ''}`}>\n <Header title=\"Detalles\">\n <Icon icon=\"close\" clickable action={toggleDetails} />\n </Header>\n <main>\n {info}\n </main>\n </aside>\n {tools ? (\n <footer>\n <Icon clickable icon=\"zoom_out\" />\n <Icon clickable icon=\"zoom_out_map\" />\n <Icon clickable icon=\"zoom_in\" />\n </footer>\n ) : null }\n </div>\n )\n}","import 'material-design-icons-iconfont/dist/material-design-icons.css'\n\nexport * from './http'\nexport * from './html'\nexport * from './widgets'\nexport * from './site'\nexport * from './domain'\nexport * from './upload'\n\nexport const isFunction = value => value && (Object.prototype.toString.call(value) === \"[object Function]\" || \"function\" === typeof value || value instanceof Function);\n"],"names":["fetchAsync","method","URL","body","token","console","log","request","mode","headers","Accept","recover","result","fetch","response","ok","json","e","then","error","Error","success","message","HTTPClient","domain","securityCtx","GET","undefined","POST","PUT","PATCH","DELETE","SESSION_NAME","process","env","REACT_APP_SESSION","window","SESSION","Session","sessionStorage","getItem","JSON","parse","me","init","setItem","stringify","refresh","this","isLoggedIn","DSSession","logout","removeItem","Icon","size","clickable","action","className","onClick","event","stopPropagation","preventDefault","icon","Button","label","disabled","style","raised","outlined","h","SiteContext","React","createContext","Text","children","site","useContext","dictionary","term","text","lang","CheckBox","props","id","placeholder","value","onChange","change","target","checked","labelTxt","key","type","class","htmlFor","Form","title","columns","useState","fields","setFields","isEmpty","useEffect","initFields","Children","toArray","filter","child","map","required","validation","valid","field","every","form","reduce","changeField","find","f","Object","assign","slice","items","span","cloneElement","FieldWrapper","gridColumn","gridLayout","gridTemplateColumns","Fragment","use","Header","caption","prominent","dense","theme","primary","secondary","iconSrc","src","img","backgroundImage","List","onSelect","select","groupBy","GroupedList","item","ListItem","groups","group","g","name","content","push","line1","line2","meta","MenuContext","Menu","MenuIcon","align","open","setOpen","toggle","Provider","MenuItem","CircularProgress","LinearProgress","progress","max","Tabs","selected","tabs","index","Tab","actions","Stack","TextField","readOnly","onEnter","onKeyDown","charCode","keyCode","onFocus","changeFocus","lose","DropDown","options","setLabel","Array","isArray","option","next","getAttribute","DataTable","rows","onRowSelection","onSort","editable","sortDir","row","sort","dragged","dropped","sortable","array","sortObject","sortKeys","keys","length","keySort","a","b","direction","sorted","multiSort","DataTableRow","onDrop","isInfoOpen","toggleInfo","infoIcon","ev","column","DataTableCell","cell","info","prototype","toString","call","Function","min","StringCellEditor","BooleanCellViewer","StringCellViewer","render","o","TokenField","mounted","useRef","setValue","tokens","setTokens","current","Token","onDelete","splice","remove","concat","tag","Tree","nodes","TreeNode","small","TreeItem","PageContext","PageProvider","context","Page","layout","SiteProvider","siteDictionary","siteLang","setLang","setDictionary","sideNav","setSideNav","showNav","setShowNav","setInfo","setConsole","page","setPage","dialog","setDialog","preview","setPreview","breadcrumb","setBreadcrumb","focused","setFocused","openInfo","closeInfo","toggleConsole","goto","openDialog","closeDialog","openPreview","closePreview","SiteHeader","SiteToolBar","SiteAside","SiteMenu","logo","sections","section","SitePage","SiteDialog","SitePreview","SiteConsole","Dialog","TYPES","STRING","NUMBER","DATE","BOOLEAN","ARRAY","ENTITY","FUNCTION","EMAIL","CHECK","values","obj","x","ContentType","schema","_schema","checkType","data","validChildren","element","validate","entries","_this","hasOwnProperty","entryData","child1","child2","data2","Content","_type","_value","isValid","update","ContentForm","ContentFormField","NumberField","StringField","textarea","fieldType","ContentEditor","nextValue","FieldEditor","TabbedContentEditor","grouped","tab","setTab","groupName","TreededContentEditor","setSelected","add","node","nextNode","nextContent","value1","EntityEditor","StringEditor","NumberEditor","MultiSelectionEditor","ListEditor","CollectionEditor","renderField","fid","includes","indexOf","v","Feeder","Renderer","Adder","i","cellId","cellValue","table","onAdd","onRemove","CollectionAdder","edit","setEdit","setForm","EditContentDialog","validator","onOK","setValid","errors","setErrors","onAction","_catch","http","API","REACT_APP_API","CollectionList","pageContext","setPageContext","all","description","clear","CollectionTree","levels","generateNodes","by","n","forEach","renderNodes","save","autosave","delay","timer","canSave","equal","clearTimeout","setTimeout","renderEditor","CollectionContext","url","CollectionAPI","load","_this2","create","_this4","_this6","patch","_this8","updateProperty","propertyName","_this10","_this12","UploadArea","areaElement","drag","setDrag","resumable","assignDrop","state","onDragOver","onDragLeave","ref","UploadIcon","iconElement","assignBrowse","Uploader","accept","onSuccess","onError","onComplete","useMemo","ResumableJS","chunkSize","simultaneousUploads","testChunks","throttleProgressCallbacks","fileType","on","onFileAdded","onFileProgress","onFileSuccess","onFileError","onAllComplete","setProgress","setState","setError","files","setFiles","file","upload","UploadFile","fileName","editor","onActionClose","isRequired","creation","isOptional","validForm","color","subtitle","badge","minified","setMin","onIcon","userLabel","passwordLabel","loginLabel","forgotLabel","onForgot","loading","user","setUser","password","setPassword","canOK","forcedPwd","tx","txt","onClose","password1","password2","lapse","canCollapse","isOpen","toolbar","setFile","uploads","tools","showDetails","setShowDetails","toggleDetails","headerTitle"],"mappings":"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"}