diff --git a/components.js b/components.js
new file mode 100644
index 0000000..d9d1135
--- /dev/null
+++ b/components.js
@@ -0,0 +1,221 @@
+import { h, render, createContext, Fragment } from 'https://cdn.skypack.dev/preact';
+import { useReducer, useState } from 'https://cdn.skypack.dev/preact/hooks';
+import { css, cx } from 'https://cdn.skypack.dev/@emotion/css';
+import htm from 'https://unpkg.com/htm?module';
+const html = htm.bind(h);
+
+let Styles = {
+ Form:css`
+ position:realtive;
+ box-sizing: border-box;
+ padding: 10px;
+ color:black;
+ font-family:sans-serif;
+
+ .Title
+ {
+ font-size:24px;
+ font-weight:100;
+ }
+
+ .Section
+ {
+ padding:10px 0 10px 0;
+
+ .Heading
+ {
+ display:inline-block;
+ color:#666;
+ font-family:sans-serif;
+ font-size:12px;
+ font-weight:900;
+ text-transform:uppercase;
+ }
+ .Group
+ {
+ display:inline-block;
+ padding:5px;
+ border-radius:5px;
+ margin:3px;
+ background:rgba(0, 0, 0, 0.3)
+ }
+ }
+ `
+};
+
+let PivotForm = props =>
+{
+
+ let pivotColumns = N.Step(Pivot.Schema, "label")||[];
+ let pivotColumnsUsed = N.Step(Pivot.Proto, "used-pivot")||[];
+
+ let sumColumns = N.Step(Pivot.Schema, "sum")||[];
+ //let sumColumnsUsed = N.Step(Pivot.Proto, "used-sum")||[];
+
+ let indiciesPivot = pivotColumnsUsed.map(node=>node.Meta.Index);
+ let indiciesSum = sumColumns.map(node=>node.Meta.Index);
+ //let indiciesSum = sumColumnsUsed.map(node=>node.Meta.Index);
+
+ let displayPivotsAll = html`
+
+
Available Columns
+
+ ${pivotColumns.map( columnPivot =>
+ {
+ let attributes = {};
+ if(N.Step(columnPivot, "used-pivot", false))
+ {
+ attributes.disabled = true;
+ }
+ else
+ {
+ attributes.onClick = e=>
+ {
+ N.Connect(Pivot.Proto, columnPivot, "used-pivot");
+ Render();
+ }
+ }
+ return html``;
+ })}
+
+
+ `;
+
+ let displayPivotsPending = null;
+ if(pivotColumnsUsed.length)
+ {
+ displayPivotsPending = html`
+
+
Pending Pivot
+
+ ${pivotColumnsUsed.map(columnPivot=>html`
+
+ `)}
+
+
+
+
+ `;
+ }
+
+ return html`
+
+ `;
+}
+
+let Section = props =>
+{
+ let styles = css`
+ border-top:1px solid #aaa;
+ .Heading
+ {
+ padding:6px 0 6px 0;
+ color:#666;
+ font-weight:900;
+ font-size:12px;
+ text-transform:uppercase;
+ cursor:pointer;
+
+ span
+ {
+ display:inline-block;
+ width:20px;
+ height:20px;
+ margin-right:10px;
+ border-radius:20px;
+ background:black;
+ color:white;
+ text-align:center;
+ }
+ }
+ .Heading:hover
+ {
+ color:black;
+ }
+ .Body
+ {
+ margin:10px 0 10px 0;
+ }
+ `;
+
+ let [openGet, openSet] = useState(false);
+ return html`
+
+
openSet(!openGet)}>
+ ${openGet ? `−` : `+`}
+ ${props.label}
+
+ ${ openGet ? html`
${props.children}
` : null }
+
+ `;
+}
+
+let Modifier = props =>
+{
+ let refNode = N.Step(props.modifier, "ModifyAt")[0];
+
+ let handlerClick = () =>
+ {
+ Pivot.Unmodify(props.modifier);
+ Render();
+ };
+
+ return html`
+
+
${refNode.Meta.Label}
+
+
+ `;
+}
+
+let PivotRoot = ({pivot, children}) =>
+{
+
+ let stylesRoot = css`
+ display:block;
+ box-sizing:border-box;
+ padding:15px;
+ font-family:sans-serif;
+ `;
+ let stylesHeading = css`
+ margin: 0 0 15px 0;
+ font-weight:0;
+ font-size:24px;
+ `;
+
+ let modifiers = N.Step(pivot, "Modifier") || [];
+
+ let handleDelete = ()=>
+ {
+ Pivot.Delete(pivot);
+ Render();
+ };
+
+ return html`
+
+
${pivot.Meta.Label}
+ <${Section} key="settings" label=${`Settings`}>
+
+ />
+ <${Section} key="modifiers" label=${`Modifiers (${modifiers.length})`}>
+ ${ !modifiers.length ? html`
No modifiers` : modifiers.map( m => html`<${Modifier} modifier=${m}/>`)}
+ />
+ <${Section} key="tree" label=${"Tree"}>
+ ${children}
+ />
+
+ `;
+};
+
+export {Section, PivotRoot, PivotForm};
\ No newline at end of file
diff --git a/index.html b/index.html
index 4f3e5bc..4879633 100755
--- a/index.html
+++ b/index.html
@@ -283,10 +283,10 @@ var Pivot =
{
N.ID.Walk++;
- let names = N.Step(Pivot.Schema, "label");
+ let columns = N.Step(Pivot.Schema, "all");
let label = inPivotIndicies.map( inPivotIndex =>
{
- return names[inPivotIndex].Meta.Label;
+ return columns[inPivotIndex].Meta.Label;
});
let pivotRoot = N.Create({Label:label.join("|"), Leaves:Pivot.Leaves});
@@ -366,15 +366,21 @@ var Pivot =
};
+
+