@sanity/table 1.0.0
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.
- package/LICENSE +24 -0
- package/README.md +93 -0
- package/lib/index.esm.js +2 -0
- package/lib/index.esm.js.map +1 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/src/index.d.ts +26 -0
- package/package.json +93 -0
- package/sanity.json +8 -0
- package/src/components/TableComponent.tsx +258 -0
- package/src/components/TableIcon.tsx +16 -0
- package/src/components/TableInput.tsx +76 -0
- package/src/components/TableMenu.tsx +145 -0
- package/src/components/TablePreview.tsx +63 -0
- package/src/components/index.ts +2 -0
- package/src/index.ts +64 -0
- package/v2-incompatible.js +11 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 ʞunp ʇɹǝdnɹ
|
|
4
|
+
Copyright (c) 2022 Mathis Bullinger
|
|
5
|
+
Copyright (c) 2022 Dave Lucia
|
|
6
|
+
Copyright (c) 2022 Sanity.io
|
|
7
|
+
|
|
8
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
10
|
+
in the Software without restriction, including without limitation the rights
|
|
11
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
13
|
+
furnished to do so, subject to the following conditions:
|
|
14
|
+
|
|
15
|
+
The above copyright notice and this permission notice shall be included in all
|
|
16
|
+
copies or substantial portions of the Software.
|
|
17
|
+
|
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
24
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Sanity Table Plugin
|
|
2
|
+
|
|
3
|
+
> This is a **Sanity Studio v3** plugin.
|
|
4
|
+
> For the v2 version, please refer to the [v2 repository](https://github.com/rdunk/sanity-plugin-table).
|
|
5
|
+
|
|
6
|
+
This is a (triple) fork of the Sanity Plugin Table, migrated to [Sanity Studio V3](https://beta.sanity.io/docs/platform/studio/v2-to-v3).
|
|
7
|
+
Only the v3 version is maintained by Sanity.io.
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
## Acknowledgements
|
|
12
|
+
|
|
13
|
+
Big thanks to the original contributors for their work!
|
|
14
|
+
* Original version: [rdunk/sanity-plugin-table](https://github.com/rdunk/sanity-plugin-table).
|
|
15
|
+
* Further improvements in fork [MathisBullinger/sanity-plugin-another-table](https://github.com/MathisBullinger/sanity-plugin-another-table).
|
|
16
|
+
* Initial V3 port: [bitfo/sanity-plugin-table](https://github.com/bitfo/sanity-plugin-table)
|
|
17
|
+
|
|
18
|
+
## Disclaimer
|
|
19
|
+
|
|
20
|
+
Sometimes a table is just what you need.
|
|
21
|
+
However, before using the Table plugin, consider if there are other ways to model your data that are:
|
|
22
|
+
* easier to edit and validate
|
|
23
|
+
* easier to query
|
|
24
|
+
|
|
25
|
+
Approaching your schemas in a more structured manner can often pay dividends down the line.
|
|
26
|
+
|
|
27
|
+
## Install
|
|
28
|
+
|
|
29
|
+
Install using npm
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
$ npm --save @sanity/table
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Usage
|
|
36
|
+
|
|
37
|
+
Add the plugin to your project configuration. Then use the type in your schemas
|
|
38
|
+
|
|
39
|
+
```js
|
|
40
|
+
// sanity.config.ts
|
|
41
|
+
|
|
42
|
+
import { defineConfig } from 'sanity';
|
|
43
|
+
|
|
44
|
+
import { table } from '@sanity/table';
|
|
45
|
+
|
|
46
|
+
export default defineConfig({
|
|
47
|
+
name: 'default',
|
|
48
|
+
title: 'My Cool Project',
|
|
49
|
+
projectId: 'my-project-id',
|
|
50
|
+
dataset: 'production',
|
|
51
|
+
plugins: [
|
|
52
|
+
// Include the table plugin
|
|
53
|
+
table(),
|
|
54
|
+
],
|
|
55
|
+
schema: {
|
|
56
|
+
types: [
|
|
57
|
+
{
|
|
58
|
+
name: 'product',
|
|
59
|
+
title: 'Product',
|
|
60
|
+
type: 'document',
|
|
61
|
+
fields: [
|
|
62
|
+
{
|
|
63
|
+
// Include the table as a field
|
|
64
|
+
// Giving it a semantic title
|
|
65
|
+
name: 'sizeChart',
|
|
66
|
+
title: 'Size Chart',
|
|
67
|
+
type: 'table',
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## License
|
|
77
|
+
|
|
78
|
+
[MIT](LICENSE) © ʞunp ʇɹǝdnɹ, Mathis Bullinger, Dave Lucia and Sanity.io
|
|
79
|
+
|
|
80
|
+
## Develop & test
|
|
81
|
+
|
|
82
|
+
This plugin uses [@sanity/plugin-kit](https://github.com/sanity-io/plugin-kit)
|
|
83
|
+
with default configuration for build & watch scripts.
|
|
84
|
+
|
|
85
|
+
See [Testing a plugin in Sanity Studio](https://github.com/sanity-io/plugin-kit#testing-a-plugin-in-sanity-studio)
|
|
86
|
+
on how to run this plugin with hotreload in the studio.
|
|
87
|
+
|
|
88
|
+
### Release new version
|
|
89
|
+
|
|
90
|
+
Run ["CI & Release" workflow](https://github.com/sanity-io/sanity-plugin-table/actions/workflows/main.yml).
|
|
91
|
+
Make sure to select the main branch and check "Release new version".
|
|
92
|
+
|
|
93
|
+
Semantic release will only release on configured branches, so it is safe to run release on any branch.
|
package/lib/index.esm.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function t(t){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?e(Object(o),!0).forEach((function(e){r(t,e,o[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):e(Object(o)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}))}return t}function r(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}import{set as n,unset as o,defineType as l,definePlugin as i}from"sanity";import{jsx as c,jsxs as a,Fragment as s}from"react/jsx-runtime";import u,{useState as d}from"react";import{Box as p,Button as f,TextInput as h,Dialog as y,Card as m,Inline as g,MenuButton as v,Menu as w,MenuItem as b,MenuDivider as C,Text as A,Flex as k,Label as R,Grid as x}from"@sanity/ui";import{RemoveIcon as O,ControlsIcon as j,AddIcon as S,WarningOutlineIcon as I}from"@sanity/icons";var U,T=new Uint8Array(16);function z(){if(!U&&!(U="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return U(T)}var E=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function P(e){return"string"==typeof e&&E.test(e)}for(var _=[],D=0;D<256;++D)_.push((D+256).toString(16).substr(1));function M(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=(_[e[t+0]]+_[e[t+1]]+_[e[t+2]]+_[e[t+3]]+"-"+_[e[t+4]]+_[e[t+5]]+"-"+_[e[t+6]]+_[e[t+7]]+"-"+_[e[t+8]]+_[e[t+9]]+"-"+_[e[t+10]]+_[e[t+11]]+_[e[t+12]]+_[e[t+13]]+_[e[t+14]]+_[e[t+15]]).toLowerCase();if(!P(r))throw TypeError("Stringified UUID is invalid");return r}function V(e,t,r){function n(e,n,o,l){if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));for(var t=[],r=0;r<e.length;++r)t.push(e.charCodeAt(r));return t}(e)),"string"==typeof n&&(n=function(e){if(!P(e))throw TypeError("Invalid UUID");var t,r=new Uint8Array(16);return r[0]=(t=parseInt(e.slice(0,8),16))>>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=255&t,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=255&t,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=255&t,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=255&t,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=255&t,r}(n)),16!==n.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var i=new Uint8Array(16+e.length);if(i.set(n),i.set(e,n.length),(i=r(i))[6]=15&i[6]|t,i[8]=63&i[8]|128,o){l=l||0;for(var c=0;c<16;++c)o[l+c]=i[c];return o}return M(i)}try{n.name=e}catch(e){}return n.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",n.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",n}function N(e){return 14+(e+64>>>9<<4)+1}function H(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function L(e,t,r,n,o,l){return H((i=H(H(t,e),H(n,l)))<<(c=o)|i>>>32-c,r);var i,c}function F(e,t,r,n,o,l,i){return L(t&r|~t&n,e,t,o,l,i)}function J(e,t,r,n,o,l,i){return L(t&n|r&~n,e,t,o,l,i)}function B(e,t,r,n,o,l,i){return L(t^r^n,e,t,o,l,i)}function W(e,t,r,n,o,l,i){return L(r^(t|~n),e,t,o,l,i)}function $(e,t,r){var n=(e=e||{}).random||(e.rng||z)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t){r=r||0;for(var o=0;o<16;++o)t[r+o]=n[o];return t}return M(n)}function q(e,t,r,n){switch(e){case 0:return t&r^~t&n;case 1:case 3:return t^r^n;case 2:return t&r^t&n^r&n}}function G(e,t){return e<<t|e>>>32-t}V("v3",48,(function(e){if("string"==typeof e){var t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(var r=0;r<t.length;++r)e[r]=t.charCodeAt(r)}return function(e){for(var t=[],r=32*e.length,n="0123456789abcdef",o=0;o<r;o+=8){var l=e[o>>5]>>>o%32&255,i=parseInt(n.charAt(l>>>4&15)+n.charAt(15&l),16);t.push(i)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[N(t)-1]=t;for(var r=1732584193,n=-271733879,o=-1732584194,l=271733878,i=0;i<e.length;i+=16){var c=r,a=n,s=o,u=l;r=F(r,n,o,l,e[i],7,-680876936),l=F(l,r,n,o,e[i+1],12,-389564586),o=F(o,l,r,n,e[i+2],17,606105819),n=F(n,o,l,r,e[i+3],22,-1044525330),r=F(r,n,o,l,e[i+4],7,-176418897),l=F(l,r,n,o,e[i+5],12,1200080426),o=F(o,l,r,n,e[i+6],17,-1473231341),n=F(n,o,l,r,e[i+7],22,-45705983),r=F(r,n,o,l,e[i+8],7,1770035416),l=F(l,r,n,o,e[i+9],12,-1958414417),o=F(o,l,r,n,e[i+10],17,-42063),n=F(n,o,l,r,e[i+11],22,-1990404162),r=F(r,n,o,l,e[i+12],7,1804603682),l=F(l,r,n,o,e[i+13],12,-40341101),o=F(o,l,r,n,e[i+14],17,-1502002290),r=J(r,n=F(n,o,l,r,e[i+15],22,1236535329),o,l,e[i+1],5,-165796510),l=J(l,r,n,o,e[i+6],9,-1069501632),o=J(o,l,r,n,e[i+11],14,643717713),n=J(n,o,l,r,e[i],20,-373897302),r=J(r,n,o,l,e[i+5],5,-701558691),l=J(l,r,n,o,e[i+10],9,38016083),o=J(o,l,r,n,e[i+15],14,-660478335),n=J(n,o,l,r,e[i+4],20,-405537848),r=J(r,n,o,l,e[i+9],5,568446438),l=J(l,r,n,o,e[i+14],9,-1019803690),o=J(o,l,r,n,e[i+3],14,-187363961),n=J(n,o,l,r,e[i+8],20,1163531501),r=J(r,n,o,l,e[i+13],5,-1444681467),l=J(l,r,n,o,e[i+2],9,-51403784),o=J(o,l,r,n,e[i+7],14,1735328473),r=B(r,n=J(n,o,l,r,e[i+12],20,-1926607734),o,l,e[i+5],4,-378558),l=B(l,r,n,o,e[i+8],11,-2022574463),o=B(o,l,r,n,e[i+11],16,1839030562),n=B(n,o,l,r,e[i+14],23,-35309556),r=B(r,n,o,l,e[i+1],4,-1530992060),l=B(l,r,n,o,e[i+4],11,1272893353),o=B(o,l,r,n,e[i+7],16,-155497632),n=B(n,o,l,r,e[i+10],23,-1094730640),r=B(r,n,o,l,e[i+13],4,681279174),l=B(l,r,n,o,e[i],11,-358537222),o=B(o,l,r,n,e[i+3],16,-722521979),n=B(n,o,l,r,e[i+6],23,76029189),r=B(r,n,o,l,e[i+9],4,-640364487),l=B(l,r,n,o,e[i+12],11,-421815835),o=B(o,l,r,n,e[i+15],16,530742520),r=W(r,n=B(n,o,l,r,e[i+2],23,-995338651),o,l,e[i],6,-198630844),l=W(l,r,n,o,e[i+7],10,1126891415),o=W(o,l,r,n,e[i+14],15,-1416354905),n=W(n,o,l,r,e[i+5],21,-57434055),r=W(r,n,o,l,e[i+12],6,1700485571),l=W(l,r,n,o,e[i+3],10,-1894986606),o=W(o,l,r,n,e[i+10],15,-1051523),n=W(n,o,l,r,e[i+1],21,-2054922799),r=W(r,n,o,l,e[i+8],6,1873313359),l=W(l,r,n,o,e[i+15],10,-30611744),o=W(o,l,r,n,e[i+6],15,-1560198380),n=W(n,o,l,r,e[i+13],21,1309151649),r=W(r,n,o,l,e[i+4],6,-145523070),l=W(l,r,n,o,e[i+11],10,-1120210379),o=W(o,l,r,n,e[i+2],15,718787259),n=W(n,o,l,r,e[i+9],21,-343485551),r=H(r,c),n=H(n,a),o=H(o,s),l=H(l,u)}return[r,n,o,l]}(function(e){if(0===e.length)return[];for(var t=8*e.length,r=new Uint32Array(N(t)),n=0;n<t;n+=8)r[n>>5]|=(255&e[n/8])<<n%32;return r}(e),8*e.length))})),V("v5",80,(function(e){var t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var n=unescape(encodeURIComponent(e));e=[];for(var o=0;o<n.length;++o)e.push(n.charCodeAt(o))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);for(var l=e.length/4+2,i=Math.ceil(l/16),c=new Array(i),a=0;a<i;++a){for(var s=new Uint32Array(16),u=0;u<16;++u)s[u]=e[64*a+4*u]<<24|e[64*a+4*u+1]<<16|e[64*a+4*u+2]<<8|e[64*a+4*u+3];c[a]=s}c[i-1][14]=8*(e.length-1)/Math.pow(2,32),c[i-1][14]=Math.floor(c[i-1][14]),c[i-1][15]=8*(e.length-1)&4294967295;for(var d=0;d<i;++d){for(var p=new Uint32Array(80),f=0;f<16;++f)p[f]=c[d][f];for(var h=16;h<80;++h)p[h]=G(p[h-3]^p[h-8]^p[h-14]^p[h-16],1);for(var y=r[0],m=r[1],g=r[2],v=r[3],w=r[4],b=0;b<80;++b){var C=Math.floor(b/20),A=G(y,5)+q(C,m,g,v)+w+t[C]+p[b]>>>0;w=v,v=g,g=G(m,30)>>>0,m=y,y=A}r[0]=r[0]+y>>>0,r[1]=r[1]+m>>>0,r[2]=r[2]+g>>>0,r[3]=r[3]+v>>>0,r[4]=r[4]+w>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}));const K=e=>{var t;return c("table",{style:{width:"100%"},children:a("tbody",{children:[e.rows.map(((t,r)=>{const n=(t=>(r,n)=>c("td",{children:c(h,{fontSize:1,padding:3,value:r,onChange:r=>e.updateCell(r,t,n)})},"cell-".concat(t,"-").concat(n)))(r);return a("tr",{children:[t.cells.map(n),c("td",{children:c(p,{marginLeft:1,style:{textAlign:"center"},children:c(f,{icon:O,padding:2,onClick:()=>e.removeRow(r),mode:"bleed"})})},r)]},"row-".concat(r))})),c("tr",{children:((null==(t=e.rows[0])?void 0:t.cells)||[]).map(((t,r)=>c("td",{children:c(p,{marginTop:1,style:{textAlign:"center"},children:c(f,{icon:O,padding:2,onClick:()=>e.removeColumn(r),mode:"bleed"})})},r)))})]})})},Q=e=>{const[t,r]=d(null),[n,o]=d("");return a(u.Fragment,{children:[t&&c(y,{header:"Add ".concat(t.type),id:"dialog-add",onClose:()=>r(null),zOffset:1e3,children:a(m,{padding:4,children:[c(h,{style:{textAlign:"left"},fontSize:2,padding:3,type:"number",value:n,onChange:e=>{o(e.currentTarget.value)}}),c(p,{marginTop:4,children:a(g,{space:1,style:{textAlign:"right"},children:[c(f,{text:"Cancel",mode:"ghost",onClick:()=>r(null)}),c(f,{text:"Confirm",tone:"critical",onClick:()=>{const e=parseInt(null!=n?n:"0",10);e<100&&(r(null),null==t||t.callback(e),o(void 0))}})]})})]})}),c(v,{button:c(f,{icon:j,fontSize:1,padding:2,mode:"ghost"}),id:"menu-button-example",menu:a(w,{children:[c(b,{icon:S,fontSize:1,text:"Add Row(s)",onClick:()=>{r({type:"rows",callback:t=>e.addRows(t)})}}),c(b,{icon:S,fontSize:1,text:"Add Row At Index",onClick:()=>{r({type:"rows",callback:t=>e.addRowAt(t)})}}),c(b,{icon:S,fontSize:1,text:"Add Column(s)",onClick:()=>{r({type:"columns",callback:t=>e.addColumns(t)})}}),c(b,{icon:S,fontSize:1,text:"Add Column At Index",onClick:()=>{r({type:"columns",callback:t=>e.addColumnAt(t)})}}),c(C,{}),c(b,{icon:I,fontSize:1,text:"Remove",tone:"critical",onClick:e.remove})]}),placement:e.placement})]})};var X;const Y=null!=(X=globalThis.structuredClone)?X:e=>JSON.parse(JSON.stringify(e)),Z=e=>{var r,l,i;const{value:s,onChange:u}=e,[h,v]=d(null),w=e=>u(n(e)),b=()=>{v({type:"table",callback:C})},C=()=>{u(o()),v(null)},R=e=>{if(!s)return;const t=Y(s);t.rows.forEach((t=>{t.cells.splice(e,1)})),w(t),v(null)};return a("div",{children:[h&&c(y,{header:"Remove ".concat(h.type),id:"dialog-remove",onClose:()=>v(null),zOffset:1e3,children:a(m,{padding:4,children:[a(A,{children:["Are you sure you want to remove this ",h.type,"?"]}),c(p,{marginTop:4,children:a(g,{space:1,style:{textAlign:"right"},children:[c(f,{text:"Cancel",mode:"ghost",onClick:()=>v(null)}),c(f,{text:"Confirm",tone:"critical",onClick:()=>h.callback()})]})})]})}),c(p,{children:c(k,{justify:"flex-end",children:(null==(r=null==s?void 0:s.rows)?void 0:r.length)&&c(Q,{addColumns:e=>{if(!s)return;const t=Y(s);return t.rows.forEach(((r,n)=>{for(let r=0;r<e;r++)t.rows[n].cells.push("")})),w(t)},addColumnAt:e=>{if(!s)return;const t=Y(s);return t.rows.forEach(((r,n)=>{t.rows[n].cells.splice(e,0,"")})),w(t)},addRows:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;var t;if(!s)return;const r=Y(s),n=null!=(t=null==s?void 0:s.rows[0].cells.length)?t:0;for(let t=0;t<e;t++)r.rows.push({_type:"tableRow",_key:$(),cells:Array(n).fill("")});return w(r)},addRowAt:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(!s)return;const t=Y(s),r=s.rows[0].cells.length;return t.rows.splice(e,0,{_type:"tableRow",_key:$(),cells:Array(r).fill("")}),w(t)},remove:b,placement:"left"})})}),(null==(l=null==s?void 0:s.rows)?void 0:l.length)&&c(K,{rows:s.rows,removeRow:e=>{if(s)return s.rows.length<=1?b():v({type:"row",callback:()=>(e=>{if(!s)return;const t=Y(s);t.rows.splice(e,1),w(t),v(null)})(e)})},removeColumn:e=>{if(s)return s.rows[0].cells.length<=1?b():v({type:"column",callback:()=>R(e)})},updateCell:(e,t,r)=>{if(!s)return;const n=Y(s);return n.rows[t].cells[r]=e.target.value,w(n)}}),(!s||!(null==(i=null==s?void 0:s.rows)?void 0:i.length))&&c(g,{space:1,children:c(f,{fontSize:1,padding:3,icon:S,text:"Create Table",tone:"primary",mode:"ghost",onClick:()=>{const e={rows:[{_type:"tableRow",_key:$(),cells:["",""]},{_type:"tableRow",_key:$(),cells:["",""]}]};return w(t(t({},s),e))}})})]})};function ee(){return c("svg",{width:"1em",height:"1em",viewBox:"0 0 25 25",fill:"none",stroke:"currentColor",strokeWidth:"1.2",children:c("path",{d:"M3 3h18v18H3zM21 9H3M21 15H3M12 3v18"})})}const te=e=>{let{rows:t}=e;const r=0===t.length?0:t[0].cells.length;return c(x,{columns:r,padding:2,children:t.map((e=>e.cells.map(((t,r)=>c(m,{padding:2,style:{outline:"1px solid #DFE2E9"},children:c(A,{style:{textOverflow:"elipsis"},children:t})},e._key+r)))))})},re=e=>{var t;const{value:r={rows:[]},schemaType:n}=e,{rows:o=[],title:l}=null!=r?r:{title:"Title missing"};return a(s,{children:[c(p,{padding:3,children:a(g,{space:3,children:[c(m,{children:c(R,{size:4,children:c(ee,{})})}),c(m,{children:c(A,{children:null!=(t=null==n?void 0:n.title)?t:l})})]})}),c(p,{padding:2,children:0===o.length?c(R,{muted:!0,children:"Empty Table"}):c(te,{rows:o})})]})},ne=l({title:"Table Row",name:"tableRow",type:"object",fields:[{name:"cells",type:"array",of:[{type:"string"}]}]}),oe=l({title:"Table",name:"table",type:"object",fields:[{name:"rows",type:"array",of:[{type:ne.name}]}],components:{input:Z,preview:re},preview:{select:{rows:"rows",title:"title"},prepare:e=>{let{title:t,rows:r=[]}=e;return{title:t,rows:r}}}}),le=i((()=>({name:"table",schema:{types:[ne,oe]}})));export{Z as TableComponent,re as TablePreview,le as table};
|
|
2
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/regex.js","../node_modules/uuid/dist/esm-browser/validate.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/v35.js","../node_modules/uuid/dist/esm-browser/parse.js","../node_modules/uuid/dist/esm-browser/md5.js","../node_modules/uuid/dist/esm-browser/v4.js","../node_modules/uuid/dist/esm-browser/sha1.js","../node_modules/uuid/dist/esm-browser/v3.js","../node_modules/uuid/dist/esm-browser/v5.js","../src/components/TableInput.tsx","../src/components/TableMenu.tsx","../src/components/TableComponent.tsx","../src/components/TableIcon.tsx","../src/components/TablePreview.tsx","../src/index.ts"],"sourcesContent":["// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","import React from 'react';\nimport { Box, Button, TextInput } from '@sanity/ui';\nimport { RemoveIcon } from '@sanity/icons';\nimport type { TableRow } from './TableComponent';\n\ninterface TableInputProps {\n rows: TableRow[];\n updateCell: (\n e: React.FormEvent<HTMLInputElement>,\n rowIndex: number,\n cellIndex: number\n ) => any;\n removeRow: (index: number) => any;\n removeColumn: (index: number) => any;\n}\n\nconst TableInput = (props: TableInputProps) => {\n const renderRowCell =\n (rowIndex: number) => (cell: string, cellIndex: number) =>\n (\n <td key={`cell-${rowIndex}-${cellIndex}`}>\n <TextInput\n fontSize={1}\n padding={3}\n value={cell}\n onChange={e => props.updateCell(e, rowIndex, cellIndex)}\n />\n </td>\n );\n\n const renderRow = (row: TableRow, rowIndex: number) => {\n const renderCell = renderRowCell(rowIndex);\n\n return (\n <tr key={`row-${rowIndex}`}>\n {row.cells.map(renderCell)}\n {\n <td key={rowIndex}>\n <Box marginLeft={1} style={{ textAlign: 'center' }}>\n <Button\n icon={RemoveIcon}\n padding={2}\n onClick={() => props.removeRow(rowIndex)}\n mode=\"bleed\"\n />\n </Box>\n </td>\n }\n </tr>\n );\n };\n\n return (\n <table style={{ width: '100%' }}>\n <tbody>\n {props.rows.map(renderRow)}\n <tr>\n {(props.rows[0]?.cells || []).map((_, i) => (\n <td key={i}>\n <Box marginTop={1} style={{ textAlign: 'center' }}>\n <Button\n icon={RemoveIcon}\n padding={2}\n onClick={() => props.removeColumn(i)}\n mode=\"bleed\"\n />\n </Box>\n </td>\n ))}\n </tr>\n </tbody>\n </table>\n );\n};\n\nexport default TableInput;\n","import React, { FormEventHandler, useState } from 'react';\nimport {\n Box,\n Button,\n Card,\n Dialog,\n Inline,\n Menu,\n MenuButton,\n MenuDivider,\n MenuItem,\n Placement,\n TextInput,\n} from '@sanity/ui';\nimport { AddIcon, WarningOutlineIcon, ControlsIcon } from '@sanity/icons';\n\ninterface TableMenuProps {\n addColumns: (count: number) => any;\n addColumnAt: (index: number) => any;\n addRows: (count: number) => any;\n addRowAt: (index: number) => any;\n remove: () => any;\n placement: Placement;\n}\n\nconst TableMenu = (props: TableMenuProps) => {\n const [dialog, setDialog] = useState<{\n type: string;\n callback: (count: number) => any;\n } | null>(null);\n\n const [count, setCount] = useState<string | undefined>('');\n\n const updateCount: FormEventHandler<HTMLInputElement> = e => {\n setCount(e.currentTarget.value);\n };\n\n const addRows = () => {\n setDialog({ type: 'rows', callback: c => props.addRows(c) });\n };\n\n const addRowAt = () => {\n setDialog({ type: 'rows', callback: index => props.addRowAt(index) });\n };\n\n const addColumns = () => {\n setDialog({\n type: 'columns',\n callback: c => props.addColumns(c),\n });\n };\n\n const addColumnsAt = () => {\n setDialog({ type: 'columns', callback: index => props.addColumnAt(index) });\n };\n\n const onConfirm = () => {\n const parsedCount = parseInt(count ?? '0', 10);\n\n if (parsedCount < 100) {\n setDialog(null);\n dialog?.callback(parsedCount);\n setCount(undefined);\n }\n };\n\n return (\n <React.Fragment>\n {dialog && (\n <Dialog\n header={`Add ${dialog.type}`}\n id=\"dialog-add\"\n onClose={() => setDialog(null)}\n zOffset={1000}\n >\n <Card padding={4}>\n <TextInput\n style={{ textAlign: 'left' }}\n fontSize={2}\n padding={3}\n type=\"number\"\n value={count}\n onChange={updateCount}\n />\n <Box marginTop={4}>\n <Inline space={1} style={{ textAlign: 'right' }}>\n <Button\n text=\"Cancel\"\n mode=\"ghost\"\n onClick={() => setDialog(null)}\n />\n <Button text=\"Confirm\" tone=\"critical\" onClick={onConfirm} />\n </Inline>\n </Box>\n </Card>\n </Dialog>\n )}\n <MenuButton\n button={\n <Button icon={ControlsIcon} fontSize={1} padding={2} mode=\"ghost\" />\n }\n id=\"menu-button-example\"\n menu={\n <Menu>\n <MenuItem\n icon={AddIcon}\n fontSize={1}\n text=\"Add Row(s)\"\n onClick={addRows}\n />\n <MenuItem\n icon={AddIcon}\n fontSize={1}\n text=\"Add Row At Index\"\n onClick={addRowAt}\n />\n <MenuItem\n icon={AddIcon}\n fontSize={1}\n text=\"Add Column(s)\"\n onClick={addColumns}\n />\n <MenuItem\n icon={AddIcon}\n fontSize={1}\n text=\"Add Column At Index\"\n onClick={addColumnsAt}\n />\n <MenuDivider />\n <MenuItem\n icon={WarningOutlineIcon}\n fontSize={1}\n text=\"Remove\"\n tone=\"critical\"\n onClick={props.remove}\n />\n </Menu>\n }\n placement={props.placement}\n />\n </React.Fragment>\n );\n};\n\nexport default TableMenu;\n","/* eslint-disable consistent-return */\nimport React, { useState, FormEvent } from 'react';\nimport { uuid } from '@sanity/uuid';\nimport { ObjectInputProps, set, unset } from 'sanity';\nimport TableInput from './TableInput';\nimport TableMenu from './TableMenu';\nimport { Box, Button, Card, Dialog, Flex, Inline, Text } from '@sanity/ui';\n\nimport { AddIcon } from '@sanity/icons';\n\nconst ROW_TYPE = 'tableRow';\n\nconst deepClone: <T>(data: T) => T =\n globalThis.structuredClone ?? (data => JSON.parse(JSON.stringify(data)));\n\nexport interface TableValue {\n _type: 'table';\n rows: TableRow[];\n}\n\nexport interface TableProps extends ObjectInputProps<TableValue> {}\n\nexport type TableRow = {\n _type: string;\n _key: string;\n cells: string[];\n};\n\n// TODO refactor deeplone stuff to use proper patches\n// TODO use callback all the things\n\nconst TableComponent = (props: TableProps) => {\n const { value, onChange } = props;\n const [dialog, setDialog] = useState<{\n type: string;\n callback: () => any;\n } | null>(null);\n\n const updateValue = (v?: Omit<TableValue, '_type'>) => {\n return onChange(set(v));\n };\n\n const resetValue = () => {\n return onChange(unset());\n };\n\n const createTable = () => {\n const newValue: Omit<TableValue, '_type'> = {\n rows: [\n {\n _type: ROW_TYPE,\n _key: uuid(),\n cells: ['', ''],\n },\n {\n _type: ROW_TYPE,\n _key: uuid(),\n cells: ['', ''],\n },\n ],\n };\n return updateValue({ ...value, ...newValue });\n };\n\n const confirmRemoveTable = () => {\n setDialog({ type: 'table', callback: removeTable });\n };\n\n const removeTable = () => {\n resetValue();\n setDialog(null);\n };\n\n const addRows = (count: number = 1) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n // Calculate the column count from the first row\n const columnCount = value?.rows[0].cells.length ?? 0;\n for (let i = 0; i < count; i++) {\n // Add as many cells as we have columns\n newValue.rows.push({\n _type: ROW_TYPE,\n _key: uuid(),\n cells: Array(columnCount).fill(''),\n });\n }\n // eslint-disable-next-line consistent-return\n return updateValue(newValue);\n };\n\n const addRowAt = (index: number = 0) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n // Calculate the column count from the first row\n const columnCount = value.rows[0].cells.length;\n\n newValue.rows.splice(index, 0, {\n _type: ROW_TYPE,\n _key: uuid(),\n cells: Array(columnCount).fill(''),\n });\n\n // eslint-disable-next-line consistent-return\n return updateValue(newValue);\n };\n\n const removeRow = (index: number) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n newValue.rows.splice(index, 1);\n updateValue(newValue);\n setDialog(null);\n };\n\n const confirmRemoveRow = (index: number) => {\n if (!value) {\n return;\n }\n if (value.rows.length <= 1) return confirmRemoveTable();\n return setDialog({ type: 'row', callback: () => removeRow(index) });\n };\n\n const confirmRemoveColumn = (index: number) => {\n if (!value) {\n return;\n }\n if (value.rows[0].cells.length <= 1) return confirmRemoveTable();\n return setDialog({ type: 'column', callback: () => removeColumn(index) });\n };\n\n const addColumns = (count: number) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n // Add a cell to each of the rows\n newValue.rows.forEach((_, i) => {\n for (let j = 0; j < count; j++) {\n newValue.rows[i].cells.push('');\n }\n });\n return updateValue(newValue);\n };\n\n const addColumnAt = (index: number) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n\n newValue.rows.forEach((_, i) => {\n newValue.rows[i].cells.splice(index, 0, '');\n });\n\n return updateValue(newValue);\n };\n\n const removeColumn = (index: number) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n newValue.rows.forEach(row => {\n row.cells.splice(index, 1);\n });\n updateValue(newValue);\n setDialog(null);\n };\n\n const updateCell = (\n e: FormEvent<HTMLInputElement>,\n rowIndex: number,\n cellIndex: number\n ) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n newValue.rows[rowIndex].cells[cellIndex] = (\n e.target as HTMLInputElement\n ).value;\n return updateValue(newValue);\n };\n\n return (\n <div>\n {dialog && (\n <Dialog\n header={`Remove ${dialog.type}`}\n id=\"dialog-remove\"\n onClose={() => setDialog(null)}\n zOffset={1000}\n >\n <Card padding={4}>\n <Text>Are you sure you want to remove this {dialog.type}?</Text>\n <Box marginTop={4}>\n <Inline space={1} style={{ textAlign: 'right' }}>\n <Button\n text=\"Cancel\"\n mode=\"ghost\"\n onClick={() => setDialog(null)}\n />\n <Button\n text=\"Confirm\"\n tone=\"critical\"\n onClick={() => dialog.callback()}\n />\n </Inline>\n </Box>\n </Card>\n </Dialog>\n )}\n <Box>\n <Flex justify=\"flex-end\">\n {value?.rows?.length && (\n <TableMenu\n addColumns={addColumns}\n addColumnAt={addColumnAt}\n addRows={addRows}\n addRowAt={addRowAt}\n remove={confirmRemoveTable}\n placement=\"left\"\n />\n )}\n </Flex>\n </Box>\n {value?.rows?.length && (\n <TableInput\n rows={value.rows}\n removeRow={confirmRemoveRow}\n removeColumn={confirmRemoveColumn}\n updateCell={updateCell}\n />\n )}\n {(!value || !value?.rows?.length) && (\n <Inline space={1}>\n <Button\n fontSize={1}\n padding={3}\n icon={AddIcon}\n text=\"Create Table\"\n tone=\"primary\"\n mode=\"ghost\"\n onClick={createTable}\n />\n </Inline>\n )}\n </div>\n );\n};\n\nexport default TableComponent;\n","import React from 'react';\n\nexport default function TableIcon() {\n return (\n <svg\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n >\n <path d=\"M3 3h18v18H3zM21 9H3M21 15H3M12 3v18\" />\n </svg>\n );\n}\n","import React from 'react';\nimport type { TableRow } from './TableComponent';\nimport { Box, Card, Inline, Grid, Label, Text } from '@sanity/ui';\nimport TableIcon from './TableIcon';\nimport { PreviewProps } from 'sanity';\n\ninterface ValueProps {\n rows?: TableRow[];\n title?: string;\n}\n\nconst Table = ({ rows }: { rows: TableRow[] }) => {\n const numCols = rows.length === 0 ? 0 : rows[0].cells.length;\n\n return (\n <Grid columns={numCols} padding={2}>\n {rows.map(row =>\n row.cells.map((cell, i) => (\n <Card\n key={row._key + i}\n padding={2}\n style={{ outline: '1px solid #DFE2E9' }}\n >\n <Text style={{ textOverflow: 'elipsis' }}>{cell}</Text>\n </Card>\n ))\n )}\n </Grid>\n );\n};\n\nconst TablePreview = (props: PreviewProps) => {\n const { value = { rows: [] }, schemaType } = props;\n const { rows = [], title } = (value as ValueProps | undefined) ?? {\n title: 'Title missing',\n };\n\n return (\n <>\n <Box padding={3}>\n <Inline space={3}>\n <Card>\n <Label size={4}>\n <TableIcon />\n </Label>\n </Card>\n <Card>\n <Text>{schemaType?.title ?? title}</Text>\n </Card>\n </Inline>\n </Box>\n <Box padding={2}>\n {rows.length === 0 ? (\n <Label muted>Empty Table</Label>\n ) : (\n <Table rows={rows} />\n )}\n </Box>\n </>\n );\n};\n\nexport default TablePreview;\n","import { definePlugin, defineType } from 'sanity';\n\nimport { TableComponent, TablePreview } from './components';\nexport type {\n TableValue,\n TableProps,\n TableRow,\n} from './components/TableComponent';\n\nexport { TableComponent, TablePreview };\n\nconst tableRowSchema = defineType({\n title: 'Table Row',\n name: 'tableRow',\n type: 'object',\n fields: [\n {\n name: 'cells',\n type: 'array',\n of: [{ type: 'string' }],\n },\n ],\n});\n\nconst tableSchema = defineType({\n title: 'Table',\n name: 'table',\n type: 'object',\n fields: [\n {\n name: 'rows',\n type: 'array',\n of: [\n {\n type: tableRowSchema.name,\n },\n ],\n },\n ],\n components: {\n //TODO remove as any when rc.3 is released\n input: TableComponent as any,\n preview: TablePreview,\n },\n preview: {\n select: {\n rows: 'rows',\n title: 'title',\n },\n prepare: ({ title, rows = [] }) => ({\n title,\n rows,\n }),\n },\n});\n\nexport const table = definePlugin(() => {\n return {\n name: 'table',\n schema: {\n types: [tableRowSchema, tableSchema],\n },\n };\n});\n"],"names":["getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","Error","REGEX","validate","uuid","test","byteToHex","i","push","toString","substr","stringify","arr","offset","arguments","length","undefined","toLowerCase","TypeError","v35","name","version","hashfunc","generateUUID","value","namespace","buf","str","unescape","encodeURIComponent","bytes","charCodeAt","stringToBytes","v","parseInt","slice","parse","set","err","DNS","URL","getOutputLength","inputLength8","safeAdd","x","y","lsw","md5cmn","q","a","b","s","t","num","cnt","md5ff","c","d","md5gg","md5hh","md5ii","v4","options","rnds","random","f","z","ROTL","n","msg","input","output","length32","hexTab","hex","charAt","md5ToHexEncodedArray","len","olda","oldb","oldc","oldd","wordsToMd5","length8","Uint32Array","bytesToWords","K","H","Array","isArray","prototype","call","l","N","Math","ceil","M","_i","j","pow","floor","_i2","W","_t","e","_t2","T","TableInput","props","_a","jsx","style","width","children","jsxs","rows","map","row","rowIndex","renderCell","cell","cellIndex","TextInput","fontSize","padding","onChange","updateCell","renderRowCell","cells","Box","marginLeft","textAlign","Button","icon","RemoveIcon","onClick","removeRow","mode","concat","_","marginTop","removeColumn","TableMenu","dialog","setDialog","useState","count","setCount","React","Fragment","Dialog","header","type","id","onClose","zOffset","Card","currentTarget","Inline","space","text","tone","parsedCount","callback","MenuButton","button","ControlsIcon","menu","Menu","MenuItem","AddIcon","addRows","addRowAt","index","addColumns","addColumnAt","MenuDivider","WarningOutlineIcon","remove","placement","deepClone","globalThis","structuredClone","data","JSON","TableComponent","_b","_c","updateValue","confirmRemoveTable","removeTable","unset","newValue","forEach","splice","Text","Flex","justify","columnCount","_type","_key","fill","target","TableIcon","height","viewBox","stroke","strokeWidth","Table","_ref","numCols","Grid","columns","outline","textOverflow","TablePreview","schemaType","title","Label","size","muted","tableRowSchema","defineType","fields","of","tableSchema","components","preview","select","prepare","_ref2","table","definePlugin","schema","types"],"mappings":"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"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?e(Object(o),!0).forEach((function(e){n(t,e,o[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):e(Object(o)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}))}return t}function n(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(exports,"__esModule",{value:!0});var r=require("sanity"),o=require("react/jsx-runtime"),l=require("react"),i=require("@sanity/ui"),s=require("@sanity/icons");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c,u=a(l),d=new Uint8Array(16);function p(){if(!c&&!(c="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return c(d)}var f=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function h(e){return"string"==typeof e&&f.test(e)}for(var y=[],x=0;x<256;++x)y.push((x+256).toString(16).substr(1));function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(y[e[t+0]]+y[e[t+1]]+y[e[t+2]]+y[e[t+3]]+"-"+y[e[t+4]]+y[e[t+5]]+"-"+y[e[t+6]]+y[e[t+7]]+"-"+y[e[t+8]]+y[e[t+9]]+"-"+y[e[t+10]]+y[e[t+11]]+y[e[t+12]]+y[e[t+13]]+y[e[t+14]]+y[e[t+15]]).toLowerCase();if(!h(n))throw TypeError("Stringified UUID is invalid");return n}function m(e,t,n){function r(e,r,o,l){if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));for(var t=[],n=0;n<e.length;++n)t.push(e.charCodeAt(n));return t}(e)),"string"==typeof r&&(r=function(e){if(!h(e))throw TypeError("Invalid UUID");var t,n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n}(r)),16!==r.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var i=new Uint8Array(16+e.length);if(i.set(r),i.set(e,r.length),(i=n(i))[6]=15&i[6]|t,i[8]=63&i[8]|128,o){l=l||0;for(var s=0;s<16;++s)o[l+s]=i[s];return o}return g(i)}try{r.name=e}catch(e){}return r.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",r.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",r}function v(e){return 14+(e+64>>>9<<4)+1}function w(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function j(e,t,n,r,o,l){return w((i=w(w(t,e),w(r,l)))<<(s=o)|i>>>32-s,n);var i,s}function b(e,t,n,r,o,l,i){return j(t&n|~t&r,e,t,o,l,i)}function C(e,t,n,r,o,l,i){return j(t&r|n&~r,e,t,o,l,i)}function A(e,t,n,r,o,l,i){return j(t^n^r,e,t,o,l,i)}function I(e,t,n,r,o,l,i){return j(n^(t|~r),e,t,o,l,i)}function k(e,t,n){var r=(e=e||{}).random||(e.rng||p)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(var o=0;o<16;++o)t[n+o]=r[o];return t}return g(r)}function R(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:case 3:return t^n^r;case 2:return t&n^t&r^n&r}}function O(e,t){return e<<t|e>>>32-t}m("v3",48,(function(e){if("string"==typeof e){var t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(var n=0;n<t.length;++n)e[n]=t.charCodeAt(n)}return function(e){for(var t=[],n=32*e.length,r="0123456789abcdef",o=0;o<n;o+=8){var l=e[o>>5]>>>o%32&255,i=parseInt(r.charAt(l>>>4&15)+r.charAt(15&l),16);t.push(i)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[v(t)-1]=t;for(var n=1732584193,r=-271733879,o=-1732584194,l=271733878,i=0;i<e.length;i+=16){var s=n,a=r,c=o,u=l;n=b(n,r,o,l,e[i],7,-680876936),l=b(l,n,r,o,e[i+1],12,-389564586),o=b(o,l,n,r,e[i+2],17,606105819),r=b(r,o,l,n,e[i+3],22,-1044525330),n=b(n,r,o,l,e[i+4],7,-176418897),l=b(l,n,r,o,e[i+5],12,1200080426),o=b(o,l,n,r,e[i+6],17,-1473231341),r=b(r,o,l,n,e[i+7],22,-45705983),n=b(n,r,o,l,e[i+8],7,1770035416),l=b(l,n,r,o,e[i+9],12,-1958414417),o=b(o,l,n,r,e[i+10],17,-42063),r=b(r,o,l,n,e[i+11],22,-1990404162),n=b(n,r,o,l,e[i+12],7,1804603682),l=b(l,n,r,o,e[i+13],12,-40341101),o=b(o,l,n,r,e[i+14],17,-1502002290),n=C(n,r=b(r,o,l,n,e[i+15],22,1236535329),o,l,e[i+1],5,-165796510),l=C(l,n,r,o,e[i+6],9,-1069501632),o=C(o,l,n,r,e[i+11],14,643717713),r=C(r,o,l,n,e[i],20,-373897302),n=C(n,r,o,l,e[i+5],5,-701558691),l=C(l,n,r,o,e[i+10],9,38016083),o=C(o,l,n,r,e[i+15],14,-660478335),r=C(r,o,l,n,e[i+4],20,-405537848),n=C(n,r,o,l,e[i+9],5,568446438),l=C(l,n,r,o,e[i+14],9,-1019803690),o=C(o,l,n,r,e[i+3],14,-187363961),r=C(r,o,l,n,e[i+8],20,1163531501),n=C(n,r,o,l,e[i+13],5,-1444681467),l=C(l,n,r,o,e[i+2],9,-51403784),o=C(o,l,n,r,e[i+7],14,1735328473),n=A(n,r=C(r,o,l,n,e[i+12],20,-1926607734),o,l,e[i+5],4,-378558),l=A(l,n,r,o,e[i+8],11,-2022574463),o=A(o,l,n,r,e[i+11],16,1839030562),r=A(r,o,l,n,e[i+14],23,-35309556),n=A(n,r,o,l,e[i+1],4,-1530992060),l=A(l,n,r,o,e[i+4],11,1272893353),o=A(o,l,n,r,e[i+7],16,-155497632),r=A(r,o,l,n,e[i+10],23,-1094730640),n=A(n,r,o,l,e[i+13],4,681279174),l=A(l,n,r,o,e[i],11,-358537222),o=A(o,l,n,r,e[i+3],16,-722521979),r=A(r,o,l,n,e[i+6],23,76029189),n=A(n,r,o,l,e[i+9],4,-640364487),l=A(l,n,r,o,e[i+12],11,-421815835),o=A(o,l,n,r,e[i+15],16,530742520),n=I(n,r=A(r,o,l,n,e[i+2],23,-995338651),o,l,e[i],6,-198630844),l=I(l,n,r,o,e[i+7],10,1126891415),o=I(o,l,n,r,e[i+14],15,-1416354905),r=I(r,o,l,n,e[i+5],21,-57434055),n=I(n,r,o,l,e[i+12],6,1700485571),l=I(l,n,r,o,e[i+3],10,-1894986606),o=I(o,l,n,r,e[i+10],15,-1051523),r=I(r,o,l,n,e[i+1],21,-2054922799),n=I(n,r,o,l,e[i+8],6,1873313359),l=I(l,n,r,o,e[i+15],10,-30611744),o=I(o,l,n,r,e[i+6],15,-1560198380),r=I(r,o,l,n,e[i+13],21,1309151649),n=I(n,r,o,l,e[i+4],6,-145523070),l=I(l,n,r,o,e[i+11],10,-1120210379),o=I(o,l,n,r,e[i+2],15,718787259),r=I(r,o,l,n,e[i+9],21,-343485551),n=w(n,s),r=w(r,a),o=w(o,c),l=w(l,u)}return[n,r,o,l]}(function(e){if(0===e.length)return[];for(var t=8*e.length,n=new Uint32Array(v(t)),r=0;r<t;r+=8)n[r>>5]|=(255&e[r/8])<<r%32;return n}(e),8*e.length))})),m("v5",80,(function(e){var t=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var r=unescape(encodeURIComponent(e));e=[];for(var o=0;o<r.length;++o)e.push(r.charCodeAt(o))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);for(var l=e.length/4+2,i=Math.ceil(l/16),s=new Array(i),a=0;a<i;++a){for(var c=new Uint32Array(16),u=0;u<16;++u)c[u]=e[64*a+4*u]<<24|e[64*a+4*u+1]<<16|e[64*a+4*u+2]<<8|e[64*a+4*u+3];s[a]=c}s[i-1][14]=8*(e.length-1)/Math.pow(2,32),s[i-1][14]=Math.floor(s[i-1][14]),s[i-1][15]=8*(e.length-1)&4294967295;for(var d=0;d<i;++d){for(var p=new Uint32Array(80),f=0;f<16;++f)p[f]=s[d][f];for(var h=16;h<80;++h)p[h]=O(p[h-3]^p[h-8]^p[h-14]^p[h-16],1);for(var y=n[0],x=n[1],g=n[2],m=n[3],v=n[4],w=0;w<80;++w){var j=Math.floor(w/20),b=O(y,5)+R(j,x,g,m)+v+t[j]+p[w]>>>0;v=m,m=g,g=O(x,30)>>>0,x=y,y=b}n[0]=n[0]+y>>>0,n[1]=n[1]+x>>>0,n[2]=n[2]+g>>>0,n[3]=n[3]+m>>>0,n[4]=n[4]+v>>>0}return[n[0]>>24&255,n[0]>>16&255,n[0]>>8&255,255&n[0],n[1]>>24&255,n[1]>>16&255,n[1]>>8&255,255&n[1],n[2]>>24&255,n[2]>>16&255,n[2]>>8&255,255&n[2],n[3]>>24&255,n[3]>>16&255,n[3]>>8&255,255&n[3],n[4]>>24&255,n[4]>>16&255,n[4]>>8&255,255&n[4]]}));const T=e=>{var t;return o.jsx("table",{style:{width:"100%"},children:o.jsxs("tbody",{children:[e.rows.map(((t,n)=>{const r=(t=>(n,r)=>o.jsx("td",{children:o.jsx(i.TextInput,{fontSize:1,padding:3,value:n,onChange:n=>e.updateCell(n,t,r)})},"cell-".concat(t,"-").concat(r)))(n);return o.jsxs("tr",{children:[t.cells.map(r),o.jsx("td",{children:o.jsx(i.Box,{marginLeft:1,style:{textAlign:"center"},children:o.jsx(i.Button,{icon:s.RemoveIcon,padding:2,onClick:()=>e.removeRow(n),mode:"bleed"})})},n)]},"row-".concat(n))})),o.jsx("tr",{children:((null==(t=e.rows[0])?void 0:t.cells)||[]).map(((t,n)=>o.jsx("td",{children:o.jsx(i.Box,{marginTop:1,style:{textAlign:"center"},children:o.jsx(i.Button,{icon:s.RemoveIcon,padding:2,onClick:()=>e.removeColumn(n),mode:"bleed"})})},n)))})]})})},S=e=>{const[t,n]=l.useState(null),[r,a]=l.useState("");return o.jsxs(u.default.Fragment,{children:[t&&o.jsx(i.Dialog,{header:"Add ".concat(t.type),id:"dialog-add",onClose:()=>n(null),zOffset:1e3,children:o.jsxs(i.Card,{padding:4,children:[o.jsx(i.TextInput,{style:{textAlign:"left"},fontSize:2,padding:3,type:"number",value:r,onChange:e=>{a(e.currentTarget.value)}}),o.jsx(i.Box,{marginTop:4,children:o.jsxs(i.Inline,{space:1,style:{textAlign:"right"},children:[o.jsx(i.Button,{text:"Cancel",mode:"ghost",onClick:()=>n(null)}),o.jsx(i.Button,{text:"Confirm",tone:"critical",onClick:()=>{const e=parseInt(null!=r?r:"0",10);e<100&&(n(null),null==t||t.callback(e),a(void 0))}})]})})]})}),o.jsx(i.MenuButton,{button:o.jsx(i.Button,{icon:s.ControlsIcon,fontSize:1,padding:2,mode:"ghost"}),id:"menu-button-example",menu:o.jsxs(i.Menu,{children:[o.jsx(i.MenuItem,{icon:s.AddIcon,fontSize:1,text:"Add Row(s)",onClick:()=>{n({type:"rows",callback:t=>e.addRows(t)})}}),o.jsx(i.MenuItem,{icon:s.AddIcon,fontSize:1,text:"Add Row At Index",onClick:()=>{n({type:"rows",callback:t=>e.addRowAt(t)})}}),o.jsx(i.MenuItem,{icon:s.AddIcon,fontSize:1,text:"Add Column(s)",onClick:()=>{n({type:"columns",callback:t=>e.addColumns(t)})}}),o.jsx(i.MenuItem,{icon:s.AddIcon,fontSize:1,text:"Add Column At Index",onClick:()=>{n({type:"columns",callback:t=>e.addColumnAt(t)})}}),o.jsx(i.MenuDivider,{}),o.jsx(i.MenuItem,{icon:s.WarningOutlineIcon,fontSize:1,text:"Remove",tone:"critical",onClick:e.remove})]}),placement:e.placement})]})};var B;const M=null!=(B=globalThis.structuredClone)?B:e=>JSON.parse(JSON.stringify(e)),U=e=>{var n,a,c;const{value:u,onChange:d}=e,[p,f]=l.useState(null),h=e=>d(r.set(e)),y=()=>{f({type:"table",callback:x})},x=()=>{d(r.unset()),f(null)},g=e=>{if(!u)return;const t=M(u);t.rows.forEach((t=>{t.cells.splice(e,1)})),h(t),f(null)};return o.jsxs("div",{children:[p&&o.jsx(i.Dialog,{header:"Remove ".concat(p.type),id:"dialog-remove",onClose:()=>f(null),zOffset:1e3,children:o.jsxs(i.Card,{padding:4,children:[o.jsxs(i.Text,{children:["Are you sure you want to remove this ",p.type,"?"]}),o.jsx(i.Box,{marginTop:4,children:o.jsxs(i.Inline,{space:1,style:{textAlign:"right"},children:[o.jsx(i.Button,{text:"Cancel",mode:"ghost",onClick:()=>f(null)}),o.jsx(i.Button,{text:"Confirm",tone:"critical",onClick:()=>p.callback()})]})})]})}),o.jsx(i.Box,{children:o.jsx(i.Flex,{justify:"flex-end",children:(null==(n=null==u?void 0:u.rows)?void 0:n.length)&&o.jsx(S,{addColumns:e=>{if(!u)return;const t=M(u);return t.rows.forEach(((n,r)=>{for(let n=0;n<e;n++)t.rows[r].cells.push("")})),h(t)},addColumnAt:e=>{if(!u)return;const t=M(u);return t.rows.forEach(((n,r)=>{t.rows[r].cells.splice(e,0,"")})),h(t)},addRows:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;var t;if(!u)return;const n=M(u),r=null!=(t=null==u?void 0:u.rows[0].cells.length)?t:0;for(let t=0;t<e;t++)n.rows.push({_type:"tableRow",_key:k(),cells:Array(r).fill("")});return h(n)},addRowAt:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(!u)return;const t=M(u),n=u.rows[0].cells.length;return t.rows.splice(e,0,{_type:"tableRow",_key:k(),cells:Array(n).fill("")}),h(t)},remove:y,placement:"left"})})}),(null==(a=null==u?void 0:u.rows)?void 0:a.length)&&o.jsx(T,{rows:u.rows,removeRow:e=>{if(u)return u.rows.length<=1?y():f({type:"row",callback:()=>(e=>{if(!u)return;const t=M(u);t.rows.splice(e,1),h(t),f(null)})(e)})},removeColumn:e=>{if(u)return u.rows[0].cells.length<=1?y():f({type:"column",callback:()=>g(e)})},updateCell:(e,t,n)=>{if(!u)return;const r=M(u);return r.rows[t].cells[n]=e.target.value,h(r)}}),(!u||!(null==(c=null==u?void 0:u.rows)?void 0:c.length))&&o.jsx(i.Inline,{space:1,children:o.jsx(i.Button,{fontSize:1,padding:3,icon:s.AddIcon,text:"Create Table",tone:"primary",mode:"ghost",onClick:()=>{const e={rows:[{_type:"tableRow",_key:k(),cells:["",""]},{_type:"tableRow",_key:k(),cells:["",""]}]};return h(t(t({},u),e))}})})]})};function z(){return o.jsx("svg",{width:"1em",height:"1em",viewBox:"0 0 25 25",fill:"none",stroke:"currentColor",strokeWidth:"1.2",children:o.jsx("path",{d:"M3 3h18v18H3zM21 9H3M21 15H3M12 3v18"})})}const E=e=>{let{rows:t}=e;const n=0===t.length?0:t[0].cells.length;return o.jsx(i.Grid,{columns:n,padding:2,children:t.map((e=>e.cells.map(((t,n)=>o.jsx(i.Card,{padding:2,style:{outline:"1px solid #DFE2E9"},children:o.jsx(i.Text,{style:{textOverflow:"elipsis"},children:t})},e._key+n)))))})},P=e=>{var t;const{value:n={rows:[]},schemaType:r}=e,{rows:l=[],title:s}=null!=n?n:{title:"Title missing"};return o.jsxs(o.Fragment,{children:[o.jsx(i.Box,{padding:3,children:o.jsxs(i.Inline,{space:3,children:[o.jsx(i.Card,{children:o.jsx(i.Label,{size:4,children:o.jsx(z,{})})}),o.jsx(i.Card,{children:o.jsx(i.Text,{children:null!=(t=null==r?void 0:r.title)?t:s})})]})}),o.jsx(i.Box,{padding:2,children:0===l.length?o.jsx(i.Label,{muted:!0,children:"Empty Table"}):o.jsx(E,{rows:l})})]})},D=r.defineType({title:"Table Row",name:"tableRow",type:"object",fields:[{name:"cells",type:"array",of:[{type:"string"}]}]}),_=r.defineType({title:"Table",name:"table",type:"object",fields:[{name:"rows",type:"array",of:[{type:D.name}]}],components:{input:U,preview:P},preview:{select:{rows:"rows",title:"title"},prepare:e=>{let{title:t,rows:n=[]}=e;return{title:t,rows:n}}}}),q=r.definePlugin((()=>({name:"table",schema:{types:[D,_]}})));exports.TableComponent=U,exports.TablePreview=P,exports.table=q;
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/regex.js","../node_modules/uuid/dist/esm-browser/validate.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/v35.js","../node_modules/uuid/dist/esm-browser/parse.js","../node_modules/uuid/dist/esm-browser/md5.js","../node_modules/uuid/dist/esm-browser/v4.js","../node_modules/uuid/dist/esm-browser/sha1.js","../node_modules/uuid/dist/esm-browser/v3.js","../node_modules/uuid/dist/esm-browser/v5.js","../src/components/TableInput.tsx","../src/components/TableMenu.tsx","../src/components/TableComponent.tsx","../src/components/TableIcon.tsx","../src/components/TablePreview.tsx","../src/index.ts"],"sourcesContent":["// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","import React from 'react';\nimport { Box, Button, TextInput } from '@sanity/ui';\nimport { RemoveIcon } from '@sanity/icons';\nimport type { TableRow } from './TableComponent';\n\ninterface TableInputProps {\n rows: TableRow[];\n updateCell: (\n e: React.FormEvent<HTMLInputElement>,\n rowIndex: number,\n cellIndex: number\n ) => any;\n removeRow: (index: number) => any;\n removeColumn: (index: number) => any;\n}\n\nconst TableInput = (props: TableInputProps) => {\n const renderRowCell =\n (rowIndex: number) => (cell: string, cellIndex: number) =>\n (\n <td key={`cell-${rowIndex}-${cellIndex}`}>\n <TextInput\n fontSize={1}\n padding={3}\n value={cell}\n onChange={e => props.updateCell(e, rowIndex, cellIndex)}\n />\n </td>\n );\n\n const renderRow = (row: TableRow, rowIndex: number) => {\n const renderCell = renderRowCell(rowIndex);\n\n return (\n <tr key={`row-${rowIndex}`}>\n {row.cells.map(renderCell)}\n {\n <td key={rowIndex}>\n <Box marginLeft={1} style={{ textAlign: 'center' }}>\n <Button\n icon={RemoveIcon}\n padding={2}\n onClick={() => props.removeRow(rowIndex)}\n mode=\"bleed\"\n />\n </Box>\n </td>\n }\n </tr>\n );\n };\n\n return (\n <table style={{ width: '100%' }}>\n <tbody>\n {props.rows.map(renderRow)}\n <tr>\n {(props.rows[0]?.cells || []).map((_, i) => (\n <td key={i}>\n <Box marginTop={1} style={{ textAlign: 'center' }}>\n <Button\n icon={RemoveIcon}\n padding={2}\n onClick={() => props.removeColumn(i)}\n mode=\"bleed\"\n />\n </Box>\n </td>\n ))}\n </tr>\n </tbody>\n </table>\n );\n};\n\nexport default TableInput;\n","import React, { FormEventHandler, useState } from 'react';\nimport {\n Box,\n Button,\n Card,\n Dialog,\n Inline,\n Menu,\n MenuButton,\n MenuDivider,\n MenuItem,\n Placement,\n TextInput,\n} from '@sanity/ui';\nimport { AddIcon, WarningOutlineIcon, ControlsIcon } from '@sanity/icons';\n\ninterface TableMenuProps {\n addColumns: (count: number) => any;\n addColumnAt: (index: number) => any;\n addRows: (count: number) => any;\n addRowAt: (index: number) => any;\n remove: () => any;\n placement: Placement;\n}\n\nconst TableMenu = (props: TableMenuProps) => {\n const [dialog, setDialog] = useState<{\n type: string;\n callback: (count: number) => any;\n } | null>(null);\n\n const [count, setCount] = useState<string | undefined>('');\n\n const updateCount: FormEventHandler<HTMLInputElement> = e => {\n setCount(e.currentTarget.value);\n };\n\n const addRows = () => {\n setDialog({ type: 'rows', callback: c => props.addRows(c) });\n };\n\n const addRowAt = () => {\n setDialog({ type: 'rows', callback: index => props.addRowAt(index) });\n };\n\n const addColumns = () => {\n setDialog({\n type: 'columns',\n callback: c => props.addColumns(c),\n });\n };\n\n const addColumnsAt = () => {\n setDialog({ type: 'columns', callback: index => props.addColumnAt(index) });\n };\n\n const onConfirm = () => {\n const parsedCount = parseInt(count ?? '0', 10);\n\n if (parsedCount < 100) {\n setDialog(null);\n dialog?.callback(parsedCount);\n setCount(undefined);\n }\n };\n\n return (\n <React.Fragment>\n {dialog && (\n <Dialog\n header={`Add ${dialog.type}`}\n id=\"dialog-add\"\n onClose={() => setDialog(null)}\n zOffset={1000}\n >\n <Card padding={4}>\n <TextInput\n style={{ textAlign: 'left' }}\n fontSize={2}\n padding={3}\n type=\"number\"\n value={count}\n onChange={updateCount}\n />\n <Box marginTop={4}>\n <Inline space={1} style={{ textAlign: 'right' }}>\n <Button\n text=\"Cancel\"\n mode=\"ghost\"\n onClick={() => setDialog(null)}\n />\n <Button text=\"Confirm\" tone=\"critical\" onClick={onConfirm} />\n </Inline>\n </Box>\n </Card>\n </Dialog>\n )}\n <MenuButton\n button={\n <Button icon={ControlsIcon} fontSize={1} padding={2} mode=\"ghost\" />\n }\n id=\"menu-button-example\"\n menu={\n <Menu>\n <MenuItem\n icon={AddIcon}\n fontSize={1}\n text=\"Add Row(s)\"\n onClick={addRows}\n />\n <MenuItem\n icon={AddIcon}\n fontSize={1}\n text=\"Add Row At Index\"\n onClick={addRowAt}\n />\n <MenuItem\n icon={AddIcon}\n fontSize={1}\n text=\"Add Column(s)\"\n onClick={addColumns}\n />\n <MenuItem\n icon={AddIcon}\n fontSize={1}\n text=\"Add Column At Index\"\n onClick={addColumnsAt}\n />\n <MenuDivider />\n <MenuItem\n icon={WarningOutlineIcon}\n fontSize={1}\n text=\"Remove\"\n tone=\"critical\"\n onClick={props.remove}\n />\n </Menu>\n }\n placement={props.placement}\n />\n </React.Fragment>\n );\n};\n\nexport default TableMenu;\n","/* eslint-disable consistent-return */\nimport React, { useState, FormEvent } from 'react';\nimport { uuid } from '@sanity/uuid';\nimport { ObjectInputProps, set, unset } from 'sanity';\nimport TableInput from './TableInput';\nimport TableMenu from './TableMenu';\nimport { Box, Button, Card, Dialog, Flex, Inline, Text } from '@sanity/ui';\n\nimport { AddIcon } from '@sanity/icons';\n\nconst ROW_TYPE = 'tableRow';\n\nconst deepClone: <T>(data: T) => T =\n globalThis.structuredClone ?? (data => JSON.parse(JSON.stringify(data)));\n\nexport interface TableValue {\n _type: 'table';\n rows: TableRow[];\n}\n\nexport interface TableProps extends ObjectInputProps<TableValue> {}\n\nexport type TableRow = {\n _type: string;\n _key: string;\n cells: string[];\n};\n\n// TODO refactor deeplone stuff to use proper patches\n// TODO use callback all the things\n\nconst TableComponent = (props: TableProps) => {\n const { value, onChange } = props;\n const [dialog, setDialog] = useState<{\n type: string;\n callback: () => any;\n } | null>(null);\n\n const updateValue = (v?: Omit<TableValue, '_type'>) => {\n return onChange(set(v));\n };\n\n const resetValue = () => {\n return onChange(unset());\n };\n\n const createTable = () => {\n const newValue: Omit<TableValue, '_type'> = {\n rows: [\n {\n _type: ROW_TYPE,\n _key: uuid(),\n cells: ['', ''],\n },\n {\n _type: ROW_TYPE,\n _key: uuid(),\n cells: ['', ''],\n },\n ],\n };\n return updateValue({ ...value, ...newValue });\n };\n\n const confirmRemoveTable = () => {\n setDialog({ type: 'table', callback: removeTable });\n };\n\n const removeTable = () => {\n resetValue();\n setDialog(null);\n };\n\n const addRows = (count: number = 1) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n // Calculate the column count from the first row\n const columnCount = value?.rows[0].cells.length ?? 0;\n for (let i = 0; i < count; i++) {\n // Add as many cells as we have columns\n newValue.rows.push({\n _type: ROW_TYPE,\n _key: uuid(),\n cells: Array(columnCount).fill(''),\n });\n }\n // eslint-disable-next-line consistent-return\n return updateValue(newValue);\n };\n\n const addRowAt = (index: number = 0) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n // Calculate the column count from the first row\n const columnCount = value.rows[0].cells.length;\n\n newValue.rows.splice(index, 0, {\n _type: ROW_TYPE,\n _key: uuid(),\n cells: Array(columnCount).fill(''),\n });\n\n // eslint-disable-next-line consistent-return\n return updateValue(newValue);\n };\n\n const removeRow = (index: number) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n newValue.rows.splice(index, 1);\n updateValue(newValue);\n setDialog(null);\n };\n\n const confirmRemoveRow = (index: number) => {\n if (!value) {\n return;\n }\n if (value.rows.length <= 1) return confirmRemoveTable();\n return setDialog({ type: 'row', callback: () => removeRow(index) });\n };\n\n const confirmRemoveColumn = (index: number) => {\n if (!value) {\n return;\n }\n if (value.rows[0].cells.length <= 1) return confirmRemoveTable();\n return setDialog({ type: 'column', callback: () => removeColumn(index) });\n };\n\n const addColumns = (count: number) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n // Add a cell to each of the rows\n newValue.rows.forEach((_, i) => {\n for (let j = 0; j < count; j++) {\n newValue.rows[i].cells.push('');\n }\n });\n return updateValue(newValue);\n };\n\n const addColumnAt = (index: number) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n\n newValue.rows.forEach((_, i) => {\n newValue.rows[i].cells.splice(index, 0, '');\n });\n\n return updateValue(newValue);\n };\n\n const removeColumn = (index: number) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n newValue.rows.forEach(row => {\n row.cells.splice(index, 1);\n });\n updateValue(newValue);\n setDialog(null);\n };\n\n const updateCell = (\n e: FormEvent<HTMLInputElement>,\n rowIndex: number,\n cellIndex: number\n ) => {\n if (!value) {\n return;\n }\n const newValue = deepClone(value);\n newValue.rows[rowIndex].cells[cellIndex] = (\n e.target as HTMLInputElement\n ).value;\n return updateValue(newValue);\n };\n\n return (\n <div>\n {dialog && (\n <Dialog\n header={`Remove ${dialog.type}`}\n id=\"dialog-remove\"\n onClose={() => setDialog(null)}\n zOffset={1000}\n >\n <Card padding={4}>\n <Text>Are you sure you want to remove this {dialog.type}?</Text>\n <Box marginTop={4}>\n <Inline space={1} style={{ textAlign: 'right' }}>\n <Button\n text=\"Cancel\"\n mode=\"ghost\"\n onClick={() => setDialog(null)}\n />\n <Button\n text=\"Confirm\"\n tone=\"critical\"\n onClick={() => dialog.callback()}\n />\n </Inline>\n </Box>\n </Card>\n </Dialog>\n )}\n <Box>\n <Flex justify=\"flex-end\">\n {value?.rows?.length && (\n <TableMenu\n addColumns={addColumns}\n addColumnAt={addColumnAt}\n addRows={addRows}\n addRowAt={addRowAt}\n remove={confirmRemoveTable}\n placement=\"left\"\n />\n )}\n </Flex>\n </Box>\n {value?.rows?.length && (\n <TableInput\n rows={value.rows}\n removeRow={confirmRemoveRow}\n removeColumn={confirmRemoveColumn}\n updateCell={updateCell}\n />\n )}\n {(!value || !value?.rows?.length) && (\n <Inline space={1}>\n <Button\n fontSize={1}\n padding={3}\n icon={AddIcon}\n text=\"Create Table\"\n tone=\"primary\"\n mode=\"ghost\"\n onClick={createTable}\n />\n </Inline>\n )}\n </div>\n );\n};\n\nexport default TableComponent;\n","import React from 'react';\n\nexport default function TableIcon() {\n return (\n <svg\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n >\n <path d=\"M3 3h18v18H3zM21 9H3M21 15H3M12 3v18\" />\n </svg>\n );\n}\n","import React from 'react';\nimport type { TableRow } from './TableComponent';\nimport { Box, Card, Inline, Grid, Label, Text } from '@sanity/ui';\nimport TableIcon from './TableIcon';\nimport { PreviewProps } from 'sanity';\n\ninterface ValueProps {\n rows?: TableRow[];\n title?: string;\n}\n\nconst Table = ({ rows }: { rows: TableRow[] }) => {\n const numCols = rows.length === 0 ? 0 : rows[0].cells.length;\n\n return (\n <Grid columns={numCols} padding={2}>\n {rows.map(row =>\n row.cells.map((cell, i) => (\n <Card\n key={row._key + i}\n padding={2}\n style={{ outline: '1px solid #DFE2E9' }}\n >\n <Text style={{ textOverflow: 'elipsis' }}>{cell}</Text>\n </Card>\n ))\n )}\n </Grid>\n );\n};\n\nconst TablePreview = (props: PreviewProps) => {\n const { value = { rows: [] }, schemaType } = props;\n const { rows = [], title } = (value as ValueProps | undefined) ?? {\n title: 'Title missing',\n };\n\n return (\n <>\n <Box padding={3}>\n <Inline space={3}>\n <Card>\n <Label size={4}>\n <TableIcon />\n </Label>\n </Card>\n <Card>\n <Text>{schemaType?.title ?? title}</Text>\n </Card>\n </Inline>\n </Box>\n <Box padding={2}>\n {rows.length === 0 ? (\n <Label muted>Empty Table</Label>\n ) : (\n <Table rows={rows} />\n )}\n </Box>\n </>\n );\n};\n\nexport default TablePreview;\n","import { definePlugin, defineType } from 'sanity';\n\nimport { TableComponent, TablePreview } from './components';\nexport type {\n TableValue,\n TableProps,\n TableRow,\n} from './components/TableComponent';\n\nexport { TableComponent, TablePreview };\n\nconst tableRowSchema = defineType({\n title: 'Table Row',\n name: 'tableRow',\n type: 'object',\n fields: [\n {\n name: 'cells',\n type: 'array',\n of: [{ type: 'string' }],\n },\n ],\n});\n\nconst tableSchema = defineType({\n title: 'Table',\n name: 'table',\n type: 'object',\n fields: [\n {\n name: 'rows',\n type: 'array',\n of: [\n {\n type: tableRowSchema.name,\n },\n ],\n },\n ],\n components: {\n //TODO remove as any when rc.3 is released\n input: TableComponent as any,\n preview: TablePreview,\n },\n preview: {\n select: {\n rows: 'rows',\n title: 'title',\n },\n prepare: ({ title, rows = [] }) => ({\n title,\n rows,\n }),\n },\n});\n\nexport const table = definePlugin(() => {\n return {\n name: 'table',\n schema: {\n types: [tableRowSchema, tableSchema],\n },\n };\n});\n"],"names":["getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","Error","REGEX","validate","uuid","test","byteToHex","i","push","toString","substr","stringify","arr","offset","arguments","length","undefined","toLowerCase","TypeError","v35","name","version","hashfunc","generateUUID","value","namespace","buf","str","unescape","encodeURIComponent","bytes","charCodeAt","stringToBytes","v","parseInt","slice","parse","set","err","DNS","URL","getOutputLength","inputLength8","safeAdd","x","y","lsw","md5cmn","q","a","b","s","t","num","cnt","md5ff","c","d","md5gg","md5hh","md5ii","v4","options","rnds","random","f","z","ROTL","n","msg","input","output","length32","hexTab","hex","charAt","md5ToHexEncodedArray","len","olda","oldb","oldc","oldd","wordsToMd5","length8","Uint32Array","bytesToWords","K","H","Array","isArray","prototype","call","l","N","Math","ceil","M","_i","j","pow","floor","_i2","W","_t","e","_t2","T","TableInput","props","_a","jsx","style","width","children","jsxs","rows","map","row","rowIndex","renderCell","cell","cellIndex","TextInput","fontSize","padding","onChange","updateCell","renderRowCell","cells","Box","marginLeft","textAlign","Button","icon","RemoveIcon","onClick","removeRow","mode","concat","_","marginTop","removeColumn","TableMenu","dialog","setDialog","useState","count","setCount","React","Fragment","Dialog","header","type","id","onClose","zOffset","Card","currentTarget","Inline","space","text","tone","parsedCount","callback","MenuButton","button","ControlsIcon","menu","Menu","MenuItem","AddIcon","addRows","addRowAt","index","addColumns","addColumnAt","MenuDivider","WarningOutlineIcon","remove","placement","deepClone","globalThis","structuredClone","data","JSON","TableComponent","_b","_c","updateValue","confirmRemoveTable","removeTable","unset","newValue","forEach","splice","Text","Flex","justify","columnCount","_type","_key","fill","target","TableIcon","height","viewBox","stroke","strokeWidth","Table","_ref","numCols","Grid","columns","outline","textOverflow","TablePreview","schemaType","title","Label","size","muted","tableRowSchema","defineType","fields","of","tableSchema","components","preview","select","prepare","_ref2","table","definePlugin","schema","types"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
|
|
3
|
+
import { ObjectInputProps } from 'sanity';
|
|
4
|
+
import { Plugin as Plugin_2 } from 'sanity';
|
|
5
|
+
import { PreviewProps } from 'sanity';
|
|
6
|
+
|
|
7
|
+
export declare const table: Plugin_2<void>;
|
|
8
|
+
|
|
9
|
+
export declare const TableComponent: (props: TableProps) => JSX.Element;
|
|
10
|
+
|
|
11
|
+
export declare const TablePreview: (props: PreviewProps) => JSX.Element;
|
|
12
|
+
|
|
13
|
+
export declare interface TableProps extends ObjectInputProps<TableValue> {}
|
|
14
|
+
|
|
15
|
+
export declare type TableRow = {
|
|
16
|
+
_type: string;
|
|
17
|
+
_key: string;
|
|
18
|
+
cells: string[];
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export declare interface TableValue {
|
|
22
|
+
_type: 'table';
|
|
23
|
+
rows: TableRow[];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sanity/table",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Table schema type and input component for Sanity Studio",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"sanity",
|
|
7
|
+
"sanity-plugin"
|
|
8
|
+
],
|
|
9
|
+
"homepage": "https://github.com/sanity-io/table#readme",
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/sanity-io/table/issues"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git@github.com:sanity-io/table.git"
|
|
16
|
+
},
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"author": "Dave Lucia <dave@bitfo.com>",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./lib/src/index.d.ts",
|
|
22
|
+
"source": "./src/index.ts",
|
|
23
|
+
"import": "./lib/index.esm.js",
|
|
24
|
+
"require": "./lib/index.js",
|
|
25
|
+
"default": "./lib/index.esm.js"
|
|
26
|
+
},
|
|
27
|
+
"./package.json": "./package.json"
|
|
28
|
+
},
|
|
29
|
+
"main": "./lib/index.js",
|
|
30
|
+
"module": "./lib/index.esm.js",
|
|
31
|
+
"source": "./src/index.ts",
|
|
32
|
+
"types": "./lib/src/index.d.ts",
|
|
33
|
+
"files": [
|
|
34
|
+
"src",
|
|
35
|
+
"lib",
|
|
36
|
+
"v2-incompatible.js",
|
|
37
|
+
"sanity.json"
|
|
38
|
+
],
|
|
39
|
+
"scripts": {
|
|
40
|
+
"prebuild": "npm run clean && plugin-kit verify-package --silent && pkg-utils",
|
|
41
|
+
"build": "pkg-utils build",
|
|
42
|
+
"clean": "rimraf lib",
|
|
43
|
+
"format": "eslint . --fix --cache && prettier --write .",
|
|
44
|
+
"link-watch": "plugin-kit link-watch",
|
|
45
|
+
"lint": "eslint src --cache && prettier --check src",
|
|
46
|
+
"prepare": "husky install",
|
|
47
|
+
"prepublishOnly": "npm run build",
|
|
48
|
+
"watch": "pkg-utils watch"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@sanity/icons": "^1.2.8",
|
|
52
|
+
"@sanity/incompatible-plugin": "^1.0.4",
|
|
53
|
+
"@sanity/ui": "1.0.0-beta.32"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@commitlint/cli": "^17.2.0",
|
|
57
|
+
"@commitlint/config-conventional": "^17.2.0",
|
|
58
|
+
"@sanity/pkg-utils": "^1.18.0",
|
|
59
|
+
"@sanity/plugin-kit": "^2.1.16",
|
|
60
|
+
"@sanity/semantic-release-preset": "^2.0.2",
|
|
61
|
+
"@types/react": "^18",
|
|
62
|
+
"@types/react-dom": "^18",
|
|
63
|
+
"@typescript-eslint/eslint-plugin": "^5.43.0",
|
|
64
|
+
"@typescript-eslint/parser": "^5.43.0",
|
|
65
|
+
"eslint": "^8.28.0",
|
|
66
|
+
"eslint-config-prettier": "^8.5.0",
|
|
67
|
+
"eslint-config-react-app": "^7.0.1",
|
|
68
|
+
"eslint-config-sanity": "^6.0.0",
|
|
69
|
+
"eslint-plugin-prettier": "^4.2.1",
|
|
70
|
+
"eslint-plugin-react": "^7.31.11",
|
|
71
|
+
"eslint-plugin-react-hooks": "^4.6.0",
|
|
72
|
+
"husky": "^8.0.2",
|
|
73
|
+
"lint-staged": "^13.0.3",
|
|
74
|
+
"prettier": "^2.7.1",
|
|
75
|
+
"prettier-plugin-packagejson": "^2.3.0",
|
|
76
|
+
"react": "^18",
|
|
77
|
+
"react-dom": "^18",
|
|
78
|
+
"rimraf": "^3.0.2",
|
|
79
|
+
"sanity": "3.0.0-rc.2",
|
|
80
|
+
"typescript": "^4.9.3"
|
|
81
|
+
},
|
|
82
|
+
"peerDependencies": {
|
|
83
|
+
"react": "^18",
|
|
84
|
+
"react-dom": "^18",
|
|
85
|
+
"sanity": "dev-preview || 3.0.0-rc.2"
|
|
86
|
+
},
|
|
87
|
+
"engines": {
|
|
88
|
+
"node": ">=14"
|
|
89
|
+
},
|
|
90
|
+
"publishConfig": {
|
|
91
|
+
"access": "public"
|
|
92
|
+
}
|
|
93
|
+
}
|
package/sanity.json
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/* eslint-disable consistent-return */
|
|
2
|
+
import React, { useState, FormEvent } from 'react';
|
|
3
|
+
import { uuid } from '@sanity/uuid';
|
|
4
|
+
import { ObjectInputProps, set, unset } from 'sanity';
|
|
5
|
+
import TableInput from './TableInput';
|
|
6
|
+
import TableMenu from './TableMenu';
|
|
7
|
+
import { Box, Button, Card, Dialog, Flex, Inline, Text } from '@sanity/ui';
|
|
8
|
+
|
|
9
|
+
import { AddIcon } from '@sanity/icons';
|
|
10
|
+
|
|
11
|
+
const ROW_TYPE = 'tableRow';
|
|
12
|
+
|
|
13
|
+
const deepClone: <T>(data: T) => T =
|
|
14
|
+
globalThis.structuredClone ?? (data => JSON.parse(JSON.stringify(data)));
|
|
15
|
+
|
|
16
|
+
export interface TableValue {
|
|
17
|
+
_type: 'table';
|
|
18
|
+
rows: TableRow[];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface TableProps extends ObjectInputProps<TableValue> {}
|
|
22
|
+
|
|
23
|
+
export type TableRow = {
|
|
24
|
+
_type: string;
|
|
25
|
+
_key: string;
|
|
26
|
+
cells: string[];
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// TODO refactor deeplone stuff to use proper patches
|
|
30
|
+
// TODO use callback all the things
|
|
31
|
+
|
|
32
|
+
const TableComponent = (props: TableProps) => {
|
|
33
|
+
const { value, onChange } = props;
|
|
34
|
+
const [dialog, setDialog] = useState<{
|
|
35
|
+
type: string;
|
|
36
|
+
callback: () => any;
|
|
37
|
+
} | null>(null);
|
|
38
|
+
|
|
39
|
+
const updateValue = (v?: Omit<TableValue, '_type'>) => {
|
|
40
|
+
return onChange(set(v));
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const resetValue = () => {
|
|
44
|
+
return onChange(unset());
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const createTable = () => {
|
|
48
|
+
const newValue: Omit<TableValue, '_type'> = {
|
|
49
|
+
rows: [
|
|
50
|
+
{
|
|
51
|
+
_type: ROW_TYPE,
|
|
52
|
+
_key: uuid(),
|
|
53
|
+
cells: ['', ''],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
_type: ROW_TYPE,
|
|
57
|
+
_key: uuid(),
|
|
58
|
+
cells: ['', ''],
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
return updateValue({ ...value, ...newValue });
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const confirmRemoveTable = () => {
|
|
66
|
+
setDialog({ type: 'table', callback: removeTable });
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const removeTable = () => {
|
|
70
|
+
resetValue();
|
|
71
|
+
setDialog(null);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const addRows = (count: number = 1) => {
|
|
75
|
+
if (!value) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const newValue = deepClone(value);
|
|
79
|
+
// Calculate the column count from the first row
|
|
80
|
+
const columnCount = value?.rows[0].cells.length ?? 0;
|
|
81
|
+
for (let i = 0; i < count; i++) {
|
|
82
|
+
// Add as many cells as we have columns
|
|
83
|
+
newValue.rows.push({
|
|
84
|
+
_type: ROW_TYPE,
|
|
85
|
+
_key: uuid(),
|
|
86
|
+
cells: Array(columnCount).fill(''),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// eslint-disable-next-line consistent-return
|
|
90
|
+
return updateValue(newValue);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const addRowAt = (index: number = 0) => {
|
|
94
|
+
if (!value) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const newValue = deepClone(value);
|
|
98
|
+
// Calculate the column count from the first row
|
|
99
|
+
const columnCount = value.rows[0].cells.length;
|
|
100
|
+
|
|
101
|
+
newValue.rows.splice(index, 0, {
|
|
102
|
+
_type: ROW_TYPE,
|
|
103
|
+
_key: uuid(),
|
|
104
|
+
cells: Array(columnCount).fill(''),
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// eslint-disable-next-line consistent-return
|
|
108
|
+
return updateValue(newValue);
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const removeRow = (index: number) => {
|
|
112
|
+
if (!value) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const newValue = deepClone(value);
|
|
116
|
+
newValue.rows.splice(index, 1);
|
|
117
|
+
updateValue(newValue);
|
|
118
|
+
setDialog(null);
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
const confirmRemoveRow = (index: number) => {
|
|
122
|
+
if (!value) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (value.rows.length <= 1) return confirmRemoveTable();
|
|
126
|
+
return setDialog({ type: 'row', callback: () => removeRow(index) });
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const confirmRemoveColumn = (index: number) => {
|
|
130
|
+
if (!value) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (value.rows[0].cells.length <= 1) return confirmRemoveTable();
|
|
134
|
+
return setDialog({ type: 'column', callback: () => removeColumn(index) });
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
const addColumns = (count: number) => {
|
|
138
|
+
if (!value) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const newValue = deepClone(value);
|
|
142
|
+
// Add a cell to each of the rows
|
|
143
|
+
newValue.rows.forEach((_, i) => {
|
|
144
|
+
for (let j = 0; j < count; j++) {
|
|
145
|
+
newValue.rows[i].cells.push('');
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
return updateValue(newValue);
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
const addColumnAt = (index: number) => {
|
|
152
|
+
if (!value) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const newValue = deepClone(value);
|
|
156
|
+
|
|
157
|
+
newValue.rows.forEach((_, i) => {
|
|
158
|
+
newValue.rows[i].cells.splice(index, 0, '');
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
return updateValue(newValue);
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
const removeColumn = (index: number) => {
|
|
165
|
+
if (!value) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const newValue = deepClone(value);
|
|
169
|
+
newValue.rows.forEach(row => {
|
|
170
|
+
row.cells.splice(index, 1);
|
|
171
|
+
});
|
|
172
|
+
updateValue(newValue);
|
|
173
|
+
setDialog(null);
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const updateCell = (
|
|
177
|
+
e: FormEvent<HTMLInputElement>,
|
|
178
|
+
rowIndex: number,
|
|
179
|
+
cellIndex: number
|
|
180
|
+
) => {
|
|
181
|
+
if (!value) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const newValue = deepClone(value);
|
|
185
|
+
newValue.rows[rowIndex].cells[cellIndex] = (
|
|
186
|
+
e.target as HTMLInputElement
|
|
187
|
+
).value;
|
|
188
|
+
return updateValue(newValue);
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
return (
|
|
192
|
+
<div>
|
|
193
|
+
{dialog && (
|
|
194
|
+
<Dialog
|
|
195
|
+
header={`Remove ${dialog.type}`}
|
|
196
|
+
id="dialog-remove"
|
|
197
|
+
onClose={() => setDialog(null)}
|
|
198
|
+
zOffset={1000}
|
|
199
|
+
>
|
|
200
|
+
<Card padding={4}>
|
|
201
|
+
<Text>Are you sure you want to remove this {dialog.type}?</Text>
|
|
202
|
+
<Box marginTop={4}>
|
|
203
|
+
<Inline space={1} style={{ textAlign: 'right' }}>
|
|
204
|
+
<Button
|
|
205
|
+
text="Cancel"
|
|
206
|
+
mode="ghost"
|
|
207
|
+
onClick={() => setDialog(null)}
|
|
208
|
+
/>
|
|
209
|
+
<Button
|
|
210
|
+
text="Confirm"
|
|
211
|
+
tone="critical"
|
|
212
|
+
onClick={() => dialog.callback()}
|
|
213
|
+
/>
|
|
214
|
+
</Inline>
|
|
215
|
+
</Box>
|
|
216
|
+
</Card>
|
|
217
|
+
</Dialog>
|
|
218
|
+
)}
|
|
219
|
+
<Box>
|
|
220
|
+
<Flex justify="flex-end">
|
|
221
|
+
{value?.rows?.length && (
|
|
222
|
+
<TableMenu
|
|
223
|
+
addColumns={addColumns}
|
|
224
|
+
addColumnAt={addColumnAt}
|
|
225
|
+
addRows={addRows}
|
|
226
|
+
addRowAt={addRowAt}
|
|
227
|
+
remove={confirmRemoveTable}
|
|
228
|
+
placement="left"
|
|
229
|
+
/>
|
|
230
|
+
)}
|
|
231
|
+
</Flex>
|
|
232
|
+
</Box>
|
|
233
|
+
{value?.rows?.length && (
|
|
234
|
+
<TableInput
|
|
235
|
+
rows={value.rows}
|
|
236
|
+
removeRow={confirmRemoveRow}
|
|
237
|
+
removeColumn={confirmRemoveColumn}
|
|
238
|
+
updateCell={updateCell}
|
|
239
|
+
/>
|
|
240
|
+
)}
|
|
241
|
+
{(!value || !value?.rows?.length) && (
|
|
242
|
+
<Inline space={1}>
|
|
243
|
+
<Button
|
|
244
|
+
fontSize={1}
|
|
245
|
+
padding={3}
|
|
246
|
+
icon={AddIcon}
|
|
247
|
+
text="Create Table"
|
|
248
|
+
tone="primary"
|
|
249
|
+
mode="ghost"
|
|
250
|
+
onClick={createTable}
|
|
251
|
+
/>
|
|
252
|
+
</Inline>
|
|
253
|
+
)}
|
|
254
|
+
</div>
|
|
255
|
+
);
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
export default TableComponent;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export default function TableIcon() {
|
|
4
|
+
return (
|
|
5
|
+
<svg
|
|
6
|
+
width="1em"
|
|
7
|
+
height="1em"
|
|
8
|
+
viewBox="0 0 25 25"
|
|
9
|
+
fill="none"
|
|
10
|
+
stroke="currentColor"
|
|
11
|
+
strokeWidth="1.2"
|
|
12
|
+
>
|
|
13
|
+
<path d="M3 3h18v18H3zM21 9H3M21 15H3M12 3v18" />
|
|
14
|
+
</svg>
|
|
15
|
+
);
|
|
16
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Button, TextInput } from '@sanity/ui';
|
|
3
|
+
import { RemoveIcon } from '@sanity/icons';
|
|
4
|
+
import type { TableRow } from './TableComponent';
|
|
5
|
+
|
|
6
|
+
interface TableInputProps {
|
|
7
|
+
rows: TableRow[];
|
|
8
|
+
updateCell: (
|
|
9
|
+
e: React.FormEvent<HTMLInputElement>,
|
|
10
|
+
rowIndex: number,
|
|
11
|
+
cellIndex: number
|
|
12
|
+
) => any;
|
|
13
|
+
removeRow: (index: number) => any;
|
|
14
|
+
removeColumn: (index: number) => any;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const TableInput = (props: TableInputProps) => {
|
|
18
|
+
const renderRowCell =
|
|
19
|
+
(rowIndex: number) => (cell: string, cellIndex: number) =>
|
|
20
|
+
(
|
|
21
|
+
<td key={`cell-${rowIndex}-${cellIndex}`}>
|
|
22
|
+
<TextInput
|
|
23
|
+
fontSize={1}
|
|
24
|
+
padding={3}
|
|
25
|
+
value={cell}
|
|
26
|
+
onChange={e => props.updateCell(e, rowIndex, cellIndex)}
|
|
27
|
+
/>
|
|
28
|
+
</td>
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
const renderRow = (row: TableRow, rowIndex: number) => {
|
|
32
|
+
const renderCell = renderRowCell(rowIndex);
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<tr key={`row-${rowIndex}`}>
|
|
36
|
+
{row.cells.map(renderCell)}
|
|
37
|
+
{
|
|
38
|
+
<td key={rowIndex}>
|
|
39
|
+
<Box marginLeft={1} style={{ textAlign: 'center' }}>
|
|
40
|
+
<Button
|
|
41
|
+
icon={RemoveIcon}
|
|
42
|
+
padding={2}
|
|
43
|
+
onClick={() => props.removeRow(rowIndex)}
|
|
44
|
+
mode="bleed"
|
|
45
|
+
/>
|
|
46
|
+
</Box>
|
|
47
|
+
</td>
|
|
48
|
+
}
|
|
49
|
+
</tr>
|
|
50
|
+
);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<table style={{ width: '100%' }}>
|
|
55
|
+
<tbody>
|
|
56
|
+
{props.rows.map(renderRow)}
|
|
57
|
+
<tr>
|
|
58
|
+
{(props.rows[0]?.cells || []).map((_, i) => (
|
|
59
|
+
<td key={i}>
|
|
60
|
+
<Box marginTop={1} style={{ textAlign: 'center' }}>
|
|
61
|
+
<Button
|
|
62
|
+
icon={RemoveIcon}
|
|
63
|
+
padding={2}
|
|
64
|
+
onClick={() => props.removeColumn(i)}
|
|
65
|
+
mode="bleed"
|
|
66
|
+
/>
|
|
67
|
+
</Box>
|
|
68
|
+
</td>
|
|
69
|
+
))}
|
|
70
|
+
</tr>
|
|
71
|
+
</tbody>
|
|
72
|
+
</table>
|
|
73
|
+
);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export default TableInput;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import React, { FormEventHandler, useState } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Box,
|
|
4
|
+
Button,
|
|
5
|
+
Card,
|
|
6
|
+
Dialog,
|
|
7
|
+
Inline,
|
|
8
|
+
Menu,
|
|
9
|
+
MenuButton,
|
|
10
|
+
MenuDivider,
|
|
11
|
+
MenuItem,
|
|
12
|
+
Placement,
|
|
13
|
+
TextInput,
|
|
14
|
+
} from '@sanity/ui';
|
|
15
|
+
import { AddIcon, WarningOutlineIcon, ControlsIcon } from '@sanity/icons';
|
|
16
|
+
|
|
17
|
+
interface TableMenuProps {
|
|
18
|
+
addColumns: (count: number) => any;
|
|
19
|
+
addColumnAt: (index: number) => any;
|
|
20
|
+
addRows: (count: number) => any;
|
|
21
|
+
addRowAt: (index: number) => any;
|
|
22
|
+
remove: () => any;
|
|
23
|
+
placement: Placement;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const TableMenu = (props: TableMenuProps) => {
|
|
27
|
+
const [dialog, setDialog] = useState<{
|
|
28
|
+
type: string;
|
|
29
|
+
callback: (count: number) => any;
|
|
30
|
+
} | null>(null);
|
|
31
|
+
|
|
32
|
+
const [count, setCount] = useState<string | undefined>('');
|
|
33
|
+
|
|
34
|
+
const updateCount: FormEventHandler<HTMLInputElement> = e => {
|
|
35
|
+
setCount(e.currentTarget.value);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const addRows = () => {
|
|
39
|
+
setDialog({ type: 'rows', callback: c => props.addRows(c) });
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const addRowAt = () => {
|
|
43
|
+
setDialog({ type: 'rows', callback: index => props.addRowAt(index) });
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const addColumns = () => {
|
|
47
|
+
setDialog({
|
|
48
|
+
type: 'columns',
|
|
49
|
+
callback: c => props.addColumns(c),
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const addColumnsAt = () => {
|
|
54
|
+
setDialog({ type: 'columns', callback: index => props.addColumnAt(index) });
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const onConfirm = () => {
|
|
58
|
+
const parsedCount = parseInt(count ?? '0', 10);
|
|
59
|
+
|
|
60
|
+
if (parsedCount < 100) {
|
|
61
|
+
setDialog(null);
|
|
62
|
+
dialog?.callback(parsedCount);
|
|
63
|
+
setCount(undefined);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
return (
|
|
68
|
+
<React.Fragment>
|
|
69
|
+
{dialog && (
|
|
70
|
+
<Dialog
|
|
71
|
+
header={`Add ${dialog.type}`}
|
|
72
|
+
id="dialog-add"
|
|
73
|
+
onClose={() => setDialog(null)}
|
|
74
|
+
zOffset={1000}
|
|
75
|
+
>
|
|
76
|
+
<Card padding={4}>
|
|
77
|
+
<TextInput
|
|
78
|
+
style={{ textAlign: 'left' }}
|
|
79
|
+
fontSize={2}
|
|
80
|
+
padding={3}
|
|
81
|
+
type="number"
|
|
82
|
+
value={count}
|
|
83
|
+
onChange={updateCount}
|
|
84
|
+
/>
|
|
85
|
+
<Box marginTop={4}>
|
|
86
|
+
<Inline space={1} style={{ textAlign: 'right' }}>
|
|
87
|
+
<Button
|
|
88
|
+
text="Cancel"
|
|
89
|
+
mode="ghost"
|
|
90
|
+
onClick={() => setDialog(null)}
|
|
91
|
+
/>
|
|
92
|
+
<Button text="Confirm" tone="critical" onClick={onConfirm} />
|
|
93
|
+
</Inline>
|
|
94
|
+
</Box>
|
|
95
|
+
</Card>
|
|
96
|
+
</Dialog>
|
|
97
|
+
)}
|
|
98
|
+
<MenuButton
|
|
99
|
+
button={
|
|
100
|
+
<Button icon={ControlsIcon} fontSize={1} padding={2} mode="ghost" />
|
|
101
|
+
}
|
|
102
|
+
id="menu-button-example"
|
|
103
|
+
menu={
|
|
104
|
+
<Menu>
|
|
105
|
+
<MenuItem
|
|
106
|
+
icon={AddIcon}
|
|
107
|
+
fontSize={1}
|
|
108
|
+
text="Add Row(s)"
|
|
109
|
+
onClick={addRows}
|
|
110
|
+
/>
|
|
111
|
+
<MenuItem
|
|
112
|
+
icon={AddIcon}
|
|
113
|
+
fontSize={1}
|
|
114
|
+
text="Add Row At Index"
|
|
115
|
+
onClick={addRowAt}
|
|
116
|
+
/>
|
|
117
|
+
<MenuItem
|
|
118
|
+
icon={AddIcon}
|
|
119
|
+
fontSize={1}
|
|
120
|
+
text="Add Column(s)"
|
|
121
|
+
onClick={addColumns}
|
|
122
|
+
/>
|
|
123
|
+
<MenuItem
|
|
124
|
+
icon={AddIcon}
|
|
125
|
+
fontSize={1}
|
|
126
|
+
text="Add Column At Index"
|
|
127
|
+
onClick={addColumnsAt}
|
|
128
|
+
/>
|
|
129
|
+
<MenuDivider />
|
|
130
|
+
<MenuItem
|
|
131
|
+
icon={WarningOutlineIcon}
|
|
132
|
+
fontSize={1}
|
|
133
|
+
text="Remove"
|
|
134
|
+
tone="critical"
|
|
135
|
+
onClick={props.remove}
|
|
136
|
+
/>
|
|
137
|
+
</Menu>
|
|
138
|
+
}
|
|
139
|
+
placement={props.placement}
|
|
140
|
+
/>
|
|
141
|
+
</React.Fragment>
|
|
142
|
+
);
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
export default TableMenu;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { TableRow } from './TableComponent';
|
|
3
|
+
import { Box, Card, Inline, Grid, Label, Text } from '@sanity/ui';
|
|
4
|
+
import TableIcon from './TableIcon';
|
|
5
|
+
import { PreviewProps } from 'sanity';
|
|
6
|
+
|
|
7
|
+
interface ValueProps {
|
|
8
|
+
rows?: TableRow[];
|
|
9
|
+
title?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const Table = ({ rows }: { rows: TableRow[] }) => {
|
|
13
|
+
const numCols = rows.length === 0 ? 0 : rows[0].cells.length;
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<Grid columns={numCols} padding={2}>
|
|
17
|
+
{rows.map(row =>
|
|
18
|
+
row.cells.map((cell, i) => (
|
|
19
|
+
<Card
|
|
20
|
+
key={row._key + i}
|
|
21
|
+
padding={2}
|
|
22
|
+
style={{ outline: '1px solid #DFE2E9' }}
|
|
23
|
+
>
|
|
24
|
+
<Text style={{ textOverflow: 'elipsis' }}>{cell}</Text>
|
|
25
|
+
</Card>
|
|
26
|
+
))
|
|
27
|
+
)}
|
|
28
|
+
</Grid>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const TablePreview = (props: PreviewProps) => {
|
|
33
|
+
const { value = { rows: [] }, schemaType } = props;
|
|
34
|
+
const { rows = [], title } = (value as ValueProps | undefined) ?? {
|
|
35
|
+
title: 'Title missing',
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<>
|
|
40
|
+
<Box padding={3}>
|
|
41
|
+
<Inline space={3}>
|
|
42
|
+
<Card>
|
|
43
|
+
<Label size={4}>
|
|
44
|
+
<TableIcon />
|
|
45
|
+
</Label>
|
|
46
|
+
</Card>
|
|
47
|
+
<Card>
|
|
48
|
+
<Text>{schemaType?.title ?? title}</Text>
|
|
49
|
+
</Card>
|
|
50
|
+
</Inline>
|
|
51
|
+
</Box>
|
|
52
|
+
<Box padding={2}>
|
|
53
|
+
{rows.length === 0 ? (
|
|
54
|
+
<Label muted>Empty Table</Label>
|
|
55
|
+
) : (
|
|
56
|
+
<Table rows={rows} />
|
|
57
|
+
)}
|
|
58
|
+
</Box>
|
|
59
|
+
</>
|
|
60
|
+
);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export default TablePreview;
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { definePlugin, defineType } from 'sanity';
|
|
2
|
+
|
|
3
|
+
import { TableComponent, TablePreview } from './components';
|
|
4
|
+
export type {
|
|
5
|
+
TableValue,
|
|
6
|
+
TableProps,
|
|
7
|
+
TableRow,
|
|
8
|
+
} from './components/TableComponent';
|
|
9
|
+
|
|
10
|
+
export { TableComponent, TablePreview };
|
|
11
|
+
|
|
12
|
+
const tableRowSchema = defineType({
|
|
13
|
+
title: 'Table Row',
|
|
14
|
+
name: 'tableRow',
|
|
15
|
+
type: 'object',
|
|
16
|
+
fields: [
|
|
17
|
+
{
|
|
18
|
+
name: 'cells',
|
|
19
|
+
type: 'array',
|
|
20
|
+
of: [{ type: 'string' }],
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const tableSchema = defineType({
|
|
26
|
+
title: 'Table',
|
|
27
|
+
name: 'table',
|
|
28
|
+
type: 'object',
|
|
29
|
+
fields: [
|
|
30
|
+
{
|
|
31
|
+
name: 'rows',
|
|
32
|
+
type: 'array',
|
|
33
|
+
of: [
|
|
34
|
+
{
|
|
35
|
+
type: tableRowSchema.name,
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
components: {
|
|
41
|
+
//TODO remove as any when rc.3 is released
|
|
42
|
+
input: TableComponent as any,
|
|
43
|
+
preview: TablePreview,
|
|
44
|
+
},
|
|
45
|
+
preview: {
|
|
46
|
+
select: {
|
|
47
|
+
rows: 'rows',
|
|
48
|
+
title: 'title',
|
|
49
|
+
},
|
|
50
|
+
prepare: ({ title, rows = [] }) => ({
|
|
51
|
+
title,
|
|
52
|
+
rows,
|
|
53
|
+
}),
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
export const table = definePlugin(() => {
|
|
58
|
+
return {
|
|
59
|
+
name: 'table',
|
|
60
|
+
schema: {
|
|
61
|
+
types: [tableRowSchema, tableSchema],
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const {showIncompatiblePluginDialog} = require('@sanity/incompatible-plugin')
|
|
2
|
+
const {name, version, sanityExchangeUrl} = require('./package.json')
|
|
3
|
+
|
|
4
|
+
export default showIncompatiblePluginDialog({
|
|
5
|
+
name: name,
|
|
6
|
+
versions: {
|
|
7
|
+
v3: version,
|
|
8
|
+
v2: undefined,
|
|
9
|
+
},
|
|
10
|
+
sanityExchangeUrl,
|
|
11
|
+
})
|