profile-pane 3.1.2-8a70896f → 3.1.2-e3347eef

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"profile-pane.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;ACVA;AACA,IAAI,IAAyD;AAC7D,2BAA2B,mBAAO,CAAC,IAAa,GAAG,mBAAO,CAAC,IAAU,GAAG,mBAAO,CAAC,IAAQ;AACxF,MAAM;AAAA,EAKyE;AAC/E,CAAC;AACD,yBAAyB;AACzB;AACA;;AAEA;AACA,SAAS,0BAAmB,EAAE,8BAAmB;;AAEjD,qBAAqB,8BAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,4GAA4G,8BAAmB;AAC/H,iIAAiI,8BAAmB;AACpJ,qGAAqG,8BAAmB;AACxH,0HAA0H,8BAAmB;AAC7I;;;AAGA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;A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ACA;AACA,qBAAqB,qBAAqB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sFAAsF,qBAAqB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,iDAAiD,qBAAqB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sDAAsD,qBAAqB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,cAAc;AACrE;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;;;AAIA;AACA;AACA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA,mCAAmC,gCAAmB;;;;AAItD;AACA;AACA,eAAe,KAAI,GAAG,gCAAmB,MAAM,CAAC;AAChD;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;;;AAIA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;;;AAIA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;AAEA;;AAEA,OAAO;;AAEP;AACA;;AAEA;;AAEA,OAAO;;AAEP;AACA;;AAEA;;AAEA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mBAAmB,gCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,gCAAmB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B;AACA;AACA;AACA,YAAY,gCAAmB,aAAa,WAAW;AACvD;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B;AACA,gBAAgB,gCAAmB,wBAAwB,gCAAmB;AAC9E,oDAAoD,wCAAwC;AAC5F;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B,WAAW;AACX;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B,WAAW;AACX;AACA;AACA,IAAI,0BAAmB;;AAEvB;AACA,gCAAmB,GAAG,0BAAmB;AACzC;AACA,CAAC;;AAED;;AAEA,8BAA8B;AAC9B,2FAA2F,gCAAmB;AAC9G,8BAA8B;AAC9B,0EAA0E,gCAAmB;AAC7F,8BAA8B;AAC9B,sEAAsE,gCAAmB;AACzF;AACA,+BAA+B,gCAAmB;AAClD,oDAAoD,gCAAmB;AACvE;AACA,kBAAkB,gCAAmB;AACrC,uCAAuC,gCAAmB;AAC1D;AACA,uBAAuB,gCAAmB;AAC1C,4CAA4C,gCAAmB;AAC/D;AACA,qCAAqC,gCAAmB;AACxD,0DAA0D,gCAAmB;AAC7E;AACA,yBAAyB,gCAAmB;AAC5C,8CAA8C,gCAAmB;AACjE;AACA,wBAAwB,gCAAmB;AAC3C,6CAA6C,gCAAmB;AAChE;AACA,mBAAmB,gCAAmB;AACtC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;AAKA;;AAEA,CAAC;AACD;;;;;;;;AAQA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ,uBAAuB,WAAW,IAAI,OAAO;AAC7C;;AAEA;AACA,2BAA2B,QAAQ,IAAI,WAAW,IAAI,MAAM;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iKAAiK;AACjK;AACA,GAAG;AACH;AACA;AACA,IAAI,cAAc,0CAA0C,WAAW,IAAI,MAAM;AACjF;;AAEA;AACA,+BAA+B,QAAQ,QAAQ,WAAW,IAAI,MAAM;;AAEpE;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,gBAAgB,YAAY,EAAE,MAAM;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yCAAyC,WAAW;AACpD,sBAAsB,WAAW;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,SAAS,KAAK,SAAS;AAC3E;AACA;AACA;AACA,mCAAmC,eAAe,UAAU,WAAW;AACvE,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,8EAA8E,OAAO,OAAO,OAAO,IAAI,IAAI;AAC3G;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,4EAA4E,QAAQ,IAAI,IAAI;AAC5F;AACA;AACA,KAAK;AACL,qEAAqE,QAAQ,IAAI,IAAI;AACrF;AACA,KAAK;AACL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,wEAAwE,OAAO,KAAK,OAAO,IAAI,IAAI;AACnG;AACA;AACA;;AAEA,UAAU,MAAM;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC;AACD;;;;;;;AAOA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,OAAO;AACrC;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,oCAAoC,OAAO,WAAW,MAAM;AAC5D;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,OAAO;AACb;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B,OAAO,MAAM,UAAU,WAAW,OAAO,OAAO,SAAS;AACxF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA,wCAAwC;AACxC,iEAAiE,QAAQ,KAAK,MAAM;AACpF;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,QAAQ;AACR,KAAK;AACL,GAAG;AACH,WAAW;AACX,EAAE;;AAEF;;AAEA,CAAC;;;;;AAKD,QAAQ,mBAAmB;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4BAA4B;AACxD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,YAAY,2DAA2D;AACvE,YAAY,2DAA2D;AACvE,YAAY,sCAAsC;AAClD;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,iBAAiB,aAAa,eAAe;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,6BAA6B;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,mDAAmD;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA,qBAAqB,gCAAmB;AACxC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;AAKA;;AAEA,CAAC;;;;;;AAMD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,UAAU;AACV;AACA,2DAA2D,OAAO,QAAQ,IAAI;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAU,MAAM;AAChB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,CAAC;AACD,m0BAAm0B,kDAAkD,4WAA4W,4BAA4B,gCAAgC,sFAAsF,0CAA0C,gCAAgC,2FAA2F,0CAA0C,gCAAgC,iFAAiF,yCAAyC,+BAA+B,4EAA4E,mP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;AAKA;;AAEA,CAAC;;;;AAID;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;;AAYD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA,IAAI;;AAEJ;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,EAAE;;AAEF;AACA,gBAAgB,gCAAmB;AACnC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;AAKA;;AAEA,CAAC;AACD;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;;AAEvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,mBAAmB;AACnB;AACA;AACA,aAAa;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA,kCAAkC,wBAAwB;AAC1D,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,uBAAuB;AAC3D;AACA,sCAAsC,wBAAwB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,YAAY;;AAEZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,kCAAkC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,8BAA8B,0BAA0B;AACxD;AACA;AACA;AACA;AACA,oCAAoC,yEAAyE;AAC7G;AACA;AACA,8BAA8B,+BAA+B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,+BAA+B;AAC/D;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,aAAa;AACb,YAAY;;AAEZ;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,wBAAwB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA,8BAA8B,6BAA6B;AAC3D;AACA;AACA;AACA,8BAA8B,2BAA2B;AACzD;AACA;AACA;AACA;AACA,8BAA8B,wBAAwB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,0BAA0B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB,eAAe;AACf;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0BAA0B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB,eAAe;AACf;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,eAAe;AACf,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kBAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,mBAAmB;AACzC;AACA;;AAEA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA,UAAU,OAAO;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;;AAEF;;AAEA;AACA,mBAAmB,gCAAmB;AACtC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;AAKA;;AAEA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AAWA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;;AAEA;AACA,iEAAiE;AACjE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU,iEAAiE;AAC3E;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;;AAEhC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,kBAAkB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,0BAA0B,qCAAqC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA,aAAa;AACb;AACA;AACA;AACA,0BAA0B,qCAAqC;AAC/D;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb,WAAW;AACX;;AAEA;AACA;AACA;AACA,0BAA0B,oBAAoB;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,0BAA0B,qBAAqB;AAC/C;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA,UAAU;;AAEV;AACA,0BAA0B,2BAA2B;AACrD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;;AAEA,kBAAkB,WAAW;;AAE7B,8EAA8E,WAAW;AACzF;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,UAAU;;AAEV;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;;AAEV;AACA;AACA;AACA;AACA;;AAEA,YAAY;;AAEZ;;AAEA;AACA,sCAAsC,2CAA2C;;AAEjF;AACA;AACA,QAAQ;;AAER;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;;AAEX;AACA,QAAQ;AACR,uDAAuD;AACvD,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,IAAI;AACJ,CAAC,GAAG;AACJ;;AAEA;AACA;AACA;AACA;;AAEA,0BAAmB,GAAG,0BAAmB;AACzC,iBAAiB,0BAAmB;AACpC,UAAU;AACV;AACA,CAAC;AACD,wC;;;;;;;;;;;;;;;AC78IA;AAC6G;AACjB;AAC5F,8BAA8B,mFAA2B,CAAC,4FAAqC;AAC/F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,6FAA6F,aAAa,MAAM,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,YAAY,WAAW,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,wHAAwH,0BAA0B,GAAG,aAAa,gCAAgC,qCAAqC,yCAAyC,kBAAkB,2BAA2B,eAAe,GAAG,YAAY,qBAAqB,gCAAgC,GAAG,2BAA2B,qBAAqB,gCAAgC,qCAAqC,yCAAyC,GAAG,mBAAmB,6BAA6B,mCAAmC,qBAAqB,0CAA0C,qCAAqC,sDAAsD,sCAAsC,GAAG,qBAAqB;AAC/vC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC5CvC;AAC6G;AACjB;AAC5F,8BAA8B,mFAA2B,CAAC,4FAAqC;AAC/F;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,mGAAmG,cAAc,MAAM,YAAY,wJAAwJ,qBAAqB,GAAG,qBAAqB;AAC/U;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACbvC;AAC6G;AACjB;AAC5F,8BAA8B,mFAA2B,CAAC,4FAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,8FAA8F,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,UAAU,YAAY,aAAa,aAAa,WAAW,UAAU,UAAU,YAAY,WAAW,UAAU,UAAU,UAAU,MAAM,KAAK,KAAK,UAAU,UAAU,UAAU,YAAY,OAAO,KAAK,wBAAwB,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,MAAM,MAAM,KAAK,KAAK,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,MAAM,MAAM,UAAU,YAAY,WAAW,KAAK,MAAM,KAAK,UAAU,YAAY,aAAa,aAAa,WAAW,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,WAAW,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,aAAa,aAAa,WAAW,MAAM,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,WAAW,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,aAAa,WAAW,UAAU,YAAY,cAAc,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,WAAW,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,UAAU,UAAU,YAAY,WAAW,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,YAAY,OAAO,OAAO,OAAO,KAAK,YAAY,aAAa,WAAW,UAAU,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,YAAY,aAAa,WAAW,UAAU,YAAY,aAAa,WAAW,MAAM,KAAK,YAAY,aAAa,aAAa,MAAM,KAAK,YAAY,WAAW,UAAU,YAAY,WAAW,YAAY,WAAW,YAAY,WAAW,UAAU,MAAM,KAAK,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,WAAW,UAAU,YAAY,aAAa,aAAa,WAAW,YAAY,WAAW,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,aAAa,aAAa,WAAW,MAAM,KAAK,YAAY,WAAW,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,YAAY,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,UAAU,YAAY,aAAa,WAAW,YAAY,WAAW,UAAU,YAAY,WAAW,UAAU,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,MAAM,MAAM,YAAY,aAAa,aAAa,WAAW,UAAU,YAAY,OAAO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EA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,kGAAkG,cAAc,MAAM,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,MAAM,YAAY,aAAa,aAAa,mGAAmG,gBAAgB,8BAA8B,qCAAqC,sBAAsB,GAAG,yBAAyB,qBAAqB,+BAA+B,qBAAqB,6BAA6B,GAAG,qCAAqC,iDAAiD,qBAAqB,qBAAqB,GAAG,qBAAqB;AACxwB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC9BvC;AAC6G;AACjB;AAC5F,8BAA8B,mFAA2B,CAAC,4FAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OA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AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,mBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC;AACxC;AACA,OAAO,mGAAmG,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,MAAM,MAAM,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,OAAO,MAAM,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,KAAK,KAAK,UAAU,MAAM,YAAY,uBAAuB,uBAAuB,uB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ACA;AACA;AACA;AACA;AACA,UAAU;AACV,sFAAsF,qBAAqB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,iDAAiD,qBAAqB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sDAAsD,qBAAqB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;ACpFa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,cAAc;AACrE;AACA;AACA;AACA;AACA,E;;;;;;;;ACfa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;;AAGA;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;ACnKA,mBAAmB,mBAAO,CAAC,IAAe;;AAE1C,eAAe,mBAAO,CAAC,GAAe;AACtC,uBAAuB,mBAAO,CAAC,IAAmB;AAClD,oBAAoB,mBAAO,CAAC,IAAuB;;AAEnD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA,yBAAc;AACd,yBAAgB;AAChB,yBAAiB;;AAEjB;AACA,gBAAgB;AAChB;AACA,CAAC;;;;;;;;AC3ED;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,yCAAgC;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,uBAAuB;AACvB;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,kBAAkB;AACpC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gFAAgF;AAChF;AACA;AACA;AACA,2BAA2B,uBAAuB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,oBAAoB;AACpB;AACA;AACA;;AAEA,kBAAkB,eAAe;AACjC,oBAAoB,eAAe;AACnC;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;AClFA,aAAa,mBAAO,CAAC,GAAQ;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;AC1DA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA,oBAAoB,YAAY;AAChC;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;ACpCA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,SAAS;AACrB,YAAY,SAAS;AACrB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;;;;;;;;AChEA,aAAa,mBAAO,CAAC,GAAQ;;AAE7B;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;;AAEA;;;;;;;;AC7BA,gBAAgB,mBAAO,CAAC,IAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,6BAA6B;AACzC;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,6BAA6B;AACzC;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtIA,SAAS,KAAK;AACd,SAAS,KAAK;AACd,SAAS,KAAK;AACd,SAAS,KAAK;;AAEd;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,eAAe;AACf;AACA;AACA;;AAEA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;ACjDA,sBAAsB,yCAAgC;AACtD;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,oBAAoB;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrBA,cAAc,mBAAO,CAAC,IAAS;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,6BAA6B;AACzC;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,CAAC;AACD;AACA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,oBAAoB,SAAS;AAC7B;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA,WAAW;AACX;;AAEA;AACA,WAAW;AACX;AACA;;;;;;;;ACpEA,aAAa,mBAAO,CAAC,GAAQ;AAC7B,cAAc,mBAAO,CAAC,IAAS;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc,sBAAsB;AACpC;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;ACrDA;AACA;AACA,UAAU;AACV;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,SAAS;AACrB,YAAY,iBAAiB;AAC7B;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,eAAe;AAC3B,YAAY,4BAA4B;AACxC;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,YAAY;AAChC;AACA;;AAEA,sBAAsB,YAAY;AAClC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA,oBAAoB,gBAAgB;AACpC,sBAAsB,gBAAgB;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA,oBAAoB,YAAY;AAChC;AACA,sBAAsB,YAAY;AAClC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA,kBAAkB,kBAAkB;;AAEpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,oBAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB;AACA,iBAAiB;AACjB;;AAEA,oBAAoB,YAAY;AAChC,sBAAsB,YAAY;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,QAAQ;AACpB;AACA,mBAAmB;AACnB;AACA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;ACzOA,qBAAqB,mBAAO,CAAC,IAAiB;AAC9C,cAAc,mBAAO,CAAC,IAAS;;AAE/B;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,aAAa;AACzB,YAAY,aAAa;AACzB,YAAY,0BAA0B;AACtC;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;ACtKA,aAAa,mBAAO,CAAC,GAAQ;;AAE7B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;AC1CA,WAAW,mBAAO,CAAC,IAAgB;;AAEnC;AACA;AACA;AACA,YAAY,YAAY;AACxB,YAAY,YAAY;AACxB,YAAY,eAAe;AAC3B;AACA,WAAW;AACX;;AAEA,kBAAkB,eAAe;AACjC,oBAAoB,eAAe;AACnC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,YAAY;AACxB,YAAY,YAAY;AACxB,YAAY,qBAAqB;AACjC;AACA,WAAW;AACX;;AAEA;AACA;;AAEA,oBAAoB,oBAAoB;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,eAAe;AAC3B;AACA,4BAA4B;AAC5B;AACA,kBAAkB,YAAY;AAC9B;AACA;;AAEA;AACA;;;;;;;;AC7DA,cAAc,mBAAO,CAAC,IAAS;AAC/B,gBAAgB,mBAAO,CAAC,IAA0B;AAClD,kBAAkB,mBAAO,CAAC,IAAc;AACxC,kBAAkB,mBAAO,CAAC,IAAc;AACxC,yBAAyB,mBAAO,CAAC,IAAqB;AACtD,sBAAsB,mBAAO,CAAC,IAAkB;AAChD,oBAAoB,mBAAO,CAAC,IAAgB;AAC5C,eAAe,mBAAO,CAAC,IAAyB;AAChD,2BAA2B,mBAAO,CAAC,IAAwB;AAC3D,gBAAgB,mBAAO,CAAC,IAAW;AACnC,mBAAmB,mBAAO,CAAC,IAAe;AAC1C,aAAa,mBAAO,CAAC,GAAQ;AAC7B,iBAAiB,mBAAO,CAAC,IAAY;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA,qBAAqB,QAAQ;AAC7B;;AAEA,uBAAuB,QAAQ;AAC/B;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA,YAAY,WAAW;AACvB;AACA;AACA;;AAEA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB;AACA;AACA;;AAEA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA,qBAAqB,QAAQ;AAC7B,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,yBAAyB;AACrC,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA,cAAc,QAAQ;AACtB;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,YAAY;AACxB,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,SAAS;AACpC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY,wBAAwB;AACpC,YAAY,UAAU;AACtB,YAAY,+BAA+B;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,sBAAsB;AAClC,YAAY,gCAAgC;AAC5C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,iBAAiB;AAC/B,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,aAAa;AAC3B,gBAAgB,mBAAmB;AACnC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,qBAAqB;AACjC,YAAY,aAAa;AACzB,YAAY,6BAA6B;AACzC;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,gEAAgE;AAChE;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;AC9eA,mBAAmB,mBAAO,CAAC,IAAc;;AAEzC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,YAAY;AACxB,YAAY,iBAAiB;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,aAAa;AACb,kBAAkB;AAClB,YAAY;AACZ,eAAe;AACf,oBAAoB;;AAEpB;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA;;AAEA,mBAAmB;AACnB;AACA;;AAEA,wBAAwB;AACxB;AACA;;;;;;;;AC9BA,aAAa,mBAAO,CAAC,GAAQ;AAC7B,oBAAoB,mBAAO,CAAC,IAAgB;AAC5C,yBAAyB,mBAAO,CAAC,IAAqB;AACtD,iBAAiB,mBAAO,CAAC,IAAa;AACtC,kBAAkB,mBAAO,CAAC,IAAc;AACxC,cAAc,mBAAO,CAAC,IAAS;AAC/B,cAAc,mBAAO,CAAC,IAAS;AAC/B,iBAAiB,mBAAO,CAAC,IAAY;;AAErC;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,YAAY;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,aAAa;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,MAAM;AAClB,YAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,YAAY;AACxB;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;;AAEA;AACA;AACA;AACA,YAAY,6DAA6D;AACzE,YAAY;AACZ;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,kBAAkB,kBAAkB;AACpC;AACA;;AAEA,oBAAoB,sBAAsB;AAC1C;AACA;;AAEA;AACA,qBAAqB;AACrB;;AAEA,sBAAsB,wBAAwB;AAC9C;;AAEA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,wBAAwB;AAC1C;AACA;;AAEA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,eAAe;AAC3B,YAAY,yBAAyB;AACrC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,aAAa;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB,qBAAqB;AACvC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,aAAa;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;;;;;;;ACzUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,+BAA+B;AAC/B;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,aAAa;AACzB;AACA,mBAAmB;AACnB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;;AAEA,0BAA0B;AAC1B;AACA;;AAEA,cAAc;AACd;AACA;;;;;;;;AC9DA;AACA;AACA;AACA,YAAY,SAAS;AACrB,YAAY,iBAAiB;AAC7B;AACA,eAAe;AACf;AACA;;;;;;;;ACRA,cAAc,mBAAO,CAAC,IAAS;AAC/B,eAAe,mBAAO,CAAC,IAAyB;AAChD,gBAAgB,mBAAO,CAAC,IAA0B;AAClD,aAAa,mBAAO,CAAC,GAAQ;AAC7B,qBAAqB,mBAAO,CAAC,IAAiB;;AAE9C;AACA;AACA;;AAEA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,eAAe;AAC3B,YAAY,eAAe;AAC3B,YAAY,4BAA4B;AACxC;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,6BAA6B;AACzC;AACA,mBAAmB;AACnB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,SAAS;AACrB,YAAY,QAAQ;AACpB,YAAY,MAAM;AAClB,YAAY,iCAAiC;AAC7C;AACA,6BAA6B;AAC7B;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,sBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;AClKA,cAAc,mBAAO,CAAC,IAAS;;AAE/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;;;;;;;AC9DA,cAAc,mBAAO,CAAC,IAAS;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;AChFA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,gBAAgB;AAClC,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClGa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,6DAA6D;AAC7I;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAkC;AAClE;AACA;AACA;AACA;AACA;AACA,+BAA+B,4FAA4F;AAC3H;AACA;AACA;AACA,sDAAsD,kBAAkB,aAAa;AACrF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,SAAS;AAC3C;AACA;AACA;AACA,cAAc;AACd,kCAAkC,SAAS;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,kDAAkD,UAAU;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,kDAAkD,4BAA4B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,kDAAkD,wBAAwB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,GAAG,iBAAiB,GAAG;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,cAAc,oBAAoB,iBAAiB;AAC3F,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,cAAc,oBAAoB,iBAAiB;AAC3F,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA,wCAAwC,cAAc,oBAAoB,iBAAiB;AAC3F,mCAAmC;AACnC;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,cAAc,oBAAoB,iBAAiB;AAC3F,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,oGAAoG;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,yFAAyF;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,GAAG;AACvC;AACA;AACA,wDAAwD,GAAG,iBAAiB,GAAG;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,GAAG;AAChC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,sDAAsD;AACtD;AACA;AACA;AACA;AACA,cAAc,uCAAuC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,KAA0B,2G;;;;;;;;ACheb;;AAEb;AACA;AACA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;ACnFa;;AAEb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kC;;;;;;;;ACjCa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oC;;;;;;;;ACTa;;AAEb;AACA;AACA,cAAc,KAAwC,GAAG,sBAAiB,GAAG,CAAI;AACjF;AACA;AACA;AACA;AACA,gD;;;;;;;;ACTa;;AAEb;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wB;;;;;;;;AC5Da;;AAEb;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,mC;;;;;;;ACbA,2BAA2B,SAAS,cAAc,4BAA4B,YAAY,qBAAqB,2DAA2D,u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CAAgC,gCAAW;AAC3C;AACA,gDAAgD,KAAK;AACrD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,2DAA2D,KAAK;AAChE,YAAY,gCAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD,6BAA6B,gCAAW;AACxC;AACA,4CAA4C,KAAK;AACjD,gCAAgC,gCAAW;AAC3C;AACA,gDAAgD,KAAK;AACrD;AACA,aAAa;AACb;AACA;AACA;AACA,4C;;ACnE0C;AACD;AACzC;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,KAAK;AAC3D;AACA;AACA,sCAAsC,KAAK;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sCAAsC,KAAK;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,wBAAG,OAAO,KAAK;AAC7C;AACA;AACA;AACA,YAAY,gCAAW;AACvB;AACA;AACA,WAAW,gCAAW;AACtB;AACA,wC;;AC9DqC;AACI;AAClC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,KAAK;AACzD;AACA;AACA;AACA,kCAAkC,KAAK;AACvC,4BAA4B,gCAAW;AACvC;AACA;AACA,4CAA4C,KAAK;AACjD,SAAS;AACT;AACA;AACA,sC;;ACrByD;AACR;AACJ;AAC7C,iC;;ACHsC;AACO;AAC4B;AAClE;AACP,eAAe,UAAU;AACzB,mBAAmB,UAAU,EAAE,GAAG;AAClC,iCAAiC,UAAU,EAAE,GAAG;AAChD,6BAA6B,UAAU,EAAE,GAAG;AAC5C;AACA,QAAQ,uBAAE,CAAC,wBAAG,OAAO,wBAAG,qDAAqD,KAAK,iBAAiB,wBAAG;AACtG,QAAQ,uBAAE,CAAC,wBAAG,OAAO,EAAE,WAAW,wBAAG,QAAQ,wBAAG;AAChD,QAAQ,uBAAE,CAAC,wBAAG,OAAO,KAAK,oBAAoB,wBAAG,qBAAqB,wBAAG;AACzE,QAAQ,uBAAE,CAAC,wBAAG,OAAO,KAAK,gBAAgB,wBAAG,iBAAiB,wBAAG;AACjE;AACA;AACA;AACA;AACA;AACA,0BAA0B,wBAAwB,IAAI,oBAAoB;AAC1E;AACA;AACA,6C;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,yC;;ACjBA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,qC;;ACVmC;AACJ;AAC/B,iC;;ACFmC;AAC5B,YAAY,8BAAS;AACrB,cAAc,8BAAS;AACvB,YAAY,8BAAS;AACrB,YAAY,8BAAS;AAC5B,iC;;ACLqC;AACU;AAC/C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,KAAK;AACzD,YAAY,gCAAW;AACvB;AACA;AACA;AACA;AACA;AACA,4C;;AC9BqC;AACe;AACpD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,KAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,GAAG;AAC7B;AACA;AACA;AACA;AACA,YAAY,gCAAW;AACvB;AACA;AACA;AACA;AACA;AACA,wC;;ACpCqC;AACU;AAC/C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,KAAK;AACzD;AACA,iBAAiB,gCAAW;AAC5B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,gCAAgC,KAAK;AACrC;AACA;AACA;AACA,0C;;AC7ByD;AACR;AACI;AACrD,iC;;ACH6B;AACW;AACU;AAClD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AAC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","sources":["webpack://ProfilePane/webpack/universalModuleDefinition","webpack://ProfilePane/./node_modules/contacts-pane/dist/contactsPane.js","webpack://ProfilePane/./src/styles/CVCard.css","webpack://ProfilePane/./src/styles/ChatWithMe.css","webpack://ProfilePane/./src/styles/ContactsCard.css","webpack://ProfilePane/./src/styles/FriendList.css","webpack://ProfilePane/./src/styles/ProfileCard.css","webpack://ProfilePane/./src/styles/ProfileView.css","webpack://ProfilePane/./src/styles/QRCodeCard.css","webpack://ProfilePane/./src/styles/SocialCard.css","webpack://ProfilePane/./src/styles/StuffCard.css","webpack://ProfilePane/./src/styles/rdfFormsEnforced.css","webpack://ProfilePane/./src/styles/utilities.css","webpack://ProfilePane/./node_modules/css-loader/dist/runtime/api.js","webpack://ProfilePane/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://ProfilePane/./node_modules/dijkstrajs/dijkstra.js","webpack://ProfilePane/./node_modules/qrcode/lib/browser.js","webpack://ProfilePane/./node_modules/qrcode/lib/can-promise.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/alignment-pattern.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/alphanumeric-data.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/bit-buffer.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/bit-matrix.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/byte-data.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/error-correction-code.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/error-correction-level.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/finder-pattern.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/format-info.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/galois-field.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/kanji-data.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/mask-pattern.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/mode.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/numeric-data.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/polynomial.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/qrcode.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/reed-solomon-encoder.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/regex.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/segments.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/utils.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/version-check.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/version.js","webpack://ProfilePane/./node_modules/qrcode/lib/renderer/canvas.js","webpack://ProfilePane/./node_modules/qrcode/lib/renderer/svg-tag.js","webpack://ProfilePane/./node_modules/qrcode/lib/renderer/utils.js","webpack://ProfilePane/./node_modules/short-unique-id/dist/short-unique-id.js","webpack://ProfilePane/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://ProfilePane/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://ProfilePane/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://ProfilePane/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://ProfilePane/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://ProfilePane/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://ProfilePane/./node_modules/validate-color/lib/index.js","webpack://ProfilePane/external umd \"SolidLogic\"","webpack://ProfilePane/external umd \"UI\"","webpack://ProfilePane/external umd \"rdflib\"","webpack://ProfilePane/webpack/bootstrap","webpack://ProfilePane/webpack/runtime/compat get default export","webpack://ProfilePane/webpack/runtime/define property getters","webpack://ProfilePane/webpack/runtime/hasOwnProperty shorthand","webpack://ProfilePane/webpack/runtime/nonce","webpack://ProfilePane/./src/styles/CVCard.css?991d","webpack://ProfilePane/./src/styles/ChatWithMe.css?2963","webpack://ProfilePane/./src/styles/FriendList.css?4665","webpack://ProfilePane/./src/styles/ProfileCard.css?4c2f","webpack://ProfilePane/./src/styles/ProfileView.css?48de","webpack://ProfilePane/./src/styles/QRCodeCard.css?9d8e","webpack://ProfilePane/./src/styles/SocialCard.css?9a5c","webpack://ProfilePane/./src/styles/StuffCard.css?8d30","webpack://ProfilePane/./src/styles/utilities.css?4cc3","webpack://ProfilePane/./node_modules/lit-html/lit-html.js","webpack://ProfilePane/./node_modules/lit-html/directive-helpers.js","webpack://ProfilePane/./node_modules/lit-html/directive.js","webpack://ProfilePane/./node_modules/lit-html/async-directive.js","webpack://ProfilePane/./node_modules/lit-html/directives/private-async-helpers.js","webpack://ProfilePane/./node_modules/lit-html/directives/async-replace.js","webpack://ProfilePane/./src/texts.ts","webpack://ProfilePane/./src/buttonsHelper.ts","webpack://ProfilePane/./src/ChatWithMe.ts","webpack://ProfilePane/./src/FriendList.ts","webpack://ProfilePane/./src/presenter.ts","webpack://ProfilePane/./src/CVPresenter.ts","webpack://ProfilePane/./src/rdfFormsHelper.ts","webpack://ProfilePane/./src/SocialPresenter.ts","webpack://ProfilePane/./src/StuffPresenter.ts","webpack://ProfilePane/./src/addMeToYourFriends.ts","webpack://ProfilePane/./src/contactsErrors.ts","webpack://ProfilePane/./src/ContactsCard.ts","webpack://ProfilePane/./src/styles/ContactsCard.css?ad98","webpack://ProfilePane/./src/contactsHelpers.ts","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/namespaces.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/identifier/generate-id.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/identifier/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/queries/AddressBookQuery.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/queries/ContactQuery.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/queries/GroupQuery.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/queries/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/createAddressBook.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/web-operations/executeUpdate.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/web-operations/fetchNode.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/web-operations/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/namespaces/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/queries/PreferencesQuery.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/queries/ProfileQuery.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/queries/TypeIndexQuery.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/queries/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/module/ModuleSupport.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/module/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/update-operations/addInstanceToTypeIndex.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/update-operations/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/createNewContact.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/createNewGroup.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/addContactToGroup.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/addNewEmailAddress.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/addNewPhoneNumber.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/removeContactFromGroup.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/removeEmailAddress.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/removePhoneNumber.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/renameContact.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/updateEmailAddress.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/updatePhoneNumber.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/ContactsModuleRdfLib.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/index.js","webpack://ProfilePane/./src/addMeToYourContacts.ts","webpack://ProfilePane/./src/QRCodeCard.ts","webpack://ProfilePane/./src/ProfileCard.ts","webpack://ProfilePane/./src/CVCard.ts","webpack://ProfilePane/./src/SocialCard.ts","webpack://ProfilePane/./src/StuffCard.ts","webpack://ProfilePane/./src/ProfileView.ts","webpack://ProfilePane/./src/editProfilePane/EditContactsCard.ts","webpack://ProfilePane/./src/editProfilePane/EditFriendsCard.ts","webpack://ProfilePane/./src/editProfilePane/EditSocialCard.ts","webpack://ProfilePane/./src/editProfilePane/EditCommunitiesCard.ts","webpack://ProfilePane/./src/styles/rdfFormsEnforced.css?8628","webpack://ProfilePane/./src/editProfilePane/EditCVCard.ts","webpack://ProfilePane/./src/editProfilePane/EditOtherPreferences.ts","webpack://ProfilePane/./src/editProfilePane/EditProfileView.ts","webpack://ProfilePane/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"UI\"), require(\"SolidLogic\"), require(\"rdflib\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"UI\", \"SolidLogic\", \"rdflib\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ProfilePane\"] = factory(require(\"UI\"), require(\"SolidLogic\"), require(\"rdflib\"));\n\telse\n\t\troot[\"ProfilePane\"] = factory(root[\"UI\"], root[\"SolidLogic\"], root[\"rdflib\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE__9426__, __WEBPACK_EXTERNAL_MODULE__5663__, __WEBPACK_EXTERNAL_MODULE__5491__) => {\nreturn ","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"solid-logic\"), require(\"solid-ui\"), require(\"rdflib\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"solid-logic\", \"solid-ui\", \"rdflib\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ContactsPane\"] = factory(require(\"solid-logic\"), require(\"solid-ui\"), require(\"rdflib\"));\n\telse\n\t\troot[\"ContactsPane\"] = factory(root[\"SolidLogic\"], root[\"UI\"], root[\"$rdf\"]);\n})(globalThis, (__WEBPACK_EXTERNAL_MODULE__941__, __WEBPACK_EXTERNAL_MODULE__104__, __WEBPACK_EXTERNAL_MODULE__53__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 903\n(module, __webpack_exports__, __webpack_require__) {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* Visually hidden utility for accessibility */\n.visually-hidden {\n position: absolute !important;\n height: 1px; width: 1px;\n overflow: hidden;\n clip: rect(1px, 1px, 1px, 1px);\n white-space: nowrap;\n border: 0;\n padding: 0;\n margin: -1px;\n}\n\n/* Focus indicator for keyboard navigation */\n.personRow:focus, .dataCell:focus, tr[tabindex=\"0\"]:focus {\n outline: 2px solid #1976d2;\n outline-offset: 2px;\n background: #e3f2fd;\n}\n/* contactsPane styles — extracted from inline styles in contactsPane.js */\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\n\n/* ── Layout: Three-column browser ────────────────────────────── */\n\n.contactPane .bookTable {\n border-collapse: collapse;\n margin-right: 0;\n max-height: 9in;\n}\n\n.contactPane .groupsHeader {\n min-width: 10em;\n padding-bottom: 0.2em;\n}\n\n.contactPane .peopleHeader {\n min-width: 18em;\n}\n\n.contactPane .peopleMain {\n overflow: scroll;\n}\n\n.contactPane .cardMain {\n margin: 0;\n}\n\n.contactPane .groupsMain,\n.contactPane .groupsFooter {\n padding: 0.1em;\n}\n\n/* ── Search ──────────────────────────────────────────────────── */\n\n.contactPane .searchInput {\n border: 0.1em solid var(--color-text-muted);\n border-radius: var(--border-radius-base);\n width: 100%;\n font-size: var(--font-size-base);\n padding: 0.1em 0.6em;\n margin: 0.2em;\n}\n\n/* ── Data cells ──────────────────────────────────────────────── */\n\n.contactPane .dataCell {\n padding: 0.1em;\n}\n\n/* ── Rendered sub-pane ───────────────────────────────────────── */\n\n.contactPane .renderPane {\n border: 0.1em solid var(--color-text-muted);\n border-radius: var(--border-radius-base);\n}\n\n/* ── Delete button ───────────────────────────────────────────── */\n\n.contactPane .deleteButton {\n height: 2em;\n}\n\n/* ── Sharing button & icon ───────────────────────────────────── */\n\n.contactPane .sharingButton {\n padding: var(--spacing-md);\n margin: var(--spacing-md);\n}\n\n.contactPane .sharingButtonIcon {\n width: var(--spacing-lg);\n height: var(--spacing-lg);\n}\n\n/* ── \"All\" groups button ─────────────────────────────────────── */\n\n.contactPane .allGroupsButton {\n margin-left: var(--spacing-md);\n font-size: var(--font-size-base);\n}\n\n.contactPane .allGroupsButton--loading {\n background-color: #ff8;\n}\n\n.contactPane .allGroupsButton--active {\n background-color: var(--color-text);\n color: var(--color-background);\n}\n\n.contactPane .allGroupsButton--loaded {\n background-color: #cfc;\n}\n\n/* ── Selection & visibility states ───────────────────────────── */\n\n.contactPane .selected {\n background-color: #cce;\n}\n\n.contactPane .group-loading {\n background-color: #ffe;\n}\n\n.contactPane .hidden {\n display: none;\n}\n\n/* ── Mint new address book ───────────────────────────────────── */\n\n.contactPane .claimSuccess {\n font-size: 140%;\n}\n\n.contactPane .addressBook-grid {\n max-width: max-content;\n\n}\n\n.contactPane .addressBookSection {\n width: 100%;\n max-width: 100%;\n box-sizing: border-box;\n margin-bottom: var(--spacing-md);\n box-sizing: border-box;\n margin-bottom: var(--spacing-md);\n}\n\n@media (min-width: 900px) {\n .contactPane .addressBookSection {\n margin-bottom: 0;\n }\n}\n\n/* Section Title - primary colored heading */\n.contactPane .section-title {\n font-size: 1.25em;\n font-weight: 600;\n color: var(--color-primary);\n margin: 0;\n}\n\n/* Card Section Background */\n.contactPane .section-bg {\n background: var(--color-section-bg);\n border-radius: var(--border-radius-full);\n box-shadow: var(--box-shadow);\n padding: var(--spacing-md);\n}\n\n.contactPane td {\n border: 1px dotted #999;\n}\n\n/* Primary Button */\n.btn-primary {\n min-height: var(--min-touch-target);\n padding: var(--spacing-sm) var(--spacing-md);\n border: 1px solid var(--color-primary);\n border-radius: var(--border-radius-base);\n background: var(--color-primary);\n color: white;\n font-weight: 600;\n cursor: pointer;\n transition: all var(--animation-duration) ease;\n}\n\n.btn-primary:hover {\n background: color-mix(in srgb, var(--color-primary) 90%, black);\n box-shadow: 0 2px 4px rgba(124, 77, 255, 0.2);\n}\n\n.btn-primary:active {\n box-shadow: 0 1px 2px rgba(124, 77, 255, 0.2);\n}\n\n.btn-primary:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n transform: none;\n}\n\n/* Secondary button */\n.btn-secondary {\n min-height: var(--min-touch-target);\n padding: var(--spacing-sm) var(--spacing-md);\n border: var(--border-width-thin) solid var(--color-secondary);\n border-radius: var(--border-radius-base);\n background: var(--color-secondary);\n color: var(--color-background);\n font-weight: var(--font-weight-bold);\n cursor: pointer;\n transition: all var(--animation-duration) ease;\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.btn-secondary:hover {\n background: color-mix(in srgb, var(--color-secondary) 85%, black);\n}\n\n.btn-secondary:disabled {\n opacity: var(--opacity-disabled);\n cursor: not-allowed;\n}\n\n/* Action Button Focus - used by ChatWithMe, ProfileCard */\n.action-button-focus:focus,\n.action-button-focus:focus-visible {\n outline: 3px solid var(--color-primary) !important;\n outline-offset: 2px !important;\n box-shadow: 0 0 0 2px var(--color-background), 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\n z-index: 1;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/contactsPane.css\"],\"names\":[],\"mappings\":\"AAAA,8CAA8C;AAC9C;EACE,6BAA6B;EAC7B,WAAW,EAAE,UAAU;EACvB,gBAAgB;EAChB,8BAA8B;EAC9B,mBAAmB;EACnB,SAAS;EACT,UAAU;EACV,YAAY;AACd;;AAEA,4CAA4C;AAC5C;EACE,0BAA0B;EAC1B,mBAAmB;EACnB,mBAAmB;AACrB;AACA,0EAA0E;AAC1E,qFAAqF;;AAErF,mEAAmE;;AAEnE;EACE,yBAAyB;EACzB,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,qBAAqB;AACvB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,SAAS;AACX;;AAEA;;EAEE,cAAc;AAChB;;AAEA,mEAAmE;;AAEnE;EACE,2CAA2C;EAC3C,wCAAwC;EACxC,WAAW;EACX,gCAAgC;EAChC,oBAAoB;EACpB,aAAa;AACf;;AAEA,mEAAmE;;AAEnE;EACE,cAAc;AAChB;;AAEA,mEAAmE;;AAEnE;EACE,2CAA2C;EAC3C,wCAAwC;AAC1C;;AAEA,mEAAmE;;AAEnE;EACE,WAAW;AACb;;AAEA,mEAAmE;;AAEnE;EACE,0BAA0B;EAC1B,yBAAyB;AAC3B;;AAEA;EACE,wBAAwB;EACxB,yBAAyB;AAC3B;;AAEA,mEAAmE;;AAEnE;EACE,8BAA8B;EAC9B,gCAAgC;AAClC;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,mCAAmC;EACnC,8BAA8B;AAChC;;AAEA;EACE,sBAAsB;AACxB;;AAEA,mEAAmE;;AAEnE;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,aAAa;AACf;;AAEA,mEAAmE;;AAEnE;EACE,eAAe;AACjB;;AAEA;EACE,sBAAsB;;AAExB;;AAEA;EACE,WAAW;EACX,eAAe;EACf,sBAAsB;EACtB,gCAAgC;EAChC,sBAAsB;EACtB,gCAAgC;AAClC;;AAEA;EACE;IACE,gBAAgB;EAClB;AACF;;AAEA,4CAA4C;AAC5C;EACE,iBAAiB;EACjB,gBAAgB;EAChB,2BAA2B;EAC3B,SAAS;AACX;;AAEA,4BAA4B;AAC5B;EACE,mCAAmC;EACnC,wCAAwC;EACxC,6BAA6B;EAC7B,0BAA0B;AAC5B;;AAEA;EACE,uBAAuB;AACzB;;AAEA,mBAAmB;AACnB;EACE,mCAAmC;EACnC,4CAA4C;EAC5C,sCAAsC;EACtC,wCAAwC;EACxC,gCAAgC;EAChC,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,8CAA8C;AAChD;;AAEA;EACE,+DAA+D;EAC/D,6CAA6C;AAC/C;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,YAAY;EACZ,mBAAmB;EACnB,eAAe;AACjB;;AAEA,qBAAqB;AACrB;EACE,mCAAmC;EACnC,4CAA4C;EAC5C,6DAA6D;EAC7D,wCAAwC;EACxC,kCAAkC;EAClC,8BAA8B;EAC9B,oCAAoC;EACpC,eAAe;EACf,8CAA8C;EAC9C,qBAAqB;EACrB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,iEAAiE;AACnE;;AAEA;EACE,gCAAgC;EAChC,mBAAmB;AACrB;;AAEA,0DAA0D;AAC1D;;EAEE,kDAAkD;EAClD,8BAA8B;EAC9B,4FAA4F;EAC5F,UAAU;AACZ\",\"sourcesContent\":[\"/* Visually hidden utility for accessibility */\\n.visually-hidden {\\n position: absolute !important;\\n height: 1px; width: 1px;\\n overflow: hidden;\\n clip: rect(1px, 1px, 1px, 1px);\\n white-space: nowrap;\\n border: 0;\\n padding: 0;\\n margin: -1px;\\n}\\n\\n/* Focus indicator for keyboard navigation */\\n.personRow:focus, .dataCell:focus, tr[tabindex=\\\"0\\\"]:focus {\\n outline: 2px solid #1976d2;\\n outline-offset: 2px;\\n background: #e3f2fd;\\n}\\n/* contactsPane styles — extracted from inline styles in contactsPane.js */\\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\\n\\n/* ── Layout: Three-column browser ────────────────────────────── */\\n\\n.contactPane .bookTable {\\n border-collapse: collapse;\\n margin-right: 0;\\n max-height: 9in;\\n}\\n\\n.contactPane .groupsHeader {\\n min-width: 10em;\\n padding-bottom: 0.2em;\\n}\\n\\n.contactPane .peopleHeader {\\n min-width: 18em;\\n}\\n\\n.contactPane .peopleMain {\\n overflow: scroll;\\n}\\n\\n.contactPane .cardMain {\\n margin: 0;\\n}\\n\\n.contactPane .groupsMain,\\n.contactPane .groupsFooter {\\n padding: 0.1em;\\n}\\n\\n/* ── Search ──────────────────────────────────────────────────── */\\n\\n.contactPane .searchInput {\\n border: 0.1em solid var(--color-text-muted);\\n border-radius: var(--border-radius-base);\\n width: 100%;\\n font-size: var(--font-size-base);\\n padding: 0.1em 0.6em;\\n margin: 0.2em;\\n}\\n\\n/* ── Data cells ──────────────────────────────────────────────── */\\n\\n.contactPane .dataCell {\\n padding: 0.1em;\\n}\\n\\n/* ── Rendered sub-pane ───────────────────────────────────────── */\\n\\n.contactPane .renderPane {\\n border: 0.1em solid var(--color-text-muted);\\n border-radius: var(--border-radius-base);\\n}\\n\\n/* ── Delete button ───────────────────────────────────────────── */\\n\\n.contactPane .deleteButton {\\n height: 2em;\\n}\\n\\n/* ── Sharing button & icon ───────────────────────────────────── */\\n\\n.contactPane .sharingButton {\\n padding: var(--spacing-md);\\n margin: var(--spacing-md);\\n}\\n\\n.contactPane .sharingButtonIcon {\\n width: var(--spacing-lg);\\n height: var(--spacing-lg);\\n}\\n\\n/* ── \\\"All\\\" groups button ─────────────────────────────────────── */\\n\\n.contactPane .allGroupsButton {\\n margin-left: var(--spacing-md);\\n font-size: var(--font-size-base);\\n}\\n\\n.contactPane .allGroupsButton--loading {\\n background-color: #ff8;\\n}\\n\\n.contactPane .allGroupsButton--active {\\n background-color: var(--color-text);\\n color: var(--color-background);\\n}\\n\\n.contactPane .allGroupsButton--loaded {\\n background-color: #cfc;\\n}\\n\\n/* ── Selection & visibility states ───────────────────────────── */\\n\\n.contactPane .selected {\\n background-color: #cce;\\n}\\n\\n.contactPane .group-loading {\\n background-color: #ffe;\\n}\\n\\n.contactPane .hidden {\\n display: none;\\n}\\n\\n/* ── Mint new address book ───────────────────────────────────── */\\n\\n.contactPane .claimSuccess {\\n font-size: 140%;\\n}\\n\\n.contactPane .addressBook-grid {\\n max-width: max-content;\\n\\n}\\n\\n.contactPane .addressBookSection {\\n width: 100%;\\n max-width: 100%;\\n box-sizing: border-box;\\n margin-bottom: var(--spacing-md);\\n box-sizing: border-box;\\n margin-bottom: var(--spacing-md);\\n}\\n\\n@media (min-width: 900px) {\\n .contactPane .addressBookSection {\\n margin-bottom: 0;\\n }\\n}\\n\\n/* Section Title - primary colored heading */\\n.contactPane .section-title {\\n font-size: 1.25em;\\n font-weight: 600;\\n color: var(--color-primary);\\n margin: 0;\\n}\\n\\n/* Card Section Background */\\n.contactPane .section-bg {\\n background: var(--color-section-bg);\\n border-radius: var(--border-radius-full);\\n box-shadow: var(--box-shadow);\\n padding: var(--spacing-md);\\n}\\n\\n.contactPane td {\\n border: 1px dotted #999;\\n}\\n\\n/* Primary Button */\\n.btn-primary {\\n min-height: var(--min-touch-target);\\n padding: var(--spacing-sm) var(--spacing-md);\\n border: 1px solid var(--color-primary);\\n border-radius: var(--border-radius-base);\\n background: var(--color-primary);\\n color: white;\\n font-weight: 600;\\n cursor: pointer;\\n transition: all var(--animation-duration) ease;\\n}\\n\\n.btn-primary:hover {\\n background: color-mix(in srgb, var(--color-primary) 90%, black);\\n box-shadow: 0 2px 4px rgba(124, 77, 255, 0.2);\\n}\\n\\n.btn-primary:active {\\n box-shadow: 0 1px 2px rgba(124, 77, 255, 0.2);\\n}\\n\\n.btn-primary:disabled {\\n opacity: 0.6;\\n cursor: not-allowed;\\n transform: none;\\n}\\n\\n/* Secondary button */\\n.btn-secondary {\\n min-height: var(--min-touch-target);\\n padding: var(--spacing-sm) var(--spacing-md);\\n border: var(--border-width-thin) solid var(--color-secondary);\\n border-radius: var(--border-radius-base);\\n background: var(--color-secondary);\\n color: var(--color-background);\\n font-weight: var(--font-weight-bold);\\n cursor: pointer;\\n transition: all var(--animation-duration) ease;\\n text-decoration: none;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.btn-secondary:hover {\\n background: color-mix(in srgb, var(--color-secondary) 85%, black);\\n}\\n\\n.btn-secondary:disabled {\\n opacity: var(--opacity-disabled);\\n cursor: not-allowed;\\n}\\n\\n/* Action Button Focus - used by ChatWithMe, ProfileCard */\\n.action-button-focus:focus,\\n.action-button-focus:focus-visible {\\n outline: 3px solid var(--color-primary) !important;\\n outline-offset: 2px !important;\\n box-shadow: 0 0 0 2px var(--color-background), 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\\n z-index: 1;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ },\n\n/***/ 479\n(module, __webpack_exports__, __webpack_require__) {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* individual.js styles — extracted from inline styles */\n\n/* ── Individual pane container ───────────────────────────────── */\n\n.contactPane .individualPane {\n padding: var(--spacing-xs) var(--spacing-lg) var(--spacing-md) var(--spacing-lg);\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/individual.css\"],\"names\":[],\"mappings\":\"AAAA,wDAAwD;;AAExD,mEAAmE;;AAEnE;EACE,gFAAgF;AAClF\",\"sourcesContent\":[\"/* individual.js styles — extracted from inline styles */\\n\\n/* ── Individual pane container ───────────────────────────────── */\\n\\n.contactPane .individualPane {\\n padding: var(--spacing-xs) var(--spacing-lg) var(--spacing-md) var(--spacing-lg);\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ },\n\n/***/ 715\n(module, __webpack_exports__, __webpack_require__) {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* mugshotGallery.js styles — extracted from inline styles */\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\n\n/* ── Mugshot image ───────────────────────────────────────────── */\n\n.contactPane .mugshotImage {\n max-height: 10em;\n border-radius: var(--border-radius-full);\n margin: 0.7em;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/mugshotGallery.css\"],\"names\":[],\"mappings\":\"AAAA,4DAA4D;AAC5D,qFAAqF;;AAErF,mEAAmE;;AAEnE;EACE,gBAAgB;EAChB,wCAAwC;EACxC,aAAa;AACf\",\"sourcesContent\":[\"/* mugshotGallery.js styles — extracted from inline styles */\\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\\n\\n/* ── Mugshot image ───────────────────────────────────────────── */\\n\\n.contactPane .mugshotImage {\\n max-height: 10em;\\n border-radius: var(--border-radius-full);\\n margin: 0.7em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ },\n\n/***/ 434\n(module, __webpack_exports__, __webpack_require__) {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* Solid-UI form */\n.individualPane .hoverControl:not(:has(> img:first-child)) {\n border: 0.1em solid rgb(136, 136, 136) !important;\n}\n\n.individualPane .hoverControl:has(> img:first-child) {\n background-color: transparent !important;\n border: none !important;\n margin: 0 !important;\n border-radius: 0 !important;\n padding: 0.7em !important;\n min-height: var(--min-touch-target);\n min-width: var(--min-touch-target);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.individualPane .hoverControlHide {\n width: 1.5em !important;\n height: 1.5em !important;\n display: block;\n margin-top: 0 !important;\n margin-left: 0 !important;\n margin-right: 0 !important;\n margin-bottom: 0.3em !important;\n}\n\n.individualPane .hoverControl:has(> img:first-child) > span {\n display: inline-flex;\n align-items: center;\n margin-left: 0.3em;\n}\n\n.individualPane div[style*=\"padding: 0.5em\"]:has(> img) {\n display: inline-flex;\n align-items: center;\n}\n\n.individualPane div[style*=\"padding: 0.5em\"]:has(> img) > span {\n margin-left: 0.3em;\n}\n\n.individualPane .hoverControl:has(> img:first-child):hover {\n background-color: transparent !important;\n}\n\n.individualPane button:has(> img[src\\$=\".svg\"]) {\n background-color: transparent !important;\n border: none !important;\n margin: 0 !important;\n border-radius: 0 !important;\n}\n\n.individualPane button {\n min-height: var(--min-touch-target);\n min-width: var(--min-touch-target);\n}\n\n.individualPane input:not([type=\"color\"]),\n.individualPane textarea,\n.individualPane select {\n max-width: 100%;\n min-width: 0;\n box-sizing: border-box ;\n font: inherit;\n color: var(--color-text);\n background-color: var(--color-card-bg) !important;\n border: 1px solid var(--color-border-pale);\n}\n\n.individualPane textarea {\n border-color: var(--color-border-pale) !important;\n margin: 0 !important;\n padding: 0 !important;\n}\n\n.individualPane input[type=\"date\"],\n.individualPane input[type=\"month\"],\n.individualPane input[type=\"week\"],\n.individualPane input[type=\"time\"],\n.individualPane input[type=\"datetime-local\"] {\n min-height: var(--min-touch-target);\n}\n\n.individualPane .hoverControl:has(> img:first-child):focus-visible,\n.individualPane button:focus-visible,\n.individualPane input:not([type=\"color\"]):focus-visible,\n.individualPane textarea:focus-visible,\n.individualPane select:focus-visible {\n outline: var(--focus-ring-width) solid var(--color-primary) !important;\n outline-offset: 2px;\n box-shadow: 0 0 0 1px var(--color-background);\n}\n\n.individualPane input[type=\"url\"] {\n width: 100%;\n}\n\n.individualPane .formFieldValue {\n min-width: 0;\n margin-bottom: var(--spacing-sm);\n}\n\n.individualPane .formFieldValue table {\n margin: 0 !important;\n padding: 0 !important;\n}\n\n.individualPane .formFieldValue td {\n padding: 0 !important;\n}\n\n.individualPane .formFieldValue input:not([type=\"color\"]),\n.individualPane .formFieldValue textarea,\n.individualPane .formFieldValue select {\n width: 100%;\n max-width: 100%;\n}\n\n.individualPane select#formSelect {\n width: 100%;\n max-width: 97%;\n box-sizing: border-box;\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.individualPane span select {\n max-width: 96% !important;\n box-sizing: border-box;\n margin: 0 !important;\n}\n\n.individualPane .formFieldValue span select {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n/* Remove border/padding from the first wrapper div (and its first child wrapper). */\n.individualPane > div:first-of-type,\n.individualPane > div:first-of-type > div:first-of-type {\n border: none !important;\n padding: 0 !important;\n}\n\n/* Align schema.org, solid terms, FOAF, vCard, and org field labels with their input values. */\n.individualPane :not(.choiceBox):has(> .formFieldName):has(> .formFieldValue) {\n display: flex;\n align-items: baseline;\n margin-bottom: var(--spacing-sm);\n}\n\n.individualPane :not(.choiceBox):has(> .formFieldName):has(> .formFieldValue) > .formFieldValue {\n margin-bottom: 0;\n}\n\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://schema.org/\"]),\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/solid/terms#\"]),\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://xmlns.com/foaf/0.1/\"]),\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/2006/vcard/ns\"]),\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/org#\"]) {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n}\n\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://schema.org/\"]) + .formFieldValue,\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/solid/terms#\"]) + .formFieldValue,\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://xmlns.com/foaf/0.1/\"]) + .formFieldValue,\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/2006/vcard/ns\"]) + .formFieldValue,\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/org#\"]) + .formFieldValue {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n flex: 1;\n min-width: 0;\n}\n\n.individualPane textarea,\n.individualPane .formFieldValue textarea {\n appearance: none;\n -webkit-appearance: none;\n border: .05em solid #88c !important;\n border-style: solid !important;\n border-width: .05em !important;\n border-color: #88c !important;\n border-radius: 0.2em !important;\n width: 100%;\n box-sizing: border-box;\n margin-top: var(--spacing-xs);\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n/* Center textarea label vertically in flex rows. */\n.individualPane div[style*=\"display: flex\"][style*=\"flex-direction: row\"]:has(textarea) {\n align-items: flex-start;\n}\n\n.individualPane div[style*=\"display: flex\"][style*=\"flex-direction: row\"]:has(textarea) > div:has(> a) {\n padding-left: var(--spacing-xs);\n}\n\n/* Keep autocomplete/table-based fields (e.g. Occupation) aligned to label text baseline. */\n.individualPane :not(.choiceBox):has(> .formFieldValue input[data-testid=\"autocomplete-input\"]) {\n align-items: flex-start;\n}\n\n.individualPane :not(.choiceBox):has(> .formFieldValue input[data-testid=\"autocomplete-input\"]) > .formFieldName {\n padding-top: 0.55em !important;\n}\n\n.individualPane .formFieldValue:has(input[data-testid=\"autocomplete-input\"]) {\n align-self: flex-start;\n}\n\n.individualPane .formFieldValue table[data-testid=\"autocomplete-table\"],\n.individualPane .formFieldValue input[data-testid=\"autocomplete-input\"] {\n margin: 0 !important;\n}\n\n.individualPane .formFieldValue table[data-testid=\"autocomplete-table\"] {\n vertical-align: baseline;\n}\n\n.individualPane input:not([type=\"color\"]) {\n width: 100%;\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.individualPane input:disabled,\n.individualPane textarea:disabled,\n.individualPane select:disabled,\n.individualPane input[readonly],\n.individualPane textarea[readonly],\n.individualPane input:read-only,\n.individualPane textarea:read-only {\n background-color: var(--color-background) !important;\n cursor: not-allowed;\n opacity: 0.75;\n border: 0.05em solid white !important;\n}\n\n.individualPane textarea,\n.individualPane .formFieldValue textarea {\n padding: 0.5em !important;\n}\n\n.webidControl table td div.contactPane.namedPane {\n border: none !important;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/rdfFormsEnforced.css\"],\"names\":[],\"mappings\":\"AAAA,kBAAkB;AAClB;EACE,iDAAiD;AACnD;;AAEA;EACE,wCAAwC;EACxC,uBAAuB;EACvB,oBAAoB;EACpB,2BAA2B;EAC3B,yBAAyB;EACzB,mCAAmC;EACnC,kCAAkC;EAClC,eAAe;EACf,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,uBAAuB;EACvB,wBAAwB;EACxB,cAAc;EACd,wBAAwB;EACxB,yBAAyB;EACzB,0BAA0B;EAC1B,+BAA+B;AACjC;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,wCAAwC;EACxC,uBAAuB;EACvB,oBAAoB;EACpB,2BAA2B;AAC7B;;AAEA;EACE,mCAAmC;EACnC,kCAAkC;AACpC;;AAEA;;;EAGE,eAAe;EACf,YAAY;EACZ,uBAAuB;EACvB,aAAa;EACb,wBAAwB;EACxB,iDAAiD;EACjD,0CAA0C;AAC5C;;AAEA;EACE,iDAAiD;EACjD,oBAAoB;EACpB,qBAAqB;AACvB;;AAEA;;;;;EAKE,mCAAmC;AACrC;;AAEA;;;;;EAKE,sEAAsE;EACtE,mBAAmB;EACnB,6CAA6C;AAC/C;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,YAAY;EACZ,gCAAgC;AAClC;;AAEA;EACE,oBAAoB;EACpB,qBAAqB;AACvB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;;;EAGE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,cAAc;EACd,sBAAsB;EACtB,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA;EACE,yBAAyB;EACzB,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA,oFAAoF;AACpF;;EAEE,uBAAuB;EACvB,qBAAqB;AACvB;;AAEA,8FAA8F;AAC9F;EACE,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;AAEA;EACE,gBAAgB;AAClB;;AAEA;;;;;EAKE,oBAAoB;EACpB,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA;;;;;EAKE,oBAAoB;EACpB,mBAAmB;EACnB,sBAAsB;EACtB,OAAO;EACP,YAAY;AACd;;AAEA;;EAEE,gBAAgB;EAChB,wBAAwB;EACxB,mCAAmC;EACnC,8BAA8B;EAC9B,8BAA8B;EAC9B,6BAA6B;EAC7B,+BAA+B;EAC/B,WAAW;EACX,sBAAsB;EACtB,6BAA6B;EAC7B,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA,mDAAmD;AACnD;EACE,uBAAuB;AACzB;;AAEA;EACE,+BAA+B;AACjC;;AAEA,2FAA2F;AAC3F;EACE,uBAAuB;AACzB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,sBAAsB;AACxB;;AAEA;;EAEE,oBAAoB;AACtB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,WAAW;EACX,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA;;;;;;;EAOE,oDAAoD;EACpD,mBAAmB;EACnB,aAAa;EACb,qCAAqC;AACvC;;AAEA;;EAEE,yBAAyB;AAC3B;;AAEA;EACE,uBAAuB;AACzB\",\"sourcesContent\":[\"/* Solid-UI form */\\n.individualPane .hoverControl:not(:has(> img:first-child)) {\\n border: 0.1em solid rgb(136, 136, 136) !important;\\n}\\n\\n.individualPane .hoverControl:has(> img:first-child) {\\n background-color: transparent !important;\\n border: none !important;\\n margin: 0 !important;\\n border-radius: 0 !important;\\n padding: 0.7em !important;\\n min-height: var(--min-touch-target);\\n min-width: var(--min-touch-target);\\n cursor: pointer;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.individualPane .hoverControlHide {\\n width: 1.5em !important;\\n height: 1.5em !important;\\n display: block;\\n margin-top: 0 !important;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n margin-bottom: 0.3em !important;\\n}\\n\\n.individualPane .hoverControl:has(> img:first-child) > span {\\n display: inline-flex;\\n align-items: center;\\n margin-left: 0.3em;\\n}\\n\\n.individualPane div[style*=\\\"padding: 0.5em\\\"]:has(> img) {\\n display: inline-flex;\\n align-items: center;\\n}\\n\\n.individualPane div[style*=\\\"padding: 0.5em\\\"]:has(> img) > span {\\n margin-left: 0.3em;\\n}\\n\\n.individualPane .hoverControl:has(> img:first-child):hover {\\n background-color: transparent !important;\\n}\\n\\n.individualPane button:has(> img[src$=\\\".svg\\\"]) {\\n background-color: transparent !important;\\n border: none !important;\\n margin: 0 !important;\\n border-radius: 0 !important;\\n}\\n\\n.individualPane button {\\n min-height: var(--min-touch-target);\\n min-width: var(--min-touch-target);\\n}\\n\\n.individualPane input:not([type=\\\"color\\\"]),\\n.individualPane textarea,\\n.individualPane select {\\n max-width: 100%;\\n min-width: 0;\\n box-sizing: border-box ;\\n font: inherit;\\n color: var(--color-text);\\n background-color: var(--color-card-bg) !important;\\n border: 1px solid var(--color-border-pale);\\n}\\n\\n.individualPane textarea {\\n border-color: var(--color-border-pale) !important;\\n margin: 0 !important;\\n padding: 0 !important;\\n}\\n\\n.individualPane input[type=\\\"date\\\"],\\n.individualPane input[type=\\\"month\\\"],\\n.individualPane input[type=\\\"week\\\"],\\n.individualPane input[type=\\\"time\\\"],\\n.individualPane input[type=\\\"datetime-local\\\"] {\\n min-height: var(--min-touch-target);\\n}\\n\\n.individualPane .hoverControl:has(> img:first-child):focus-visible,\\n.individualPane button:focus-visible,\\n.individualPane input:not([type=\\\"color\\\"]):focus-visible,\\n.individualPane textarea:focus-visible,\\n.individualPane select:focus-visible {\\n outline: var(--focus-ring-width) solid var(--color-primary) !important;\\n outline-offset: 2px;\\n box-shadow: 0 0 0 1px var(--color-background);\\n}\\n\\n.individualPane input[type=\\\"url\\\"] {\\n width: 100%;\\n}\\n\\n.individualPane .formFieldValue {\\n min-width: 0;\\n margin-bottom: var(--spacing-sm);\\n}\\n\\n.individualPane .formFieldValue table {\\n margin: 0 !important;\\n padding: 0 !important;\\n}\\n\\n.individualPane .formFieldValue td {\\n padding: 0 !important;\\n}\\n\\n.individualPane .formFieldValue input:not([type=\\\"color\\\"]),\\n.individualPane .formFieldValue textarea,\\n.individualPane .formFieldValue select {\\n width: 100%;\\n max-width: 100%;\\n}\\n\\n.individualPane select#formSelect {\\n width: 100%;\\n max-width: 97%;\\n box-sizing: border-box;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n.individualPane span select {\\n max-width: 96% !important;\\n box-sizing: border-box;\\n margin: 0 !important;\\n}\\n\\n.individualPane .formFieldValue span select {\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n/* Remove border/padding from the first wrapper div (and its first child wrapper). */\\n.individualPane > div:first-of-type,\\n.individualPane > div:first-of-type > div:first-of-type {\\n border: none !important;\\n padding: 0 !important;\\n}\\n\\n/* Align schema.org, solid terms, FOAF, vCard, and org field labels with their input values. */\\n.individualPane :not(.choiceBox):has(> .formFieldName):has(> .formFieldValue) {\\n display: flex;\\n align-items: baseline;\\n margin-bottom: var(--spacing-sm);\\n}\\n\\n.individualPane :not(.choiceBox):has(> .formFieldName):has(> .formFieldValue) > .formFieldValue {\\n margin-bottom: 0;\\n}\\n\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://schema.org/\\\"]),\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/solid/terms#\\\"]),\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://xmlns.com/foaf/0.1/\\\"]),\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/2006/vcard/ns\\\"]),\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/org#\\\"]) {\\n display: inline-flex;\\n align-items: center;\\n vertical-align: middle;\\n}\\n\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://schema.org/\\\"]) + .formFieldValue,\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/solid/terms#\\\"]) + .formFieldValue,\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://xmlns.com/foaf/0.1/\\\"]) + .formFieldValue,\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/2006/vcard/ns\\\"]) + .formFieldValue,\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/org#\\\"]) + .formFieldValue {\\n display: inline-flex;\\n align-items: center;\\n vertical-align: middle;\\n flex: 1;\\n min-width: 0;\\n}\\n\\n.individualPane textarea,\\n.individualPane .formFieldValue textarea {\\n appearance: none;\\n -webkit-appearance: none;\\n border: .05em solid #88c !important;\\n border-style: solid !important;\\n border-width: .05em !important;\\n border-color: #88c !important;\\n border-radius: 0.2em !important;\\n width: 100%;\\n box-sizing: border-box;\\n margin-top: var(--spacing-xs);\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n/* Center textarea label vertically in flex rows. */\\n.individualPane div[style*=\\\"display: flex\\\"][style*=\\\"flex-direction: row\\\"]:has(textarea) {\\n align-items: flex-start;\\n}\\n\\n.individualPane div[style*=\\\"display: flex\\\"][style*=\\\"flex-direction: row\\\"]:has(textarea) > div:has(> a) {\\n padding-left: var(--spacing-xs);\\n}\\n\\n/* Keep autocomplete/table-based fields (e.g. Occupation) aligned to label text baseline. */\\n.individualPane :not(.choiceBox):has(> .formFieldValue input[data-testid=\\\"autocomplete-input\\\"]) {\\n align-items: flex-start;\\n}\\n\\n.individualPane :not(.choiceBox):has(> .formFieldValue input[data-testid=\\\"autocomplete-input\\\"]) > .formFieldName {\\n padding-top: 0.55em !important;\\n}\\n\\n.individualPane .formFieldValue:has(input[data-testid=\\\"autocomplete-input\\\"]) {\\n align-self: flex-start;\\n}\\n\\n.individualPane .formFieldValue table[data-testid=\\\"autocomplete-table\\\"],\\n.individualPane .formFieldValue input[data-testid=\\\"autocomplete-input\\\"] {\\n margin: 0 !important;\\n}\\n\\n.individualPane .formFieldValue table[data-testid=\\\"autocomplete-table\\\"] {\\n vertical-align: baseline;\\n}\\n\\n.individualPane input:not([type=\\\"color\\\"]) {\\n width: 100%;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n.individualPane input:disabled,\\n.individualPane textarea:disabled,\\n.individualPane select:disabled,\\n.individualPane input[readonly],\\n.individualPane textarea[readonly],\\n.individualPane input:read-only,\\n.individualPane textarea:read-only {\\n background-color: var(--color-background) !important;\\n cursor: not-allowed;\\n opacity: 0.75;\\n border: 0.05em solid white !important;\\n}\\n\\n.individualPane textarea,\\n.individualPane .formFieldValue textarea {\\n padding: 0.5em !important;\\n}\\n\\n.webidControl table td div.contactPane.namedPane {\\n border: none !important;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ },\n\n/***/ 295\n(module, __webpack_exports__, __webpack_require__) {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* toolsPane.js styles — extracted from inline styles */\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\n\n/* ── Tools pane table ────────────────────────────────────────── */\n\n.contactPane .toolsTable {\n font-size: 120%;\n margin: var(--spacing-md);\n border: 0.1em solid var(--color-border-pale);\n}\n\n/* ── Tools header row ────────────────────────────────────────── */\n\n.contactPane .toolsHeader {\n min-width: 20em;\n padding: var(--spacing-md);\n font-size: 150%;\n border-bottom: 0.1em solid var(--color-error);\n margin-bottom: var(--spacing-xl);\n}\n\n/* ── Status block ────────────────────────────────────────────── */\n\n.contactPane .toolsStatusBlock {\n padding: var(--spacing-xl);\n}\n\n/* ── Tools buttons ───────────────────────────────────────────── */\n\n.contactPane .toolsButton {\n font-size: var(--font-size-base);\n margin: 0.8em;\n padding: var(--spacing-xs);\n}\n\n/* ── Load index button states ────────────────────────────────── */\n\n.contactPane .toolsButton--loading {\n background-color: #ffc;\n}\n\n.contactPane .toolsButton--error {\n background-color: #fcc;\n}\n\n.contactPane .toolsButton--success {\n background-color: #cfc;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/toolsPane.css\"],\"names\":[],\"mappings\":\"AAAA,uDAAuD;AACvD,qFAAqF;;AAErF,mEAAmE;;AAEnE;EACE,eAAe;EACf,yBAAyB;EACzB,4CAA4C;AAC9C;;AAEA,mEAAmE;;AAEnE;EACE,eAAe;EACf,0BAA0B;EAC1B,eAAe;EACf,6CAA6C;EAC7C,gCAAgC;AAClC;;AAEA,mEAAmE;;AAEnE;EACE,0BAA0B;AAC5B;;AAEA,mEAAmE;;AAEnE;EACE,gCAAgC;EAChC,aAAa;EACb,0BAA0B;AAC5B;;AAEA,mEAAmE;;AAEnE;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;AACxB\",\"sourcesContent\":[\"/* toolsPane.js styles — extracted from inline styles */\\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\\n\\n/* ── Tools pane table ────────────────────────────────────────── */\\n\\n.contactPane .toolsTable {\\n font-size: 120%;\\n margin: var(--spacing-md);\\n border: 0.1em solid var(--color-border-pale);\\n}\\n\\n/* ── Tools header row ────────────────────────────────────────── */\\n\\n.contactPane .toolsHeader {\\n min-width: 20em;\\n padding: var(--spacing-md);\\n font-size: 150%;\\n border-bottom: 0.1em solid var(--color-error);\\n margin-bottom: var(--spacing-xl);\\n}\\n\\n/* ── Status block ────────────────────────────────────────────── */\\n\\n.contactPane .toolsStatusBlock {\\n padding: var(--spacing-xl);\\n}\\n\\n/* ── Tools buttons ───────────────────────────────────────────── */\\n\\n.contactPane .toolsButton {\\n font-size: var(--font-size-base);\\n margin: 0.8em;\\n padding: var(--spacing-xs);\\n}\\n\\n/* ── Load index button states ────────────────────────────────── */\\n\\n.contactPane .toolsButton--loading {\\n background-color: #ffc;\\n}\\n\\n.contactPane .toolsButton--error {\\n background-color: #fcc;\\n}\\n\\n.contactPane .toolsButton--success {\\n background-color: #cfc;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ },\n\n/***/ 886\n(module, __webpack_exports__, __webpack_require__) {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* webidControl.js styles — extracted from inline styles */\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\n\n/* ── Named pane (rendered sub-pane) ──────────────────────────── */\n\n.contactPane .namedPane {\n border: 0.1em solid var(--color-text-muted);\n border-radius: var(--border-radius-base);\n}\n\n/* ── WebID / Public ID outer container ───────────────────────── */\n\n.contactPane .webidControl {\n border-radius: 0.3em;\n border: 0.1em solid #888;\n}\n\n/* ── Persona row ─────────────────────────────────────────────── */\n\n.contactPane .personaRow {\n padding: 0.2em;\n}\n\n.contactPane .personaRow--webid {\n background-color: #ffe6ff;\n}\n\n/* ── Full-width elements ─────────────────────────────────────── */\n\n.contactPane .fullWidth {\n width: 100%;\n}\n\n/* ── Open/close profile button ───────────────────────────────── */\n\n.contactPane .personaOpenButton {\n float: right;\n background-color: transparent;\n border: none;\n}\n\n/* ── Section heading ─────────────────────────────────────────── */\n\n.contactPane .webidHeading {\n font-size: 110%;\n font-weight: bold;\n color: var(--color-primary);\n padding: 0.2em;\n margin: 0.7em 0;\n}\n\n/* ── Prompt text ─────────────────────────────────────────────── */\n\n.contactPane .webidPrompt {\n padding: 0.7em;\n border: none;\n font-size: var(--font-size-base);\n white-space: pre-wrap;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/webidControl.css\"],\"names\":[],\"mappings\":\"AAAA,0DAA0D;AAC1D,qFAAqF;;AAErF,mEAAmE;;AAEnE;EACE,2CAA2C;EAC3C,wCAAwC;AAC1C;;AAEA,mEAAmE;;AAEnE;EACE,oBAAoB;EACpB,wBAAwB;AAC1B;;AAEA,mEAAmE;;AAEnE;EACE,cAAc;AAChB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA,mEAAmE;;AAEnE;EACE,WAAW;AACb;;AAEA,mEAAmE;;AAEnE;EACE,YAAY;EACZ,6BAA6B;EAC7B,YAAY;AACd;;AAEA,mEAAmE;;AAEnE;EACE,eAAe;EACf,iBAAiB;EACjB,2BAA2B;EAC3B,cAAc;EACd,eAAe;AACjB;;AAEA,mEAAmE;;AAEnE;EACE,cAAc;EACd,YAAY;EACZ,gCAAgC;EAChC,qBAAqB;AACvB\",\"sourcesContent\":[\"/* webidControl.js styles — extracted from inline styles */\\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\\n\\n/* ── Named pane (rendered sub-pane) ──────────────────────────── */\\n\\n.contactPane .namedPane {\\n border: 0.1em solid var(--color-text-muted);\\n border-radius: var(--border-radius-base);\\n}\\n\\n/* ── WebID / Public ID outer container ───────────────────────── */\\n\\n.contactPane .webidControl {\\n border-radius: 0.3em;\\n border: 0.1em solid #888;\\n}\\n\\n/* ── Persona row ─────────────────────────────────────────────── */\\n\\n.contactPane .personaRow {\\n padding: 0.2em;\\n}\\n\\n.contactPane .personaRow--webid {\\n background-color: #ffe6ff;\\n}\\n\\n/* ── Full-width elements ─────────────────────────────────────── */\\n\\n.contactPane .fullWidth {\\n width: 100%;\\n}\\n\\n/* ── Open/close profile button ───────────────────────────────── */\\n\\n.contactPane .personaOpenButton {\\n float: right;\\n background-color: transparent;\\n border: none;\\n}\\n\\n/* ── Section heading ─────────────────────────────────────────── */\\n\\n.contactPane .webidHeading {\\n font-size: 110%;\\n font-weight: bold;\\n color: var(--color-primary);\\n padding: 0.2em;\\n margin: 0.7em 0;\\n}\\n\\n/* ── Prompt text ─────────────────────────────────────────────── */\\n\\n.contactPane .webidPrompt {\\n padding: 0.7em;\\n border: none;\\n font-size: var(--font-size-base);\\n white-space: pre-wrap;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ },\n\n/***/ 314\n(module) {\n\n\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};\n\n/***/ },\n\n/***/ 354\n(module) {\n\n\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};\n\n/***/ },\n\n/***/ 72\n(module) {\n\n\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};\n\n/***/ },\n\n/***/ 659\n(module) {\n\n\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;\n\n/***/ },\n\n/***/ 540\n(module) {\n\n\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;\n\n/***/ },\n\n/***/ 56\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = true ? __webpack_require__.nc : 0;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;\n\n/***/ },\n\n/***/ 825\n(module) {\n\n\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;\n\n/***/ },\n\n/***/ 113\n(module) {\n\n\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;\n\n/***/ },\n\n/***/ 53\n(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__53__;\n\n/***/ },\n\n/***/ 941\n(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__941__;\n\n/***/ },\n\n/***/ 104\n(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__104__;\n\n/***/ }\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/nonce */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.nc = undefined;\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": () => (/* binding */ src_contactsPane)\n});\n\n// UNUSED EXPORTS: getSameAs\n\n// EXTERNAL MODULE: external {\"commonjs\":\"solid-logic\",\"commonjs2\":\"solid-logic\",\"amd\":\"solid-logic\",\"root\":\"SolidLogic\"}\nvar external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_ = __webpack_require__(941);\n// EXTERNAL MODULE: external {\"commonjs\":\"solid-ui\",\"commonjs2\":\"solid-ui\",\"amd\":\"solid-ui\",\"root\":\"UI\"}\nvar external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_ = __webpack_require__(104);\n// EXTERNAL MODULE: external {\"commonjs\":\"rdflib\",\"commonjs2\":\"rdflib\",\"amd\":\"rdflib\",\"root\":\"$rdf\"}\nvar external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_ = __webpack_require__(53);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\nvar injectStylesIntoStyleTag = __webpack_require__(72);\nvar injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleDomAPI.js\nvar styleDomAPI = __webpack_require__(825);\nvar styleDomAPI_default = /*#__PURE__*/__webpack_require__.n(styleDomAPI);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertBySelector.js\nvar insertBySelector = __webpack_require__(659);\nvar insertBySelector_default = /*#__PURE__*/__webpack_require__.n(insertBySelector);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\nvar setAttributesWithoutAttributes = __webpack_require__(56);\nvar setAttributesWithoutAttributes_default = /*#__PURE__*/__webpack_require__.n(setAttributesWithoutAttributes);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertStyleElement.js\nvar insertStyleElement = __webpack_require__(540);\nvar insertStyleElement_default = /*#__PURE__*/__webpack_require__.n(insertStyleElement);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleTagTransform.js\nvar styleTagTransform = __webpack_require__(113);\nvar styleTagTransform_default = /*#__PURE__*/__webpack_require__.n(styleTagTransform);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/styles/webidControl.css\nvar webidControl = __webpack_require__(886);\n;// ./src/styles/webidControl.css\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (styleTagTransform_default());\noptions.setAttributes = (setAttributesWithoutAttributes_default());\noptions.insert = insertBySelector_default().bind(null, \"head\");\noptions.domAPI = (styleDomAPI_default());\noptions.insertStyleElement = (insertStyleElement_default());\n\nvar update = injectStylesIntoStyleTag_default()(webidControl/* default */.A, options);\n\n\n\n\n /* harmony default export */ const styles_webidControl = (webidControl/* default */.A && webidControl/* default */.A.locals ? webidControl/* default */.A.locals : undefined);\n\n;// ./src/webidControl.js\n// Render a control to record the webids we have for this agent\n\n\n\n\n\n\n\nconst ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\nconst widgets = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets\nconst utils = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils\nconst kb = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store\n\nconst wikidataClasses = widgets.publicData.wikidataClasses // @@ move to solid-logic\nconst wikidataParameters = widgets.publicData.wikidataParameters // @@ move to solid-logic\n\nconst WEBID_NOUN = 'Solid ID'\nconst PUBLICID_NOUN = 'In public data'\nconst DOWN_ARROW = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.icons.iconBase + 'noun_1369241.svg'\nconst UP_ARROW = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.icons.iconBase + 'noun_1369237.svg'\n\n/// ///////////////////////// Logic\n\nasync function addWebIDToContacts (person, webid, urlType, kb) {\n /*\n if (!webid.startsWith('https:')) { /// @@ well we will have other protcols like DID\n if (webid.startsWith('http://') {\n webid = 'https:' + webid.slice(5) // @@ No, data won't match in store. Add the 's' on fetch()\n } else {\n throw new Error('Does not look like a webid, must start with https: ' + webid)\n }\n }\n */\n\n // check this is a url\n try {\n // eslint-disable-next-line no-unused-vars\n const _url = new URL(webid)\n } catch (error) {\n throw new Error(`${WEBID_NOUN}: ${webid} is not a valid url.`)\n }\n\n // create a person's webID\n console.log(`Adding to ${person} a ${WEBID_NOUN}: ${webid}.`)\n const vcardURLThing = kb.bnode()\n const insertables = [\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, ns.vcard('url'), vcardURLThing, person.doc()),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(vcardURLThing, ns.rdf('type'), urlType, person.doc()),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(vcardURLThing, ns.vcard('value'), webid, person.doc())\n ]\n // insert WebID in groups\n // replace person with WebID in vcard:hasMember (WebID may already exist)\n // insert owl:sameAs\n const groups = kb.each(null, ns.vcard('hasMember'), person)\n let deletables = []\n groups.forEach(group => {\n deletables = deletables.concat(kb.statementsMatching(group, ns.vcard('hasMember'), person, group.doc()))\n insertables.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, ns.vcard('hasMember'), kb.sym(webid), group.doc())) // May exist; do we need to check?\n insertables.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(kb.sym(webid), ns.owl('sameAs'), person, group.doc()))\n })\n try {\n await updateMany(deletables, insertables)\n } catch (err) { throw new Error(`Could not create webId ${WEBID_NOUN}: ${webid}.`) }\n}\n\nasync function removeWebIDFromContacts (person, webid, urlType, kb) {\n console.log(`Removing from ${person} their ${WEBID_NOUN}: ${webid}.`)\n\n // remove webID from card\n const existing = kb.each(person, ns.vcard('url'), null, person.doc())\n .filter(urlObject => kb.holds(urlObject, ns.rdf('type'), urlType, person.doc()))\n .filter(urlObject => kb.holds(urlObject, ns.vcard('value'), webid, person.doc()))\n if (!existing.length) {\n throw new Error(`Person ${person} does not have ${WEBID_NOUN} ${webid}.`)\n }\n const vcardURLThing = existing[0]\n const deletables = [\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, ns.vcard('url'), vcardURLThing, person.doc()),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(vcardURLThing, ns.rdf('type'), urlType, person.doc()),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(vcardURLThing, ns.vcard('value'), webid, person.doc())\n ]\n await kb.updater.update(deletables, [])\n\n // remove webIDs from groups\n const groups = kb.each(null, ns.vcard('hasMember'), kb.sym(webid))\n let removeFromGroups = []\n const insertInGroups = []\n groups.forEach(async group => {\n removeFromGroups = removeFromGroups.concat(kb.statementsMatching(kb.sym(webid), ns.owl('sameAs'), person, group.doc()))\n insertInGroups.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, ns.vcard('hasMember'), person, group.doc()))\n if (kb.statementsMatching(kb.sym(webid), ns.owl('sameAs'), null, group.doc()).length < 2) {\n removeFromGroups = removeFromGroups.concat(kb.statementsMatching(group, ns.vcard('hasMember'), kb.sym(webid), group.doc()))\n }\n })\n await updateMany(removeFromGroups, insertInGroups)\n}\n\n// Trace things the same as this - other IDs for same thing\n// returns as array of node\nfunction getSameAs (kb, thing, doc) { // Should this recurse?\n const found = new Set()\n const agenda = new Set([thing.uri])\n\n while (agenda.size) {\n const uri = Array.from(agenda)[0] // clumsy\n agenda.delete(uri)\n if (found.has(uri)) continue\n found.add(uri)\n const node = kb.sym(uri)\n kb.each(node, ns.owl('sameAs'), null, doc)\n .concat(kb.each(null, ns.owl('sameAs'), node, doc))\n .forEach(next => {\n console.log(' OWL sameAs found ' + next)\n agenda.add(next.uri)\n })\n kb.each(node, ns.schema('sameAs'), null, doc)\n .concat(kb.each(null, ns.schema('sameAs'), node, doc))\n .forEach(next => {\n console.log(' Schema sameAs found ' + next)\n agenda.add(next.uri)\n })\n }\n found.delete(thing.uri) // don't want the one we knew about\n return Array.from(found).map(uri => kb.sym(uri)) // return as array of nodes\n}\n\n// find person webIDs\nfunction getPersonas (kb, person) {\n const lits = vcardWebIDs(kb, person).concat(getSameAs(kb, person, person.doc()))\n const strings = new Set(lits.map(lit => lit.value)) // remove dups\n const personas = [...strings].map(uri => kb.sym(uri)) // The UI tables do better with Named Nodes than Literals\n personas.sort() // for repeatability\n personas.filter(x => !x.sameTerm(person))\n return personas\n}\n\nfunction vcardWebIDs (kb, person, urlType) {\n return kb.each(person, ns.vcard('url'), null, person.doc())\n .filter(urlObject => kb.holds(urlObject, ns.rdf('type'), urlType, person.doc()))\n .map(urlObject => kb.any(urlObject, ns.vcard('value'), null, person.doc()))\n .filter(x => !!x) // remove nulls\n}\n\nfunction isOrganization (agent) {\n const doc = agent.doc()\n return kb.holds(agent, ns.rdf('type'), ns.vcard('Organization'), doc) ||\n kb.holds(agent, ns.rdf('type'), ns.schema('Organization'), doc)\n}\n/// ////////////////////////////////////////////////////////////// UI\n\n// Utility function to render another different pane\n\nfunction renderNamedPane (dom, subject, paneName, dataBrowserContext) {\n const p = dataBrowserContext.session.paneRegistry.byName(paneName)\n const d = p.render(subject, dataBrowserContext) // @@@ change some bits of context!\n d.classList.add('namedPane')\n return d\n}\n\nasync function renderWebIdControl (person, dataBrowserContext) {\n const options = {\n longPrompt: `If you know someone's ${WEBID_NOUN}, you can do more stuff with them.\n To record their ${WEBID_NOUN}, drag it onto the plus, or click the plus\n to enter it by hand.`,\n idNoun: WEBID_NOUN,\n urlType: ns.vcard('WebID')\n }\n return renderIdControl(person, dataBrowserContext, options)\n}\n\nasync function renderPublicIdControl (person, dataBrowserContext) {\n let orgClass = kb.sym('http://www.wikidata.org/wiki/Q43229')\n let orgClassId = 'Organization'\n for (const classId in wikidataClasses) {\n if (kb.holds(person, ns.rdf('type'), ns.schema(classId), person.doc())) {\n orgClass = kb.sym(wikidataClasses[classId])\n orgClassId = classId\n console.log(` renderPublicIdControl bingo: ${classId} -> ${orgClass}`)\n }\n }\n const options = {\n longPrompt: `If you know the ${PUBLICID_NOUN} of this ${orgClassId}, you can do more stuff with it.\n To record its ${PUBLICID_NOUN}, drag it onto the plus, or click the magnifyinng glass\n to search for it in WikiData.`,\n idNoun: PUBLICID_NOUN,\n urlType: ns.vcard('PublicId'),\n dbLookup: true,\n class: orgClass, // Organization\n queryParams: wikidataParameters\n }\n return renderIdControl(person, dataBrowserContext, options)\n}\n\n// The main control rendered by this module\nasync function renderIdControl (person, dataBrowserContext, options) {\n // IDs which are as WebId in VCARD data\n // like :me vcard:hasURL [ a vcard:WebId; vcard:value <https://...foo> ]\n //\n // Display the data about x specifically stored at x.doc()\n // in a fold-away thing\n //\n function renderPersona (dom, persona, kb) {\n function profileOpenHandler (_event) {\n profileIsVisible = !profileIsVisible\n main.style.visibility = profileIsVisible ? 'visible' : 'collapse'\n openButton.children[0].src = profileIsVisible ? UP_ARROW : DOWN_ARROW // @@ fragile\n }\n function renderNewRow (webidObject) {\n const webid = new external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.Literal(webidObject.uri)\n async function deleteFunction () {\n try {\n await removeWebIDFromContacts(person, webid, options.urlType, kb)\n } catch (err) {\n div.appendChild(widgets.errorMessageBlock(dom, `Error removing Id ${webid} from ${person}: ${err}`))\n }\n await refreshWebIDTable()\n }\n const isWebId = options.urlType.sameTerm(ns.vcard('WebID'))\n const delFunParam = options.editable ? deleteFunction : null\n const opts = { deleteFunction: delFunParam, draggable: true }\n if (isWebId) {\n opts.title = webidObject.uri.split('/')[2]\n opts.image = widgets.faviconOrDefault(dom, webidObject.site()) // just for domain\n }\n const row = widgets.personTR(dom, external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns.foaf('knows'), webidObject, opts)\n if (isWebId) {\n row.children[1].textConent = opts.title // @@ will be overwritten\n row.classList.add('personaRow--webid')\n }\n row.classList.add('personaRow')\n return row\n }\n\n const div = dom.createElement('div')\n div.classList.add('fullWidth')\n const personaTable = div.appendChild(dom.createElement('table'))\n personaTable.classList.add('fullWidth')\n const nav = personaTable.appendChild(renderNewRow(persona))\n nav.classList.add('fullWidth')\n const mainRow = personaTable.appendChild(dom.createElement('tr'))\n const mainCell = mainRow.appendChild(dom.createElement('td'))\n mainCell.setAttribute('colspan', 3)\n let main\n\n let profileIsVisible = true\n\n const rhs = nav.children[2]\n const openButton = rhs.appendChild(widgets.button(dom, DOWN_ARROW, 'View', profileOpenHandler))\n openButton.classList.add('personaOpenButton')\n const paneName = isOrganization(person) || isOrganization(persona) ? 'profile' : 'profile' // was default for org\n\n widgets.publicData.loadPublicDataThing(kb, person, persona).then(_resp => {\n // loadPublicDataThing(kb, person, persona).then(_resp => {\n try {\n main = renderNamedPane(dom, persona, paneName, dataBrowserContext)\n console.log('main: ', main)\n main.classList.add('fullWidth')\n console.log('renderIdControl: main element: ', main)\n // main.style.visibility = 'collapse'\n mainCell.appendChild(main)\n } catch (err) {\n main = widgets.errorMessageBlock(dom, `Problem displaying persona ${persona}: ${err}`)\n mainCell.appendChild(main)\n }\n }, err => {\n main = widgets.errorMessageBlock(dom, `Error loading persona ${persona}: ${err}`)\n mainCell.appendChild(main)\n })\n return div\n } // renderPersona\n\n async function refreshWebIDTable () {\n const personas = getPersonas(kb, person)\n console.log('WebId personas: ' + person + ' -> ' + personas.map(p => p.uri).join(',\\n '))\n prompt.style.display = personas.length ? 'none' : ''\n utils.syncTableToArrayReOrdered(profileArea, personas, persona => renderPersona(dom, persona, kb))\n }\n async function addOneIdAndRefresh (person, webid) {\n try {\n await addWebIDToContacts(person, webid, options.urlType, kb)\n } catch (err) {\n div.appendChild(widgets.errorMessageBlock(dom, `Error adding Id ${webid} to ${person}: ${err}`))\n }\n await refreshWebIDTable()\n }\n\n const { dom } = dataBrowserContext\n options = options || {}\n options.editable = kb.updater.editable(person.doc().uri, kb)\n const div = dom.createElement('div')\n div.classList.add('webidControl')\n\n if (getPersonas(kb, person).length === 0 && !options.editable) {\n div.style.display = 'none'\n return div // No point listing an empty list you can't change\n }\n\n const h4 = div.appendChild(dom.createElement('h4'))\n h4.textContent = options.idNoun\n h4.classList.add('webidHeading')\n\n const prompt = div.appendChild(dom.createElement('p'))\n prompt.classList.add('webidPrompt')\n prompt.textContent = options.longPrompt\n const table = div.appendChild(dom.createElement('table'))\n table.classList.add('fullWidth')\n\n if (options.editable) { // test\n const barOptions = {\n editable: options.editable,\n manualURIEntry: true, // introduced in solid-ui 2.4.2\n idNoun: options.idNoun,\n dbLookup: options.dbLookup\n }\n const acOptions = {\n queryParams: options.queryParams || wikidataParameters,\n targetClass: options.class\n }\n try {\n div.appendChild(await widgets.renderAutocompleteControl(dom, person, barOptions, acOptions, addOneIdAndRefresh))\n } catch (err) {\n console.error('renderAutocompleteControl failed:', err)\n div.appendChild(widgets.errorMessageBlock(dom, 'Error rendering autocomplete: ' + err))\n }\n }\n const profileArea = div.appendChild(dom.createElement('div'))\n await refreshWebIDTable()\n\n return div\n}\n\n;// ./src/contactLogic.js\n// Logic for solid contacts\n\n\n\n\n\n\nconst contactLogic_ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\nconst contactLogic_utils = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils\nconst contactLogic_kb = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store\nconst updater = contactLogic_kb.updater\n\n/** Perform updates on more than one document @@ Move to rdflib!\n*/\nasync function updateMany (deletions, insertions = []) {\n const docs = deletions.concat(insertions).map(st => st.why)\n const uniqueDocs = []\n docs.forEach(doc => {\n if (!uniqueDocs.find(uniqueDoc => uniqueDoc.equals(doc))) uniqueDocs.push(doc)\n })\n const updates = uniqueDocs.map(doc =>\n contactLogic_kb.updater.update(deletions.filter(st => st.why.sameTerm(doc)),\n insertions.filter(st => st.why.sameTerm(doc))))\n return Promise.all(updates)\n}\n\n/** Add a new person to the web data\n*\n* adds them to the given groups as well.\n* @returns {NamedNode} the person\n*/\nasync function saveNewContact (book, name, selectedGroups, klass) {\n await contactLogic_kb.fetcher.load(book.doc())\n const nameEmailIndex = contactLogic_kb.any(book, contactLogic_ns.vcard('nameEmailIndex'))\n\n const uuid = contactLogic_utils.genUuid()\n const person = contactLogic_kb.sym(\n book.dir().uri + 'Person/' + uuid + '/index.ttl#this'\n )\n const doc = person.doc()\n\n // Set of statements to different files\n const agenda = [\n // Patch the main index to add the person\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, contactLogic_ns.vcard('inAddressBook'), book, nameEmailIndex), // The people index\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, contactLogic_ns.vcard('fn'), name, nameEmailIndex),\n // The new person file\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, contactLogic_ns.vcard('fn'), name, doc),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, contactLogic_ns.rdf('type'), klass, doc),\n\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(doc, contactLogic_ns.dct('created'), new Date(), doc) // Note when created - useful for triaging later\n // Note this is propert of the file -- not when the person was created!\n ]\n\n for (const gu in selectedGroups) {\n const g = contactLogic_kb.sym(gu)\n const gd = g.doc()\n agenda.push(\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(g, contactLogic_ns.vcard('hasMember'), person, gd),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, contactLogic_ns.vcard('fn'), name, gd)\n )\n }\n\n try {\n await updater.updateMany([], agenda) // @@ in future, updater.updateMany\n } catch (e) {\n console.error('Error: can\\'t update ' + person + ' as new contact:' + e)\n throw new Error('Updating new contact: ' + e)\n }\n return person\n}\n\nfunction sanitizeToAlpha (name) { // https://mathiasbynens.be/notes/es6-unicode-regex\n const n2 = name.replace(/\\W/gu, '_') // Anything which is not a unicode word characeter\n return n2.replace(/_+/g, '_') // https://www.regular-expressions.info/shorthand.html\n}\n\n/** Write new group to web\n * Creates an empty new group file and adds it to the index\n * @returns group\n*/\nasync function saveNewGroup (book, name) {\n await contactLogic_kb.fetcher.load(book.doc())\n const gix = contactLogic_kb.any(book, contactLogic_ns.vcard('groupIndex'))\n\n const gname = sanitizeToAlpha(name)\n const group = contactLogic_kb.sym(book.dir().uri + 'Group/' + gname + '.ttl#this')\n const doc = group.doc()\n // console.log(' New group will be: ' + group + '\\n')\n try {\n await contactLogic_kb.fetcher.load(gix)\n } catch (err) {\n throw new Error('Error loading group index!' + gix.uri + ': ' + err)\n }\n if (contactLogic_kb.holds(book, contactLogic_ns.vcard('includesGroup'), group, gix)) {\n return group // Already exists\n }\n const insertTriples = [\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(book, contactLogic_ns.vcard('includesGroup'), group, gix),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.rdf('type'), contactLogic_ns.vcard('Group'), gix),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.vcard('fn'), name, gix)\n ]\n try {\n await updater.update([], insertTriples)\n } catch (e) {\n throw new Error('Could not update group index ' + e) // fail\n }\n\n const triples = [\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(book, contactLogic_ns.vcard('includesGroup'), group, doc), // Pointer back to book\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.rdf('type'), contactLogic_ns.vcard('Group'), doc),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.vcard('fn'), name, doc)\n ]\n try {\n await updater.update([], triples)\n } catch (err) {\n throw new Error('Could not update group file: ' + err) // fail\n }\n return group\n}\n\nasync function addPersonToGroup (thing, group) {\n const toBeFetched = [thing.doc(), group.doc()]\n try {\n await contactLogic_kb.fetcher.load(toBeFetched)\n } catch (e) {\n throw new Error('addPersonToGroup: ' + e)\n }\n\n const types = contactLogic_kb.findTypeURIs(thing)\n // for (const ty in types) {\n // console.log(' drop object type includes: ' + ty) // @@ Allow email addresses and phone numbers to be dropped?\n // }\n if (!(contactLogic_ns.vcard('Individual').uri in types ||\n contactLogic_ns.vcard('Organization').uri in types)) {\n return alert(`Can't add ${thing} to a group: it has to be an individual or another group.`)\n }\n const pname = contactLogic_kb.any(thing, contactLogic_ns.vcard('fn'))\n const gname = contactLogic_kb.any(group, contactLogic_ns.vcard('fn'))\n if (!pname) { return alert('No vcard name known for ' + thing) }\n const already = contactLogic_kb.holds(thing, contactLogic_ns.vcard('fn'), null, group.doc())\n if (already) {\n return alert(\n 'ALREADY added ' + pname + ' to group ' + gname\n )\n }\n const message = 'Add ' + pname + ' to group ' + gname + '?'\n if (!confirm(message)) return\n const ins = [\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(thing, contactLogic_ns.vcard('fn'), pname, group.doc())\n ]\n // find person webIDs and insert in vcard:hasMember\n const webIDs = getPersonas(contactLogic_kb, thing).map(webid => webid.value)\n if (webIDs.length) {\n webIDs.forEach(webid => {\n ins.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(contactLogic_kb.sym(webid), contactLogic_ns.owl('sameAs'), thing, group.doc()))\n ins.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.vcard('hasMember'), contactLogic_kb.sym(webid), group.doc()))\n })\n } else {\n ins.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.vcard('hasMember'), thing, group.doc()))\n }\n try {\n await updater.update([], ins)\n // to allow refresh of card groupList\n contactLogic_kb.fetcher.unload(group.doc())\n await contactLogic_kb.fetcher.load(group.doc())\n } catch (e) {\n throw new Error(`Error adding ${pname} to group ${gname}:` + e)\n }\n return thing\n}\n\n/**\n * Find persons member of a group\n */\n\nfunction groupMembers (kb, group) {\n const a = kb.each(group, contactLogic_ns.vcard('hasMember'), null, group.doc())\n let b = []\n a.forEach(item => {\n /* const contacts = kb.each(item, ns.owl('sameAs'), null, group.doc())\n if (contacts.length) {\n if (!kb.any(contacts[0], ns.vard('fn'))) b = b.concat(item) // this is the old data model\n else b = b.concat(contacts)\n } else { b = b.concat(item) }\n b = b.concat(item) */\n\n // to keep compatibility with old data model\n // check if item is a contact, else it is a WebID and parse 'sameAs' for contacts\n b = kb.any(item, contactLogic_ns.vcard('fn'), null, group.doc()) ? b.concat(item) : b.concat(kb.each(item, contactLogic_ns.owl('sameAs'), null, group.doc()))\n })\n const strings = new Set(b.map(contact => contact.uri)) // remove dups\n b = [...strings].map(uri => kb.sym(uri))\n return b\n}\n\nfunction isLocal (group, item) {\n const tree = group.dir().dir().dir()\n const local = item.uri && item.uri.startsWith(tree.uri)\n // console.log(` isLocal ${local} for ${item.uri} in group ${group} tree ${tree.uri}`)\n return local\n}\n\nfunction contactLogic_getSameAs (kb, item, doc) {\n return kb.each(item, contactLogic_ns.owl('sameAs'), null, doc).concat(\n kb.each(null, contactLogic_ns.owl('sameAs'), item, doc))\n}\n\nasync function getDataModelIssues (groups) {\n const del = []\n const ins = []\n groups.forEach(group => {\n const members = contactLogic_kb.each(group, contactLogic_ns.vcard('hasMember'), null, group.doc())\n members.forEach((member) => {\n const others = contactLogic_getSameAs(contactLogic_kb, member, group.doc())\n if (others.length && isLocal(group, member)) { // Problem: local ID used instead of webID\n for (const other of others) {\n if (!isLocal(group, other)) { // Let's use this one as the immediate member for CSS ACLs'\n // console.warn(`getDataModelIssues: Need to swap ${member} to ${other}`)\n del.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.vcard('hasMember'), member, group.doc()))\n ins.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.vcard('hasMember'), other, group.doc()))\n break\n }\n // console.log('getDataModelIssues: ??? expected id not to be local ' + other)\n } // other\n } // if\n }) // member\n }) // next group\n return { del, ins }\n} // getDataModelIssues\n\n// Ends\n\n;// ./src/mintNewAddressBook.js\n\n\n\n\nconst { setACLUserPublic } = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.solidLogicSingleton.acl\n// const mime = require('mime-types')\n// const toolsPane0 = require('./toolsPane')\n// const toolsPane = toolsPane0.toolsPane\n\n// const ns = UI.ns\n// const utils = UI.utils\n\n// Mint a new address book\n\nfunction mintNewAddressBook (dataBrowserContext, context) {\n return new Promise(function (resolve, reject) {\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.login.ensureLoadedProfile(context).then(\n context => {\n // 20180713\n console.log('Logged in as ' + context.me)\n const me = context.me\n\n const dom = context.dom\n const div = context.div\n const kb = dataBrowserContext.session.store\n const ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\n const newBase = context.newBase || context.newInstance.dir().uri\n const instanceClass = context.instanceClass || ns.vcard('AddressBook')\n\n if (instanceClass.sameTerm(ns.vcard('Group'))) {\n // Make a group not an address book\n const g =\n context.newInstance || kb.sym(context.newBase + 'index.ttl#this')\n const doc = g.doc()\n kb.add(g, ns.rdf('type'), ns.vcard('Group'), doc)\n kb.add(\n g,\n ns.vcard('fn'),\n context.instanceName || 'untitled group',\n doc\n ) // @@ write doc back\n kb.fetcher\n .putBack(doc, { contentType: 'text/turtle' })\n .then(function (_xhr) {\n resolve(context)\n })\n .catch(function (err) {\n reject(\n new Error('Error creating document for new group ' + err)\n )\n })\n return\n }\n const appInstanceNoun = 'address book'\n\n function complain (message) {\n div.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n\n let bookContents = `@prefix vcard: <http://www.w3.org/2006/vcard/ns#>.\n @prefix ab: <http://www.w3.org/ns/pim/ab#>.\n @prefix dc: <http://purl.org/dc/elements/1.1/>.\n @prefix xsd: <http://www.w3.org/2001/XMLSchema#>.\n\n <#this> a vcard:AddressBook;\n dc:title \"New address Book\";\n vcard:nameEmailIndex <people.ttl>;\n vcard:groupIndex <groups.ttl>.\n`\n\n bookContents +=\n '<#this> <http://www.w3.org/ns/auth/acl#owner> <' +\n me.uri +\n '>.\\n\\n'\n\n const newAppInstance = kb.sym(newBase + 'index.ttl#this')\n\n const toBeWritten = [\n {\n to: 'index.ttl',\n content: bookContents,\n contentType: 'text/turtle'\n },\n { to: 'groups.ttl', content: '', contentType: 'text/turtle' },\n { to: 'people.ttl', content: '', contentType: 'text/turtle' },\n { to: '', existing: true, aclOptions: { defaultForNew: true } }\n ]\n\n // @@ Ask user abut ACLs?\n\n //\n // @@ Add header to PUT If-None-Match: * to prevent overwrite\n //\n\n function claimSuccess (newAppInstance, appInstanceNoun) {\n // @@ delete or grey other stuff\n console.log(`New ${appInstanceNoun} created at ${newAppInstance}`)\n const p = div.appendChild(dom.createElement('p'))\n p.classList.add('claimSuccess')\n p.innerHTML =\n 'Your <a href=\\'' +\n newAppInstance.uri +\n '\\'><b>new ' +\n appInstanceNoun +\n '</b></a> is ready. ' +\n '<br/><br/><a href=\\'' +\n newAppInstance.uri +\n '\\'>Go to new ' +\n appInstanceNoun +\n '</a>'\n const newContext = Object.assign(\n { newInstance: newAppInstance },\n context\n )\n resolve(newContext)\n }\n\n function doNextTask () {\n function checkOKSetACL (uri, ok) {\n if (!ok) {\n complain('Error writing new file ' + task.to)\n return reject(new Error('Error writing new file ' + task.to))\n }\n\n setACLUserPublic(dest, me, aclOptions)\n .then(() => doNextTask())\n .catch(err => {\n const message =\n 'Error setting access permissions for ' +\n task.to +\n ' : ' +\n err.message\n complain(message)\n return reject(new Error(message))\n })\n }\n\n if (toBeWritten.length === 0) {\n claimSuccess(newAppInstance, appInstanceNoun)\n } else {\n var task = toBeWritten.shift() /* eslint-disable-line no-var */\n console.log('Creating new file ' + task.to + ' in new instance ')\n var dest = external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.uri.join(task.to, newBase) /* eslint-disable-line no-var */\n var aclOptions = task.aclOptions || {} /* eslint-disable-line no-var */\n\n if ('content' in task) {\n kb.fetcher\n .webOperation('PUT', dest, {\n data: task.content,\n saveMetadata: true,\n contentType: task.contentType\n })\n .then(() => checkOKSetACL(dest, true))\n } else if ('existing' in task) {\n checkOKSetACL(dest, true)\n } else {\n reject(new Error('copy not expected buiding new app!!'))\n // const from = task.from || task.to // default source to be same as dest\n // UI.widgets.webCopy(base + from, dest, task.contentType, checkOKSetACL)\n }\n }\n }\n doNextTask()\n },\n err => {\n // log in then\n context.div.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(err))\n }\n )\n })\n}\n\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/styles/mugshotGallery.css\nvar mugshotGallery = __webpack_require__(715);\n;// ./src/styles/mugshotGallery.css\n\n \n \n \n \n \n \n \n \n \n\nvar mugshotGallery_options = {};\n\nmugshotGallery_options.styleTagTransform = (styleTagTransform_default());\nmugshotGallery_options.setAttributes = (setAttributesWithoutAttributes_default());\nmugshotGallery_options.insert = insertBySelector_default().bind(null, \"head\");\nmugshotGallery_options.domAPI = (styleDomAPI_default());\nmugshotGallery_options.insertStyleElement = (insertStyleElement_default());\n\nvar mugshotGallery_update = injectStylesIntoStyleTag_default()(mugshotGallery/* default */.A, mugshotGallery_options);\n\n\n\n\n /* harmony default export */ const styles_mugshotGallery = (mugshotGallery/* default */.A && mugshotGallery/* default */.A.locals ? mugshotGallery/* default */.A.locals : undefined);\n\n;// ./src/mugshotGallery.js\n\n\n\n\n\n// Lightweight MIME helpers replacing the heavy mime-types/mime-db packages (~170 KiB)\nconst mimeMap = {\n 'image/png': 'png',\n 'image/jpeg': 'jpg',\n 'image/gif': 'gif',\n 'image/svg+xml': 'svg',\n 'image/webp': 'webp',\n 'image/bmp': 'bmp',\n 'image/tiff': 'tiff',\n 'application/pdf': 'pdf',\n 'text/plain': 'txt',\n 'text/html': 'html',\n 'application/json': 'json',\n 'application/octet-stream': 'bin'\n}\nconst extMap = Object.fromEntries(Object.entries(mimeMap).map(([k, v]) => [v, k]))\nconst mime = {\n extension: (contentType) => mimeMap[contentType] || false,\n lookup: (filename) => {\n const ext = filename.split('.').pop().toLowerCase()\n return extMap[ext] || false\n }\n}\n\nconst mugshotGallery_ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\nconst mugshotGallery_utils = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils\nconst mugshotGallery_kb = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store\n\n/* Mugshot Gallery\n*\n* A widget for managing a set of images.\n* Make this a form field?\n*/\nfunction renderMugshotGallery (dom, subject) {\n function complain (message) {\n console.log(message)\n galleryDiv.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n\n async function linkToPicture (subject, pic, remove) {\n const link = [\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(subject, mugshotGallery_ns.vcard('hasPhoto'), pic, subject.doc())\n ]\n try {\n if (remove) {\n await mugshotGallery_kb.updater.update(link, [])\n } else {\n await mugshotGallery_kb.updater.update([], link)\n }\n } catch (err) {\n const msg = ' Write back image link FAIL ' + pic + ', Error: ' + err\n console.log(msg)\n alert(msg)\n }\n }\n\n function handleDroppedThing (thing) {\n mugshotGallery_kb.fetcher.nowOrWhenFetched(thing.doc(), function (ok, mess) {\n if (!ok) {\n console.log('Error looking up dropped thing ' + thing + ': ' + mess)\n } else {\n const types = mugshotGallery_kb.findTypeURIs(thing)\n for (const ty in types) {\n console.log(' drop object type includes: ' + ty) // @@ Allow email addresses and phone numbers to be dropped?\n }\n console.log('Default: assume web page ' + thing) // icon was: UI.icons.iconBase + 'noun_25830.svg'\n mugshotGallery_kb.add(subject, mugshotGallery_ns.wf('attachment'), thing, subject.doc())\n // @@ refresh UI\n }\n })\n }\n\n function uploadFileToContact (filename, contentType, data) {\n // const fileExtension = filename.split('.').pop() // .toLowerCase()\n const extension = mime.extension(contentType)\n if (contentType !== mime.lookup(filename)) {\n filename += '_.' + extension\n console.log('MIME TYPE MISMATCH -- adding extension: ' + filename)\n }\n let prefix, predicate\n const isImage = contentType.startsWith('image')\n if (isImage) {\n prefix = 'image_'\n predicate = mugshotGallery_ns.vcard('hasPhoto')\n } else {\n prefix = 'attachment_'\n predicate = mugshotGallery_ns.wf('attachment')\n }\n\n let n, pic\n for (n = 0; ; n++) {\n // Check filename is not used or invent new one\n pic = mugshotGallery_kb.sym(subject.dir().uri + filename)\n if (!mugshotGallery_kb.holds(subject, mugshotGallery_ns.vcard('hasPhoto'), pic)) {\n break\n }\n filename = prefix + n + '.' + extension\n }\n console.log(\n 'Putting ' +\n data.byteLength +\n ' bytes of ' +\n contentType +\n ' to ' +\n pic\n )\n mugshotGallery_kb.fetcher\n .webOperation('PUT', pic.uri, {\n data,\n contentType\n })\n .then(function (response) {\n if (!response.ok) {\n complain('Error uploading ' + pic + ':' + response.status)\n return\n }\n console.log(' Upload: put OK: ' + pic)\n mugshotGallery_kb.add(subject, predicate, pic, subject.doc())\n mugshotGallery_kb.fetcher\n .putBack(subject.doc(), { contentType: 'text/turtle' })\n .then(\n function (_response) {\n if (isImage) {\n mugshotDiv.refresh()\n }\n },\n function (err) {\n console.log(\n ' Write back image link FAIL ' + pic + ', Error: ' + err\n )\n }\n )\n })\n }\n\n // When a set of URIs are dropped on\n async function handleURIsDroppedOnMugshot (uris) {\n for (const u of uris) {\n let thing = external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.sym(u) // Attachment needs text label to disinguish I think not icon.\n console.log('Dropped on mugshot thing ' + thing) // icon was: UI.icons.iconBase + 'noun_25830.svg'\n if (u.startsWith('http') && u.indexOf('#') < 0) {\n // Plain document\n // Take a copy of a photo on the web:\n if (u.startsWith('http:')) { // because of browser mixed content stuff can't read http:\n thing = external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.sym('https:' + u.slice(5))\n }\n const options = { withCredentials: false, credentials: 'omit' }\n let result\n try {\n result = await mugshotGallery_kb.fetcher.webOperation('GET', thing.uri, options)\n } catch (err) {\n complain(\n `Gallery: fetch error trying to read picture ${thing} data: ${err}`\n )\n handleDroppedThing(thing)\n return\n }\n const contentType = result.headers.get('Content-Type')\n let pathEnd = thing.uri.split('/').slice(-1)[0] // last segment as putative filename\n pathEnd = pathEnd.split('?')[0] // chop off any query params\n const data = await result.arrayBuffer()\n if (!result.ok) {\n alert('Cant download, so will link image. ' + thing + ':' + result.status)\n handleDroppedThing(thing)\n return\n }\n uploadFileToContact(pathEnd, contentType, data)\n return\n } else {\n alert(\n 'Not a web document URI, cannot copy as picture: ' + thing\n )\n }\n handleDroppedThing(thing)\n }\n }\n\n // Drop an image file to set up the mugshot\n function droppedFileHandler (files) {\n for (let i = 0; i < files.length; i++) {\n const f = files[i]\n console.log(\n ' contacts: Filename: ' +\n f.name +\n ', type: ' +\n (f.type || 'n/a') +\n ' size: ' +\n f.size +\n ' bytes, last modified: ' +\n (f.lastModifiedDate\n ? f.lastModifiedDate.toLocaleDateString()\n : 'n/a')\n ) // See e.g. https://www.html5rocks.com/en/tutorials/file/dndfiles/\n\n // @@ Add: progress bar(s)\n const reader = new FileReader()\n reader.onload = (function (theFile) {\n return function (e) {\n const data = e.target.result\n console.log(' File read byteLength : ' + data.byteLength)\n const filename = encodeURIComponent(theFile.name)\n const contentType = theFile.type\n uploadFileToContact(filename, contentType, data)\n }\n })(f)\n reader.readAsArrayBuffer(f)\n }\n }\n\n function elementForImage (image) {\n const img = dom.createElement('img')\n img.classList.add('mugshotImage')\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.makeDropTarget(\n img,\n handleURIsDroppedOnMugshot,\n droppedFileHandler\n )\n if (image) {\n // img.setAttribute('src', image.uri) use token and works with NSS but not with CSS\n // we need to get image with authenticated fetch\n external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store.fetcher._fetch(image.uri)\n .then(function (response) {\n return response.blob()\n })\n .then(function (myBlob) {\n const objectURL = URL.createObjectURL(myBlob)\n img.setAttribute('src', objectURL)\n })\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.makeDraggable(img, image)\n }\n return img\n }\n\n function syncMugshots () {\n let images = mugshotGallery_kb.each(subject, mugshotGallery_ns.vcard('hasPhoto')) // Priviledge vcard ones\n images.sort() // arbitrary consistency\n images = images.slice(0, 5) // max number for the space\n if (images.length === 0) {\n mugshotDiv.innerHTML = '' // strictly, don't remove it if already there\n if (editable) {\n mugshotDiv.appendChild(placeholder) // A head image to drop pictures on\n } // otherwise leave gallery empty .. nothing to see here folks\n } else {\n mugshotGallery_utils.syncTableToArray(mugshotDiv, images, elementForImage)\n }\n }\n\n // Good URI for a Camera picture\n function getImageDoc () {\n const imageDoc = mugshotGallery_kb.sym(\n subject.dir().uri + 'Image_' + Date.now() + '.png'\n )\n return imageDoc\n }\n // Store picture\n async function tookPicture (imageDoc) {\n if (imageDoc) {\n await linkToPicture(subject, imageDoc)\n syncMugshots()\n }\n }\n\n function trashCan () {\n const button = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.button(\n dom,\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.icons.iconBase + 'noun_925021.svg',\n 'Drag here to delete'\n )\n async function droppedURIHandler (uris) {\n const images = mugshotGallery_kb\n .each(subject, mugshotGallery_ns.vcard('hasPhoto'))\n .map(x => x.uri)\n for (const uri of uris) {\n if (!images.includes(uri)) {\n alert('Only drop images in this contact onto this trash can.')\n return\n }\n if (confirm(`Permanently DELETE image ${uri} completely?`)) {\n console.log('Unlinking image file ' + uri)\n await linkToPicture(subject, mugshotGallery_kb.sym(uri), true)\n try {\n console.log('Deleting image file ' + uri)\n await mugshotGallery_kb.fetcher.webOperation('DELETE', uri)\n } catch (err) {\n alert('Unable to delete picture! ' + err)\n }\n }\n }\n syncMugshots()\n }\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.makeDropTarget(button, droppedURIHandler, null)\n return button\n }\n\n function renderImageTools () {\n const imageToolTable = dom.createElement('table')\n const row = imageToolTable.appendChild(dom.createElement('tr'))\n const left = row.appendChild(dom.createElement('td'))\n const middle = row.appendChild(dom.createElement('td'))\n const right = row.appendChild(dom.createElement('td'))\n\n left.appendChild(\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.media.cameraButton(dom, mugshotGallery_kb, getImageDoc, tookPicture)\n ) // 20190812\n try {\n middle.appendChild(\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.fileUploadButtonDiv(dom, droppedFileHandler)\n )\n } catch (e) {\n console.log('ignore fileUploadButtonDiv error for now', e)\n }\n right.appendChild(trashCan())\n return imageToolTable\n }\n\n // Body of renderMugshotGallery\n\n const editable = mugshotGallery_kb.updater.editable(subject.doc().uri, mugshotGallery_kb)\n const galleryDiv = dom.createElement('div')\n const mugshotDiv = galleryDiv.appendChild(dom.createElement('div'))\n const placeholder = elementForImage()\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.setImage(placeholder, subject) // Fallback icon or get from web\n syncMugshots()\n mugshotDiv.refresh = syncMugshots\n if (editable) {\n galleryDiv.appendChild(renderImageTools())\n }\n return galleryDiv\n}\n\n;// ./src/groupMembershipControl.js\n// Render a control to record the group memberships we have for this agent\n\n\n\nconst groupMembershipControl_ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\nconst groupMembershipControl_utils = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils\nconst groupMembershipControl_kb = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store\n\n// Groups the person is a member of\nfunction groupMembership (person) {\n let groups = groupMembershipControl_kb.statementsMatching(null, groupMembershipControl_ns.owl('sameAs'), person).map(st => st.why)\n .concat(groupMembershipControl_kb.each(null, groupMembershipControl_ns.vcard('hasMember'), person))\n const strings = new Set(groups.map(group => group.uri)) // remove dups\n groups = [...strings].map(uri => groupMembershipControl_kb.sym(uri))\n return groups\n}\n\nasync function renderGroupMemberships (person, context) {\n // Remove a person from a group\n async function removeFromGroup (thing, group) {\n const pname = kb.any(thing, groupMembershipControl_ns.vcard('fn'))\n const gname = kb.any(group, groupMembershipControl_ns.vcard('fn'))\n // find all WebIDs of thing\n const thingwebids = kb.each(null, groupMembershipControl_ns.owl('sameAs'), thing, group.doc())\n // WebID can be deleted only if not used in another thing\n let webids = []\n thingwebids.forEach(webid => {\n if (kb.statementsMatching(webid, groupMembershipControl_ns.owl('sameAs'), thing, group.doc())) webids = webids.concat(webid)\n })\n let thingOrWebid = thing\n if (webids.length > 0) thingOrWebid = webids[0]\n const groups = kb.each(null, groupMembershipControl_ns.vcard('hasMember'), thingOrWebid) // in all groups a person has same structure\n if (groups.length < 2) {\n alert(\n 'Must be a member of at least one group. Add to another group first.'\n )\n return\n }\n const message = 'Remove ' + pname + ' from group ' + gname + '?'\n if (confirm(message)) {\n let del = kb\n .statementsMatching(person, undefined, undefined, group.doc())\n .concat(kb.statementsMatching(undefined, undefined, person, group.doc()))\n webids.forEach(webid => {\n if (kb.statementsMatching(webid, groupMembershipControl_ns.owl('sameAs'), undefined, group.doc()).length < 2) {\n del = del.concat(kb.statementsMatching(undefined, undefined, webid, group.doc()))\n }\n })\n kb.updater.update(del, [], function (uri, ok, err) {\n if (!ok) {\n const message = 'Error removing member from group ' + group + ': ' + err\n groupList.parentNode.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n })\n console.log('Removed ' + pname + ' from group ' + gname)\n // to allow refresh of card groupList\n kb.fetcher.unload(group.doc())\n await kb.fetcher.load(group.doc())\n syncGroupList()\n }\n }\n\n function newRowForGroup (group) {\n const options = {\n deleteFunction: function () {\n removeFromGroup(person, group)\n },\n noun: 'membership'\n }\n const tr = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.personTR(dom, null, group, options)\n return tr\n }\n\n // find all groups where person has membership\n function syncGroupList () {\n // person and/or WebIDs to be changed\n groupMembershipControl_utils.syncTableToArray(groupList, groupMembership(person), newRowForGroup)\n }\n\n async function loadGroupsFromBook (book = null) {\n if (!book) {\n book = kb.any(undefined, groupMembershipControl_ns.vcard('includesGroup'))\n if (!book) {\n // throw new Error('findBookFromGroups: Cant find address book which this group is part of')\n return // no book => no groups\n }\n }\n const groupIndex = kb.any(book, groupMembershipControl_ns.vcard('groupIndex'))\n const gs = book ? kb.each(book, groupMembershipControl_ns.vcard('includesGroup'), null, groupIndex) : []\n await kb.fetcher.load(gs)\n }\n\n const { dom } = context\n const kb = context.session.store\n const groupList = dom.createElement('table')\n\n // find book any group and load all groups\n await loadGroupsFromBook()\n\n groupList.refresh = syncGroupList\n syncGroupList()\n return groupList\n}\n\n;// ./src/ontology/individualAndOrganizationForm.ttl\nconst individualAndOrganizationForm_namespaceObject = \"# This turtle file defines the forms used in the contacts management\\n#\\n# Individuals and orgs are in one file as they both\\n# share some forms (address etc) and also interactions (roles)\\n\\n# Forms documentation: https://solidos.github.io/solid-ui/docs/forms-intro.html\\n\\n@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.\\n@prefix dct: <http://purl.org/dc/terms/>.\\n@prefix foaf: <http://xmlns.com/foaf/0.1/>.\\n@prefix owl: <http://www.w3.org/2002/07/owl#>.\\n@prefix prov: <http://www.w3.org/ns/prov#>.\\n@prefix ui: <http://www.w3.org/ns/ui#>.\\n@prefix schema: <http://schema.org/>.\\n@prefix solid: <http://www.w3.org/ns/solid/terms#>.\\n@prefix vcard: <http://www.w3.org/2006/vcard/ns#>.\\n@prefix : <#>.\\n\\n\\n############# For individual:\\n:individualForm a ui:Form ;\\n dct:title \\\"Contact details for a person\\\" ;\\n ui:parts (\\n :fullNameField\\n :roleField\\n :orgNameField\\n # :addressesComment\\n :addresses\\n # :emailComment\\n :eMails\\n # :telephoneComment\\n :telephones\\n :birthdayField\\n # :noteComment\\n :noteField \\n ) .\\n\\n :fullNameField\\n a ui:SingleLineTextField ;\\n ui:label \\\"Name\\\";\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:fn .\\n\\n :roleField\\n a ui:SingleLineTextField ;\\n ui:suppressEmptyUneditable true;\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:role .\\n\\n :orgNameField\\n a ui:SingleLineTextField ;\\n ui:suppressEmptyUneditable true;\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:organization-name .\\n\\n :addresses a ui:Multiple ;\\n dct:title \\\"Address details\\\" ;\\n ui:part :oneAddress ;\\n ui:property vcard:hasAddress .\\n\\n :oneAddress a ui:Group ;\\n ui:parts ( \\n :id1409437207443 :id1409437292400 \\n :id1409437421996 :id1409437467649 \\n :id1409437569420 ). \\n\\n :id1409437207443\\n a ui:SingleLineTextField ;\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:street-address .\\n\\n :id1409437292400\\n a ui:SingleLineTextField ;\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:locality .\\n\\n :id1409437421996\\n a ui:SingleLineTextField ;\\n ui:maxLength \\\"25\\\" ;\\n ui:property vcard:postal-code .\\n\\n :id1409437467649\\n a ui:SingleLineTextField ;\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:region .\\n\\n :id1409437569420\\n a ui:SingleLineTextField ;\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:country-name .\\n\\n\\n :eMails a ui:Multiple ;\\n ui:part :oneEMail ;\\n ui:property vcard:hasEmail .\\n\\n :oneEMail a ui:Group ; # hint: side by side is good\\n ui:part :emailValue, :emailType ;\\n ui:parts ( :emailType :emailValue ).\\n\\n :emailValue\\n a ui:EmailField ; ui:label \\\"email\\\";\\n ui:property vcard:value .\\n\\n :emailType\\n a ui:Classifier ;\\n ui:canMintNew \\\"0\\\" ;\\n ui:category vcard:Type ;\\n ui:from vcard:Type ;\\n ui:property rdf:type .\\n\\n :telephones a ui:Multiple ;\\n ui:part :onetelephone ;\\n ui:property vcard:hasTelephone .\\n\\n :onetelephone\\n a ui:Group ;\\n ui:part :telephoneValue, :telephoneType ;\\n ui:parts ( :telephoneType :telephoneValue ).\\n\\n :telephoneValue\\n a ui:PhoneField ;\\n ui:property vcard:value .\\n\\n :telephoneType\\n a ui:Classifier ;\\n ui:canMintNew \\\"0\\\" ;\\n ui:category vcard:TelephoneType ;\\n ui:from vcard:Type ;\\n ui:property rdf:type .\\n\\n :birthdayField a ui:DateField;\\n ui:label \\\"Born\\\"@en;\\n ui:suppressEmptyUneditable true;\\n ui:property vcard:bday .\\n\\n :noteField\\n a ui:MultiLineTextField ;\\n ui:suppressEmptyUneditable true;\\n ui:property vcard:note .\\n\\n# Ontology additions or interpretations needed for the form to work well\\n\\n# The ontology file doesn't make them disjoint. This makes the selector be a choice.\\nvcard:TelephoneType owl:disjointUnionOf ( vcard:Cell vcard:Home vcard:Work) .\\nvcard:Type owl:disjointUnionOf (vcard:Home vcard:Work) . # for email\\n\\n# Better field labels\\nvcard:Cell ui:label \\\"mobile\\\"@en . # app will make initial caps if necessary\\nvcard:hasAddress ui:label \\\"address\\\"@en .\\nvcard:bday ui:label \\\"born\\\"@en.\\nvcard:hasEmail ui:label \\\"email\\\"@en .\\nvcard:hasTelephone ui:label \\\"phone\\\"@en .\\nvcard:note ui:label \\\"notes\\\"@en .\\n\\n\\n############ For organizations\\n\\n:organizationForm a ui:Form ; \\n dct:title \\\"Contact details for an organization\\\";\\n ui:parts (\\n :OrgClassifier\\n :fullNameField\\n :homePageURIField\\n :addresses\\n :eMails\\n :telephones\\n :noteField ) .\\n\\n :OrgClassifier a ui:Classifier; \\n ui:label \\\"What sort of organization?\\\"@en;\\n ui:category solid:InterestingOrganization .\\n\\n :homePageURIField a ui:NamedNodeURIField;\\n ui:label \\\"Homepage\\\"@en;\\n ui:property schema:url .\\n\\n# Ontology data to drive the :OrgClassifier classifier\\n solid:InterestingOrganization owl:disjointUnionOf (\\n # Airline - a Corporation\\n # Consortium - a Corporation or a NGO\\n schema:Corporation\\n schema:EducationalOrganization\\n schema:ResearchOrganization # Proposed. https://github.com/schemaorg/schemaorg/issues/2877\\n # FundingScheme - eh?\\n schema:GovernmentOrganization\\n # LibrarySystem\\n # LocalBusiness - Corporation\\n # MedicalOrganization - a Corporation or a NGO\\n schema:NGO\\n # NewsMediaOrganization - a Corporation or a NGO\\n schema:PerformingGroup # a band\\n schema:Project # like Solid\\n schema:SportsOrganization) .\\n\";\n;// ./src/ontology/vcard.ttl\nconst vcard_namespaceObject = \"@prefix : <http://www.w3.org/2006/vcard/ns#> .\\n@prefix owl: <http://www.w3.org/2002/07/owl#> .\\n@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\\n@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\\n@prefix xml: <http://www.w3.org/XML/1998/namespace> .\\n@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .\\n\\n:Acquaintance a owl:Class ;\\n rdfs:label \\\"Acquaintance\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Agent a owl:Class ;\\n rdfs:label \\\"Agent\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:BBS a owl:Class ;\\n rdfs:label \\\"BBS\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType ;\\n owl:deprecated true .\\n\\n:Car a owl:Class ;\\n rdfs:label \\\"Car\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType ;\\n owl:deprecated true .\\n\\n:Cell a owl:Class ;\\n rdfs:label \\\"Cell\\\"@en ;\\n rdfs:comment \\\"Also called mobile telephone\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:Child a owl:Class ;\\n rdfs:label \\\"Child\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Colleague a owl:Class ;\\n rdfs:label \\\"Colleague\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Contact a owl:Class ;\\n rdfs:label \\\"Contact\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Coresident a owl:Class ;\\n rdfs:label \\\"Coresident\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Coworker a owl:Class ;\\n rdfs:label \\\"Coworker\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Crush a owl:Class ;\\n rdfs:label \\\"Crush\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Date a owl:Class ;\\n rdfs:label \\\"Date\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Dom a owl:Class ;\\n rdfs:label \\\"Dom\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Emergency a owl:Class ;\\n rdfs:label \\\"Emergency\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Fax a owl:Class ;\\n rdfs:label \\\"Fax\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:Female a owl:Class ;\\n rdfs:label \\\"Female\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Gender .\\n\\n:Friend a owl:Class ;\\n rdfs:label \\\"Friend\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Home a owl:Class ;\\n rdfs:label \\\"Home\\\"@en ;\\n rdfs:comment \\\"This implies that the property is related to an individual's personal life\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type .\\n\\n:ISDN a owl:Class ;\\n rdfs:label \\\"ISDN\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Internet a owl:Class ;\\n rdfs:label \\\"Internet\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Intl a owl:Class ;\\n rdfs:label \\\"Intl\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Kin a owl:Class ;\\n rdfs:label \\\"Kin\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Label a owl:Class ;\\n rdfs:label \\\"Label\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Male a owl:Class ;\\n rdfs:label \\\"Male\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Gender .\\n\\n:Me a owl:Class ;\\n rdfs:label \\\"Me\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Met a owl:Class ;\\n rdfs:label \\\"Met\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Modem a owl:Class ;\\n rdfs:label \\\"Modem\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType ;\\n owl:deprecated true .\\n\\n:Msg a owl:Class ;\\n rdfs:label \\\"Msg\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType ;\\n owl:deprecated true .\\n\\n:Muse a owl:Class ;\\n rdfs:label \\\"Muse\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Neighbor a owl:Class ;\\n rdfs:label \\\"Neighbor\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:None a owl:Class ;\\n rdfs:label \\\"None\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Gender .\\n\\n:Other a owl:Class ;\\n rdfs:label \\\"Other\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Gender .\\n\\n:PCS a owl:Class ;\\n rdfs:label \\\"PCS\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType ;\\n owl:deprecated true .\\n\\n:Pager a owl:Class ;\\n rdfs:label \\\"Pager\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:Parcel a owl:Class ;\\n rdfs:label \\\"Parcel\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Parent a owl:Class ;\\n rdfs:label \\\"Parent\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Postal a owl:Class ;\\n rdfs:label \\\"Postal\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Pref a owl:Class ;\\n rdfs:label \\\"Pref\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Sibling a owl:Class ;\\n rdfs:label \\\"Sibling\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Spouse a owl:Class ;\\n rdfs:label \\\"Spouse\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Sweetheart a owl:Class ;\\n rdfs:label \\\"Sweetheart\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Tel a owl:Class ;\\n rdfs:label \\\"Tel\\\"@en ;\\n rdfs:comment \\\"This class is deprecated. Use the hasTelephone object property.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:Text a owl:Class ;\\n rdfs:label \\\"Text\\\"@en ;\\n rdfs:comment \\\"Also called sms telephone\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:TextPhone a owl:Class ;\\n rdfs:label \\\"Text phone\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:Unknown a owl:Class ;\\n rdfs:label \\\"Unknown\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Gender .\\n\\n:Video a owl:Class ;\\n rdfs:label \\\"Video\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:Voice a owl:Class ;\\n rdfs:label \\\"Voice\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:Work a owl:Class ;\\n rdfs:label \\\"Work\\\"@en ;\\n rdfs:comment \\\"This implies that the property is related to an individual's work place\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type .\\n\\n:X400 a owl:Class ;\\n rdfs:label \\\"X400\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:adr a owl:ObjectProperty ;\\n rdfs:label \\\"address\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasAddress .\\n\\n:agent a owl:ObjectProperty ;\\n rdfs:label \\\"agent\\\"@en ;\\n rdfs:comment \\\"This object property has been deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:anniversary a owl:DatatypeProperty ;\\n rdfs:label \\\"anniversary\\\"@en ;\\n rdfs:comment \\\"The date of marriage, or equivalent, of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range [ a rdfs:Datatype ;\\n owl:unionOf ( xsd:dateTime xsd:gYear ) ] .\\n\\n:bday a owl:DatatypeProperty ;\\n rdfs:label \\\"birth date\\\"@en ;\\n rdfs:comment \\\"To specify the birth date of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range [ a rdfs:Datatype ;\\n owl:unionOf ( xsd:dateTime xsd:dateTimeStamp xsd:gYear ) ] .\\n\\n:category a owl:DatatypeProperty ;\\n rdfs:label \\\"category\\\"@en ;\\n rdfs:comment \\\"The category information about the object, also known as tags\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:class a owl:DatatypeProperty ;\\n rdfs:label \\\"class\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:email a owl:ObjectProperty ;\\n rdfs:label \\\"email\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasEmail .\\n\\n:extended-address a owl:DatatypeProperty ;\\n rdfs:label \\\"extended address\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:geo a owl:ObjectProperty ;\\n rdfs:label \\\"geo\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasGeo .\\n\\n:hasAdditionalName a owl:ObjectProperty ;\\n rdfs:label \\\"has additional name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the additional name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasCalendarBusy a owl:ObjectProperty ;\\n rdfs:label \\\"has calendar busy\\\"@en ;\\n rdfs:comment \\\"To specify the busy time associated with the object. (Was called FBURL in RFC6350)\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasCalendarLink a owl:ObjectProperty ;\\n rdfs:label \\\"has calendar link\\\"@en ;\\n rdfs:comment \\\"To specify the calendar associated with the object. (Was called CALURI in RFC6350)\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasCalendarRequest a owl:ObjectProperty ;\\n rdfs:label \\\"has calendar request\\\"@en ;\\n rdfs:comment \\\"To specify the calendar user address to which a scheduling request be sent for the object. (Was called CALADRURI in RFC6350)\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasCategory a owl:ObjectProperty ;\\n rdfs:label \\\"has category\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the category data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasCountryName a owl:ObjectProperty ;\\n rdfs:label \\\"has country name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the country name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasFN a owl:ObjectProperty ;\\n rdfs:label \\\"has formatted name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the formatted name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasFamilyName a owl:ObjectProperty ;\\n rdfs:label \\\"has family name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the family name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasGender a owl:ObjectProperty ;\\n rdfs:label \\\"has gender\\\"@en ;\\n rdfs:comment \\\"To specify the sex or gender identity of the object. URIs are recommended to enable interoperable sex and gender codes to be used.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasGivenName a owl:ObjectProperty ;\\n rdfs:label \\\"has given name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the given name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasHonorificPrefix a owl:ObjectProperty ;\\n rdfs:label \\\"has honorific prefix\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the honorific prefix data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasHonorificSuffix a owl:ObjectProperty ;\\n rdfs:label \\\"has honorific suffix\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the honorific suffix data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasInstantMessage a owl:ObjectProperty ;\\n rdfs:label \\\"has messaging\\\"@en ;\\n rdfs:comment \\\"To specify the instant messaging and presence protocol communications with the object. (Was called IMPP in RFC6350)\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasLanguage a owl:ObjectProperty ;\\n rdfs:label \\\"has language\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the language data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasLocality a owl:ObjectProperty ;\\n rdfs:label \\\"has locality\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the locality data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasNickname a owl:ObjectProperty ;\\n rdfs:label \\\"has nickname\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the nickname data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:seeAlso :nickname .\\n\\n:hasNote a owl:ObjectProperty ;\\n rdfs:label \\\"has note\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the note data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasOrganizationName a owl:ObjectProperty ;\\n rdfs:label \\\"has organization name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the organization name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasOrganizationUnit a owl:ObjectProperty ;\\n rdfs:label \\\"has organization unit name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the organization unit name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasPostalCode a owl:ObjectProperty ;\\n rdfs:label \\\"has postal code\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the postal code data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasRegion a owl:ObjectProperty ;\\n rdfs:label \\\"has region\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the region data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasRelated a owl:ObjectProperty ;\\n rdfs:label \\\"has related\\\"@en ;\\n rdfs:comment \\\"To specify a relationship between another entity and the entity represented by this object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasRole a owl:ObjectProperty ;\\n rdfs:label \\\"has role\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the role data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasSource a owl:ObjectProperty ;\\n rdfs:label \\\"has source\\\"@en ;\\n rdfs:comment \\\"To identify the source of directory information of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasStreetAddress a owl:ObjectProperty ;\\n rdfs:label \\\"has street address\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the street address data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasTitle a owl:ObjectProperty ;\\n rdfs:label \\\"has title\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the title data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasUID a owl:ObjectProperty ;\\n rdfs:label \\\"has uid\\\"@en ;\\n rdfs:comment \\\"To specify a value that represents a globally unique identifier corresponding to the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasValue a owl:ObjectProperty ;\\n rdfs:label \\\"has value\\\"@en ;\\n rdfs:comment \\\"Used to indicate the resource value of an object property that requires property parameters\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:label a owl:DatatypeProperty ;\\n rdfs:label \\\"label\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:language a owl:DatatypeProperty ;\\n rdfs:label \\\"language\\\"@en ;\\n rdfs:comment \\\"To specify the language that may be used for contacting the object. May also be used as a property parameter.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:latitude a owl:DatatypeProperty ;\\n rdfs:label \\\"latitude\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated. See hasGeo\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:longitude a owl:DatatypeProperty ;\\n rdfs:label \\\"longitude\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated. See hasGeo\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:mailer a owl:DatatypeProperty ;\\n rdfs:label \\\"mailer\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:note a owl:DatatypeProperty ;\\n rdfs:label \\\"note\\\"@en ;\\n rdfs:comment \\\"A note associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:org a owl:ObjectProperty ;\\n rdfs:label \\\"organization\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped. Use the organization-name data property.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :organization-name .\\n\\n:organization-unit a owl:DatatypeProperty ;\\n rdfs:label \\\"organizational unit name\\\"@en ;\\n rdfs:comment \\\"To specify the organizational unit name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string ;\\n rdfs:subPropertyOf :organization-name .\\n\\n:post-office-box a owl:DatatypeProperty ;\\n rdfs:label \\\"post office box\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:prodid a owl:DatatypeProperty ;\\n rdfs:label \\\"product id\\\"@en ;\\n rdfs:comment \\\"To specify the identifier for the product that created the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:rev a owl:DatatypeProperty ;\\n rdfs:label \\\"revision\\\"@en ;\\n rdfs:comment \\\"To specify revision information about the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:dateTime .\\n\\n:role a owl:DatatypeProperty ;\\n rdfs:label \\\"role\\\"@en ;\\n rdfs:comment \\\"To specify the function or part played in a particular situation by the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:sort-string a owl:DatatypeProperty ;\\n rdfs:label \\\"sort as\\\"@en ;\\n rdfs:comment \\\"To specify the string to be used for national-language-specific sorting. Used as a property parameter only.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:title a owl:DatatypeProperty ;\\n rdfs:label \\\"title\\\"@en ;\\n rdfs:comment \\\"To specify the position or job of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:tz a owl:DatatypeProperty ;\\n rdfs:label \\\"time zone\\\"@en ;\\n rdfs:comment \\\"To indicate time zone information that is specific to the object. May also be used as a property parameter.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:value a owl:DatatypeProperty ;\\n rdfs:label \\\"value\\\"@en ;\\n rdfs:comment \\\"Used to indicate the literal value of a data property that requires property parameters\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:Address a owl:Class ;\\n rdfs:label \\\"Address\\\"@en ;\\n rdfs:comment \\\"To specify the components of the delivery address for the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentClass [ a owl:Class ;\\n owl:unionOf ( [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :country-name ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :country-name ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :locality ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :locality ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :postal-code ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :postal-code ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :region ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :region ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :street-address ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :street-address ] ) ] ) ] .\\n\\n:Email a owl:Class ;\\n rdfs:label \\\"Email\\\"@en ;\\n rdfs:comment \\\"To specify the electronic mail address for communication with the object the vCard represents. Use the hasEmail object property.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:Group a owl:Class ;\\n rdfs:label \\\"Group\\\"@en ;\\n rdfs:comment \\\"Object representing a group of persons or entities. A group object will usually contain hasMember properties to specify the members of the group.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Kind ;\\n owl:disjointWith :Individual,\\n :Location,\\n :Organization ;\\n owl:equivalentClass [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :hasMember ;\\n owl:someValuesFrom :Kind ] [ a owl:Restriction ;\\n owl:minQualifiedCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onClass :Kind ;\\n owl:onProperty :hasMember ] ) ] .\\n\\n:Individual a owl:Class ;\\n rdfs:label \\\"Individual\\\"@en ;\\n rdfs:comment \\\"An object representing a single person or entity\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Kind ;\\n owl:disjointWith :Location,\\n :Organization .\\n\\n:Name a owl:Class ;\\n rdfs:label \\\"Name\\\"@en ;\\n rdfs:comment \\\"To specify the components of the name of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentClass [ a owl:Class ;\\n owl:unionOf ( [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :additional-name ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:minCardinality \\\"0\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :additional-name ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :family-name ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :family-name ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :given-name ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :given-name ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :honorific-prefix ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:minCardinality \\\"0\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :honorific-prefix ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :honorific-suffix ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:minCardinality \\\"0\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :honorific-suffix ] ) ] ) ] .\\n\\n:VCard a owl:Class ;\\n rdfs:label \\\"VCard\\\"@en ;\\n rdfs:comment \\\"The vCard class is equivalent to the new Kind class, which is the parent for the four explicit types of vCards (Individual, Organization, Location, Group)\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentClass :Kind .\\n\\n:fn a owl:DatatypeProperty ;\\n rdfs:label \\\"formatted name\\\"@en ;\\n rdfs:comment \\\"The formatted text corresponding to the name of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:hasAddress a owl:ObjectProperty ;\\n rdfs:label \\\"has address\\\"@en ;\\n rdfs:comment \\\"To specify the components of the delivery address for the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range :Address .\\n\\n:hasEmail a owl:ObjectProperty ;\\n rdfs:label \\\"has email\\\"@en ;\\n rdfs:comment \\\"To specify the electronic mail address for communication with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range :Email .\\n\\n:hasGeo a owl:ObjectProperty ;\\n rdfs:label \\\"has geo\\\"@en ;\\n rdfs:comment \\\"To specify information related to the global positioning of the object. May also be used as a property parameter.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasKey a owl:ObjectProperty ;\\n rdfs:label \\\"has key\\\"@en ;\\n rdfs:comment \\\"To specify a public key or authentication certificate associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :key .\\n\\n:hasLogo a owl:ObjectProperty ;\\n rdfs:label \\\"has logo\\\"@en ;\\n rdfs:comment \\\"To specify a graphic image of a logo associated with the object \\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :logo .\\n\\n:hasName a owl:ObjectProperty ;\\n rdfs:label \\\"has name\\\"@en ;\\n rdfs:comment \\\"To specify the components of the name of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range :Name ;\\n owl:equivalentProperty :n .\\n\\n:hasPhoto a owl:ObjectProperty ;\\n rdfs:label \\\"has photo\\\"@en ;\\n rdfs:comment \\\"To specify an image or photograph information that annotates some aspect of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :photo .\\n\\n:hasSound a owl:ObjectProperty ;\\n rdfs:label \\\"has sound\\\"@en ;\\n rdfs:comment \\\"To specify a digital sound content information that annotates some aspect of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :sound .\\n\\n:hasTelephone a owl:ObjectProperty ;\\n rdfs:label \\\"has telephone\\\"@en ;\\n rdfs:comment \\\"To specify the telephone number for telephony communication with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :tel .\\n\\n:hasURL a owl:ObjectProperty ;\\n rdfs:label \\\"has url\\\"@en ;\\n rdfs:comment \\\"To specify a uniform resource locator associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :url .\\n\\n:key a owl:ObjectProperty ;\\n rdfs:label \\\"key\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasKey .\\n\\n:logo a owl:ObjectProperty ;\\n rdfs:label \\\"logo\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasLogo .\\n\\n:n a owl:ObjectProperty ;\\n rdfs:label \\\"name\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasName .\\n\\n:nickname a owl:DatatypeProperty ;\\n rdfs:label \\\"nickname\\\"@en ;\\n rdfs:comment \\\"The nick name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:photo a owl:ObjectProperty ;\\n rdfs:label \\\"photo\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasPhoto .\\n\\n:sound a owl:ObjectProperty ;\\n rdfs:label \\\"sound\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasSound .\\n\\n:tel a owl:ObjectProperty ;\\n rdfs:label \\\"telephone\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasTelephone .\\n\\n:url a owl:ObjectProperty ;\\n rdfs:label \\\"url\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasURL .\\n\\n:Location a owl:Class ;\\n rdfs:label \\\"Location\\\"@en ;\\n rdfs:comment \\\"An object representing a named geographical place\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Kind ;\\n owl:disjointWith :Organization .\\n\\n:additional-name a owl:DatatypeProperty ;\\n rdfs:label \\\"additional name\\\"@en ;\\n rdfs:comment \\\"The additional name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:country-name a owl:DatatypeProperty ;\\n rdfs:label \\\"country name\\\"@en ;\\n rdfs:comment \\\"The country name associated with the address of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:family-name a owl:DatatypeProperty ;\\n rdfs:label \\\"family name\\\"@en ;\\n rdfs:comment \\\"The family name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:given-name a owl:DatatypeProperty ;\\n rdfs:label \\\"given name\\\"@en ;\\n rdfs:comment \\\"The given name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:hasMember a owl:ObjectProperty ;\\n rdfs:label \\\"has member\\\"@en ;\\n rdfs:comment \\\"To include a member in the group this object represents. (This property can only be used by Group individuals)\\\"@en ;\\n rdfs:domain :Group ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range :Kind .\\n\\n:honorific-prefix a owl:DatatypeProperty ;\\n rdfs:label \\\"honorific prefix\\\"@en ;\\n rdfs:comment \\\"The honorific prefix of the name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:honorific-suffix a owl:DatatypeProperty ;\\n rdfs:label \\\"honorific suffix\\\"@en ;\\n rdfs:comment \\\"The honorific suffix of the name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:locality a owl:DatatypeProperty ;\\n rdfs:label \\\"locality\\\"@en ;\\n rdfs:comment \\\"The locality (e.g. city or town) associated with the address of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:organization-name a owl:DatatypeProperty ;\\n rdfs:label \\\"organization name\\\"@en ;\\n rdfs:comment \\\"To specify the organizational name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:postal-code a owl:DatatypeProperty ;\\n rdfs:label \\\"postal code\\\"@en ;\\n rdfs:comment \\\"The postal code associated with the address of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:region a owl:DatatypeProperty ;\\n rdfs:label \\\"region\\\"@en ;\\n rdfs:comment \\\"The region (e.g. state or province) associated with the address of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:street-address a owl:DatatypeProperty ;\\n rdfs:label \\\"street address\\\"@en ;\\n rdfs:comment \\\"The street address associated with the address of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:Organization a owl:Class ;\\n rdfs:label \\\"Organization\\\"@en ;\\n rdfs:comment \\\"\\\"\\\"An object representing an organization. An organization is a single entity, and might represent a business or government, a department or division within a business or government, a club, an association, or the like.\\n\\\"\\\"\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Kind .\\n\\n:Gender a owl:Class ;\\n rdfs:label \\\"Gender\\\"@en ;\\n rdfs:comment \\\"Used for gender codes. The URI of the gender code must be used as the value for Gender.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:Kind a owl:Class ;\\n rdfs:label \\\"Kind\\\"@en ;\\n rdfs:comment \\\"The parent class for all objects\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentClass [ a owl:Restriction ;\\n owl:minQualifiedCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onDataRange xsd:string ;\\n owl:onProperty :fn ],\\n :VCard .\\n\\n:Type a owl:Class ;\\n rdfs:label \\\"Type\\\"@en ;\\n rdfs:comment \\\"Used for type codes. The URI of the type code must be used as the value for Type.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:TelephoneType a owl:Class ;\\n rdfs:label \\\"Phone\\\"@en ;\\n rdfs:comment \\\"Used for telephone type codes. The URI of the telephone type code must be used as the value for the Telephone Type.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:RelatedType a owl:Class ;\\n rdfs:label \\\"Relation Type\\\"@en ;\\n rdfs:comment \\\"Used for relation type codes. The URI of the relation type code must be used as the value for the Relation Type.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n<http://www.w3.org/2006/vcard/ns> a owl:Ontology ;\\n rdfs:label \\\"Ontology for vCard\\\"@en ;\\n rdfs:comment \\\"Ontology for vCard based on RFC6350\\\"@en ;\\n owl:versionInfo \\\"Final\\\"@en .\\n\\n\\n\";\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/styles/individual.css\nvar individual = __webpack_require__(479);\n;// ./src/styles/individual.css\n\n \n \n \n \n \n \n \n \n \n\nvar individual_options = {};\n\nindividual_options.styleTagTransform = (styleTagTransform_default());\nindividual_options.setAttributes = (setAttributesWithoutAttributes_default());\nindividual_options.insert = insertBySelector_default().bind(null, \"head\");\nindividual_options.domAPI = (styleDomAPI_default());\nindividual_options.insertStyleElement = (insertStyleElement_default());\n\nvar individual_update = injectStylesIntoStyleTag_default()(individual/* default */.A, individual_options);\n\n\n\n\n /* harmony default export */ const styles_individual = (individual/* default */.A && individual/* default */.A.locals ? individual/* default */.A.locals : undefined);\n\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/styles/rdfFormsEnforced.css\nvar rdfFormsEnforced = __webpack_require__(434);\n;// ./src/styles/rdfFormsEnforced.css\n\n \n \n \n \n \n \n \n \n \n\nvar rdfFormsEnforced_options = {};\n\nrdfFormsEnforced_options.styleTagTransform = (styleTagTransform_default());\nrdfFormsEnforced_options.setAttributes = (setAttributesWithoutAttributes_default());\nrdfFormsEnforced_options.insert = insertBySelector_default().bind(null, \"head\");\nrdfFormsEnforced_options.domAPI = (styleDomAPI_default());\nrdfFormsEnforced_options.insertStyleElement = (insertStyleElement_default());\n\nvar rdfFormsEnforced_update = injectStylesIntoStyleTag_default()(rdfFormsEnforced/* default */.A, rdfFormsEnforced_options);\n\n\n\n\n /* harmony default export */ const styles_rdfFormsEnforced = (rdfFormsEnforced/* default */.A && rdfFormsEnforced/* default */.A.locals ? rdfFormsEnforced/* default */.A.locals : undefined);\n\n;// ./src/rdfFormsHelper.js\n\n\n\nconst baseUri = 'https://solidos.github.io/contacts-pane/src/ontology/'\n\nfunction renderForm (\n div,\n subject, // Represents the RDF that fills the form\n formSource, // The imported form Turtle source\n formName, // The name of the form file (e.g., 'socialMedia.ttl')\n store,\n dom,\n editableProfile,\n whichForm) {\n // --- Form resource setup ---\n const formUri = baseUri + formName // Full URI to the form file\n const exactForm = whichForm || 'this' // If there are more 'a ui:Form' elements in a form file\n const formThis = (0,external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.Namespace)(formUri + '#')(exactForm) // NamedNode for #this in the form\n\n loadDocument(store, formSource, formName, formUri)\n\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.appendForm(\n dom,\n div,\n {},\n subject,\n formThis,\n editableProfile,\n (ok, mes) => {\n if (!ok) external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, mes)\n }\n )\n} // renderForm\n\n// we need to load into the store some additional information about Social Media accounts\nfunction loadDocument (\n store,\n documentSource,\n documentName,\n documentURI\n) {\n const finalDocumentUri = documentURI || baseUri + documentName // Full URI to the file\n const document = (0,external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.sym)(finalDocumentUri) // rdflib NamedNode for the document\n\n if (!store.holds(undefined, undefined, undefined, document)) {\n // we are using the social media form because it contains the information we need\n // the form can be used for both use cases: create UI for edit and render UI for display\n (0,external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.parse)(documentSource, store, finalDocumentUri, 'text/turtle', () => null) // Load doc directly\n }\n}\n\n;// ./src/individual.js\n\n\n\n\n\n\n\n\n\n\n\nconst individual_ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\nconst individual_kb = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store\n\nconst formsName = 'individualAndOrganizationForm.ttl' // The name of the form file\nconst vcardName = 'vcard.ttl' // The name of the vcard file\n// Render Individual card\n\nasync function renderIndividual (dom, div, subject, dataBrowserContext) {\n // //////////////////// DRAG and Drop for mugshot image\n\n function complain (message) {\n console.log(message)\n div.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n\n /// ///////////////////////////\n const t = individual_kb.findTypeURIs(subject)\n const isOrganization = !!(t[individual_ns.vcard('Organization').uri] || t[individual_ns.schema('Organization').uri])\n const editable = individual_kb.updater.editable(subject.doc().uri, individual_kb)\n\n // We load the local form document\n loadDocument(individual_kb, individualAndOrganizationForm_namespaceObject, formsName)\n\n // We need to make sure VCARD ontology is loaded in the store\n const vcardOntUri = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns.vcard('Type').doc().uri // URI to VCARD\n loadDocument(individual_kb, vcard_namespaceObject, vcardName, vcardOntUri)\n\n try {\n await individual_kb.fetcher.load(subject.doc())\n } catch (err) {\n complain('Error: Failed to load profile card: ' + err)\n } // end of try catch on load\n\n div.classList.add('individualPane')\n\n external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.authn.checkUser() // kick off async operation @@@ use async version\n\n div.appendChild(renderMugshotGallery(dom, subject))\n\n const whichForm = isOrganization ? 'organizationForm' : 'individualForm'\n\n renderForm(div, subject, individualAndOrganizationForm_namespaceObject, formsName, external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store, dom, subject.doc(), whichForm)\n\n div.appendChild(await renderGroupMemberships(subject, dataBrowserContext))\n\n // Auto complete searches in a table\n // Prefer the fom below renderPublicIdControl\n /*\n if (isOrganization) {\n const publicDataTable = div.appendChild(dom.createElement('table'))\n async function publicDataSearchRow (name) {\n async function autoCompleteDone (object, _name) {\n right.innerHTML = ''\n right.appendchild(UI.widgets.personTR(dom, object))\n }\n const row = dom.createElement('tr')\n const left = row.appendChild(dom.createElement('td'))\n left.textContent = name\n const right = row.appendChild(dom.createElement('td'))\n right.appendChild(await renderAutoComplete(dom, subject, ns.owl('sameAs'), autoCompleteDone))\n return row\n }\n publicDataTable.appendChild(await publicDataSearchRow('dbpedia'))\n }\n*/\n // Allow to attach documents etc to the contact card\n\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.attachmentList(dom, subject, div, {\n modify: editable\n // promptIcon: UI.icons.iconBase + 'noun_681601.svg',\n // predicate: UI.ns.vcard('url') // @@@@@@@@@ ,--- no, the vcard ontology structure uses a bnode.\n })\n\n if (isOrganization) {\n div.appendChild(await renderPublicIdControl(subject, dataBrowserContext))\n } else {\n div.appendChild(await renderWebIdControl(subject, dataBrowserContext))\n }\n // div.appendChild(dom.createElement('hr'))\n} // renderIndividual\n\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/styles/toolsPane.css\nvar toolsPane = __webpack_require__(295);\n;// ./src/styles/toolsPane.css\n\n \n \n \n \n \n \n \n \n \n\nvar toolsPane_options = {};\n\ntoolsPane_options.styleTagTransform = (styleTagTransform_default());\ntoolsPane_options.setAttributes = (setAttributesWithoutAttributes_default());\ntoolsPane_options.insert = insertBySelector_default().bind(null, \"head\");\ntoolsPane_options.domAPI = (styleDomAPI_default());\ntoolsPane_options.insertStyleElement = (insertStyleElement_default());\n\nvar toolsPane_update = injectStylesIntoStyleTag_default()(toolsPane/* default */.A, toolsPane_options);\n\n\n\n\n /* harmony default export */ const styles_toolsPane = (toolsPane/* default */.A && toolsPane/* default */.A.locals ? toolsPane/* default */.A.locals : undefined);\n\n;// ./src/toolsPane.js\n// The tools pane is for managing and debugging and maintaining solid contacts databases\n//\n\n\n\n\n\n\n\nfunction toolsPane_toolsPane (\n selectAllGroups,\n selectedGroups,\n groupsMainTable,\n book,\n dataBrowserContext,\n me\n) {\n const dom = dataBrowserContext.dom\n const kb = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store\n const ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\n const VCARD = ns.vcard\n\n const pane = dom.createElement('div')\n const table = pane.appendChild(dom.createElement('table'))\n table.classList.add('toolsTable')\n const headerRow = table.appendChild(dom.createElement('tr'))\n headerRow.textContent = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(book) + ' - tools'\n headerRow.classList.add('toolsHeader')\n\n const statusRow = table.appendChild(dom.createElement('tr'))\n const statusBlock = statusRow.appendChild(dom.createElement('div'))\n statusBlock.classList.add('toolsStatusBlock')\n const MainRow = table.appendChild(dom.createElement('tr'))\n const box = MainRow.appendChild(dom.createElement('table'))\n table.appendChild(dom.createElement('tr')) // bottomRow\n\n const context = {\n target: book,\n me,\n noun: 'address book',\n div: pane,\n dom,\n statusRegion: statusBlock\n }\n\n function complain (message) {\n console.log(message)\n statusBlock.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n\n // Body of main pane function\n async function main () {\n box.appendChild(\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.aclControl.ACLControlBox5(\n book.dir(),\n dataBrowserContext,\n 'book',\n kb,\n function (ok, body) {\n if (!ok) box.innerHTML = 'ACL control box Failed: ' + body\n }\n )\n )\n\n //\n try {\n await external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.login.registrationControl(context, book, ns.vcard('AddressBook'))\n } catch (e) {\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.complain(context, 'registrationControl: ' + e)\n }\n console.log('Registration control finished.')\n\n // Output stats in line mode form\n const logSpace = MainRow.appendChild(dom.createElement('pre'))\n function log (message) {\n console.log(message)\n logSpace.textContent += message + '\\n'\n }\n\n function stats () {\n const totalCards = kb.each(undefined, VCARD('inAddressBook'), book).length\n log('' + totalCards + ' cards loaded. ')\n let groups = kb.each(book, VCARD('includesGroup'))\n const strings = new Set(groups.map(group => group.uri)) // remove dups\n groups = [...strings].map(uri => kb.sym(uri))\n log('' + groups.length + ' total groups. ')\n const gg = []\n for (const g in selectedGroups) {\n gg.push(g)\n }\n log('' + gg.length + ' selected groups. ')\n }\n\n async function loadIndexHandler (_event) {\n loadIndexButton.classList.add('toolsButton--loading')\n loadIndexButton.classList.remove('toolsButton--error', 'toolsButton--success')\n const nameEmailIndex = kb.any(book, ns.vcard('nameEmailIndex'))\n try {\n await kb.fetcher.load(nameEmailIndex)\n } catch (e) {\n loadIndexButton.classList.remove('toolsButton--loading')\n loadIndexButton.classList.add('toolsButton--error')\n log('Error: People index has NOT been loaded' + e + '\\n')\n }\n loadIndexButton.classList.remove('toolsButton--loading')\n loadIndexButton.classList.add('toolsButton--success')\n log(' People index has been loaded\\n')\n } // loadIndexHandler\n const loadIndexButton = pane.appendChild(dom.createElement('button'))\n loadIndexButton.textContent = 'Load main index'\n loadIndexButton.classList.add('toolsButton')\n loadIndexButton.addEventListener('click', loadIndexHandler)\n\n const statButton = pane.appendChild(dom.createElement('button'))\n statButton.textContent = 'Statistics'\n statButton.classList.add('toolsButton')\n statButton.addEventListener('click', stats)\n\n const checkAccessButton = pane.appendChild(dom.createElement('button'))\n checkAccessButton.textContent =\n 'Check individual card access of selected groups'\n checkAccessButton.classList.add('toolsButton')\n async function checkAcces (_event) {\n function doCard (card) {\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.acl.fixIndividualCardACL(card, log, function (ok, message) {\n if (ok) {\n log('Success for ' + external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(card))\n } else {\n log('Failure for ' + external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(card) + ': ' + message)\n }\n })\n }\n const gg = []\n for (const g in selectedGroups) {\n gg.push(g)\n }\n\n for (let i = 0; i < gg.length; i++) {\n const g = kb.sym(gg[i])\n const a = groupMembers(kb, g)\n log(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(g) + ': ' + a.length + ' members')\n for (let j = 0; j < a.length; j++) {\n const card = a[j]\n log(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(card))\n doCard(card)\n }\n }\n }\n checkAccessButton.addEventListener('click', checkAcces)\n\n // ///////////////////////////////////////////////////////////////////////////\n //\n // DUPLICATES CHECK\n const checkDuplicates = pane.appendChild(dom.createElement('button'))\n checkDuplicates.textContent = 'Find duplicate cards'\n checkDuplicates.classList.add('toolsButton')\n checkDuplicates.addEventListener('click', function (_event) {\n const stats = {} // global god context\n\n stats.book = book\n stats.nameEmailIndex = kb.any(book, ns.vcard('nameEmailIndex'))\n log('Loading name index...')\n\n external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store.fetcher.nowOrWhenFetched(\n stats.nameEmailIndex,\n undefined,\n function (_ok, _message) {\n log('Loaded name index.')\n\n stats.cards = []\n stats.duplicates = []\n stats.definitive = []\n stats.nameless = []\n\n stats.exactDuplicates = []\n stats.nameOnlyDuplicates = []\n\n stats.uniquesSet = []\n stats.groupProblems = []\n\n // Erase one card and all its files -> (err)\n //\n /*\n function eraseOne (card) {\n return new Promise(function (resolve, reject) {\n function removeFromMainIndex () {\n var indexBit = kb.connectedStatements(card, stats.nameEmailIndex)\n log('Bits of the name index file:' + indexBit)\n log('Patching main index file...')\n kb.updater.update(indexBit, [], function (uri, ok, body) {\n if (ok) {\n log('Success')\n resolve(null)\n } else {\n log('Error patching index file! ' + body)\n reject('Error patching index file! ' + body)\n }\n })\n }\n var filesToDelete = [ card.doc() ]\n var photos = kb.each(card, ns.vcard('hasPhoto')) // could be > 1\n if (photos.length) {\n filesToDelete = filesToDelete.concat(photos)\n }\n filesToDelete.push(card.dir()) // the folder last\n log('Files to delete: ' + filesToDelete)\n if (!confirm('DELETE card ' + card.dir() + ' for \"' + kb.any(card, VCARD('fn')) + '\", with ' + kb.each(card).length + 'statements?')) {\n return resolve('Cancelled by user')\n }\n\n function deleteNextFile () {\n var resource = filesToDelete.shift()\n if (!resource) {\n log('All deleted')\n removeFromMainIndex()\n resolve()\n }\n log('Deleting ... ' + resource)\n kb.fetcher.delete(resource)\n .then(function () {\n log('Deleted ok: ' + resource)\n deleteNextFile()\n })\n .catch(function (e) {\n var err = '*** ERROR deleting ' + resource + ': ' + e\n log(err)\n if (confirm('Patch out index file for card ' + card.dir() + ' EVEN THOUGH card DELETE errors?')) {\n removeFromMainIndex()\n } else {\n reject(err)\n }\n })\n }\n deleteNextFile()\n }) // Promise\n } // erase one\n */\n // Check actual records to see which are exact matches - slow\n stats.nameDupLog = kb.sym(book.dir().uri + 'dedup-nameDupLog.ttl')\n stats.exactDupLog = kb.sym(book.dir().uri + 'dedup-exactDupLog.ttl')\n /*\n function checkOne (card) {\n return new Promise(function (resolve, reject) {\n var name = kb.anyValue(card, ns.vcard('fn'))\n var other = stats.definitive[name]\n kb.fetcher.load([card, other]).then(function (xhrs) {\n var exclude = {}\n exclude[ns.vcard('hasUID').uri] = true\n exclude[ns.dc('created').uri] = true\n exclude[ns.dc('modified').uri] = true\n function filtered (x) {\n return kb.statementsMatching(null, null, null, x.doc()).filter(function (st) {\n return !exclude[st.predicate.uri]\n })\n }\n var desc = filtered(card)\n var desc2 = filtered(other)\n // var desc = connectedStatements(card, card.doc(), exclude)\n // var desc2 = connectedStatements(other, other.doc(), exclude)\n if (desc.length !== desc2.length) {\n log('CARDS to NOT match lengths ')\n stats.nameOnlyDuplicates.push(card)\n return resolve(false)\n }\n if (!desc.length) {\n log('@@@@@@ Zero length ')\n stats.nameOnlyDuplicates.push(card)\n return resolve(false)\n }\n // //////// Compare the two\n // Cheat: serialize and compare\n // var cardText = $rdf.serialize(card.doc(), kb, card.doc().uri, 'text/turtle')\n // var otherText = $rdf.serialize(other.doc(), kb, other.doc().uri, 'text/turtle')\n var cardText = (new $rdf.Serializer(kb)).setBase(card.doc().uri).statementsToN3(desc)\n var otherText = (new $rdf.Serializer(kb)).setBase(other.doc().uri).statementsToN3(desc2)\n //\n // log('Name: ' + name + ', statements: ' + desc.length)\n // log('___________________________________________')\n // log('KEEPING: ' + other.doc() + '\\n' + cardText)\n // log('___________________________________________')\n // log('DELETING: '+ card.doc() + '\\n' + otherText)\n // log('___________________________________________')\n //\n if (cardText !== otherText) {\n log('Texts differ')\n stats.nameOnlyDuplicates.push(card)\n return resolve(false)\n }\n var cardGroups = kb.each(null, ns.vcard('hasMember'), card)\n var otherGroups = kb.each(null, ns.vcard('hasMember'), other)\n for (var j = 0; j < cardGroups.length; j++) {\n var found = false\n for (var k = 0; k < otherGroups.length; k++) {\n if (otherGroups[k].sameTerm(cardGroups[j])) { found = true }\n }\n if (!found) {\n log('This one groups: ' + cardGroups)\n log('Other one groups: ' + otherGroups)\n log('Cant delete this one because it has a group, ' + cardGroups[j] + ', which the other does not.')\n stats.nameOnlyDuplicates.push(card)\n return resolve(false)\n }\n }\n console.log('Group check done -- exact duplicate: ' + card)\n stats.exactDuplicates.push(card)\n resolve(true)\n }).catch(function (e) {\n log('Cant load a card! ' + [card, other] + ': ' + e)\n stats.nameOnlyDuplicates.push(card)\n resolve(false)\n // if (confirm('Patch out index file for card ' + card.dir() + ' EVEN THOUGH card READ errors?')){\n // removeFromMainIndex()\n // }\n })\n })\n } // checkOne\n */\n stats.nameOnlyErrors = []\n stats.nameLessZeroData = []\n stats.nameLessIndex = []\n stats.namelessUniques = []\n stats.nameOnlyDuplicatesGroupDiff = []\n\n function checkOneNameless (card) {\n return new Promise(function (resolve) {\n kb.fetcher\n .load(card)\n .then(function (_xhr) {\n log(' Nameless check ' + card)\n const exclude = {}\n exclude[ns.vcard('hasUID').uri] = true\n exclude[ns.dc('created').uri] = true\n exclude[ns.dc('modified').uri] = true\n function filtered (x) {\n return kb\n .statementsMatching(null, null, null, x.doc())\n .filter(function (st) {\n return !exclude[st.predicate.uri]\n })\n }\n\n const desc = filtered(card)\n // var desc = connectedStatements(card, card.doc(), exclude)\n // var desc2 = connectedStatements(other, other.doc(), exclude)\n if (!desc.length) {\n log(' Zero length ' + card)\n stats.nameLessZeroData.push(card)\n return resolve(false)\n }\n // Compare the two\n // Cheat: serialize and compare\n // var cardText = $rdf.serialize(card.doc(), kb, card.doc().uri, 'text/turtle')\n // var otherText = $rdf.serialize(other.doc(), kb, other.doc().uri, 'text/turtle')\n const cardText = new external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.Serializer(kb)\n .setBase(card.doc().uri)\n .statementsToN3(desc)\n const other = stats.nameLessIndex[cardText]\n if (other) {\n log(' Matches with ' + other)\n // alain not sure it works we may need to concat with 'sameAs' group.doc (.map(st => st.why))\n const cardGroups = kb.each(null, ns.vcard('hasMember'), card)\n const otherGroups = kb.each(null, ns.vcard('hasMember'), other)\n for (let j = 0; j < cardGroups.length; j++) {\n let found = false\n for (let k = 0; k < otherGroups.length; k++) {\n if (otherGroups[k].sameTerm(cardGroups[j])) found = true\n }\n if (!found) {\n log('This one groups: ' + cardGroups)\n log('Other one groups: ' + otherGroups)\n log(\n 'Cant skip this one because it has a group, ' +\n cardGroups[j] +\n ', which the other does not.'\n )\n stats.nameOnlyDuplicatesGroupDiff.push(card)\n return resolve(false)\n }\n }\n console.log('Group check done -- exact duplicate: ' + card)\n } else {\n log('First nameless like: ' + card.doc())\n log('___________________________________________')\n log(cardText)\n log('___________________________________________')\n stats.nameLessIndex[cardText] = card\n stats.namelessUniques.push(card)\n }\n resolve(true)\n })\n .catch(function (e) {\n log('Cant load a nameless card!: ' + e)\n stats.nameOnlyErrors.push(card)\n resolve(false)\n })\n })\n } // checkOneNameless\n\n function checkAllNameless () {\n stats.namelessToCheck =\n stats.namelessToCheck || stats.nameless.slice()\n log('Nameless check left: ' + stats.namelessToCheck.length)\n return new Promise(function (resolve) {\n const x = stats.namelessToCheck.shift()\n if (!x) {\n log('namelessUniques: ' + stats.namelessUniques.length)\n log('namelessUniques: ' + stats.namelessUniques)\n if (stats.namelessUniques.length > 0 &&\n confirm(\n 'Add all ' +\n stats.namelessUniques.length +\n ' nameless cards to the rescued set?'\n )\n ) {\n stats.uniques = stats.uniques.concat(stats.namelessUniques)\n for (let k = 0; k < stats.namelessUniques.length; k++) {\n stats.uniqueSet[stats.namelessUniques[k].uri] = true\n }\n }\n return resolve(true)\n }\n checkOneNameless(x).then(function (exact) {\n log(' Nameless check returns ' + exact)\n checkAllNameless() // loop\n })\n })\n }\n\n function checkGroupMembers () {\n return new Promise(function (resolve) {\n // var inUniques = 0\n log('Groups loaded')\n for (let i = 0; i < stats.uniques.length; i++) {\n stats.uniquesSet[stats.uniques[i].uri] = true\n }\n stats.groupMembers = []\n kb.each(null, ns.vcard('hasMember'))\n .forEach(group => { stats.groupMembers = stats.groupMembers.concat(groupMembers(kb, group)) })\n log(' Naive group members ' + stats.groupMembers.length)\n stats.groupMemberSet = []\n for (let j = 0; j < stats.groupMembers.length; j++) {\n stats.groupMemberSet[stats.groupMembers[j].uri] =\n stats.groupMembers[j]\n }\n stats.groupMembers2 = []\n for (const g in stats.groupMemberSet) {\n stats.groupMembers2.push(stats.groupMemberSet[g])\n }\n log(' Compact group members ' + stats.groupMembers2.length)\n\n if (\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.keepThisCodeForLaterButDisableFerossConstantConditionPolice\n ) {\n // Don't inspect as seems groups membership is complete\n for (let i = 0; i < stats.groupMembers.length; i++) {\n const card = stats.groupMembers[i]\n if (stats.uniquesSet[card.uri]) {\n // inUniques += 1\n } else {\n log(' Not in uniques: ' + card)\n stats.groupProblems.push(card)\n if (stats.duplicateSet[card.uri]) {\n log(' ** IN duplicates alas:' + card)\n } else {\n log(' **** WTF?')\n }\n }\n }\n log('Problem cards: ' + stats.groupProblems.length)\n } // if\n resolve(true)\n })\n } // checkGroupMembers\n\n function scanForDuplicates () {\n return new Promise(function (resolve) {\n stats.cards = kb.each(undefined, VCARD('inAddressBook'), stats.book)\n log('' + stats.cards.length + ' total cards')\n\n let c, card, name\n for (c = 0; c < stats.cards.length; c++) {\n card = stats.cards[c]\n name = kb.anyValue(card, ns.vcard('fn'))\n if (!name) {\n stats.nameless.push(card)\n continue\n }\n if (stats.definitive[name] === card) {\n // pass\n } else if (stats.definitive[name]) {\n const n = stats.duplicates.length\n if (n < 100 || (n < 1000 && n % 10 === 0) || n % 100 === 0) {\n // log('' + n + ') Possible duplicate ' + card + ' of: ' + definitive[name])\n }\n stats.duplicates.push(card)\n } else {\n stats.definitive[name] = card\n }\n }\n\n stats.duplicateSet = []\n for (let i = 0; i < stats.duplicates.length; i++) {\n stats.duplicateSet[stats.duplicates[i].uri] = stats.duplicates[i]\n }\n stats.namelessSet = []\n for (let i = 0; i < stats.nameless.length; i++) {\n stats.namelessSet[stats.nameless[i].uri] = stats.nameless[i]\n }\n stats.uniques = []\n stats.uniqueSet = []\n for (let i = 0; i < stats.cards.length; i++) {\n const uri = stats.cards[i].uri\n if (!stats.duplicateSet[uri] && !stats.namelessSet[uri]) {\n stats.uniques.push(stats.cards[i])\n stats.uniqueSet[uri] = stats.cards[i]\n }\n }\n log('Uniques: ' + stats.uniques.length)\n\n log('' + stats.nameless.length + ' nameless cards.')\n log(\n '' +\n stats.duplicates.length +\n ' name-duplicate cards, leaving ' +\n (stats.cards.length - stats.duplicates.length)\n )\n resolve(true)\n })\n }\n\n // Save a new clean version\n function saveCleanPeople () {\n let cleanPeople\n\n return Promise.resolve()\n .then(() => {\n cleanPeople = kb.sym(stats.book.dir().uri + 'clean-people.ttl')\n let sts = []\n for (let i = 0; i < stats.uniques.length; i++) {\n sts = sts.concat(\n kb.connectedStatements(stats.uniques[i], stats.nameEmailIndex)\n )\n }\n const sz = new external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.Serializer(kb).setBase(stats.nameEmailIndex.uri)\n log('Serializing index of uniques...')\n const data = sz.statementsToN3(sts)\n\n return kb.fetcher.webOperation('PUT', cleanPeople, {\n data,\n contentType: 'text/turtle'\n })\n })\n .then(function () {\n log('Done uniques log ' + cleanPeople)\n return true\n })\n .catch(function (e) {\n log('Error saving uniques: ' + e)\n })\n }\n\n function saveCleanGroup (g) {\n let cleanGroup\n\n return Promise.resolve()\n .then(() => {\n const s = g.uri.replace('/Group/', '/NewGroup/')\n cleanGroup = kb.sym(s)\n let sts = []\n for (let i = 0; i < stats.uniques.length; i++) {\n sts = sts.concat(\n kb.connectedStatements(stats.uniques[i], g.doc())\n )\n }\n const sz = new external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.Serializer(kb).setBase(g.uri)\n log(' Regenerating group of uniques...' + cleanGroup)\n const data = sz.statementsToN3(sts)\n\n return kb.fetcher.webOperation('PUT', cleanGroup, {\n data,\n contentType: 'text/turtle'\n })\n })\n .then(() => {\n log(' Done uniques group ' + cleanGroup)\n return true\n })\n .catch(e => {\n log('Error saving : ' + e)\n })\n }\n\n function saveAllGroups () {\n log('Saving ALL GROUPS')\n return Promise.all(stats.groupObjects.map(saveCleanGroup))\n }\n\n const getAndSortGroups = function () {\n let groups = []\n if (stats.book) {\n const books = [stats.book]\n books.forEach(function (book) {\n const gs = book ? kb.each(book, ns.vcard('includesGroup')) : []\n const gs2 = gs.map(function (g) {\n return [book, kb.any(g, ns.vcard('fn')), g]\n })\n groups = groups.concat(gs2)\n })\n groups.sort()\n }\n return groups\n }\n const groups = getAndSortGroups() // Needed?\n\n stats.groupObjects = groups.map(gstr => gstr[2])\n log('Loading ' + stats.groupObjects.length + ' groups... ')\n kb.fetcher\n .load(stats.groupObjects)\n .then(scanForDuplicates)\n .then(checkGroupMembers)\n .then(checkAllNameless)\n .then(() => {\n return new Promise(function (resolve, reject) {\n if (confirm('Write new clean versions?')) {\n resolve(true)\n } else {\n reject(new Error('User cancelled writing clean versions'))\n }\n })\n })\n .then(saveCleanPeople)\n .then(saveAllGroups)\n .then(function () {\n log('Done!')\n })\n }\n )\n })\n\n async function fixGroupless (book) {\n const groupless = await getGroupless(book)\n if (groupless.length === 0) {\n log('No groupless cards found.')\n return\n }\n const groupOfUngrouped = await saveNewGroup(book, 'ZSortThese')\n if (confirm(`Add the ${groupless.length} cards without groups to a ZSortThese group?`)) {\n for (const person of groupless) {\n log(' adding ' + person)\n await addPersonToGroup(person, groupOfUngrouped)\n }\n }\n log('People moved to group.')\n }\n\n async function getGroupless (book) {\n const groupIndex = kb.any(book, ns.vcard('groupIndex'))\n const nameEmailIndex = kb.any(book, ns.vcard('nameEmailIndex'))\n try {\n await kb.fetcher.load([nameEmailIndex, groupIndex])\n const groups = kb.each(book, ns.vcard('includesGroup'))\n await kb.fetcher.load(groups)\n } catch (e) {\n complain('Error loading stuff:' + e)\n }\n\n const reverseIndex = {}\n const groupless = []\n let groups = kb.each(book, VCARD('includesGroup'))\n const strings = new Set(groups.map(group => group.uri)) // remove dups\n groups = [...strings].map(uri => kb.sym(uri))\n log('' + groups.length + ' total groups. ')\n\n for (let i = 0; i < groups.length; i++) {\n const g = groups[i]\n const a = groupMembers(kb, g)\n\n log(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(g) + ': ' + a.length + ' members')\n for (let j = 0; j < a.length; j++) {\n kb.allAliases(a[j]).forEach(function (y) {\n reverseIndex[y.uri] = g\n })\n }\n }\n\n const cards = kb.each(undefined, VCARD('inAddressBook'), book)\n log('' + cards.length + ' total cards')\n for (let c = 0; c < cards.length; c++) {\n if (!reverseIndex[cards[c].uri]) {\n groupless.push(cards[c])\n log(' groupless ' + external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(cards[c]))\n }\n }\n log('' + groupless.length + ' groupless cards.')\n return groupless\n }\n\n const checkGroupless = pane.appendChild(dom.createElement('button'))\n checkGroupless.classList.add('toolsButton')\n checkGroupless.textContent = 'Find individuals with no group'\n checkGroupless.addEventListener('click', function (_event) {\n log('Loading groups...')\n selectAllGroups(selectedGroups, groupsMainTable, async function (ok, message) {\n if (!ok) {\n log('Load all groups: failed: ' + message)\n return\n }\n\n const nameEmailIndex = kb.any(book, ns.vcard('nameEmailIndex'))\n try {\n await kb.fetcher.load(nameEmailIndex)\n } catch (e) {\n complain(e)\n }\n log('Loaded groups and name index.')\n getGroupless(book)\n log('Groupless list finished..')\n }) // select all groups then\n })\n\n const fixGrouplessButton = pane.appendChild(dom.createElement('button'))\n fixGrouplessButton.classList.add('toolsButton')\n fixGrouplessButton.textContent = 'Put all individuals with no group in a new group'\n fixGrouplessButton.addEventListener('click', _event => fixGroupless(book))\n\n async function fixToOldDataModel (book) {\n async function updateToOldDataModel (groups) {\n let ds = []\n let ins = []\n groups.forEach(group => {\n let vcardOrWebids = kb.statementsMatching(null, ns.owl('sameAs'), null, group.doc()).map(st => st.subject)\n const strings = new Set(vcardOrWebids.map(contact => contact.uri)) // remove dups\n vcardOrWebids = [...strings].map(uri => kb.sym(uri))\n vcardOrWebids.forEach(item => {\n if (!kb.each(item, ns.vcard('fn'), null, group.doc()).length) {\n // delete item this is a new data model, item is a webid not a card.\n ds = ds.concat(kb\n .statementsMatching(item, ns.owl('sameAs'), null, group.doc())\n .concat(kb.statementsMatching(undefined, undefined, item, group.doc())))\n // add webid card to group\n const cards = kb.each(item, ns.owl('sameAs'), null, group.doc())\n cards.forEach(card => {\n ins = ins.concat(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(card, ns.owl('sameAs'), item, group.doc()))\n .concat(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, ns.vcard('hasMember'), card, group.doc()))\n })\n }\n })\n })\n if (ds.length && confirm('Groups can be updated to old data model ?')) {\n await kb.updater.updateMany(ds, ins)\n alert('Update done')\n } else { if (!ds.length) alert('Nothing to update.\\nAll Groups already use the old data model.') }\n }\n let groups = kb.each(book, VCARD('includesGroup'))\n const strings = new Set(groups.map(group => group.uri)) // remove dups\n groups = [...strings].map(uri => kb.sym(uri))\n updateToOldDataModel(groups)\n }\n\n const fixToOldDataModelButton = pane.appendChild(dom.createElement('button'))\n fixToOldDataModelButton.classList.add('toolsButton')\n fixToOldDataModelButton.textContent = 'Revert groups to old data model'\n fixToOldDataModelButton.addEventListener('click', _event => fixToOldDataModel(book))\n } // main\n main()\n return pane\n} // toolsPane\n\n// ends\n\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/styles/contactsPane.css\nvar contactsPane = __webpack_require__(903);\n;// ./src/styles/contactsPane.css\n\n \n \n \n \n \n \n \n \n \n\nvar contactsPane_options = {};\n\ncontactsPane_options.styleTagTransform = (styleTagTransform_default());\ncontactsPane_options.setAttributes = (setAttributesWithoutAttributes_default());\ncontactsPane_options.insert = insertBySelector_default().bind(null, \"head\");\ncontactsPane_options.domAPI = (styleDomAPI_default());\ncontactsPane_options.insertStyleElement = (insertStyleElement_default());\n\nvar contactsPane_update = injectStylesIntoStyleTag_default()(contactsPane/* default */.A, contactsPane_options);\n\n\n\n\n /* harmony default export */ const styles_contactsPane = (contactsPane/* default */.A && contactsPane/* default */.A.locals ? contactsPane/* default */.A.locals : undefined);\n\n;// ./src/contactsPane.js\n/* Contact AddressBook Pane\n**\n** This outline pane allows a user to interact with a contact,\nto change its state according to an ontology, comment on it, etc.\n**\n** See also things like\n** http://www.w3.org/TR/vcard-rdf/\n** http://tools.ietf.org/html/rfc6350\n** http://www.iana.org/assignments/vcard-elements/vcard-elements.xhtml\n**\n*/\n\n\n\n\n\n\n\n\n\n\nconst contactsPane_ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\nconst contactsPane_utils = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils\n\n/* harmony default export */ const src_contactsPane = ({\n icon: external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.icons.iconBase + 'noun_99101.svg', // changed from embedded icon 2016-05-01\n\n name: 'contact',\n\n // Does the subject deserve a contact pane?\n label: function (subject, context) {\n const t = context.session.store.findTypeURIs(subject)\n if (t[contactsPane_ns.vcard('Individual').uri]) return 'Contact'\n if (t[contactsPane_ns.vcard('Organization').uri]) return 'Contact'\n if (t[contactsPane_ns.foaf('Person').uri]) return 'Person'\n if (t[contactsPane_ns.schema('Person').uri]) return 'Person'\n if (t[contactsPane_ns.vcard('Group').uri]) return 'Group'\n if (t[contactsPane_ns.vcard('AddressBook').uri]) return 'Address book'\n return null // No, under other circumstances\n },\n\n mintClass: external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns.vcard('AddressBook'),\n\n mintNew: mintNewAddressBook, // Make a new address book\n\n // Render the pane\n render: function (subject, dataBrowserContext, paneOptions = {}) {\n const thisPane = this\n\n // stick functions here\n function complain (message) {\n // console.log('contactsPane: ' + message)\n div.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n function complainIfBad (ok, body) {\n if (!ok) {\n complain('Error: ' + body)\n }\n }\n\n // Reproduction: Spawn a new instance of this app\n function newAddressBookButton (thisAddressBook) {\n return external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.login.newAppInstance(\n dom,\n { noun: 'address book', appPathSegment: 'contactorator.timbl.com' },\n function (ws, newBase) {\n thisPane.mintNew(thisAddressBook, newBase, {\n me,\n div,\n dom\n })\n }\n )\n } // newAddressBookButton\n\n const dom = dataBrowserContext.dom\n const kb = dataBrowserContext.session.store\n const div = dom.createElement('div')\n const me = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.authn.currentUser() // If already logged on\n\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.aclControl.preventBrowserDropEvents(dom) // protect drag and drop\n\n div.setAttribute('class', 'contactPane')\n\n asyncRender().then(\n () => console.log('contactsPane Rendered ' + subject),\n err => complain('' + err))\n return div\n\n // Async part of render. Maybe API will later allow render to be async\n async function asyncRender () {\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.aclControl.preventBrowserDropEvents(dom)\n\n const t = kb.findTypeURIs(subject)\n\n let me = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.authn.currentUser()\n\n const context = {\n target: subject,\n me,\n noun: 'address book',\n div,\n dom\n } // missing: statusRegion\n\n // Render a 3-column browser for an address book or a group\n function renderThreeColumnBrowser (books, context, options) {\n kb.fetcher\n .load(books)\n .then(function (_xhr) {\n renderThreeColumnBrowser2(books, context, options)\n })\n .catch(function (err) {\n complain(err)\n })\n }\n function renderThreeColumnBrowser2 (books, context, options) {\n const classLabel = contactsPane_utils.label(contactsPane_ns.vcard('AddressBook'))\n // const IndividualClassLabel = utils.label(ns.vcard('Individual'))\n\n let book = books[0] // for now\n const groupIndex = kb.any(book, contactsPane_ns.vcard('groupIndex'))\n let selectedGroups = {}\n let selectedPeople = {} // Actually prob max 1\n\n const target = options.foreignGroup || book\n\n let title =\n kb.any(target, contactsPane_ns.dc('title')) || kb.any(target, contactsPane_ns.vcard('fn'))\n if (paneOptions.solo && title && typeof document !== 'undefined') {\n document.title = title.value // @@ only when the outermmost pane\n }\n title = title ? title.value : classLabel\n\n // The book could be the main subject, or linked from a group we are dealing with\n function findBookFromGroups (book) {\n if (book) {\n return book\n }\n let g\n for (const gu in selectedGroups) {\n g = kb.sym(gu)\n const b = kb.any(undefined, contactsPane_ns.vcard('includesGroup'), g)\n if (b) return b\n }\n throw new Error(\n 'findBookFromGroups: Cant find address book which this group is part of'\n )\n }\n\n // Write a new contact to the web\n\n // organization-name is a hack for Mac records with no FN which is mandatory.\n function nameFor (x) {\n const name =\n kb.any(x, contactsPane_ns.vcard('fn')) ||\n kb.any(x, contactsPane_ns.foaf('name')) ||\n kb.any(x, contactsPane_ns.vcard('organization-name'))\n return name ? name.value : '???'\n }\n\n function filterName (name) {\n const filter = searchInput.value.trim().toLowerCase()\n if (filter.length === 0) return true\n const parts = filter.split(' ') // Each name part must be somewhere\n for (let j = 0; j < parts.length; j++) {\n const word = parts[j]\n if (name.toLowerCase().indexOf(word) < 0) return false\n }\n return true\n }\n\n function selectPerson (person) {\n cardMain.innerHTML = 'loading...'\n selectedPeople = {}\n selectedPeople[person.uri] = true\n refreshFilteredPeople() // Color to remember which one you picked\n const local = book ? localNode(person) : person\n kb.fetcher.nowOrWhenFetched(local.doc(), undefined, function (\n ok,\n message\n ) {\n cardMain.innerHTML = ''\n if (!ok) {\n return complainIfBad(\n ok,\n 'Can\\'t load card: ' + local + ': ' + message\n )\n }\n // console.log(\"Loaded card \" + local + '\\n')\n cardMain.appendChild(renderPane(dom, local, 'contact'))\n cardMain.appendChild(dom.createElement('br'))\n\n cardMain.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.linkIcon(dom, local)) // hoverHide\n\n // Add in a delete button to delete from AB\n const deleteButton = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.deleteButtonWithCheck(\n dom,\n cardMain,\n 'contact',\n async function () {\n const container = person.dir() // ASSUMPTION THAT CARD IS IN ITS OWN DIRECTORY\n // alert('Container to delete is ' + container)\n const pname = kb.any(person, contactsPane_ns.vcard('fn'))\n if (\n confirm(\n 'Delete contact ' + pname + ' completely?? ' + container\n )\n ) {\n console.log('Deleting a contact ' + pname)\n await loadAllGroups() // need to wait for all groups to be loaded in case they have a link to this person\n // load people.ttl\n const nameEmailIndex = kb.any(book, contactsPane_ns.vcard('nameEmailIndex'))\n await kb.fetcher.load(nameEmailIndex)\n\n // - delete person's WebID's in each Group\n // - delete the references to it in group files and save them back\n // - delete the reference in people.ttl and save it back\n\n // find all Groups\n const groups = groupMembership(person)\n let removeFromGroups = []\n // find person WebID's\n groups.forEach(group => {\n const webids = contactsPane_getSameAs(kb, person, group.doc())\n // for each check in each Group that it is not used by an other person then delete\n webids.forEach(webid => {\n if (contactsPane_getSameAs(kb, webid, group.doc()).length === 1) {\n removeFromGroups = removeFromGroups.concat(kb.statementsMatching(group, contactsPane_ns.vcard('hasMember'), webid, group.doc()))\n }\n })\n })\n // console.log(removeFromGroups)\n await kb.updater.updateMany(removeFromGroups)\n await deleteThingAndDoc(person)\n await deleteRecursive(kb, container)\n refreshNames() // \"Doesn't work\" -- maybe does now with waiting for async\n cardMain.innerHTML = 'Contact Data Deleted.'\n }\n }\n )\n deleteButton.classList.add('deleteButton')\n })\n }\n\n function refreshFilteredPeople (active) {\n let count = 0\n let lastRow = null\n for (let i = 0; i < peopleMainTable.children.length; i++) {\n const row = peopleMainTable.children[i]\n const matches = filterName(nameFor(row.subject))\n if (matches) {\n count++\n lastRow = row\n }\n row.classList.toggle('selected', matches && !!selectedPeople[row.subject.uri])\n row.classList.toggle('hidden', !matches)\n }\n if (count === 1 && active) {\n const unique = lastRow.subject\n selectPerson(unique)\n }\n }\n\n function selectAllGroups (\n selectedGroups,\n groupsMainTable,\n callbackFunction\n ) {\n function fetchGroupAndSelct (group, groupRow) {\n groupRow.classList.add('group-loading')\n kb.fetcher.nowOrWhenFetched(group.doc(), undefined, function (\n ok,\n message\n ) {\n if (!ok) {\n const msg = 'Can\\'t load group file: ' + group + ': ' + message\n badness.push(msg)\n return complainIfBad(ok, msg)\n }\n groupRow.classList.remove('group-loading')\n groupRow.classList.add('selected')\n selectedGroups[group.uri] = true\n refreshGroupsSelected()\n refreshNames() // @@ every time??\n todo -= 1\n if (!todo) {\n if (callbackFunction) { callbackFunction(badness.length === 0, badness) }\n }\n })\n }\n let todo = groupsMainTable.children.length\n var badness = [] /* eslint-disable-line no-var */\n for (let k = 0; k < groupsMainTable.children.length; k++) {\n const groupRow = groupsMainTable.children[k]\n const group = groupRow.subject\n fetchGroupAndSelct(group, groupRow)\n } // for each row\n }\n\n async function loadAllGroups () {\n await kb.fetcher.load(groupIndex)\n const gs = book ? kb.each(book, contactsPane_ns.vcard('includesGroup'), null, groupIndex) : []\n await kb.fetcher.load(gs)\n return gs\n }\n\n function groupsInOrder () {\n let sortMe = []\n if (options.foreignGroup) {\n sortMe.push([\n '',\n kb.any(options.foreignGroup, contactsPane_ns.vcard('fn')),\n options.foreignGroup\n ])\n }\n if (book) {\n books.forEach(function (book) {\n const gs = book ? kb.each(book, contactsPane_ns.vcard('includesGroup'), null, groupIndex) : []\n const gs2 = gs.map(function (g) {\n return [book, kb.any(g, contactsPane_ns.vcard('fn')), g]\n })\n sortMe = sortMe.concat(gs2)\n })\n sortMe.sort()\n }\n return sortMe.map(tuple => tuple[2])\n }\n\n function renderPane (dom, subject, paneName) {\n const p = dataBrowserContext.session.paneRegistry.byName(paneName)\n const d = p.render(subject, dataBrowserContext)\n d.classList.add('renderPane')\n return d\n }\n\n function compareForSort (self, other) {\n let s = nameFor(self)\n let o = nameFor(other)\n if (s && o) {\n s = s.toLowerCase()\n o = o.toLowerCase()\n if (s > o) return 1\n if (s < o) return -1\n }\n if (self.uri > other.uri) return 1\n if (self.uri < other.uri) return -1\n return 0\n }\n\n // In a LDP work, deletes the whole document describing a thing\n // plus patch out ALL mentiosn of it! Use with care!\n // beware of other data picked up from other places being smushed\n // together and then deleted.\n\n async function deleteThingAndDoc (x) {\n console.log('deleteThingAndDoc: ' + x)\n const ds = kb\n .statementsMatching(x)\n .concat(kb.statementsMatching(undefined, undefined, x))\n try {\n await kb.updater.updateMany(ds)\n console.log('Deleting resoure ' + x.doc())\n await kb.fetcher.delete(x.doc())\n console.log('Delete thing ' + x + ': complete.')\n } catch (err) {\n complain('Error deleting thing ' + x + ': ' + err)\n }\n }\n\n // For deleting an addressbook sub-folder eg person - use with care!\n // @@ move to solid-logic\n function deleteRecursive (kb, folder) {\n return new Promise(function (resolve) {\n kb.fetcher.load(folder).then(function () {\n const promises = kb.each(folder, contactsPane_ns.ldp('contains')).map(file => {\n if (kb.holds(file, contactsPane_ns.rdf('type'), contactsPane_ns.ldp('BasicContainer'))) {\n return deleteRecursive(kb, file)\n } else {\n console.log('deleteRecirsive file: ' + file)\n if (!confirm(' Really DELETE File ' + file)) {\n throw new Error('User aborted delete file')\n }\n return kb.fetcher.webOperation('DELETE', file.uri)\n }\n })\n console.log('deleteRecirsive folder: ' + folder)\n if (!confirm(' Really DELETE folder ' + folder)) {\n throw new Error('User aborted delete file')\n }\n promises.push(kb.fetcher.webOperation('DELETE', folder.uri))\n Promise.all(promises).then(_res => {\n resolve()\n })\n })\n })\n }\n\n function localNode (person, _div) {\n const aliases = kb.allAliases(person)\n const prefix = book.dir().uri\n for (let i = 0; i < aliases.length; i++) {\n if (aliases[i].uri.slice(0, prefix.length) === prefix) {\n return aliases[i]\n }\n }\n throw new Error('No local URI for ' + person)\n }\n\n /** Refresh the list of names\n */\n function refreshNames () {\n function setPersonListener (personRow, person) {\n personRow.addEventListener('click', function (event) {\n event.preventDefault()\n selectPerson(person)\n })\n }\n\n let cards = []\n const groups = Object.keys(selectedGroups).map(groupURI => kb.sym(groupURI))\n groups.forEach(group => {\n if (selectedGroups[group.value]) {\n cards = cards.concat(groupMembers(kb, group))\n }\n })\n cards.sort(compareForSort) // @@ sort by name not UID later\n for (let k = 0; k < cards.length - 1;) {\n if (cards[k].uri === cards[k + 1].uri) {\n cards.splice(k, 1) // Eliminate duplicates from more than one group\n } else {\n k++\n }\n }\n\n peopleHeader.textContent = 'Contact name'\n\n function renderNameInGroupList (person) {\n const personRow = dom.createElement('tr')\n personRow.setAttribute('role', 'listitem')\n personRow.setAttribute('tabindex', '0')\n personRow.setAttribute('aria-label', nameFor(person))\n personRow.classList.add('personRow')\n personRow.subject = person\n const personLeft = personRow.appendChild(dom.createElement('td'))\n personLeft.classList.add('dataCell')\n // Visually hidden span for screen readers\n const srOnly = dom.createElement('span')\n srOnly.classList.add('visually-hidden')\n srOnly.textContent = 'Contact: '\n personLeft.appendChild(srOnly)\n personLeft.appendChild(dom.createTextNode(nameFor(person)))\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.makeDraggable(personRow, person)\n\n // Keyboard selection\n personRow.addEventListener('keydown', function (event) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n selectPerson(person)\n }\n })\n setPersonListener(personRow, person)\n return personRow\n }\n\n contactsPane_utils.syncTableToArrayReOrdered(peopleMainTable, cards, renderNameInGroupList)\n refreshFilteredPeople()\n } // refreshNames\n\n function refreshThingsSelected (table, selectionArray) {\n for (let i = 0; i < table.children.length; i++) {\n const row = table.children[i]\n if (row.subject) {\n row.classList.toggle('selected', !!selectionArray[row.subject.uri])\n }\n }\n }\n\n function refreshGroupsSelected () {\n return refreshThingsSelected(groupsMainTable, selectedGroups)\n }\n\n // Check every group is in the list and add it if not.\n\n function syncGroupTable () {\n function renderGroupRow (group) {\n async function handleURIsDroppedOnGroup (uris) {\n uris.forEach(function (u) {\n console.log('Dropped on group: ' + u)\n const thing = kb.sym(u)\n try {\n addPersonToGroup(thing, group)\n } catch (e) {\n complain(e)\n }\n refreshNames()\n })\n }\n function groupRowClickListener (event) {\n event.preventDefault()\n const groupList = kb.sym(group.uri.split('#')[0])\n if (!event.metaKey) {\n selectedGroups = {} // If Command key pressed, accumulate multiple\n }\n selectedGroups[group.uri] = !selectedGroups[group.uri]\n refreshGroupsSelected()\n peopleMainTable.innerHTML = '' // clear in case refreshNames doesn't work for unknown reason\n\n kb.fetcher.nowOrWhenFetched(\n groupList.uri,\n undefined,\n function (ok, message) {\n if (!ok) {\n return complainIfBad(\n ok,\n 'Can\\'t load group file: ' + groupList + ': ' + message\n )\n }\n refreshNames()\n\n if (!event.metaKey) {\n // If only one group has been selected, show ACL\n cardMain.innerHTML = ''\n let visible = false\n const aclControl = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.aclControl.ACLControlBox5(\n group,\n dataBrowserContext,\n 'group',\n kb,\n function (ok, body, response) {\n if (!ok) {\n if (response && response.status && response.status === 403) {\n cardMain.innerHTML = 'No control access.'\n } else {\n cardMain.innerHTML = 'Failed to load access control: ' + body\n }\n }\n }\n )\n const sharingButton = cardMain.appendChild(\n dom.createElement('button')\n )\n sharingButton.classList.add('sharingButton')\n sharingButton.setAttribute('aria-label', 'Toggle group sharing settings')\n const img = sharingButton.appendChild(\n dom.createElement('img')\n )\n img.classList.add('sharingButtonIcon')\n img.setAttribute(\n 'src',\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.icons.iconBase + 'noun_123691.svg'\n )\n img.setAttribute('alt', 'Sharing icon')\n sharingButton.addEventListener('click', function () {\n visible = !visible\n if (visible) {\n cardMain.appendChild(aclControl)\n } else {\n cardMain.removeChild(aclControl)\n }\n })\n }\n }\n )\n }\n\n // Body of renderGroupRow\n const name = kb.any(group, contactsPane_ns.vcard('fn'))\n const groupRow = dom.createElement('tr')\n groupRow.setAttribute('role', 'listitem')\n groupRow.setAttribute('tabindex', '0')\n groupRow.setAttribute('aria-label', name ? name.value : 'Group')\n groupRow.subject = group\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.makeDraggable(groupRow, group)\n\n groupRow.classList.add('dataCell')\n // Visually hidden span for screen readers\n const srOnly = dom.createElement('span')\n srOnly.classList.add('visually-hidden')\n srOnly.textContent = 'Group: '\n groupRow.appendChild(srOnly)\n groupRow.appendChild(dom.createTextNode(name))\n\n // Keyboard selection\n groupRow.addEventListener('keydown', function (event) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n groupRowClickListener(event)\n }\n })\n\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.makeDropTarget(groupRow, handleURIsDroppedOnGroup)\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.deleteButtonWithCheck(\n dom,\n groupRow,\n 'group ' + name,\n async function () {\n await deleteThingAndDoc(group)\n syncGroupTable()\n }\n )\n groupRow.addEventListener('click', groupRowClickListener, true)\n return groupRow\n } // renderGroupRow\n\n const groups = groupsInOrder()\n contactsPane_utils.syncTableToArrayReOrdered(groupsMainTable, groups, renderGroupRow)\n refreshGroupsSelected()\n } // syncGroupTable\n\n async function checkDataModel () {\n // await kb.fetcher.load(groups) // asssume loaded already\n const groups = await loadAllGroups()\n\n const { del, ins } = await getDataModelIssues(groups)\n\n if (del.length && confirm(`Groups data model need to be updated? (${del.length})`)) {\n await kb.updater.updateMany(del, ins)\n alert('Update done')\n }\n } // checkDataModel\n\n // Click on New Group button\n async function newGroupClickHandler (_event) {\n cardMain.innerHTML = ''\n const groupIndex = kb.any(book, contactsPane_ns.vcard('groupIndex'))\n try {\n await kb.fetcher.load(groupIndex)\n } catch (e) {\n console.log('Error: Group index NOT loaded:' + e + '\\n')\n }\n console.log(' Group index has been loaded\\n')\n\n const name = await external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.askName(\n dom, kb, cardMain, external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns.foaf('name'), contactsPane_ns.vcard('Group'), 'group')\n if (!name) return // cancelled by user\n let group\n try {\n group = await saveNewGroup(book, name)\n } catch (err) {\n console.log('Error: can\\'t save new group:' + err)\n cardMain.innerHTML = 'Failed to save group' + err\n return\n }\n selectedGroups = {}\n selectedGroups[group.uri] = true\n syncGroupTable() // Refresh list of groups\n\n cardMain.innerHTML = ''\n cardMain.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.aclControl.ACLControlBox5(\n group.doc(), dataBrowserContext, 'group', kb,\n function (ok, body) {\n if (!ok) {\n cardMain.innerHTML =\n 'Group sharing setup failed: ' + body\n }\n }))\n } // newGroupClickHandler\n\n async function craeteNewCard (klass) {\n cardMain.innerHTML = ''\n const ourBook = findBookFromGroups(book)\n try {\n await kb.fetcher.load(ourBook)\n } catch (err) {\n throw new Error('Book won\\'t load:' + ourBook)\n }\n\n const nameEmailIndex = kb.any(ourBook, contactsPane_ns.vcard('nameEmailIndex'))\n if (!nameEmailIndex) throw new Error('Wot no nameEmailIndex?')\n await kb.fetcher.load(nameEmailIndex)\n // console.log('Name index loaded async' + nameEmailIndex)\n\n const name = await external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets\n .askName(dom, kb, cardMain, external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns.foaf('name'), klass) // @@ was, 'person'\n\n if (!name) return // cancelled by user\n cardMain.innerHTML = 'indexing...'\n book = findBookFromGroups(book)\n let person\n try {\n person = await saveNewContact(book, name, selectedGroups, klass)\n } catch (err) {\n const msg = 'Error: can\\'t save new contact: ' + err\n console.log(msg)\n alert(msg)\n }\n\n selectedPeople = {}\n selectedPeople[person.uri] = true\n refreshNames() // Add name to list of group\n cardMain.innerHTML = '' // Clear 'indexing'\n cardMain.appendChild(renderPane(dom, person, 'contact'))\n }\n\n // //////////////////////////// Three-column Contact Browser - Body\n // ////////////////// Body of 3-column browser\n\n // Main wrapper for accessibility and style\n const main = dom.createElement('main')\n main.id = 'main-content'\n main.classList.add('addressBook-grid')\n main.setAttribute('role', 'main')\n main.setAttribute('aria-label', 'Address Book')\n main.setAttribute('tabindex', '-1')\n div.appendChild(main)\n\n // Section wrapper for accessibility and style\n const section = dom.createElement('section')\n section.setAttribute('aria-labelledby', 'addressBook-section')\n section.classList.add('addressBookSection', 'section-bg')\n section.setAttribute('role', 'region')\n section.setAttribute('tabindex', '-1')\n main.appendChild(section)\n\n const header = dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n const h2 = dom.createElement('h2')\n h2.id = 'addressBook-heading'\n h2.setAttribute('tabindex', '-1')\n h2.textContent = title\n header.appendChild(h2)\n section.appendChild(header)\n\n // Accessible table structure\n const bookTable = dom.createElement('table')\n bookTable.classList.add('bookTable')\n bookTable.setAttribute('role', 'table')\n bookTable.setAttribute('aria-label', 'Contacts browser')\n section.appendChild(bookTable)\n\n // Table caption for screen readers\n const caption = dom.createElement('caption')\n caption.textContent = 'Contacts three-column browser'\n caption.classList.add('visually-hidden')\n bookTable.appendChild(caption)\n\n // Table head\n const thead = dom.createElement('thead')\n const bookHeader = dom.createElement('tr')\n thead.appendChild(bookHeader)\n bookTable.appendChild(thead)\n\n // Table body\n const tbody = dom.createElement('tbody')\n const bookMain = dom.createElement('tr')\n tbody.appendChild(bookMain)\n bookTable.appendChild(tbody)\n\n // Table footer\n const tfoot = dom.createElement('tfoot')\n const bookFooter = dom.createElement('tr')\n tfoot.appendChild(bookFooter)\n bookTable.appendChild(tfoot)\n\n // Headers\n const groupsHeader = dom.createElement('th')\n groupsHeader.setAttribute('scope', 'col')\n groupsHeader.setAttribute('id', 'groupsHeader')\n groupsHeader.textContent = 'Groups'\n groupsHeader.classList.add('groupsHeader')\n bookHeader.appendChild(groupsHeader)\n\n const peopleHeader = dom.createElement('th')\n peopleHeader.setAttribute('scope', 'col')\n peopleHeader.setAttribute('id', 'peopleHeader')\n peopleHeader.textContent = 'Name'\n peopleHeader.classList.add('peopleHeader')\n bookHeader.appendChild(peopleHeader)\n\n const cardHeader = dom.createElement('th')\n cardHeader.setAttribute('scope', 'col')\n cardHeader.setAttribute('id', 'cardHeader')\n cardHeader.textContent = 'Search for name'\n cardHeader.classList.add('cardHeader')\n bookHeader.appendChild(cardHeader)\n\n // Main columns\n const groupsMain = dom.createElement('td')\n groupsMain.classList.add('groupsMain')\n groupsMain.setAttribute('role', 'region')\n groupsMain.setAttribute('aria-labelledby', 'groupsHeader')\n const groupsMainTable = dom.createElement('table')\n groupsMainTable.setAttribute('role', 'list')\n groupsMainTable.setAttribute('aria-label', 'Groups list')\n groupsMain.appendChild(groupsMainTable)\n bookMain.appendChild(groupsMain)\n\n const peopleMain = dom.createElement('td')\n peopleMain.classList.add('peopleMain')\n peopleMain.setAttribute('role', 'region')\n peopleMain.setAttribute('aria-labelledby', 'peopleHeader')\n const peopleMainTable = dom.createElement('table')\n peopleMainTable.setAttribute('role', 'list')\n peopleMainTable.setAttribute('aria-label', 'People list')\n peopleMain.appendChild(peopleMainTable)\n bookMain.appendChild(peopleMain)\n\n const cardMain = dom.createElement('td')\n cardMain.classList.add('cardMain')\n cardMain.setAttribute('role', 'region')\n cardMain.setAttribute('aria-labelledby', 'cardHeader')\n bookMain.appendChild(cardMain)\n\n // Footer columns\n const groupsFooter = dom.createElement('td')\n groupsFooter.classList.add('groupsFooter')\n bookFooter.appendChild(groupsFooter)\n\n const peopleFooter = dom.createElement('td')\n bookFooter.appendChild(peopleFooter)\n\n const cardFooter = dom.createElement('td')\n bookFooter.appendChild(cardFooter)\n\n // Search input\n const searchDiv = dom.createElement('div')\n searchDiv.classList.add('searchDiv')\n cardHeader.appendChild(searchDiv)\n const searchInput = dom.createElement('input')\n searchInput.setAttribute('type', 'text')\n searchInput.setAttribute('aria-label', 'Search contacts')\n searchInput.classList.add('searchInput')\n searchDiv.appendChild(searchInput)\n searchInput.addEventListener('input', function (_event) {\n refreshFilteredPeople(true)\n })\n\n // Accessibility: keyboard navigation for peopleMainTable rows\n peopleMainTable.addEventListener('keydown', function (event) {\n const rows = Array.from(peopleMainTable.children)\n const current = document.activeElement\n const idx = rows.indexOf(current)\n if (event.key === 'ArrowDown' && idx < rows.length - 1) {\n rows[idx + 1].focus()\n event.preventDefault()\n } else if (event.key === 'ArrowUp' && idx > 0) {\n rows[idx - 1].focus()\n event.preventDefault()\n }\n })\n\n // ...existing code...\n function setGroupListVisibility (visible) {\n groupsHeader.classList.toggle('hidden', !visible)\n groupsMain.classList.toggle('hidden', !visible)\n groupsFooter.classList.toggle('hidden', !visible)\n }\n setGroupListVisibility(true)\n\n if (options.foreignGroup) {\n selectedGroups[options.foreignGroup.uri] = true\n }\n if (book) {\n const allGroups = groupsHeader.appendChild(dom.createElement('button'))\n allGroups.textContent = 'All'\n allGroups.classList.add('allGroupsButton', 'actionButton', 'btn-secondary', 'action-button-focus')\n allGroups.addEventListener('click', function (_event) {\n allGroups.state = allGroups.state ? 0 : 1\n peopleMainTable.innerHTML = '' // clear in case refreshNames doesn't work for unknown reason\n if (allGroups.state) {\n allGroups.classList.add('allGroupsButton--loading')\n selectAllGroups(selectedGroups, groupsMainTable, function (\n ok,\n message\n ) {\n if (!ok) return complain(message)\n allGroups.classList.remove('allGroupsButton--loading')\n allGroups.classList.add('allGroupsButton--active')\n refreshGroupsSelected()\n })\n } else {\n allGroups.classList.remove('allGroupsButton--loading', 'allGroupsButton--active')\n allGroups.classList.add('allGroupsButton--loaded') // pale green hint groups loaded\n selectedGroups = {}\n refreshGroupsSelected()\n }\n }) // on button click\n kb.fetcher.nowOrWhenFetched(groupIndex.uri, book, function (ok, body) {\n if (!ok) return console.log('Cannot load group index: ' + body)\n syncGroupTable()\n refreshNames()\n })\n } else {\n syncGroupTable()\n refreshNames()\n console.log('No book, only one group -> hide list of groups')\n setGroupListVisibility(false) // If no books involved, hide group list\n } // if not book\n\n peopleHeader.textContent = 'Contact name'\n peopleHeader.classList.add('peopleHeader')\n peopleMain.classList.add('peopleMain')\n\n // New Contact button\n const newContactButton = dom.createElement('button')\n const container = dom.createElement('div')\n newContactButton.setAttribute('type', 'button')\n if (!me) newContactButton.setAttribute('disabled', 'true')\n external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.authn.checkUser().then(webId => {\n if (webId) {\n me = webId\n newContactButton.removeAttribute('disabled')\n }\n })\n container.appendChild(newContactButton)\n newContactButton.innerHTML = 'New contact' // + IndividualClassLabel\n newContactButton.classList.add('actionButton', 'btn-secondary', 'action-button-focus')\n peopleFooter.appendChild(container)\n newContactButton.addEventListener('click', async _event => craeteNewCard(contactsPane_ns.vcard('Individual')), false)\n\n // New Organization button\n const newOrganizationButton = dom.createElement('button')\n const container2 = dom.createElement('div')\n newOrganizationButton.setAttribute('type', 'button')\n if (!me) newOrganizationButton.setAttribute('disabled', 'true')\n external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.authn.checkUser().then(webId => {\n if (webId) {\n me = webId\n newOrganizationButton.removeAttribute('disabled')\n }\n })\n container2.appendChild(newOrganizationButton)\n newOrganizationButton.innerHTML = 'New organization' // + IndividualClassLabel\n newOrganizationButton.classList.add('actionButton', 'btn-secondary', 'action-button-focus')\n peopleFooter.appendChild(container2)\n newOrganizationButton.addEventListener('click', async _event => craeteNewCard(contactsPane_ns.vcard('Organization')), false)\n\n // New Group button\n if (book) {\n const newGroupButton = groupsFooter.appendChild(\n dom.createElement('button')\n )\n newGroupButton.setAttribute('type', 'button')\n newGroupButton.innerHTML = 'New group' // + IndividualClassLabel\n newGroupButton.classList.add('actionButton', 'btn-secondary', 'action-button-focus')\n newGroupButton.addEventListener(\n 'click', newGroupClickHandler,\n false\n )\n\n // Tools button\n const toolsButton = cardFooter.appendChild(dom.createElement('button'))\n toolsButton.setAttribute('type', 'button')\n toolsButton.innerHTML = 'Tools'\n toolsButton.classList.add('actionButton', 'btn-secondary', 'action-button-focus')\n toolsButton.addEventListener('click', function (_event) {\n cardMain.innerHTML = ''\n cardMain.appendChild(\n toolsPane_toolsPane(\n selectAllGroups,\n selectedGroups,\n groupsMainTable,\n book,\n dataBrowserContext,\n me\n )\n )\n })\n } // if book\n\n const newBookBtn = newAddressBookButton(book)\n if (newBookBtn && newBookBtn.classList) {\n newBookBtn.classList.add('actionButton', 'btn-secondary', 'action-button-focus')\n }\n cardFooter.appendChild(newBookBtn)\n\n // })\n\n div.appendChild(dom.createElement('hr'))\n\n // const groups = await loadAllGroups() @@@\n checkDataModel().then(() => { console.log('async checkDataModel done.') })\n\n // div.appendChild(newAddressBookButton(book)) // later\n // end of AddressBook instance\n } // renderThreeColumnBrowser\n\n // ///////////////////////////////////////////////////////////////////////////////////\n\n // Render a single contact Individual\n\n if (\n t[contactsPane_ns.vcard('Individual').uri] ||\n t[contactsPane_ns.foaf('Person').uri] ||\n t[contactsPane_ns.schema('Person').uri] ||\n t[contactsPane_ns.vcard('Organization').uri] ||\n t[contactsPane_ns.schema('Organization').uri]\n ) {\n renderIndividual(dom, div, subject, dataBrowserContext).then(() => console.log('(individual rendered)'))\n\n // Render a Group instance\n } else if (t[contactsPane_ns.vcard('Group').uri]) {\n // If we have a main address book, then render this group as a guest group within it\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.login\n .findAppInstances(context, contactsPane_ns.vcard('AddressBook'))\n .then(function (context) {\n const addressBooks = context.instances\n const options = { foreignGroup: subject }\n if (addressBooks.length > 0) {\n // const book = addressBooks[0]\n renderThreeColumnBrowser(addressBooks, context, options)\n } else {\n renderThreeColumnBrowser([], context, options)\n // @@ button to Make a new addressBook\n }\n })\n .catch(function (e) {\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.complain(context, e)\n })\n\n // Render a AddressBook instance\n } else if (t[contactsPane_ns.vcard('AddressBook').uri]) {\n renderThreeColumnBrowser([subject], context, {})\n } else {\n console.log(\n 'Error: Contact pane: No evidence that ' +\n subject +\n ' is anything to do with contacts.'\n )\n }\n\n // /////////////// Fix user when testing on a plane\n\n if (\n typeof document !== 'undefined' &&\n document.location &&\n ('' + document.location).slice(0, 16) === 'http://localhost'\n ) {\n me = kb.any(subject, external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns.acl('owner')) // when testing on plane with no webid\n console.log('Assuming user is ' + me)\n }\n return div\n } // asyncRender\n } // render function\n}); // pane object\n// ends\n\nfunction contactsPane_getSameAs (kb, item, doc) {\n return kb.each(item, contactsPane_ns.owl('sameAs'), null, doc).concat(\n kb.each(null, contactsPane_ns.owl('sameAs'), item, doc))\n}\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=contactsPane.js.map","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* CVCard.css */\n/* Note: Uses utilities: .section-title for cvOrg styling */\n\n.cvSection {\n margin-bottom: 1.25em;\n}\n\n.cvRole {\n margin: var(--spacing-xs) 0;\n font-size: var(--font-size-base);\n line-height: var(--line-height-base);\n display: flex;\n flex-direction: column;\n gap: 0.2em;\n}\n\n.cvOrg {\n font-weight: 600;\n color: var(--color-primary);\n}\n\n.cvSkill, .cvLanguage {\n text-align: left;\n margin: var(--spacing-xs) 0;\n font-size: var(--font-size-base);\n line-height: var(--line-height-base);\n}\n\n.cvSection h3 {\n color: var(--color-text);\n font-size: var(--font-size-lg);\n font-weight: 600;\n line-height: var(--line-height-tight);\n margin-bottom: var(--spacing-xs);\n border-bottom: 1px solid var(--color-border-pale);\n padding-bottom: var(--spacing-xs);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/CVCard.css\"],\"names\":[],\"mappings\":\"AAAA,eAAe;AACf,2DAA2D;;AAE3D;EACE,qBAAqB;AACvB;;AAEA;EACE,2BAA2B;EAC3B,gCAAgC;EAChC,oCAAoC;EACpC,aAAa;EACb,sBAAsB;EACtB,UAAU;AACZ;;AAEA;EACE,gBAAgB;EAChB,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;EAChB,2BAA2B;EAC3B,gCAAgC;EAChC,oCAAoC;AACtC;;AAEA;EACE,wBAAwB;EACxB,8BAA8B;EAC9B,gBAAgB;EAChB,qCAAqC;EACrC,gCAAgC;EAChC,iDAAiD;EACjD,iCAAiC;AACnC\",\"sourcesContent\":[\"/* CVCard.css */\\n/* Note: Uses utilities: .section-title for cvOrg styling */\\n\\n.cvSection {\\n margin-bottom: 1.25em;\\n}\\n\\n.cvRole {\\n margin: var(--spacing-xs) 0;\\n font-size: var(--font-size-base);\\n line-height: var(--line-height-base);\\n display: flex;\\n flex-direction: column;\\n gap: 0.2em;\\n}\\n\\n.cvOrg {\\n font-weight: 600;\\n color: var(--color-primary);\\n}\\n\\n.cvSkill, .cvLanguage {\\n text-align: left;\\n margin: var(--spacing-xs) 0;\\n font-size: var(--font-size-base);\\n line-height: var(--line-height-base);\\n}\\n\\n.cvSection h3 {\\n color: var(--color-text);\\n font-size: var(--font-size-lg);\\n font-weight: 600;\\n line-height: var(--line-height-tight);\\n margin-bottom: var(--spacing-xs);\\n border-bottom: 1px solid var(--color-border-pale);\\n padding-bottom: var(--spacing-xs);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* ChatWithMe.css */\n/* Uses utilities: .section-centered, .loading-text, .btn-primary, .btn-transparent */\n\n.chatSection {\n overflow-x: auto;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/ChatWithMe.css\"],\"names\":[],\"mappings\":\"AAAA,mBAAmB;AACnB,qFAAqF;;AAErF;EACE,gBAAgB;AAClB\",\"sourcesContent\":[\"/* ChatWithMe.css */\\n/* Uses utilities: .section-centered, .loading-text, .btn-primary, .btn-transparent */\\n\\n.chatSection {\\n overflow-x: auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `#add-to-contacts-button-container {\n position: relative;\n overflow: visible;\n}\n\n.contactsAddressBookSelector {\n width: fit-content;\n max-width: min(94vw, 48rem);\n min-width: 0;\n max-height: 80vh;\n overflow-y: auto;\n overflow-x: hidden;\n border-radius: var(--border-radius-base);\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\n background: #F0F0F0;\n color: var(--color-primary);\n padding-top: 4em;\n align-items: stretch;\n box-sizing: border-box;\n gap: 7px;\n display: flex;\n flex-direction: column;\n font-weight: 600;\n position: absolute;\n top: 54%;\n bottom: auto;\n left: 50%;\n transform: translate(-50%, -50%);\n margin-top: 0;\n margin: 0;\n z-index: 200;\n opacity: 1;\n}\n\n@media (max-width: 900px) {\n .contactsAddressBookSelector {\n top: 54%;\n bottom: auto;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n .contactsAddressBookDetails {\n flex-direction: column !important; /* Stacks items vertically on small screens */\n align-items: center !important;\n width: 100% !important;\n max-height: 60vh;\n overflow-y: auto;\n overflow-x: hidden; \n }\n\n .contactsAddressBookCreationDiv .contactsNewContactCreationButton {\n width: fit-content !important;\n min-width: 10em;\n margin-left: auto !important;\n margin-right: auto !important;\n align-self: center !important;\n display: inline-flex !important;\n justify-content: center !important;\n align-items: center !important;\n text-align: center;\n }\n}\n\n@media (max-width: 333px) {\n .contactsAddressBookSelector {\n width: 96vw;\n max-width: 96vw;\n min-width: 0;\n top: 50%;\n bottom: auto;\n left: 50%;\n transform: translate(-50%, -50%);\n padding-top: 3rem;\n position: fixed;\n overflow-x: hidden;\n }\n\n .contactsAddressBookDetails {\n width: 100% !important;\n min-width: 0;\n padding: 0.5rem;\n }\n .contactsAddressBookList,\n .contactsGroupList {\n min-width: 0;\n max-width: 100% !important;\n width: 100%;\n }\n}\n\n.contactsAddressBookCreationDiv {\n width: 100%;\n border-radius: var(--border-radius-base);\n background: #F0F0F0;\n box-sizing: border-box;\n padding: 5px;\n gap: 5px;\n display: flex;\n flex-direction: column;\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n}\n\n.contactsHelpersButtonDiv {\n display: flex;\n flex-direction: row;\n gap: var(--spacing-md);\n justify-content: center;\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n padding: var(--spacing-md);\n border-radius: var(--border-radius-base);\n}\n\n.contactsAddressBookCreationButton {\n flex-shrink: 0;\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \n color: var(--color-primary) !important;\n border-radius: 8px;\n text-align: left;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.contactsAddressBookUriEntryButton {\n flex-shrink: 0;\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \n color: var(--color-primary) !important;\n border-radius: 8px;\n text-align: left;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.contactsActionButton {\n background: var(--color-primary);\n color: white;\n border-radius: var(--border-radius-base);\n transition: all 0.3s ease-in-out;\n cursor: pointer;\n}\n\n.contactsActionButton:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n}\n\n.contactsActionButton:active {\n box-shadow: 0 1px 2px white;\n}\n\n.contactsActionButton:focus,\n.contactsActionButton:focus-visible {\n outline: 3px solid var(--color-primary) !important;\n outline-offset: 2px !important;\n box-shadow: 0 0 0 2px white, 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\n z-index: 1; \n}\n\n.contactsAddressBookDetails {\n width: 100%;\n min-width: 0;\n min-height: 0;\n border-radius: var(--border-radius-base);\n justify-content: flex-start;\n box-sizing: border-box;\n gap: 15px;\n display: flex;\n flex-direction: row;\n padding: var(--spacing-md);\n overflow-x: auto;\n overflow-y: auto;\n}\n\n.contactsAddressBookUriEntry {\n width: calc(100% - 1rem) !important;\n max-width: calc(100% - 1rem) !important;\n min-width: 0;\n box-sizing: border-box;\n padding-top: 3em !important;\n gap: 5px;\n display: flex;\n align-self: stretch;\n flex-direction: column;\n\n}\n\n.contactsAddressBookUriEntryForm {\n width: 100%;\n max-width: 100%;\n min-width: 0;\n background: #F0F0F0;\n box-sizing: border-box;\n gap: 5px;\n display: flex;\n flex-wrap: wrap;\n flex-direction: column;\n align-items: stretch;\n}\n\n.contactsAddressBookUriInput {\n width: clamp(14rem, 60vw, 22rem);\n max-width: 100%;\n min-width: 0;\n flex: 0 0 auto;\n align-self: flex-start;\n padding: 5px;\n gap: 15px;\n border-radius: var(--border-radius-base);\n border: 1px solid #ccc;\n}\n\n.contactsAddressBookUriEntryAddButton {\n width: 10%;\n min-width: 0;\n max-width: 4em;\n align-self: flex-end !important;\n margin-left: auto;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n line-height: 1;\n\n /* width: 100% !important;\n max-width: 100% !important;\n margin-left: 0;\n align-self: stretch !important; */\n}\n\n.contactsNewGroupForm {\n box-sizing: border-box;\n padding-top: 2.5rem !important;\n gap: 5px;\n display: flex;\n flex-direction: column;\n}\n\n.contactsCreateNewAddressBook {\n border-radius: var(--border-radius);\n color: white;\n padding: var(--spacing-md);\n justify-content: center;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n}\n\n.contactsAddressBookList {\n width: 100%;\n max-width: fit-content !important;\n box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);\n min-width: 200px;\n box-sizing: border-box;\n gap: 4px;\n display: flex;\n flex-direction: column;\n}\n\n.contactsGroupList {\n width: auto;\n max-width: fit-content !important;\n min-width: 200px;\n box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);\n box-sizing: border-box;\n gap: 4px;\n display: flex;\n flex-direction: column;\n}\n\n.contactsErrorDisplay {\n width: 90%;\n align-self: flex-end;\n padding: 5px;\n position: absolute;\n background: pink;\n display: none;\n color: #787878;\n border-radius: var(--border-radius-base);\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px; \n z-index: 3;\n}\n\n.contactsShowErrors {\n display: flex !important;\n flex-direction: row;\n justify-content: center;\n}\n.contactsCloseErrorDisplayButton {\n position: absolute;\n top: 0.2rem;\n right: 0.2rem;\n background: transparent;\n color: #787878;\n font-size: var(--font-size-xs);\n border: none;\n font-size: var(--font-size-sm);\n cursor: pointer;\n z-index: 4;\n}\n\n.contactsCloseButton {\n box-shadow: var(--box-shadow);\n border-radius: var(--border-radius-base);\n color: #787878 !important;\n padding: 1em;\n font-size: var(--font-size-sm);\n position: absolute;\n top: 0; \n right: 0;\n display: inline-block;\n width: auto !important;\n height: auto !important;\n cursor: pointer;\n font-size: var(--font-size-xs);\n line-height: 1;\n}\n\n.contactsCloseButton:hover {\n box-shadow: 0 2px 4px var(--color-primary) !important;\n}\n\n.contactsCloseButton:focus,\n.contactsCloseButton:focus-visible {\n outline: 3px solid var(--color-primary) !important;\n outline-offset: 2px !important;\n box-shadow: 0 0 0 2px white, 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\n z-index: 1;\n}\n\n.contactsNewAddressForm {\n padding-top: 3em !important;\n gap: 5px;\n display: flex;\n flex-direction: column;\n}\n\n.contactsButton {\n flex-shrink: 0;\n background: #F0F0F0;\n color: #787878;\n border-radius: 8px;\n text-align: left;\n padding: var(--spacing-md);\n cursor: pointer;\n white-space: nowrap;\n}\n\n.contactsButton:hover {\n color: var(--color-primary);\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \n} \n\n.contactsSelectedButton {\n background: color-mix(in srgb, var(--color-primary), white 60%) !important; \n color: var(--color-primary);\n}\n\n.contactsContactExistsAlert {\n background: #F0F0F0 !important;\n color: #787878;\n padding: 10px;\n border-radius: var(--border-radius-base);\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\n z-index: 10;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 300px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 15px; \n text-wrap: pretty;\n}\n\n.contactsContactExistsActions {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n gap: 10px;\n width: auto;\n}\n\n.contactsContactExistsActions .contactsConfirmButton,\n.contactsContactExistsActions .contactsCancelButton {\n display: inline-flex !important;\n width: auto !important;\n min-width: fit-content;\n flex: 0 0 auto;\n margin: 0;\n white-space: nowrap;\n}\n\n[role=\"alert\"] {\n border: none !important; /* Hides the element from all users and AT */\n}\n\n.contactsPopupOverlay {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.2);\n z-index: 8;\n}\n\n.contactsAddressBookSelector.contactsOverlayActive > *:not(.contactsPopupOverlay):not(.contactsPopupDialog):not(.contactsContactExistsAlert) {\n pointer-events: none;\n user-select: none;\n}\n\n.contactsAddressBookSelector.contactsOverlayActive .contactsPopupDialog,\n.contactsAddressBookSelector.contactsOverlayActive .contactsContactExistsAlert,\n.contactsAddressBookSelector.contactsOverlayActive .contactsPopupDialog *,\n.contactsAddressBookSelector.contactsOverlayActive .contactsContactExistsAlert * {\n pointer-events: auto;\n}\n\n.contactsPopupDialog {\n background: #F5F5F5 !important;\n color: var(--color-primary);\n padding: 2em;\n border-radius: var(--border-radius-base);\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\n z-index: 50;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: auto;\n max-width: min(92vw, 34rem);\n max-height: calc(100vh - 6rem);\n overflow: auto;\n box-sizing: border-box;\n}\n\n@media (max-width: 600px) {\n .contactsAddressBookUriEntry {\n padding-top: 3rem !important;\n }\n\n .contactsPopupDialog {\n max-width: 92vw;\n max-height: 78vh;\n padding: 1.25rem;\n }\n}\n\n.contactsConfirmButton {\n background: var(--color-primary);\n color: white;\n border-radius: var(--border-radius-base);\n padding: var(--spacing-md);\n transition: all 0.3s ease-in-out;\n cursor: pointer;\n}\n\n.contactsConfirmButton:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n}\n\n.contactsCancelButton {\n background: transparent;\n color: #787878;\n border-radius: var(--border-radius-base);\n padding: var(--spacing-md);\n border: 1px solid #ccc;\n transition: all 0.3s ease-in-out;\n cursor: pointer;\n}\n.contactsCancelButton:hover {\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \n color: var(--color-primary);\n} \n\n.contactsNewContactCreationButton {\n width: 10em !important;\n align-self: flex-end;\n line-height: 1;\n}\n\n.contactsCreateGroupCreationButton {\n flex-shrink: 0;\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \n color: var(--color-primary) !important;\n border-radius: 8px;\n text-align: left;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.contactsCloseButton {\n position: absolute !important;\n top: 0 !important;\n right: 0 !important;\n left: auto;\n margin: 0;\n align-self: auto !important;\n background: transparent;\n color: #787878;\n font-size: var(--font-size-xs);\n border: none;\n font-size: var(--font-size-sm);\n cursor: pointer;\n z-index: 100 !important;\n padding: 0.35rem 0.5rem;\n line-height: 1;\n}\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/ContactsCard.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"#add-to-contacts-button-container {\\n position: relative;\\n overflow: visible;\\n}\\n\\n.contactsAddressBookSelector {\\n width: fit-content;\\n max-width: min(94vw, 48rem);\\n min-width: 0;\\n max-height: 80vh;\\n overflow-y: auto;\\n overflow-x: hidden;\\n border-radius: var(--border-radius-base);\\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\\n background: #F0F0F0;\\n color: var(--color-primary);\\n padding-top: 4em;\\n align-items: stretch;\\n box-sizing: border-box;\\n gap: 7px;\\n display: flex;\\n flex-direction: column;\\n font-weight: 600;\\n position: absolute;\\n top: 54%;\\n bottom: auto;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n margin-top: 0;\\n margin: 0;\\n z-index: 200;\\n opacity: 1;\\n}\\n\\n@media (max-width: 900px) {\\n .contactsAddressBookSelector {\\n top: 54%;\\n bottom: auto;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n }\\n\\n .contactsAddressBookDetails {\\n flex-direction: column !important; /* Stacks items vertically on small screens */\\n align-items: center !important;\\n width: 100% !important;\\n max-height: 60vh;\\n overflow-y: auto;\\n overflow-x: hidden; \\n }\\n\\n .contactsAddressBookCreationDiv .contactsNewContactCreationButton {\\n width: fit-content !important;\\n min-width: 10em;\\n margin-left: auto !important;\\n margin-right: auto !important;\\n align-self: center !important;\\n display: inline-flex !important;\\n justify-content: center !important;\\n align-items: center !important;\\n text-align: center;\\n }\\n}\\n\\n@media (max-width: 333px) {\\n .contactsAddressBookSelector {\\n width: 96vw;\\n max-width: 96vw;\\n min-width: 0;\\n top: 50%;\\n bottom: auto;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n padding-top: 3rem;\\n position: fixed;\\n overflow-x: hidden;\\n }\\n\\n .contactsAddressBookDetails {\\n width: 100% !important;\\n min-width: 0;\\n padding: 0.5rem;\\n }\\n .contactsAddressBookList,\\n .contactsGroupList {\\n min-width: 0;\\n max-width: 100% !important;\\n width: 100%;\\n }\\n}\\n\\n.contactsAddressBookCreationDiv {\\n width: 100%;\\n border-radius: var(--border-radius-base);\\n background: #F0F0F0;\\n box-sizing: border-box;\\n padding: 5px;\\n gap: 5px;\\n display: flex;\\n flex-direction: column;\\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\\n}\\n\\n.contactsHelpersButtonDiv {\\n display: flex;\\n flex-direction: row;\\n gap: var(--spacing-md);\\n justify-content: center;\\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\\n padding: var(--spacing-md);\\n border-radius: var(--border-radius-base);\\n}\\n\\n.contactsAddressBookCreationButton {\\n flex-shrink: 0;\\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \\n color: var(--color-primary) !important;\\n border-radius: 8px;\\n text-align: left;\\n cursor: pointer;\\n white-space: nowrap;\\n}\\n\\n.contactsAddressBookUriEntryButton {\\n flex-shrink: 0;\\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \\n color: var(--color-primary) !important;\\n border-radius: 8px;\\n text-align: left;\\n cursor: pointer;\\n white-space: nowrap;\\n}\\n\\n.contactsActionButton {\\n background: var(--color-primary);\\n color: white;\\n border-radius: var(--border-radius-base);\\n transition: all 0.3s ease-in-out;\\n cursor: pointer;\\n}\\n\\n.contactsActionButton:hover {\\n transform: translateY(-2px);\\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\\n}\\n\\n.contactsActionButton:active {\\n box-shadow: 0 1px 2px white;\\n}\\n\\n.contactsActionButton:focus,\\n.contactsActionButton:focus-visible {\\n outline: 3px solid var(--color-primary) !important;\\n outline-offset: 2px !important;\\n box-shadow: 0 0 0 2px white, 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\\n z-index: 1; \\n}\\n\\n.contactsAddressBookDetails {\\n width: 100%;\\n min-width: 0;\\n min-height: 0;\\n border-radius: var(--border-radius-base);\\n justify-content: flex-start;\\n box-sizing: border-box;\\n gap: 15px;\\n display: flex;\\n flex-direction: row;\\n padding: var(--spacing-md);\\n overflow-x: auto;\\n overflow-y: auto;\\n}\\n\\n.contactsAddressBookUriEntry {\\n width: calc(100% - 1rem) !important;\\n max-width: calc(100% - 1rem) !important;\\n min-width: 0;\\n box-sizing: border-box;\\n padding-top: 3em !important;\\n gap: 5px;\\n display: flex;\\n align-self: stretch;\\n flex-direction: column;\\n\\n}\\n\\n.contactsAddressBookUriEntryForm {\\n width: 100%;\\n max-width: 100%;\\n min-width: 0;\\n background: #F0F0F0;\\n box-sizing: border-box;\\n gap: 5px;\\n display: flex;\\n flex-wrap: wrap;\\n flex-direction: column;\\n align-items: stretch;\\n}\\n\\n.contactsAddressBookUriInput {\\n width: clamp(14rem, 60vw, 22rem);\\n max-width: 100%;\\n min-width: 0;\\n flex: 0 0 auto;\\n align-self: flex-start;\\n padding: 5px;\\n gap: 15px;\\n border-radius: var(--border-radius-base);\\n border: 1px solid #ccc;\\n}\\n\\n.contactsAddressBookUriEntryAddButton {\\n width: 10%;\\n min-width: 0;\\n max-width: 4em;\\n align-self: flex-end !important;\\n margin-left: auto;\\n display: inline-flex;\\n justify-content: center;\\n align-items: center;\\n line-height: 1;\\n\\n /* width: 100% !important;\\n max-width: 100% !important;\\n margin-left: 0;\\n align-self: stretch !important; */\\n}\\n\\n.contactsNewGroupForm {\\n box-sizing: border-box;\\n padding-top: 2.5rem !important;\\n gap: 5px;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.contactsCreateNewAddressBook {\\n border-radius: var(--border-radius);\\n color: white;\\n padding: var(--spacing-md);\\n justify-content: center;\\n box-sizing: border-box;\\n display: flex;\\n flex-direction: column;\\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\\n}\\n\\n.contactsAddressBookList {\\n width: 100%;\\n max-width: fit-content !important;\\n box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);\\n min-width: 200px;\\n box-sizing: border-box;\\n gap: 4px;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.contactsGroupList {\\n width: auto;\\n max-width: fit-content !important;\\n min-width: 200px;\\n box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);\\n box-sizing: border-box;\\n gap: 4px;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.contactsErrorDisplay {\\n width: 90%;\\n align-self: flex-end;\\n padding: 5px;\\n position: absolute;\\n background: pink;\\n display: none;\\n color: #787878;\\n border-radius: var(--border-radius-base);\\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px; \\n z-index: 3;\\n}\\n\\n.contactsShowErrors {\\n display: flex !important;\\n flex-direction: row;\\n justify-content: center;\\n}\\n.contactsCloseErrorDisplayButton {\\n position: absolute;\\n top: 0.2rem;\\n right: 0.2rem;\\n background: transparent;\\n color: #787878;\\n font-size: var(--font-size-xs);\\n border: none;\\n font-size: var(--font-size-sm);\\n cursor: pointer;\\n z-index: 4;\\n}\\n\\n.contactsCloseButton {\\n box-shadow: var(--box-shadow);\\n border-radius: var(--border-radius-base);\\n color: #787878 !important;\\n padding: 1em;\\n font-size: var(--font-size-sm);\\n position: absolute;\\n top: 0; \\n right: 0;\\n display: inline-block;\\n width: auto !important;\\n height: auto !important;\\n cursor: pointer;\\n font-size: var(--font-size-xs);\\n line-height: 1;\\n}\\n\\n.contactsCloseButton:hover {\\n box-shadow: 0 2px 4px var(--color-primary) !important;\\n}\\n\\n.contactsCloseButton:focus,\\n.contactsCloseButton:focus-visible {\\n outline: 3px solid var(--color-primary) !important;\\n outline-offset: 2px !important;\\n box-shadow: 0 0 0 2px white, 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\\n z-index: 1;\\n}\\n\\n.contactsNewAddressForm {\\n padding-top: 3em !important;\\n gap: 5px;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.contactsButton {\\n flex-shrink: 0;\\n background: #F0F0F0;\\n color: #787878;\\n border-radius: 8px;\\n text-align: left;\\n padding: var(--spacing-md);\\n cursor: pointer;\\n white-space: nowrap;\\n}\\n\\n.contactsButton:hover {\\n color: var(--color-primary);\\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \\n} \\n\\n.contactsSelectedButton {\\n background: color-mix(in srgb, var(--color-primary), white 60%) !important; \\n color: var(--color-primary);\\n}\\n\\n.contactsContactExistsAlert {\\n background: #F0F0F0 !important;\\n color: #787878;\\n padding: 10px;\\n border-radius: var(--border-radius-base);\\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\\n z-index: 10;\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n width: 300px;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n gap: 15px; \\n text-wrap: pretty;\\n}\\n\\n.contactsContactExistsActions {\\n display: flex;\\n flex-direction: row;\\n flex-wrap: nowrap;\\n justify-content: center;\\n align-items: center;\\n gap: 10px;\\n width: auto;\\n}\\n\\n.contactsContactExistsActions .contactsConfirmButton,\\n.contactsContactExistsActions .contactsCancelButton {\\n display: inline-flex !important;\\n width: auto !important;\\n min-width: fit-content;\\n flex: 0 0 auto;\\n margin: 0;\\n white-space: nowrap;\\n}\\n\\n[role=\\\"alert\\\"] {\\n border: none !important; /* Hides the element from all users and AT */\\n}\\n\\n.contactsPopupOverlay {\\n position: absolute;\\n inset: 0;\\n background: rgba(0, 0, 0, 0.2);\\n z-index: 8;\\n}\\n\\n.contactsAddressBookSelector.contactsOverlayActive > *:not(.contactsPopupOverlay):not(.contactsPopupDialog):not(.contactsContactExistsAlert) {\\n pointer-events: none;\\n user-select: none;\\n}\\n\\n.contactsAddressBookSelector.contactsOverlayActive .contactsPopupDialog,\\n.contactsAddressBookSelector.contactsOverlayActive .contactsContactExistsAlert,\\n.contactsAddressBookSelector.contactsOverlayActive .contactsPopupDialog *,\\n.contactsAddressBookSelector.contactsOverlayActive .contactsContactExistsAlert * {\\n pointer-events: auto;\\n}\\n\\n.contactsPopupDialog {\\n background: #F5F5F5 !important;\\n color: var(--color-primary);\\n padding: 2em;\\n border-radius: var(--border-radius-base);\\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\\n z-index: 50;\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n width: auto;\\n max-width: min(92vw, 34rem);\\n max-height: calc(100vh - 6rem);\\n overflow: auto;\\n box-sizing: border-box;\\n}\\n\\n@media (max-width: 600px) {\\n .contactsAddressBookUriEntry {\\n padding-top: 3rem !important;\\n }\\n\\n .contactsPopupDialog {\\n max-width: 92vw;\\n max-height: 78vh;\\n padding: 1.25rem;\\n }\\n}\\n\\n.contactsConfirmButton {\\n background: var(--color-primary);\\n color: white;\\n border-radius: var(--border-radius-base);\\n padding: var(--spacing-md);\\n transition: all 0.3s ease-in-out;\\n cursor: pointer;\\n}\\n\\n.contactsConfirmButton:hover {\\n transform: translateY(-2px);\\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\\n}\\n\\n.contactsCancelButton {\\n background: transparent;\\n color: #787878;\\n border-radius: var(--border-radius-base);\\n padding: var(--spacing-md);\\n border: 1px solid #ccc;\\n transition: all 0.3s ease-in-out;\\n cursor: pointer;\\n}\\n.contactsCancelButton:hover {\\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \\n color: var(--color-primary);\\n} \\n\\n.contactsNewContactCreationButton {\\n width: 10em !important;\\n align-self: flex-end;\\n line-height: 1;\\n}\\n\\n.contactsCreateGroupCreationButton {\\n flex-shrink: 0;\\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \\n color: var(--color-primary) !important;\\n border-radius: 8px;\\n text-align: left;\\n cursor: pointer;\\n white-space: nowrap;\\n}\\n\\n.contactsCloseButton {\\n position: absolute !important;\\n top: 0 !important;\\n right: 0 !important;\\n left: auto;\\n margin: 0;\\n align-self: auto !important;\\n background: transparent;\\n color: #787878;\\n font-size: var(--font-size-xs);\\n border: none;\\n font-size: var(--font-size-sm);\\n cursor: pointer;\\n z-index: 100 !important;\\n padding: 0.35rem 0.5rem;\\n line-height: 1;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* FriendList.css */\n/* Uses utilities: .list-reset, .section-title, .zebra-stripe, .flex, .gap-xs, .mb-md */\n\n.friendItem {\n padding: var(--spacing-xs) 0;\n font-size: 1em;\n color: var(--color-text-muted);\n}\n\n.friendItem:last-child {\n border-bottom: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/FriendList.css\"],\"names\":[],\"mappings\":\"AAAA,mBAAmB;AACnB,uFAAuF;;AAEvF;EACE,4BAA4B;EAC5B,cAAc;EACd,8BAA8B;AAChC;;AAEA;EACE,mBAAmB;AACrB\",\"sourcesContent\":[\"/* FriendList.css */\\n/* Uses utilities: .list-reset, .section-title, .zebra-stripe, .flex, .gap-xs, .mb-md */\\n\\n.friendItem {\\n padding: var(--spacing-xs) 0;\\n font-size: 1em;\\n color: var(--color-text-muted);\\n}\\n\\n.friendItem:last-child {\\n border-bottom: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* ProfileCard.css */\n/* Uses utilities: .action-button-focus, .btn-primary, .flex-column-center, .text-truncate, .text-center, .text-wrap-anywhere, .section-centered, .btn-transparent */\n\n.profileCard {\n /* Component container */\n}\n\n.image {\n width: 160px;\n height: 160px;\n border-radius: 50%;\n object-fit: cover;\n margin-bottom: var(--spacing-sm);\n box-shadow: var(--box-shadow-sm);\n border: 3px solid var(--color-primary);\n background: var(--color-card-bg);\n box-sizing: border-box;\n}\n\n.image-alt {\n width: 160px;\n height: 160px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n margin-bottom: var(--spacing-sm);\n box-shadow: var(--box-shadow-sm);\n border: 3px solid var(--color-primary);\n background: var(--color-card-bg);\n box-sizing: border-box;\n color: var(--color-text-secondary);\n}\n\n.name {\n font-size: var(--font-size-xl);\n font-weight: 700;\n line-height: var(--line-height-tight);\n text-decoration: underline;\n text-underline-offset: 0.2em;\n margin: 0;\n letter-spacing: var(--letter-spacing-wide);\n}\n\n.intro {\n color: var(--color-text-secondary);\n font-size: var(--font-size-base);\n line-height: var(--line-height-base);\n margin-bottom: var(--spacing-xs);\n max-width: 40ch;\n margin-left: auto;\n margin-right: auto;\n}\n\n.buttonSection {\n color: var(--color-text-secondary);\n font-size: 1em;\n margin-bottom: var(--spacing-xs);\n}\n\n.buttonSubSection {\n width: 100%;\n min-width: 0;\n display: grid;\n}\n\n.buttonSubSection button {\n width: 100%;\n min-width: 0;\n}\n\n.qrCodeSection {\n color: var(--color-text-secondary);\n font-size: 1em;\n margin-bottom: var(--spacing-xs);\n}\n\n.details {\n color: var(--color-text-muted);\n font-size: var(--font-size-base);\n line-height: var(--line-height-base);\n max-width: 45ch;\n margin-left: auto;\n margin-right: auto;\n}\n\n/* ProfileCard styles as regular CSS */\n.profile-card {\n border: 1px solid #ccc;\n padding: 16px;\n background: white;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/ProfileCard.css\"],\"names\":[],\"mappings\":\"AAAA,oBAAoB;AACpB,oKAAoK;;AAEpK;EACE,wBAAwB;AAC1B;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,iBAAiB;EACjB,gCAAgC;EAChC,gCAAgC;EAChC,sCAAsC;EACtC,gCAAgC;EAChC,sBAAsB;AACxB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,kBAAkB;EAClB,gCAAgC;EAChC,gCAAgC;EAChC,sCAAsC;EACtC,gCAAgC;EAChC,sBAAsB;EACtB,kCAAkC;AACpC;;AAEA;EACE,8BAA8B;EAC9B,gBAAgB;EAChB,qCAAqC;EACrC,0BAA0B;EAC1B,4BAA4B;EAC5B,SAAS;EACT,0CAA0C;AAC5C;;AAEA;EACE,kCAAkC;EAClC,gCAAgC;EAChC,oCAAoC;EACpC,gCAAgC;EAChC,eAAe;EACf,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,kCAAkC;EAClC,cAAc;EACd,gCAAgC;AAClC;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,kCAAkC;EAClC,cAAc;EACd,gCAAgC;AAClC;;AAEA;EACE,8BAA8B;EAC9B,gCAAgC;EAChC,oCAAoC;EACpC,eAAe;EACf,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA,sCAAsC;AACtC;EACE,sBAAsB;EACtB,aAAa;EACb,iBAAiB;AACnB\",\"sourcesContent\":[\"/* ProfileCard.css */\\n/* Uses utilities: .action-button-focus, .btn-primary, .flex-column-center, .text-truncate, .text-center, .text-wrap-anywhere, .section-centered, .btn-transparent */\\n\\n.profileCard {\\n /* Component container */\\n}\\n\\n.image {\\n width: 160px;\\n height: 160px;\\n border-radius: 50%;\\n object-fit: cover;\\n margin-bottom: var(--spacing-sm);\\n box-shadow: var(--box-shadow-sm);\\n border: 3px solid var(--color-primary);\\n background: var(--color-card-bg);\\n box-sizing: border-box;\\n}\\n\\n.image-alt {\\n width: 160px;\\n height: 160px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: 50%;\\n margin-bottom: var(--spacing-sm);\\n box-shadow: var(--box-shadow-sm);\\n border: 3px solid var(--color-primary);\\n background: var(--color-card-bg);\\n box-sizing: border-box;\\n color: var(--color-text-secondary);\\n}\\n\\n.name {\\n font-size: var(--font-size-xl);\\n font-weight: 700;\\n line-height: var(--line-height-tight);\\n text-decoration: underline;\\n text-underline-offset: 0.2em;\\n margin: 0;\\n letter-spacing: var(--letter-spacing-wide);\\n}\\n\\n.intro {\\n color: var(--color-text-secondary);\\n font-size: var(--font-size-base);\\n line-height: var(--line-height-base);\\n margin-bottom: var(--spacing-xs);\\n max-width: 40ch;\\n margin-left: auto;\\n margin-right: auto;\\n}\\n\\n.buttonSection {\\n color: var(--color-text-secondary);\\n font-size: 1em;\\n margin-bottom: var(--spacing-xs);\\n}\\n\\n.buttonSubSection {\\n width: 100%;\\n min-width: 0;\\n display: grid;\\n}\\n\\n.buttonSubSection button {\\n width: 100%;\\n min-width: 0;\\n}\\n\\n.qrCodeSection {\\n color: var(--color-text-secondary);\\n font-size: 1em;\\n margin-bottom: var(--spacing-xs);\\n}\\n\\n.details {\\n color: var(--color-text-muted);\\n font-size: var(--font-size-base);\\n line-height: var(--line-height-base);\\n max-width: 45ch;\\n margin-left: auto;\\n margin-right: auto;\\n}\\n\\n/* ProfileCard styles as regular CSS */\\n.profile-card {\\n border: 1px solid #ccc;\\n padding: 16px;\\n background: white;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* ProfileView.css */\n/* Uses utilities: .section-bg, .text-center */\n\n.profileSection {\n \n}\n\n/* Horizontal layout for cards */\n.profile-grid .profileSection {\n width: 100%;\n max-width: 100%;\n box-sizing: border-box;\n margin-bottom: var(--spacing-md);\n box-sizing: border-box;\n margin-bottom: var(--spacing-md);\n}\n\n@media (min-width: 900px) {\n .profileSection {\n margin-bottom: 0;\n }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/ProfileView.css\"],\"names\":[],\"mappings\":\"AAAA,oBAAoB;AACpB,8CAA8C;;AAE9C;;AAEA;;AAEA,gCAAgC;AAChC;EACE,WAAW;EACX,eAAe;EACf,sBAAsB;EACtB,gCAAgC;EAChC,sBAAsB;EACtB,gCAAgC;AAClC;;AAEA;EACE;IACE,gBAAgB;EAClB;AACF\",\"sourcesContent\":[\"/* ProfileView.css */\\n/* Uses utilities: .section-bg, .text-center */\\n\\n.profileSection {\\n \\n}\\n\\n/* Horizontal layout for cards */\\n.profile-grid .profileSection {\\n width: 100%;\\n max-width: 100%;\\n box-sizing: border-box;\\n margin-bottom: var(--spacing-md);\\n box-sizing: border-box;\\n margin-bottom: var(--spacing-md);\\n}\\n\\n@media (min-width: 900px) {\\n .profileSection {\\n margin-bottom: 0;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* QRCodeCard.css */\n/* Note: Uses utilities: .text-center */\n\n/* Caption under the QR code */\n.qrCaption {\n text-align: center;\n margin-top: 0;\n font-size: 0.95em;\n color: var(--color-text-secondary);\n}\n\n.QRCode {\n width: 100%;\n max-width: 320px;\n min-width: 180px;\n margin: 0 auto;\n display: block;\n}\n\n.QRCode [role=\"img\"]:focus {\n outline: 2px solid var(--color-primary, #7C4DFF);\n outline-offset: 2px;\n box-shadow: 0 0 0 2px rgba(124,77,255,0.2);\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/QRCodeCard.css\"],\"names\":[],\"mappings\":\"AAAA,mBAAmB;AACnB,uCAAuC;;AAEvC,8BAA8B;AAC9B;EACE,kBAAkB;EAClB,aAAa;EACb,iBAAiB;EACjB,kCAAkC;AACpC;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,gBAAgB;EAChB,cAAc;EACd,cAAc;AAChB;;AAEA;EACE,gDAAgD;EAChD,mBAAmB;EACnB,0CAA0C;AAC5C\",\"sourcesContent\":[\"/* QRCodeCard.css */\\n/* Note: Uses utilities: .text-center */\\n\\n/* Caption under the QR code */\\n.qrCaption {\\n text-align: center;\\n margin-top: 0;\\n font-size: 0.95em;\\n color: var(--color-text-secondary);\\n}\\n\\n.QRCode {\\n width: 100%;\\n max-width: 320px;\\n min-width: 180px;\\n margin: 0 auto;\\n display: block;\\n}\\n\\n.QRCode [role=\\\"img\\\"]:focus {\\n outline: 2px solid var(--color-primary, #7C4DFF);\\n outline-offset: 2px;\\n box-shadow: 0 0 0 2px rgba(124,77,255,0.2);\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* SocialCard.css */\n/* Uses utilities: .list-reset, .text-wrap-anywhere, .flex, .gap-sm, .gap-lg, .rounded-sm */\n\n.socialList {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: var(--spacing-lg);\n justify-content: center;\n}\n\n.socialItem {\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n font-size: 1.1em;\n}\n\n.socialItem span {\n min-width: 0;\n display: block;\n}\n\n.socialItem a {\n color: var(--color-primary);\n text-decoration: none;\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n min-height: var(--min-touch-target);\n padding: var(--spacing-xs);\n border-radius: var(--border-radius-base);\n transition: background-color var(--animation-duration) ease;\n position: relative;\n flex: 1;\n min-width: 0;\n}\n\n.socialItem a:hover,\n.socialItem a:focus {\n text-decoration: underline;\n background-color: rgba(124, 77, 255, 0.1);\n}\n\n/* Screen reader only external link indication */\n.socialItem a[href^=\"http\"]:after {\n content: \" (external link)\";\n position: absolute;\n left: -10000px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n}\n\n.socialIcon {\n width: 2.5em;\n height: 2.5em;\n border-radius: var(--border-radius-base);\n background: var(--color-card-bg);\n flex-shrink: 0;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/SocialCard.css\"],\"names\":[],\"mappings\":\"AAAA,mBAAmB;AACnB,2FAA2F;;AAE3F;EACE,aAAa;EACb,mBAAmB;EACnB,eAAe;EACf,sBAAsB;EACtB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,2BAA2B;EAC3B,qBAAqB;EACrB,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,mCAAmC;EACnC,0BAA0B;EAC1B,wCAAwC;EACxC,2DAA2D;EAC3D,kBAAkB;EAClB,OAAO;EACP,YAAY;AACd;;AAEA;;EAEE,0BAA0B;EAC1B,yCAAyC;AAC3C;;AAEA,gDAAgD;AAChD;EACE,2BAA2B;EAC3B,kBAAkB;EAClB,cAAc;EACd,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,wCAAwC;EACxC,gCAAgC;EAChC,cAAc;AAChB\",\"sourcesContent\":[\"/* SocialCard.css */\\n/* Uses utilities: .list-reset, .text-wrap-anywhere, .flex, .gap-sm, .gap-lg, .rounded-sm */\\n\\n.socialList {\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap;\\n gap: var(--spacing-lg);\\n justify-content: center;\\n}\\n\\n.socialItem {\\n display: flex;\\n align-items: center;\\n gap: var(--spacing-sm);\\n font-size: 1.1em;\\n}\\n\\n.socialItem span {\\n min-width: 0;\\n display: block;\\n}\\n\\n.socialItem a {\\n color: var(--color-primary);\\n text-decoration: none;\\n display: flex;\\n align-items: center;\\n gap: var(--spacing-sm);\\n min-height: var(--min-touch-target);\\n padding: var(--spacing-xs);\\n border-radius: var(--border-radius-base);\\n transition: background-color var(--animation-duration) ease;\\n position: relative;\\n flex: 1;\\n min-width: 0;\\n}\\n\\n.socialItem a:hover,\\n.socialItem a:focus {\\n text-decoration: underline;\\n background-color: rgba(124, 77, 255, 0.1);\\n}\\n\\n/* Screen reader only external link indication */\\n.socialItem a[href^=\\\"http\\\"]:after {\\n content: \\\" (external link)\\\";\\n position: absolute;\\n left: -10000px;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.socialIcon {\\n width: 2.5em;\\n height: 2.5em;\\n border-radius: var(--border-radius-base);\\n background: var(--color-card-bg);\\n flex-shrink: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* StuffCard.css */\n/* Uses utilities: .zebra-stripe */\n\n.stuffTable {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: var(--spacing-md);\n caption-side: top;\n}\n\n.stuffTable caption {\n font-weight: 600;\n padding: var(--spacing-sm);\n text-align: left;\n color: var(--color-text);\n}\n\n.stuffTable th,\n.stuffTable td {\n padding: var(--spacing-sm) var(--spacing-md);\n text-align: left;\n line-height: 1.4;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/StuffCard.css\"],\"names\":[],\"mappings\":\"AAAA,kBAAkB;AAClB,kCAAkC;;AAElC;EACE,WAAW;EACX,yBAAyB;EACzB,gCAAgC;EAChC,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,0BAA0B;EAC1B,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;;EAEE,4CAA4C;EAC5C,gBAAgB;EAChB,gBAAgB;AAClB\",\"sourcesContent\":[\"/* StuffCard.css */\\n/* Uses utilities: .zebra-stripe */\\n\\n.stuffTable {\\n width: 100%;\\n border-collapse: collapse;\\n margin-bottom: var(--spacing-md);\\n caption-side: top;\\n}\\n\\n.stuffTable caption {\\n font-weight: 600;\\n padding: var(--spacing-sm);\\n text-align: left;\\n color: var(--color-text);\\n}\\n\\n.stuffTable th,\\n.stuffTable td {\\n padding: var(--spacing-sm) var(--spacing-md);\\n text-align: left;\\n line-height: 1.4;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* Solid-UI form sizing fixes scoped to Edit CV section */\n.profile-form .hoverControl:not(:has(> img:first-child)) {\n border: 0.1em solid rgb(136, 136, 136) !important;\n}\n\n.profile-form .hoverControl:has(> img:first-child) {\n background-color: transparent !important;\n border: none !important;\n margin: 0 !important;\n border-radius: 0 !important;\n padding: 0.7em !important;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.profile-form .hoverControlHide {\n width: 1.5em !important;\n height: 1.5em !important;\n display: block;\n margin-top: 0 !important;\n margin-left: 0 !important;\n margin-right: 0 !important;\n margin-bottom: 0.3em !important;\n}\n\n.profile-form .hoverControl:has(> img:first-child) > span {\n display: inline-flex;\n align-items: center;\n margin-left: 0.3em;\n}\n\n.profile-form div[style*=\"padding: 0.5em\"]:has(> img) {\n display: inline-flex;\n align-items: center;\n}\n\n.profile-form div[style*=\"padding: 0.5em\"]:has(> img) > span {\n margin-left: 0.3em;\n}\n\n.profile-form .hoverControl:has(> img:first-child):hover {\n background-color: transparent !important;\n}\n\n.profile-form button:has(> img[src\\$=\".svg\"]) {\n background-color: transparent !important;\n border: none !important;\n margin: 0 !important;\n border-radius: 0 !important;\n}\n\n.profile-form button {\n\n}\n\n.profile-form input:not([type=\"color\"]),\n.profile-form textarea,\n.profile-form select {\n max-width: 100%;\n min-width: 0;\n box-sizing: border-box ;\n background-color: #eef !important;\n border: .05em solid #88c\n}\n\n.profile-form input[type=\"url\"] {\n width: 100%;\n}\n\n.profile-form .formFieldValue {\n min-width: 0;\n margin-bottom: var(--spacing-sm);\n}\n\n.profile-form .formFieldValue table {\n margin: 0 !important;\n padding: 0 !important;\n}\n\n.profile-form .formFieldValue td {\n padding: 0 !important;\n}\n\n.profile-form .formFieldValue input:not([type=\"color\"]),\n.profile-form .formFieldValue textarea,\n.profile-form .formFieldValue select {\n width: 100%;\n max-width: 100%;\n}\n\n.profile-form select#formSelect {\n width: 100%;\n max-width: 97%;\n box-sizing: border-box;\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.profile-form span select {\n max-width: 96% !important;\n box-sizing: border-box;\n}\n\n/* Remove border/padding from the first wrapper div (and its first child wrapper). */\n.profile-form > div:first-of-type,\n.profile-form > div:first-of-type > div:first-of-type {\n border: none !important;\n padding: 0 !important;\n}\n\n/* Remove border/padding from the inner div of the first wrapper in the contact section. */\nsection[aria-labelledby=\"edit-profile-contact-heading\"] .profile-form > div:first-of-type > div:first-of-type {\n border: none !important;\n padding: 0 !important;\n}\n\n/* In contactPane, remove border/padding from all direct child divs. */\n.contactPane > div {\n border: none !important;\n padding: 0 !important;\n}\n\n/* Align schema.org, solid terms, FOAF, vCard, and org field labels with their input values. */\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://schema.org/\"]),\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/solid/terms#\"]),\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://xmlns.com/foaf/0.1/\"]),\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/2006/vcard/ns\"]),\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/org#\"]) {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n}\n\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://schema.org/\"]) + .formFieldValue,\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/solid/terms#\"]) + .formFieldValue,\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://xmlns.com/foaf/0.1/\"]) + .formFieldValue,\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/2006/vcard/ns\"]) + .formFieldValue,\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/org#\"]) + .formFieldValue {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n}\n\n.profile-form textarea {\n width: 100%;\n box-sizing: border-box;\n margin-top: var(--spacing-xs);\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n/* Add horizontal gap between label and textarea for all label+textarea pairs. */\n.profile-form div:has(> a) + div:has(textarea) {\n margin-left: var(--spacing-sm);\n}\n\n/* Center textarea label vertically in flex rows. */\n.profile-form div[style*=\"display: flex\"][style*=\"flex-direction: row\"]:has(textarea) {\n align-items: flex-start;\n}\n\n.profile-form div[style*=\"display: flex\"][style*=\"flex-direction: row\"]:has(textarea) > div:has(> a) {\n padding-top: var(--spacing-xs);\n}\n\n.profile-form input:not([type=\"color\"]) {\n width: 100%;\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n/* Remove padding from table cells within webidControl */\n.webidControl table td {\n padding: 0 !important;\n}\n\n/* Remove padding from contactPane divs inside webidControl table cells */\n.webidControl table td div.contactPane.namedPane.fullWidth.individualPane {\n padding: 0 !important;\n}\n\n.webidControl table td div.contactPane.namedPane {\n border: none !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/rdfFormsEnforced.css\"],\"names\":[],\"mappings\":\"AAAA,yDAAyD;AACzD;EACE,iDAAiD;AACnD;;AAEA;EACE,wCAAwC;EACxC,uBAAuB;EACvB,oBAAoB;EACpB,2BAA2B;EAC3B,yBAAyB;EACzB,eAAe;EACf,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,uBAAuB;EACvB,wBAAwB;EACxB,cAAc;EACd,wBAAwB;EACxB,yBAAyB;EACzB,0BAA0B;EAC1B,+BAA+B;AACjC;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,wCAAwC;EACxC,uBAAuB;EACvB,oBAAoB;EACpB,2BAA2B;AAC7B;;AAEA;;AAEA;;AAEA;;;EAGE,eAAe;EACf,YAAY;EACZ,uBAAuB;EACvB,iCAAiC;EACjC;AACF;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,YAAY;EACZ,gCAAgC;AAClC;;AAEA;EACE,oBAAoB;EACpB,qBAAqB;AACvB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;;;EAGE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,cAAc;EACd,sBAAsB;EACtB,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA;EACE,yBAAyB;EACzB,sBAAsB;AACxB;;AAEA,oFAAoF;AACpF;;EAEE,uBAAuB;EACvB,qBAAqB;AACvB;;AAEA,0FAA0F;AAC1F;EACE,uBAAuB;EACvB,qBAAqB;AACvB;;AAEA,sEAAsE;AACtE;EACE,uBAAuB;EACvB,qBAAqB;AACvB;;AAEA,8FAA8F;AAC9F;;;;;EAKE,oBAAoB;EACpB,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA;;;;;EAKE,oBAAoB;EACpB,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA;EACE,WAAW;EACX,sBAAsB;EACtB,6BAA6B;EAC7B,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA,gFAAgF;AAChF;EACE,8BAA8B;AAChC;;AAEA,mDAAmD;AACnD;EACE,uBAAuB;AACzB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,WAAW;EACX,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA,wDAAwD;AACxD;EACE,qBAAqB;AACvB;;AAEA,yEAAyE;AACzE;EACE,qBAAqB;AACvB;;AAEA;EACE,uBAAuB;AACzB\",\"sourcesContent\":[\"/* Solid-UI form sizing fixes scoped to Edit CV section */\\n.profile-form .hoverControl:not(:has(> img:first-child)) {\\n border: 0.1em solid rgb(136, 136, 136) !important;\\n}\\n\\n.profile-form .hoverControl:has(> img:first-child) {\\n background-color: transparent !important;\\n border: none !important;\\n margin: 0 !important;\\n border-radius: 0 !important;\\n padding: 0.7em !important;\\n cursor: pointer;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.profile-form .hoverControlHide {\\n width: 1.5em !important;\\n height: 1.5em !important;\\n display: block;\\n margin-top: 0 !important;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n margin-bottom: 0.3em !important;\\n}\\n\\n.profile-form .hoverControl:has(> img:first-child) > span {\\n display: inline-flex;\\n align-items: center;\\n margin-left: 0.3em;\\n}\\n\\n.profile-form div[style*=\\\"padding: 0.5em\\\"]:has(> img) {\\n display: inline-flex;\\n align-items: center;\\n}\\n\\n.profile-form div[style*=\\\"padding: 0.5em\\\"]:has(> img) > span {\\n margin-left: 0.3em;\\n}\\n\\n.profile-form .hoverControl:has(> img:first-child):hover {\\n background-color: transparent !important;\\n}\\n\\n.profile-form button:has(> img[src$=\\\".svg\\\"]) {\\n background-color: transparent !important;\\n border: none !important;\\n margin: 0 !important;\\n border-radius: 0 !important;\\n}\\n\\n.profile-form button {\\n\\n}\\n\\n.profile-form input:not([type=\\\"color\\\"]),\\n.profile-form textarea,\\n.profile-form select {\\n max-width: 100%;\\n min-width: 0;\\n box-sizing: border-box ;\\n background-color: #eef !important;\\n border: .05em solid #88c\\n}\\n\\n.profile-form input[type=\\\"url\\\"] {\\n width: 100%;\\n}\\n\\n.profile-form .formFieldValue {\\n min-width: 0;\\n margin-bottom: var(--spacing-sm);\\n}\\n\\n.profile-form .formFieldValue table {\\n margin: 0 !important;\\n padding: 0 !important;\\n}\\n\\n.profile-form .formFieldValue td {\\n padding: 0 !important;\\n}\\n\\n.profile-form .formFieldValue input:not([type=\\\"color\\\"]),\\n.profile-form .formFieldValue textarea,\\n.profile-form .formFieldValue select {\\n width: 100%;\\n max-width: 100%;\\n}\\n\\n.profile-form select#formSelect {\\n width: 100%;\\n max-width: 97%;\\n box-sizing: border-box;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n.profile-form span select {\\n max-width: 96% !important;\\n box-sizing: border-box;\\n}\\n\\n/* Remove border/padding from the first wrapper div (and its first child wrapper). */\\n.profile-form > div:first-of-type,\\n.profile-form > div:first-of-type > div:first-of-type {\\n border: none !important;\\n padding: 0 !important;\\n}\\n\\n/* Remove border/padding from the inner div of the first wrapper in the contact section. */\\nsection[aria-labelledby=\\\"edit-profile-contact-heading\\\"] .profile-form > div:first-of-type > div:first-of-type {\\n border: none !important;\\n padding: 0 !important;\\n}\\n\\n/* In contactPane, remove border/padding from all direct child divs. */\\n.contactPane > div {\\n border: none !important;\\n padding: 0 !important;\\n}\\n\\n/* Align schema.org, solid terms, FOAF, vCard, and org field labels with their input values. */\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://schema.org/\\\"]),\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/solid/terms#\\\"]),\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://xmlns.com/foaf/0.1/\\\"]),\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/2006/vcard/ns\\\"]),\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/org#\\\"]) {\\n display: inline-flex;\\n align-items: center;\\n vertical-align: middle;\\n}\\n\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://schema.org/\\\"]) + .formFieldValue,\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/solid/terms#\\\"]) + .formFieldValue,\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://xmlns.com/foaf/0.1/\\\"]) + .formFieldValue,\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/2006/vcard/ns\\\"]) + .formFieldValue,\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/org#\\\"]) + .formFieldValue {\\n display: inline-flex;\\n align-items: center;\\n vertical-align: middle;\\n}\\n\\n.profile-form textarea {\\n width: 100%;\\n box-sizing: border-box;\\n margin-top: var(--spacing-xs);\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n/* Add horizontal gap between label and textarea for all label+textarea pairs. */\\n.profile-form div:has(> a) + div:has(textarea) {\\n margin-left: var(--spacing-sm);\\n}\\n\\n/* Center textarea label vertically in flex rows. */\\n.profile-form div[style*=\\\"display: flex\\\"][style*=\\\"flex-direction: row\\\"]:has(textarea) {\\n align-items: flex-start;\\n}\\n\\n.profile-form div[style*=\\\"display: flex\\\"][style*=\\\"flex-direction: row\\\"]:has(textarea) > div:has(> a) {\\n padding-top: var(--spacing-xs);\\n}\\n\\n.profile-form input:not([type=\\\"color\\\"]) {\\n width: 100%;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n/* Remove padding from table cells within webidControl */\\n.webidControl table td {\\n padding: 0 !important;\\n}\\n\\n/* Remove padding from contactPane divs inside webidControl table cells */\\n.webidControl table td div.contactPane.namedPane.fullWidth.individualPane {\\n padding: 0 !important;\\n}\\n\\n.webidControl table td div.contactPane.namedPane {\\n border: none !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* Utility-first CSS classes for layout, spacing, and responsiveness */\n\n.actionButton {\n width: 100%;\n min-width: 180px;\n max-width: 320px;\n box-sizing: border-box;\n display: inline-block;\n}\n\n.selectedButton {\n background-color: var(--color-primary) !important;\n color: white !important;\n border: 1px solid white !important;\n}\n/* ===========================================\n PROFILE GRID LAYOUT\n =========================================== */\n\n.profile-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(30em, 1fr));\n gap: var(--spacing-lg);\n background: var(--color-background);\n}\n\n.profile-header,\n.profile-footer {\n grid-column: 1 / -1;\n}\n\n.center {\n justify-content: center;\n align-items: center;\n}\n\n.flex {\n display: flex;\n}\n.grid {\n display: grid;\n}\n\n/* Spacing utilities using CSS variables */\n.gap-xs { gap: var(--spacing-xs); }\n.gap-sm { gap: var(--spacing-sm); }\n.gap-md { gap: var(--spacing-md); }\n.gap-lg { gap: var(--spacing-lg); }\n.gap-xl { gap: var(--spacing-xl); }\n\n.mt-xs { margin-top: var(--spacing-xs); }\n.mt-sm { margin-top: var(--spacing-sm); }\n.mt-md { margin-top: var(--spacing-md); }\n.mt-lg { margin-top: var(--spacing-lg); }\n\n.mb-xs { margin-bottom: var(--spacing-xs); }\n.mb-sm { margin-bottom: var(--spacing-sm); }\n.mb-md { margin-bottom: var(--spacing-md); }\n.mb-lg { margin-bottom: var(--spacing-lg); }\n\n.p-xs { padding: var(--spacing-xs); }\n.p-sm { padding: var(--spacing-sm); }\n.p-md { padding: var(--spacing-md); }\n.p-lg { padding: var(--spacing-lg); }\n\n.rounded { border-radius: var(--border-radius-full); }\n.rounded-sm { border-radius: var(--border-radius-base); }\n\n.shadow { box-shadow: var(--box-shadow); }\n.shadow-sm { box-shadow: var(--box-shadow-sm); }\n\n.bg-primary {\n background: var(--color-primary);\n color: #fff;\n}\n.bg-card {\n background: var(--color-card-bg);\n}\n\n/* Accessibility utilities */\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.min-touch-target {\n min-height: var(--min-touch-target);\n min-width: var(--min-touch-target);\n}\n\n/* Enhanced accessibility utilities */\n.visually-hidden {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.visually-hidden.focusable:focus,\n.visually-hidden.focusable:active {\n position: static !important;\n width: auto !important;\n height: auto !important;\n padding: inherit !important;\n margin: inherit !important;\n overflow: visible !important;\n clip: auto !important;\n white-space: inherit !important;\n}\n\n/* Skip links utility */\n.skip-links {\n position: absolute;\n top: -100px;\n left: 0;\n z-index: 1000;\n}\n\n.skip-links a {\n position: absolute;\n left: 6px;\n top: 6px;\n padding: var(--spacing-sm);\n background: var(--color-primary);\n color: white;\n text-decoration: none;\n border-radius: var(--border-radius-base);\n}\n\n.skip-links a:focus {\n top: 6px;\n}\n\n.reduced-motion {\n animation: none !important;\n transition: none !important;\n}\n\n/* Focus management */\n.focus-ring {\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n}\n\n.no-focus-ring {\n outline: none;\n}\n\n.no-focus-ring:focus-visible {\n outline: none;\n box-shadow: none;\n}\n\n/* ARIA live regions */\n.live-region {\n position: absolute;\n left: -10000px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n}\n\n/* Note: Use aria-live=\"polite\" or aria-live=\"assertive\" HTML attributes with .live-region */\n\n/* Text scaling utilities */\n.text-scale-friendly {\n line-height: 1.5;\n max-width: 70ch; /* Optimal reading length */\n}\n\n/* Text accessibility utilities */\n.text-readable {\n line-height: var(--line-height-base);\n max-width: 65ch;\n}\n\n.text-lg {\n font-size: var(--font-size-lg);\n line-height: var(--line-height-base);\n}\n\n.text-small {\n font-size: max(var(--font-size-sm), var(--min-font-size));\n line-height: var(--min-line-height);\n}\n\n.text-contrast-high {\n color: var(--color-text);\n font-weight: 600;\n}\n\n:focus-visible {\n outline: var(--focus-ring-width) solid var(--color-primary);\n outline-offset: 2px;\n box-shadow: 0 0 0 1px var(--color-background);\n}\n\n:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n}\n\n/* Better focus for text elements */\n.focusable-text:focus {\n background-color: rgba(124, 77, 255, 0.1);\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n border-radius: 2px;\n}\n\n/* High contrast text */\n.high-contrast {\n color: var(--color-text);\n background: var(--color-background);\n border: 1px solid var(--color-border-pale);\n}\n\n/* ===========================================\n CONSOLIDATED COMPONENT PATTERNS\n =========================================== */\n\n/* Primary Button - used by ChatWithMe, ProfileCard */\n.btn-primary {\n min-height: var(--min-touch-target);\n padding: var(--spacing-sm) var(--spacing-md);\n border: 1px solid var(--color-primary);\n border-radius: var(--border-radius-base);\n background: var(--color-primary);\n color: white;\n font-weight: 600;\n cursor: pointer;\n transition: all var(--animation-duration) ease;\n}\n\n.btn-primary:hover {\n background: color-mix(in srgb, var(--color-primary) 90%, black);\n box-shadow: 0 2px 4px rgba(124, 77, 255, 0.2);\n}\n\n.btn-primary:active {\n box-shadow: 0 1px 2px rgba(124, 77, 255, 0.2);\n}\n\n.btn-primary:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n transform: none;\n}\n\n/* Action Button Focus - used by ChatWithMe, ProfileCard */\n.action-button-focus:focus,\n.action-button-focus:focus-visible {\n outline: 3px solid var(--color-primary) !important;\n outline-offset: 2px !important;\n box-shadow: 0 0 0 2px var(--color-background), 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\n z-index: 1;\n}\n\n/* List Reset - used by FriendList, SocialCard, nav */\n.list-reset {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n\n/* Zebra Striping - used by FriendList, StuffCard tables */\n.zebra-stripe tr:nth-child(even),\n.zebra-stripe > *:nth-child(even) {\n background-color: rgba(0, 0, 0, 0.02);\n}\n\n/* Section Title - primary colored heading */\n.section-title {\n font-size: 1.25em;\n font-weight: 600;\n color: var(--color-primary);\n margin: 0;\n}\n\n/* Text Overflow - used by ProfileCard, SocialCard */\n.text-truncate {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.text-wrap-anywhere {\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n\n/* Loading Text - primary colored centered loading indicator */\n.loading-text {\n color: var(--color-primary);\n text-align: center;\n margin: var(--spacing-md) 0;\n}\n\n/* Centered Section - flex column with center alignment */\n.section-centered {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n/* Card Section Background */\n.section-bg {\n background: var(--color-section-bg);\n border-radius: var(--border-radius-full);\n box-shadow: var(--box-shadow);\n padding: var(--spacing-md);\n}\n\n\n/* Transparent button override (for solid-ui integration) */\n.btn-transparent {\n background-color: transparent;\n}\n\n.btn-transparent:hover {\n background-color: transparent;\n}\n\n/* input */\n.input {\n padding: 5px;\n min-height: var(--min-touch-target);\n height: 35px;\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n border: none;\n border-radius: var(--border-radius-base);\n background: white;\n font-weight: 600;\n font-size: var(--font-size-sm);\n transition: box-shadow 0.3s ease;\n}\n\n.input:focus,\n.input:focus-visible {\n border-radius: var(--border-radius-base);\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px !important;\n z-index: 1;\n}\n\ninput[type=\"radio\"] {\n accent-color: var(--color-secondary); /* Change to your desired color */\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/utilities.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"/* Utility-first CSS classes for layout, spacing, and responsiveness */\\n\\n.actionButton {\\n width: 100%;\\n min-width: 180px;\\n max-width: 320px;\\n box-sizing: border-box;\\n display: inline-block;\\n}\\n\\n.selectedButton {\\n background-color: var(--color-primary) !important;\\n color: white !important;\\n border: 1px solid white !important;\\n}\\n/* ===========================================\\n PROFILE GRID LAYOUT\\n =========================================== */\\n\\n.profile-grid {\\n display: grid;\\n grid-template-columns: repeat(auto-fit, minmax(30em, 1fr));\\n gap: var(--spacing-lg);\\n background: var(--color-background);\\n}\\n\\n.profile-header,\\n.profile-footer {\\n grid-column: 1 / -1;\\n}\\n\\n.center {\\n justify-content: center;\\n align-items: center;\\n}\\n\\n.flex {\\n display: flex;\\n}\\n.grid {\\n display: grid;\\n}\\n\\n/* Spacing utilities using CSS variables */\\n.gap-xs { gap: var(--spacing-xs); }\\n.gap-sm { gap: var(--spacing-sm); }\\n.gap-md { gap: var(--spacing-md); }\\n.gap-lg { gap: var(--spacing-lg); }\\n.gap-xl { gap: var(--spacing-xl); }\\n\\n.mt-xs { margin-top: var(--spacing-xs); }\\n.mt-sm { margin-top: var(--spacing-sm); }\\n.mt-md { margin-top: var(--spacing-md); }\\n.mt-lg { margin-top: var(--spacing-lg); }\\n\\n.mb-xs { margin-bottom: var(--spacing-xs); }\\n.mb-sm { margin-bottom: var(--spacing-sm); }\\n.mb-md { margin-bottom: var(--spacing-md); }\\n.mb-lg { margin-bottom: var(--spacing-lg); }\\n\\n.p-xs { padding: var(--spacing-xs); }\\n.p-sm { padding: var(--spacing-sm); }\\n.p-md { padding: var(--spacing-md); }\\n.p-lg { padding: var(--spacing-lg); }\\n\\n.rounded { border-radius: var(--border-radius-full); }\\n.rounded-sm { border-radius: var(--border-radius-base); }\\n\\n.shadow { box-shadow: var(--box-shadow); }\\n.shadow-sm { box-shadow: var(--box-shadow-sm); }\\n\\n.bg-primary {\\n background: var(--color-primary);\\n color: #fff;\\n}\\n.bg-card {\\n background: var(--color-card-bg);\\n}\\n\\n/* Accessibility utilities */\\n.sr-only {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n white-space: nowrap;\\n border: 0;\\n}\\n\\n.min-touch-target {\\n min-height: var(--min-touch-target);\\n min-width: var(--min-touch-target);\\n}\\n\\n/* Enhanced accessibility utilities */\\n.visually-hidden {\\n position: absolute !important;\\n width: 1px !important;\\n height: 1px !important;\\n padding: 0 !important;\\n margin: -1px !important;\\n overflow: hidden !important;\\n clip: rect(0, 0, 0, 0) !important;\\n white-space: nowrap !important;\\n border: 0 !important;\\n}\\n\\n.visually-hidden.focusable:focus,\\n.visually-hidden.focusable:active {\\n position: static !important;\\n width: auto !important;\\n height: auto !important;\\n padding: inherit !important;\\n margin: inherit !important;\\n overflow: visible !important;\\n clip: auto !important;\\n white-space: inherit !important;\\n}\\n\\n/* Skip links utility */\\n.skip-links {\\n position: absolute;\\n top: -100px;\\n left: 0;\\n z-index: 1000;\\n}\\n\\n.skip-links a {\\n position: absolute;\\n left: 6px;\\n top: 6px;\\n padding: var(--spacing-sm);\\n background: var(--color-primary);\\n color: white;\\n text-decoration: none;\\n border-radius: var(--border-radius-base);\\n}\\n\\n.skip-links a:focus {\\n top: 6px;\\n}\\n\\n.reduced-motion {\\n animation: none !important;\\n transition: none !important;\\n}\\n\\n/* Focus management */\\n.focus-ring {\\n outline: 2px solid var(--color-primary);\\n outline-offset: 2px;\\n}\\n\\n.no-focus-ring {\\n outline: none;\\n}\\n\\n.no-focus-ring:focus-visible {\\n outline: none;\\n box-shadow: none;\\n}\\n\\n/* ARIA live regions */\\n.live-region {\\n position: absolute;\\n left: -10000px;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n/* Note: Use aria-live=\\\"polite\\\" or aria-live=\\\"assertive\\\" HTML attributes with .live-region */\\n\\n/* Text scaling utilities */\\n.text-scale-friendly {\\n line-height: 1.5;\\n max-width: 70ch; /* Optimal reading length */\\n}\\n\\n/* Text accessibility utilities */\\n.text-readable {\\n line-height: var(--line-height-base);\\n max-width: 65ch;\\n}\\n\\n.text-lg {\\n font-size: var(--font-size-lg);\\n line-height: var(--line-height-base);\\n}\\n\\n.text-small {\\n font-size: max(var(--font-size-sm), var(--min-font-size));\\n line-height: var(--min-line-height);\\n}\\n\\n.text-contrast-high {\\n color: var(--color-text);\\n font-weight: 600;\\n}\\n\\n:focus-visible {\\n outline: var(--focus-ring-width) solid var(--color-primary);\\n outline-offset: 2px;\\n box-shadow: 0 0 0 1px var(--color-background);\\n}\\n\\n:focus:not(:focus-visible) {\\n outline: none;\\n box-shadow: none;\\n}\\n\\n/* Better focus for text elements */\\n.focusable-text:focus {\\n background-color: rgba(124, 77, 255, 0.1);\\n outline: 2px solid var(--color-primary);\\n outline-offset: 2px;\\n border-radius: 2px;\\n}\\n\\n/* High contrast text */\\n.high-contrast {\\n color: var(--color-text);\\n background: var(--color-background);\\n border: 1px solid var(--color-border-pale);\\n}\\n\\n/* ===========================================\\n CONSOLIDATED COMPONENT PATTERNS\\n =========================================== */\\n\\n/* Primary Button - used by ChatWithMe, ProfileCard */\\n.btn-primary {\\n min-height: var(--min-touch-target);\\n padding: var(--spacing-sm) var(--spacing-md);\\n border: 1px solid var(--color-primary);\\n border-radius: var(--border-radius-base);\\n background: var(--color-primary);\\n color: white;\\n font-weight: 600;\\n cursor: pointer;\\n transition: all var(--animation-duration) ease;\\n}\\n\\n.btn-primary:hover {\\n background: color-mix(in srgb, var(--color-primary) 90%, black);\\n box-shadow: 0 2px 4px rgba(124, 77, 255, 0.2);\\n}\\n\\n.btn-primary:active {\\n box-shadow: 0 1px 2px rgba(124, 77, 255, 0.2);\\n}\\n\\n.btn-primary:disabled {\\n opacity: 0.6;\\n cursor: not-allowed;\\n transform: none;\\n}\\n\\n/* Action Button Focus - used by ChatWithMe, ProfileCard */\\n.action-button-focus:focus,\\n.action-button-focus:focus-visible {\\n outline: 3px solid var(--color-primary) !important;\\n outline-offset: 2px !important;\\n box-shadow: 0 0 0 2px var(--color-background), 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\\n z-index: 1;\\n}\\n\\n/* List Reset - used by FriendList, SocialCard, nav */\\n.list-reset {\\n list-style: none;\\n padding: 0;\\n margin: 0;\\n}\\n\\n/* Zebra Striping - used by FriendList, StuffCard tables */\\n.zebra-stripe tr:nth-child(even),\\n.zebra-stripe > *:nth-child(even) {\\n background-color: rgba(0, 0, 0, 0.02);\\n}\\n\\n/* Section Title - primary colored heading */\\n.section-title {\\n font-size: 1.25em;\\n font-weight: 600;\\n color: var(--color-primary);\\n margin: 0;\\n}\\n\\n/* Text Overflow - used by ProfileCard, SocialCard */\\n.text-truncate {\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n overflow: hidden;\\n}\\n\\n.text-wrap-anywhere {\\n overflow-wrap: anywhere;\\n word-break: break-word;\\n}\\n\\n/* Loading Text - primary colored centered loading indicator */\\n.loading-text {\\n color: var(--color-primary);\\n text-align: center;\\n margin: var(--spacing-md) 0;\\n}\\n\\n/* Centered Section - flex column with center alignment */\\n.section-centered {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n}\\n\\n/* Card Section Background */\\n.section-bg {\\n background: var(--color-section-bg);\\n border-radius: var(--border-radius-full);\\n box-shadow: var(--box-shadow);\\n padding: var(--spacing-md);\\n}\\n\\n\\n/* Transparent button override (for solid-ui integration) */\\n.btn-transparent {\\n background-color: transparent;\\n}\\n\\n.btn-transparent:hover {\\n background-color: transparent;\\n}\\n\\n/* input */\\n.input {\\n padding: 5px;\\n min-height: var(--min-touch-target);\\n height: 35px;\\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\\n border: none;\\n border-radius: var(--border-radius-base);\\n background: white;\\n font-weight: 600;\\n font-size: var(--font-size-sm);\\n transition: box-shadow 0.3s ease;\\n}\\n\\n.input:focus,\\n.input:focus-visible {\\n border-radius: var(--border-radius-base);\\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px !important;\\n z-index: 1;\\n}\\n\\ninput[type=\\\"radio\\\"] {\\n accent-color: var(--color-secondary); /* Change to your desired color */\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n * Wyatt Baldwin <self@wyattbaldwin.com>\n * All rights reserved\n *\n * Licensed under the MIT license.\n *\n * http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n single_source_shortest_paths: function(graph, s, d) {\n // Predecessor map for each node that has been encountered.\n // node ID => predecessor node ID\n var predecessors = {};\n\n // Costs of shortest paths from s to all nodes encountered.\n // node ID => cost\n var costs = {};\n costs[s] = 0;\n\n // Costs of shortest paths from s to all nodes encountered; differs from\n // `costs` in that it provides easy access to the node that currently has\n // the known shortest path from s.\n // XXX: Do we actually need both `costs` and `open`?\n var open = dijkstra.PriorityQueue.make();\n open.push(s, 0);\n\n var closest,\n u, v,\n cost_of_s_to_u,\n adjacent_nodes,\n cost_of_e,\n cost_of_s_to_u_plus_cost_of_e,\n cost_of_s_to_v,\n first_visit;\n while (!open.empty()) {\n // In the nodes remaining in graph that have a known cost from s,\n // find the node, u, that currently has the shortest path from s.\n closest = open.pop();\n u = closest.value;\n cost_of_s_to_u = closest.cost;\n\n // Get nodes adjacent to u...\n adjacent_nodes = graph[u] || {};\n\n // ...and explore the edges that connect u to those nodes, updating\n // the cost of the shortest paths to any or all of those nodes as\n // necessary. v is the node across the current edge from u.\n for (v in adjacent_nodes) {\n if (adjacent_nodes.hasOwnProperty(v)) {\n // Get the cost of the edge running from u to v.\n cost_of_e = adjacent_nodes[v];\n\n // Cost of s to u plus the cost of u to v across e--this is *a*\n // cost from s to v that may or may not be less than the current\n // known cost to v.\n cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n // If we haven't visited v yet OR if the current known cost from s to\n // v is greater than the new cost we just found (cost of s to u plus\n // cost of u to v across e), update v's cost in the cost list and\n // update v's predecessor in the predecessor list (it's now u).\n cost_of_s_to_v = costs[v];\n first_visit = (typeof costs[v] === 'undefined');\n if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n costs[v] = cost_of_s_to_u_plus_cost_of_e;\n open.push(v, cost_of_s_to_u_plus_cost_of_e);\n predecessors[v] = u;\n }\n }\n }\n }\n\n if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n throw new Error(msg);\n }\n\n return predecessors;\n },\n\n extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n var nodes = [];\n var u = d;\n var predecessor;\n while (u) {\n nodes.push(u);\n predecessor = predecessors[u];\n u = predecessors[u];\n }\n nodes.reverse();\n return nodes;\n },\n\n find_path: function(graph, s, d) {\n var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n return dijkstra.extract_shortest_path_from_predecessor_list(\n predecessors, d);\n },\n\n /**\n * A very naive priority queue implementation.\n */\n PriorityQueue: {\n make: function (opts) {\n var T = dijkstra.PriorityQueue,\n t = {},\n key;\n opts = opts || {};\n for (key in T) {\n if (T.hasOwnProperty(key)) {\n t[key] = T[key];\n }\n }\n t.queue = [];\n t.sorter = opts.sorter || T.default_sorter;\n return t;\n },\n\n default_sorter: function (a, b) {\n return a.cost - b.cost;\n },\n\n /**\n * Add a new item to the queue and ensure the highest priority element\n * is at the front of the queue.\n */\n push: function (value, cost) {\n var item = {value: value, cost: cost};\n this.queue.push(item);\n this.queue.sort(this.sorter);\n },\n\n /**\n * Return the highest priority element in the queue.\n */\n pop: function () {\n return this.queue.shift();\n },\n\n empty: function () {\n return this.queue.length === 0;\n }\n }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n module.exports = dijkstra;\n}\n","\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n const args = [].slice.call(arguments, 1)\n const argsNum = args.length\n const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n if (!isLastArgCb && !canPromise()) {\n throw new Error('Callback required as last argument')\n }\n\n if (isLastArgCb) {\n if (argsNum < 2) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 2) {\n cb = text\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 3) {\n if (canvas.getContext && typeof cb === 'undefined') {\n cb = opts\n opts = undefined\n } else {\n cb = opts\n opts = text\n text = canvas\n canvas = undefined\n }\n }\n } else {\n if (argsNum < 1) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 1) {\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 2 && !canvas.getContext) {\n opts = text\n text = canvas\n canvas = undefined\n }\n\n return new Promise(function (resolve, reject) {\n try {\n const data = QRCode.create(text, opts)\n resolve(renderFunc(data, canvas, opts))\n } catch (e) {\n reject(e)\n }\n })\n }\n\n try {\n const data = QRCode.create(text, opts)\n cb(null, renderFunc(data, canvas, opts))\n } catch (e) {\n cb(e)\n }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n return SvgRenderer.render(data, opts)\n})\n","// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n","/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n if (version === 1) return []\n\n const posCount = Math.floor(version / 7) + 2\n const size = getSymbolSize(version)\n const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n const positions = [size - 7] // Last coord is always (size - 7)\n\n for (let i = 1; i < posCount - 1; i++) {\n positions[i] = positions[i - 1] - intervals\n }\n\n positions.push(6) // First coord is always 6\n\n return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const coords = []\n const pos = exports.getRowColCoords(version)\n const posLength = pos.length\n\n for (let i = 0; i < posLength; i++) {\n for (let j = 0; j < posLength; j++) {\n // Skip if position is occupied by finder patterns\n if ((i === 0 && j === 0) || // top-left\n (i === 0 && j === posLength - 1) || // bottom-left\n (i === posLength - 1 && j === 0)) { // top-right\n continue\n }\n\n coords.push([pos[i], pos[j]])\n }\n }\n\n return coords\n}\n","const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n this.mode = Mode.ALPHANUMERIC\n this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n let i\n\n // Input data characters are divided into groups of two characters\n // and encoded as 11-bit binary codes.\n for (i = 0; i + 2 <= this.data.length; i += 2) {\n // The character value of the first character is multiplied by 45\n let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n // The character value of the second digit is added to the product\n value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n // The sum is then stored as 11-bit binary number\n bitBuffer.put(value, 11)\n }\n\n // If the number of input data characters is not a multiple of two,\n // the character value of the final character is encoded as a 6-bit binary number.\n if (this.data.length % 2) {\n bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n }\n}\n\nmodule.exports = AlphanumericData\n","function BitBuffer () {\n this.buffer = []\n this.length = 0\n}\n\nBitBuffer.prototype = {\n\n get: function (index) {\n const bufIndex = Math.floor(index / 8)\n return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n },\n\n put: function (num, length) {\n for (let i = 0; i < length; i++) {\n this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n }\n },\n\n getLengthInBits: function () {\n return this.length\n },\n\n putBit: function (bit) {\n const bufIndex = Math.floor(this.length / 8)\n if (this.buffer.length <= bufIndex) {\n this.buffer.push(0)\n }\n\n if (bit) {\n this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n }\n\n this.length++\n }\n}\n\nmodule.exports = BitBuffer\n","/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n if (!size || size < 1) {\n throw new Error('BitMatrix size must be defined and greater than 0')\n }\n\n this.size = size\n this.data = new Uint8Array(size * size)\n this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n const index = row * this.size + col\n this.data[index] = value\n if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n","const Mode = require('./mode')\n\nfunction ByteData (data) {\n this.mode = Mode.BYTE\n if (typeof (data) === 'string') {\n this.data = new TextEncoder().encode(data)\n } else {\n this.data = new Uint8Array(data)\n }\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n for (let i = 0, l = this.data.length; i < l; i++) {\n bitBuffer.put(this.data[i], 8)\n }\n}\n\nmodule.exports = ByteData\n","const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L M Q H\r\n 1, 1, 1, 1,\r\n 1, 1, 1, 1,\r\n 1, 1, 2, 2,\r\n 1, 2, 2, 4,\r\n 1, 2, 4, 4,\r\n 2, 4, 4, 4,\r\n 2, 4, 6, 5,\r\n 2, 4, 6, 6,\r\n 2, 5, 8, 8,\r\n 4, 5, 8, 8,\r\n 4, 5, 8, 11,\r\n 4, 8, 10, 11,\r\n 4, 9, 12, 16,\r\n 4, 9, 16, 16,\r\n 6, 10, 12, 18,\r\n 6, 10, 17, 16,\r\n 6, 11, 16, 19,\r\n 6, 13, 18, 21,\r\n 7, 14, 21, 25,\r\n 8, 16, 20, 25,\r\n 8, 17, 23, 25,\r\n 9, 17, 23, 34,\r\n 9, 18, 25, 30,\r\n 10, 20, 27, 32,\r\n 12, 21, 29, 35,\r\n 12, 23, 34, 37,\r\n 12, 25, 34, 40,\r\n 13, 26, 35, 42,\r\n 14, 28, 38, 45,\r\n 15, 29, 40, 48,\r\n 16, 31, 43, 51,\r\n 17, 33, 45, 54,\r\n 18, 35, 48, 57,\r\n 19, 37, 51, 60,\r\n 19, 38, 53, 63,\r\n 20, 40, 56, 66,\r\n 21, 43, 59, 70,\r\n 22, 45, 62, 74,\r\n 24, 47, 65, 77,\r\n 25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L M Q H\r\n 7, 10, 13, 17,\r\n 10, 16, 22, 28,\r\n 15, 26, 36, 44,\r\n 20, 36, 52, 64,\r\n 26, 48, 72, 88,\r\n 36, 64, 96, 112,\r\n 40, 72, 108, 130,\r\n 48, 88, 132, 156,\r\n 60, 110, 160, 192,\r\n 72, 130, 192, 224,\r\n 80, 150, 224, 264,\r\n 96, 176, 260, 308,\r\n 104, 198, 288, 352,\r\n 120, 216, 320, 384,\r\n 132, 240, 360, 432,\r\n 144, 280, 408, 480,\r\n 168, 308, 448, 532,\r\n 180, 338, 504, 588,\r\n 196, 364, 546, 650,\r\n 224, 416, 600, 700,\r\n 224, 442, 644, 750,\r\n 252, 476, 690, 816,\r\n 270, 504, 750, 900,\r\n 300, 560, 810, 960,\r\n 312, 588, 870, 1050,\r\n 336, 644, 952, 1110,\r\n 360, 700, 1020, 1200,\r\n 390, 728, 1050, 1260,\r\n 420, 784, 1140, 1350,\r\n 450, 812, 1200, 1440,\r\n 480, 868, 1290, 1530,\r\n 510, 924, 1350, 1620,\r\n 540, 980, 1440, 1710,\r\n 570, 1036, 1530, 1800,\r\n 570, 1064, 1590, 1890,\r\n 600, 1120, 1680, 1980,\r\n 630, 1204, 1770, 2100,\r\n 660, 1260, 1860, 2220,\r\n 720, 1316, 1950, 2310,\r\n 750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'l':\n case 'low':\n return exports.L\n\n case 'm':\n case 'medium':\n return exports.M\n\n case 'q':\n case 'quartile':\n return exports.Q\n\n case 'h':\n case 'high':\n return exports.H\n\n default:\n throw new Error('Unknown EC Level: ' + string)\n }\n}\n\nexports.isValid = function isValid (level) {\n return level && typeof level.bit !== 'undefined' &&\n level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const size = getSymbolSize(version)\n\n return [\n // top-left\n [0, 0],\n // top-right\n [size - FINDER_PATTERN_SIZE, 0],\n // bottom-left\n [0, size - FINDER_PATTERN_SIZE]\n ]\n}\n","const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Number} mask Mask pattern\n * @return {Number} Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n const data = ((errorCorrectionLevel.bit << 3) | mask)\n let d = data << 10\n\n while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n }\n\n // xor final data with mask pattern in order to ensure that\n // no combination of Error Correction Level and data mask pattern\n // will result in an all-zero data string\n return ((data << 10) | d) ^ G15_MASK\n}\n","const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n let x = 1\n for (let i = 0; i < 255; i++) {\n EXP_TABLE[i] = x\n LOG_TABLE[x] = i\n\n x <<= 1 // multiply by 2\n\n // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n x ^= 0x11D\n }\n }\n\n // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n // stay inside the bounds (because we will mainly use this table for the multiplication of\n // two GF numbers, no more).\n // @see {@link mul}\n for (let i = 255; i < 512; i++) {\n EXP_TABLE[i] = EXP_TABLE[i - 255]\n }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n if (n < 1) throw new Error('log(' + n + ')')\n return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param {Number} x\n * @param {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n if (x === 0 || y === 0) return 0\n\n // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n // @see {@link initTables}\n return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n","const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n this.mode = Mode.KANJI\n this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n let i\n\n // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n // These byte values are shifted from the JIS X 0208 values.\n // JIS X 0208 gives details of the shift coded representation.\n for (i = 0; i < this.data.length; i++) {\n let value = Utils.toSJIS(this.data[i])\n\n // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n if (value >= 0x8140 && value <= 0x9FFC) {\n // Subtract 0x8140 from Shift JIS value\n value -= 0x8140\n\n // For characters with Shift JIS values from 0xE040 to 0xEBBF\n } else if (value >= 0xE040 && value <= 0xEBBF) {\n // Subtract 0xC140 from Shift JIS value\n value -= 0xC140\n } else {\n throw new Error(\n 'Invalid SJIS character: ' + this.data[i] + '\\n' +\n 'Make sure your charset is UTF-8')\n }\n\n // Multiply most significant byte of result by 0xC0\n // and add least significant byte to product\n value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n // Convert result to a 13-bit binary string\n bitBuffer.put(value, 13)\n }\n}\n\nmodule.exports = KanjiData\n","/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n PATTERN000: 0,\n PATTERN001: 1,\n PATTERN010: 2,\n PATTERN011: 3,\n PATTERN100: 4,\n PATTERN101: 5,\n PATTERN110: 6,\n PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n N1: 3,\n N2: 3,\n N3: 40,\n N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param {Number} mask Mask pattern\n * @return {Boolean} true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param {Number|String} value Mask pattern value\n * @return {Number} Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n const size = data.size\n let points = 0\n let sameCountCol = 0\n let sameCountRow = 0\n let lastCol = null\n let lastRow = null\n\n for (let row = 0; row < size; row++) {\n sameCountCol = sameCountRow = 0\n lastCol = lastRow = null\n\n for (let col = 0; col < size; col++) {\n let module = data.get(row, col)\n if (module === lastCol) {\n sameCountCol++\n } else {\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n lastCol = module\n sameCountCol = 1\n }\n\n module = data.get(col, row)\n if (module === lastRow) {\n sameCountRow++\n } else {\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n lastRow = module\n sameCountRow = 1\n }\n }\n\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n }\n\n return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n const size = data.size\n let points = 0\n\n for (let row = 0; row < size - 1; row++) {\n for (let col = 0; col < size - 1; col++) {\n const last = data.get(row, col) +\n data.get(row, col + 1) +\n data.get(row + 1, col) +\n data.get(row + 1, col + 1)\n\n if (last === 4 || last === 0) points++\n }\n }\n\n return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n const size = data.size\n let points = 0\n let bitsCol = 0\n let bitsRow = 0\n\n for (let row = 0; row < size; row++) {\n bitsCol = bitsRow = 0\n for (let col = 0; col < size; col++) {\n bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n }\n }\n\n return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n let darkCount = 0\n const modulesCount = data.data.length\n\n for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param {Number} maskPattern Pattern reference value\n * @param {Number} i Row\n * @param {Number} j Column\n * @return {Boolean} Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n switch (maskPattern) {\n case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n case exports.Patterns.PATTERN001: return i % 2 === 0\n case exports.Patterns.PATTERN010: return j % 3 === 0\n case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n default: throw new Error('bad maskPattern:' + maskPattern)\n }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param {Number} pattern Pattern reference number\n * @param {BitMatrix} data BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n const size = data.size\n\n for (let col = 0; col < size; col++) {\n for (let row = 0; row < size; row++) {\n if (data.isReserved(row, col)) continue\n data.xor(row, col, getMaskAt(pattern, row, col))\n }\n }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n const numPatterns = Object.keys(exports.Patterns).length\n let bestPattern = 0\n let lowerPenalty = Infinity\n\n for (let p = 0; p < numPatterns; p++) {\n setupFormatFunc(p)\n exports.applyMask(p, data)\n\n // Calculate penalty\n const penalty =\n exports.getPenaltyN1(data) +\n exports.getPenaltyN2(data) +\n exports.getPenaltyN3(data) +\n exports.getPenaltyN4(data)\n\n // Undo previously applied mask\n exports.applyMask(p, data)\n\n if (penalty < lowerPenalty) {\n lowerPenalty = penalty\n bestPattern = p\n }\n }\n\n return bestPattern\n}\n","const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n id: 'Numeric',\n bit: 1 << 0,\n ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n * 26 alphabetic characters (A - Z),\n * and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n id: 'Alphanumeric',\n bit: 1 << 1,\n ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n id: 'Byte',\n bit: 1 << 2,\n ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n id: 'Kanji',\n bit: 1 << 3,\n ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param {Mode} mode Data mode\n * @param {Number} version QR Code version\n * @return {Number} Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid version: ' + version)\n }\n\n if (version >= 1 && version < 10) return mode.ccBits[0]\n else if (version < 27) return mode.ccBits[1]\n return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param {String} dataStr Input data string\n * @return {Mode} Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n else if (Regex.testKanji(dataStr)) return exports.KANJI\n else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String} Mode name\n */\nexports.toString = function toString (mode) {\n if (mode && mode.id) return mode.id\n throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param {Mode} mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param {String} string Mode name\n * @returns {Mode} Mode object\n */\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'numeric':\n return exports.NUMERIC\n case 'alphanumeric':\n return exports.ALPHANUMERIC\n case 'kanji':\n return exports.KANJI\n case 'byte':\n return exports.BYTE\n default:\n throw new Error('Unknown mode: ' + string)\n }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param {Mode|String} value Encoding mode\n * @param {Mode} defaultValue Fallback value\n * @return {Mode} Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","const Mode = require('./mode')\n\nfunction NumericData (data) {\n this.mode = Mode.NUMERIC\n this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n let i, group, value\n\n // The input data string is divided into groups of three digits,\n // and each group is converted to its 10-bit binary equivalent.\n for (i = 0; i + 3 <= this.data.length; i += 3) {\n group = this.data.substr(i, 3)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, 10)\n }\n\n // If the number of input digits is not an exact multiple of three,\n // the final one or two digits are converted to 4 or 7 bits respectively.\n const remainingNum = this.data.length - i\n if (remainingNum > 0) {\n group = this.data.substr(i)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, remainingNum * 3 + 1)\n }\n}\n\nmodule.exports = NumericData\n","const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param {Uint8Array} p1 Polynomial\n * @param {Uint8Array} p2 Polynomial\n * @return {Uint8Array} Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n for (let i = 0; i < p1.length; i++) {\n for (let j = 0; j < p2.length; j++) {\n coeff[i + j] ^= GF.mul(p1[i], p2[j])\n }\n }\n\n return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param {Uint8Array} divident Polynomial\n * @param {Uint8Array} divisor Polynomial\n * @return {Uint8Array} Remainder\n */\nexports.mod = function mod (divident, divisor) {\n let result = new Uint8Array(divident)\n\n while ((result.length - divisor.length) >= 0) {\n const coeff = result[0]\n\n for (let i = 0; i < divisor.length; i++) {\n result[i] ^= GF.mul(divisor[i], coeff)\n }\n\n // remove all zeros from buffer head\n let offset = 0\n while (offset < result.length && result[offset] === 0) offset++\n result = result.slice(offset)\n }\n\n return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param {Number} degree Degree of the generator polynomial\n * @return {Uint8Array} Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n let poly = new Uint8Array([1])\n for (let i = 0; i < degree; i++) {\n poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n }\n\n return poly\n}\n","const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n const size = matrix.size\n const pos = FinderPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -1; r <= 7; r++) {\n if (row + r <= -1 || size <= row + r) continue\n\n for (let c = -1; c <= 7; c++) {\n if (col + c <= -1 || size <= col + c) continue\n\n if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n const size = matrix.size\n\n for (let r = 8; r < size - 8; r++) {\n const value = r % 2 === 0\n matrix.set(r, 6, value, true)\n matrix.set(6, r, value, true)\n }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n const pos = AlignmentPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n if (r === -2 || r === 2 || c === -2 || c === 2 ||\n (r === 0 && c === 0)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n const size = matrix.size\n const bits = Version.getEncodedBits(version)\n let row, col, mod\n\n for (let i = 0; i < 18; i++) {\n row = Math.floor(i / 3)\n col = i % 3 + size - 8 - 3\n mod = ((bits >> i) & 1) === 1\n\n matrix.set(row, col, mod, true)\n matrix.set(col, row, mod, true)\n }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {Number} maskPattern Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n const size = matrix.size\n const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n let i, mod\n\n for (i = 0; i < 15; i++) {\n mod = ((bits >> i) & 1) === 1\n\n // vertical\n if (i < 6) {\n matrix.set(i, 8, mod, true)\n } else if (i < 8) {\n matrix.set(i + 1, 8, mod, true)\n } else {\n matrix.set(size - 15 + i, 8, mod, true)\n }\n\n // horizontal\n if (i < 8) {\n matrix.set(8, size - i - 1, mod, true)\n } else if (i < 9) {\n matrix.set(8, 15 - i - 1 + 1, mod, true)\n } else {\n matrix.set(8, 15 - i - 1, mod, true)\n }\n }\n\n // fixed module\n matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Uint8Array} data Data codewords\n */\nfunction setupData (matrix, data) {\n const size = matrix.size\n let inc = -1\n let row = size - 1\n let bitIndex = 7\n let byteIndex = 0\n\n for (let col = size - 1; col > 0; col -= 2) {\n if (col === 6) col--\n\n while (true) {\n for (let c = 0; c < 2; c++) {\n if (!matrix.isReserved(row, col - c)) {\n let dark = false\n\n if (byteIndex < data.length) {\n dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n }\n\n matrix.set(row, col - c, dark)\n bitIndex--\n\n if (bitIndex === -1) {\n byteIndex++\n bitIndex = 7\n }\n }\n }\n\n row += inc\n\n if (row < 0 || size <= row) {\n row -= inc\n inc = -inc\n break\n }\n }\n }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {ByteData} data Data input\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n // Prepare data buffer\n const buffer = new BitBuffer()\n\n segments.forEach(function (data) {\n // prefix data with mode indicator (4 bits)\n buffer.put(data.mode.bit, 4)\n\n // Prefix data with character count indicator.\n // The character count indicator is a string of bits that represents the\n // number of characters that are being encoded.\n // The character count indicator must be placed after the mode indicator\n // and must be a certain number of bits long, depending on the QR version\n // and data mode\n // @see {@link Mode.getCharCountIndicator}.\n buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n // add binary data sequence to buffer\n data.write(buffer)\n })\n\n // Calculate required number of bits\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n // Add a terminator.\n // If the bit string is shorter than the total number of required bits,\n // a terminator of up to four 0s must be added to the right side of the string.\n // If the bit string is more than four bits shorter than the required number of bits,\n // add four 0s to the end.\n if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n buffer.put(0, 4)\n }\n\n // If the bit string is fewer than four bits shorter, add only the number of 0s that\n // are needed to reach the required number of bits.\n\n // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n // pad the string on the right with 0s to make the string's length a multiple of 8.\n while (buffer.getLengthInBits() % 8 !== 0) {\n buffer.putBit(0)\n }\n\n // Add pad bytes if the string is still shorter than the total number of required bits.\n // Extend the buffer to fill the data capacity of the symbol corresponding to\n // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n // and 00010001 (0x11) alternately.\n const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n for (let i = 0; i < remainingByte; i++) {\n buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n }\n\n return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param {BitBuffer} bitBuffer Data to encode\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n // Total number of blocks\n const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n // Calculate how many blocks each group should contain\n const blocksInGroup2 = totalCodewords % ecTotalBlocks\n const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n // Number of EC codewords is the same for both groups\n const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n const rs = new ReedSolomonEncoder(ecCount)\n\n let offset = 0\n const dcData = new Array(ecTotalBlocks)\n const ecData = new Array(ecTotalBlocks)\n let maxDataSize = 0\n const buffer = new Uint8Array(bitBuffer.buffer)\n\n // Divide the buffer into the required number of blocks\n for (let b = 0; b < ecTotalBlocks; b++) {\n const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n // extract a block of data from buffer\n dcData[b] = buffer.slice(offset, offset + dataSize)\n\n // Calculate EC codewords for this data block\n ecData[b] = rs.encode(dcData[b])\n\n offset += dataSize\n maxDataSize = Math.max(maxDataSize, dataSize)\n }\n\n // Create final data\n // Interleave the data and error correction codewords from each block\n const data = new Uint8Array(totalCodewords)\n let index = 0\n let i, r\n\n // Add data codewords\n for (i = 0; i < maxDataSize; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n if (i < dcData[r].length) {\n data[index++] = dcData[r][i]\n }\n }\n }\n\n // Apped EC codewords\n for (i = 0; i < ecCount; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n data[index++] = ecData[r][i]\n }\n }\n\n return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @param {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param {MaskPattern} maskPattern Mask pattern\n * @return {Object} Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n let segments\n\n if (Array.isArray(data)) {\n segments = Segments.fromArray(data)\n } else if (typeof data === 'string') {\n let estimatedVersion = version\n\n if (!estimatedVersion) {\n const rawSegments = Segments.rawSplit(data)\n\n // Estimate best version that can contain raw splitted segments\n estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n }\n\n // Build optimized segments\n // If estimated version is undefined, try with the highest version\n segments = Segments.fromString(data, estimatedVersion || 40)\n } else {\n throw new Error('Invalid data')\n }\n\n // Get the min version that can contain data\n const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n // If no version is found, data cannot be stored\n if (!bestVersion) {\n throw new Error('The amount of data is too big to be stored in a QR Code')\n }\n\n // If not specified, use min version as default\n if (!version) {\n version = bestVersion\n\n // Check if the specified version can contain the data\n } else if (version < bestVersion) {\n throw new Error('\\n' +\n 'The chosen QR Code version cannot contain this amount of data.\\n' +\n 'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n )\n }\n\n const dataBits = createData(version, errorCorrectionLevel, segments)\n\n // Allocate matrix buffer\n const moduleCount = Utils.getSymbolSize(version)\n const modules = new BitMatrix(moduleCount)\n\n // Add function modules\n setupFinderPattern(modules, version)\n setupTimingPattern(modules)\n setupAlignmentPattern(modules, version)\n\n // Add temporary dummy bits for format info just to set them as reserved.\n // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n // since the masking operation must be performed only on the encoding region.\n // These blocks will be replaced with correct values later in code.\n setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n if (version >= 7) {\n setupVersionInfo(modules, version)\n }\n\n // Add data codewords\n setupData(modules, dataBits)\n\n if (isNaN(maskPattern)) {\n // Find best mask pattern\n maskPattern = MaskPattern.getBestMask(modules,\n setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n }\n\n // Apply mask pattern\n MaskPattern.applyMask(maskPattern, modules)\n\n // Replace format info bits with correct values\n setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n return {\n modules: modules,\n version: version,\n errorCorrectionLevel: errorCorrectionLevel,\n maskPattern: maskPattern,\n segments: segments\n }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data Input data\n * @param {Object} options Optional configurations\n * @param {Number} options.version QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n if (typeof data === 'undefined' || data === '') {\n throw new Error('No input text')\n }\n\n let errorCorrectionLevel = ECLevel.M\n let version\n let mask\n\n if (typeof options !== 'undefined') {\n // Use higher error correction level as default\n errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n version = Version.from(options.version)\n mask = MaskPattern.from(options.maskPattern)\n\n if (options.toSJISFunc) {\n Utils.setToSJISFunction(options.toSJISFunc)\n }\n }\n\n return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n","const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n this.genPoly = undefined\n this.degree = degree\n\n if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n // create an irreducible generator polynomial\n this.degree = degree\n this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param {Uint8Array} data Buffer containing input data\n * @return {Uint8Array} Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n if (!this.genPoly) {\n throw new Error('Encoder not initialized')\n }\n\n // Calculate EC for this data block\n // extends data size to data+genPoly size\n const paddedData = new Uint8Array(data.length + this.degree)\n paddedData.set(data)\n\n // The error correction codewords are the remainder after dividing the data codewords\n // by a generator polynomial\n const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n // return EC data blocks (last n byte, where n is the degree of genPoly)\n // If coefficients number in remainder are less than genPoly degree,\n // pad with 0s to the left to reach the needed number of coefficients\n const start = this.degree - remainder.length\n if (start > 0) {\n const buff = new Uint8Array(this.degree)\n buff.set(remainder, start)\n\n return buff\n }\n\n return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n","const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n return TEST_ALPHANUMERIC.test(str)\n}\n","const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param {String} str Input string\n * @return {Number} Number of byte\n */\nfunction getStringByteLength (str) {\n return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param {Mode} mode Segment mode\n * @param {String} str String to process\n * @return {Array} Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n const segments = []\n let result\n\n while ((result = regex.exec(str)) !== null) {\n segments.push({\n data: result[0],\n index: result.index,\n mode: mode,\n length: result[0].length\n })\n }\n\n return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param {String} dataStr Input string\n * @return {Array} Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n let byteSegs\n let kanjiSegs\n\n if (Utils.isKanjiModeEnabled()) {\n byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n } else {\n byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n kanjiSegs = []\n }\n\n const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n return segs\n .sort(function (s1, s2) {\n return s1.index - s2.index\n })\n .map(function (obj) {\n return {\n data: obj.data,\n mode: obj.mode,\n length: obj.length\n }\n })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param {Number} length String length\n * @param {Mode} mode Segment mode\n * @return {Number} Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n switch (mode) {\n case Mode.NUMERIC:\n return NumericData.getBitsLength(length)\n case Mode.ALPHANUMERIC:\n return AlphanumericData.getBitsLength(length)\n case Mode.KANJI:\n return KanjiData.getBitsLength(length)\n case Mode.BYTE:\n return ByteData.getBitsLength(length)\n }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction mergeSegments (segs) {\n return segs.reduce(function (acc, curr) {\n const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n if (prevSeg && prevSeg.mode === curr.mode) {\n acc[acc.length - 1].data += curr.data\n return acc\n }\n\n acc.push(curr)\n return acc\n }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction buildNodes (segs) {\n const nodes = []\n for (let i = 0; i < segs.length; i++) {\n const seg = segs[i]\n\n switch (seg.mode) {\n case Mode.NUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.ALPHANUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.KANJI:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n break\n case Mode.BYTE:\n nodes.push([\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n }\n }\n\n return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param {Array} nodes Array of object with segments data\n * @param {Number} version QR Code version\n * @return {Object} Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n const table = {}\n const graph = { start: {} }\n let prevNodeIds = ['start']\n\n for (let i = 0; i < nodes.length; i++) {\n const nodeGroup = nodes[i]\n const currentNodeIds = []\n\n for (let j = 0; j < nodeGroup.length; j++) {\n const node = nodeGroup[j]\n const key = '' + i + j\n\n currentNodeIds.push(key)\n table[key] = { node: node, lastCount: 0 }\n graph[key] = {}\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n const prevNodeId = prevNodeIds[n]\n\n if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n graph[prevNodeId][key] =\n getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n table[prevNodeId].lastCount += node.length\n } else {\n if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n 4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n }\n }\n }\n\n prevNodeIds = currentNodeIds\n }\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n graph[prevNodeIds[n]].end = 0\n }\n\n return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param {String} data Input data\n * @param {Mode | String} modesHint Data mode\n * @return {Segment} Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n let mode\n const bestMode = Mode.getBestModeForData(data)\n\n mode = Mode.from(modesHint, bestMode)\n\n // Make sure data can be encoded\n if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n throw new Error('\"' + data + '\"' +\n ' cannot be encoded with mode ' + Mode.toString(mode) +\n '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n }\n\n // Use Mode.BYTE if Kanji support is disabled\n if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n mode = Mode.BYTE\n }\n\n switch (mode) {\n case Mode.NUMERIC:\n return new NumericData(data)\n\n case Mode.ALPHANUMERIC:\n return new AlphanumericData(data)\n\n case Mode.KANJI:\n return new KanjiData(data)\n\n case Mode.BYTE:\n return new ByteData(data)\n }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param {Array} array Array of objects with segments data\n * @return {Array} Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n return array.reduce(function (acc, seg) {\n if (typeof seg === 'string') {\n acc.push(buildSingleSegment(seg, null))\n } else if (seg.data) {\n acc.push(buildSingleSegment(seg.data, seg.mode))\n }\n\n return acc\n }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @return {Array} Array of segments\n */\nexports.fromString = function fromString (data, version) {\n const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n const nodes = buildNodes(segs)\n const graph = buildGraph(nodes, version)\n const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n const optimizedSegs = []\n for (let i = 1; i < path.length - 1; i++) {\n optimizedSegs.push(graph.table[path[i]].node)\n }\n\n return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param {string} data Input string\n * @return {Array} Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n return exports.fromArray(\n getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n )\n}\n","let toSJISFunction\nconst CODEWORDS_COUNT = [\n 0, // Not used\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param {Number} version QR Code version\n * @return {Number} size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n if (!version) throw new Error('\"version\" cannot be null or undefined')\n if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param {Number} version QR Code version\n * @return {Number} Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param {Number} data Value to encode\n * @return {Number} Encoded value\n */\nexports.getBCHDigit = function (data) {\n let digit = 0\n\n while (data !== 0) {\n digit++\n data >>>= 1\n }\n\n return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n if (typeof f !== 'function') {\n throw new Error('\"toSJISFunc\" is not a valid function.')\n }\n\n toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n return toSJISFunction(kanji)\n}\n","/**\n * Check if QR Code version is valid\n *\n * @param {Number} version QR Code version\n * @return {Boolean} true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n return !isNaN(version) && version >= 1 && version <= 40\n}\n","const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n // Character count indicator + mode indicator bits\n return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n let totalBits = 0\n\n segments.forEach(function (data) {\n const reservedBits = getReservedBitsCount(data.mode, version)\n totalBits += reservedBits + data.getBitsLength()\n })\n\n return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n const length = getTotalBitsFromDataArray(segments, currentVersion)\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param {Number|String} value QR Code version\n * @param {Number} defaultValue Fallback value\n * @return {Number} QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n if (VersionCheck.isValid(value)) {\n return parseInt(value, 10)\n }\n\n return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param {Number} version QR Code version (1-40)\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid QR Code version')\n }\n\n // Use Byte mode as default\n if (typeof mode === 'undefined') mode = Mode.BYTE\n\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n // Return max number of storable codewords\n switch (mode) {\n case Mode.NUMERIC:\n return Math.floor((usableBits / 10) * 3)\n\n case Mode.ALPHANUMERIC:\n return Math.floor((usableBits / 11) * 2)\n\n case Mode.KANJI:\n return Math.floor(usableBits / 13)\n\n case Mode.BYTE:\n default:\n return Math.floor(usableBits / 8)\n }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param {Segment} data Segment of data\n * @param {Number} [errorCorrectionLevel=H] Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n let seg\n\n const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n if (Array.isArray(data)) {\n if (data.length > 1) {\n return getBestVersionForMixedData(data, ecl)\n }\n\n if (data.length === 0) {\n return 1\n }\n\n seg = data[0]\n } else {\n seg = data\n }\n\n return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param {Number} version QR Code version\n * @return {Number} Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n if (!VersionCheck.isValid(version) || version < 7) {\n throw new Error('Invalid QR Code version')\n }\n\n let d = version << 12\n\n while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n }\n\n return (version << 12) | d\n}\n","const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n if (!canvas.style) canvas.style = {}\n canvas.height = size\n canvas.width = size\n canvas.style.height = size + 'px'\n canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n try {\n return document.createElement('canvas')\n } catch (e) {\n throw new Error('You need to specify a canvas element')\n }\n}\n\nexports.render = function render (qrData, canvas, options) {\n let opts = options\n let canvasEl = canvas\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!canvas) {\n canvasEl = getCanvasElement()\n }\n\n opts = Utils.getOptions(opts)\n const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n const ctx = canvasEl.getContext('2d')\n const image = ctx.createImageData(size, size)\n Utils.qrToImageData(image.data, qrData, opts)\n\n clearCanvas(ctx, canvasEl, size)\n ctx.putImageData(image, 0, 0)\n\n return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n let opts = options\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!opts) opts = {}\n\n const canvasEl = exports.render(qrData, canvas, opts)\n\n const type = opts.type || 'image/png'\n const rendererOpts = opts.rendererOpts || {}\n\n return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n","const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n const alpha = color.a / 255\n const str = attrib + '=\"' + color.hex + '\"'\n\n return alpha < 1\n ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n : str\n}\n\nfunction svgCmd (cmd, x, y) {\n let str = cmd + x\n if (typeof y !== 'undefined') str += ' ' + y\n\n return str\n}\n\nfunction qrToPath (data, size, margin) {\n let path = ''\n let moveBy = 0\n let newRow = false\n let lineLength = 0\n\n for (let i = 0; i < data.length; i++) {\n const col = Math.floor(i % size)\n const row = Math.floor(i / size)\n\n if (!col && !newRow) newRow = true\n\n if (data[i]) {\n lineLength++\n\n if (!(i > 0 && col > 0 && data[i - 1])) {\n path += newRow\n ? svgCmd('M', col + margin, 0.5 + row + margin)\n : svgCmd('m', moveBy, 0)\n\n moveBy = 0\n newRow = false\n }\n\n if (!(col + 1 < size && data[i + 1])) {\n path += svgCmd('h', lineLength)\n lineLength = 0\n }\n } else {\n moveBy++\n }\n }\n\n return path\n}\n\nexports.render = function render (qrData, options, cb) {\n const opts = Utils.getOptions(options)\n const size = qrData.modules.size\n const data = qrData.modules.data\n const qrcodesize = size + opts.margin * 2\n\n const bg = !opts.color.light.a\n ? ''\n : '<path ' + getColorAttrib(opts.color.light, 'fill') +\n ' d=\"M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z\"/>'\n\n const path =\n '<path ' + getColorAttrib(opts.color.dark, 'stroke') +\n ' d=\"' + qrToPath(data, size, opts.margin) + '\"/>'\n\n const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n const svgTag = '<svg xmlns=\"http://www.w3.org/2000/svg\" ' + width + viewBox + ' shape-rendering=\"crispEdges\">' + bg + path + '</svg>\\n'\n\n if (typeof cb === 'function') {\n cb(null, svgTag)\n }\n\n return svgTag\n}\n","function hex2rgba (hex) {\n if (typeof hex === 'number') {\n hex = hex.toString()\n }\n\n if (typeof hex !== 'string') {\n throw new Error('Color should be defined as hex string')\n }\n\n let hexCode = hex.slice().replace('#', '').split('')\n if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n throw new Error('Invalid hex color: ' + hex)\n }\n\n // Convert from short to long form (fff -> ffffff)\n if (hexCode.length === 3 || hexCode.length === 4) {\n hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n return [c, c]\n }))\n }\n\n // Add default alpha value\n if (hexCode.length === 6) hexCode.push('F', 'F')\n\n const hexValue = parseInt(hexCode.join(''), 16)\n\n return {\n r: (hexValue >> 24) & 255,\n g: (hexValue >> 16) & 255,\n b: (hexValue >> 8) & 255,\n a: hexValue & 255,\n hex: '#' + hexCode.slice(0, 6).join('')\n }\n}\n\nexports.getOptions = function getOptions (options) {\n if (!options) options = {}\n if (!options.color) options.color = {}\n\n const margin = typeof options.margin === 'undefined' ||\n options.margin === null ||\n options.margin < 0\n ? 4\n : options.margin\n\n const width = options.width && options.width >= 21 ? options.width : undefined\n const scale = options.scale || 4\n\n return {\n width: width,\n scale: width ? 4 : scale,\n margin: margin,\n color: {\n dark: hex2rgba(options.color.dark || '#000000ff'),\n light: hex2rgba(options.color.light || '#ffffffff')\n },\n type: options.type,\n rendererOpts: options.rendererOpts || {}\n }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n return opts.width && opts.width >= qrSize + opts.margin * 2\n ? opts.width / (qrSize + opts.margin * 2)\n : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n const scale = exports.getScale(qrSize, opts)\n return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n const size = qr.modules.size\n const data = qr.modules.data\n const scale = exports.getScale(size, opts)\n const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n const scaledMargin = opts.margin * scale\n const palette = [opts.color.light, opts.color.dark]\n\n for (let i = 0; i < symbolSize; i++) {\n for (let j = 0; j < symbolSize; j++) {\n let posDst = (i * symbolSize + j) * 4\n let pxColor = opts.color.light\n\n if (i >= scaledMargin && j >= scaledMargin &&\n i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n const iSrc = Math.floor((i - scaledMargin) / scale)\n const jSrc = Math.floor((j - scaledMargin) / scale)\n pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n }\n\n imgData[posDst++] = pxColor.r\n imgData[posDst++] = pxColor.g\n imgData[posDst++] = pxColor.b\n imgData[posDst] = pxColor.a\n }\n }\n}\n","\"use strict\";\nvar ShortUniqueId = (() => {\n var __defProp = Object.defineProperty;\n var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n var __getOwnPropNames = Object.getOwnPropertyNames;\n var __getOwnPropSymbols = Object.getOwnPropertySymbols;\n var __hasOwnProp = Object.prototype.hasOwnProperty;\n var __propIsEnum = Object.prototype.propertyIsEnumerable;\n var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n var __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n };\n var __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n };\n var __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n };\n var __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n\n // src/index.ts\n var index_exports = {};\n __export(index_exports, {\n DEFAULT_OPTIONS: () => DEFAULT_OPTIONS,\n DEFAULT_UUID_LENGTH: () => DEFAULT_UUID_LENGTH,\n default: () => ShortUniqueId\n });\n\n // package.json\n var version = \"5.3.2\";\n\n // src/index.ts\n var DEFAULT_UUID_LENGTH = 6;\n var DEFAULT_OPTIONS = {\n dictionary: \"alphanum\",\n shuffle: true,\n debug: false,\n length: DEFAULT_UUID_LENGTH,\n counter: 0\n };\n var _ShortUniqueId = class _ShortUniqueId {\n constructor(argOptions = {}) {\n __publicField(this, \"counter\");\n __publicField(this, \"debug\");\n __publicField(this, \"dict\");\n __publicField(this, \"version\");\n __publicField(this, \"dictIndex\", 0);\n __publicField(this, \"dictRange\", []);\n __publicField(this, \"lowerBound\", 0);\n __publicField(this, \"upperBound\", 0);\n __publicField(this, \"dictLength\", 0);\n __publicField(this, \"uuidLength\");\n __publicField(this, \"_digit_first_ascii\", 48);\n __publicField(this, \"_digit_last_ascii\", 58);\n __publicField(this, \"_alpha_lower_first_ascii\", 97);\n __publicField(this, \"_alpha_lower_last_ascii\", 123);\n __publicField(this, \"_hex_last_ascii\", 103);\n __publicField(this, \"_alpha_upper_first_ascii\", 65);\n __publicField(this, \"_alpha_upper_last_ascii\", 91);\n __publicField(this, \"_number_dict_ranges\", {\n digits: [this._digit_first_ascii, this._digit_last_ascii]\n });\n __publicField(this, \"_alpha_dict_ranges\", {\n lowerCase: [this._alpha_lower_first_ascii, this._alpha_lower_last_ascii],\n upperCase: [this._alpha_upper_first_ascii, this._alpha_upper_last_ascii]\n });\n __publicField(this, \"_alpha_lower_dict_ranges\", {\n lowerCase: [this._alpha_lower_first_ascii, this._alpha_lower_last_ascii]\n });\n __publicField(this, \"_alpha_upper_dict_ranges\", {\n upperCase: [this._alpha_upper_first_ascii, this._alpha_upper_last_ascii]\n });\n __publicField(this, \"_alphanum_dict_ranges\", {\n digits: [this._digit_first_ascii, this._digit_last_ascii],\n lowerCase: [this._alpha_lower_first_ascii, this._alpha_lower_last_ascii],\n upperCase: [this._alpha_upper_first_ascii, this._alpha_upper_last_ascii]\n });\n __publicField(this, \"_alphanum_lower_dict_ranges\", {\n digits: [this._digit_first_ascii, this._digit_last_ascii],\n lowerCase: [this._alpha_lower_first_ascii, this._alpha_lower_last_ascii]\n });\n __publicField(this, \"_alphanum_upper_dict_ranges\", {\n digits: [this._digit_first_ascii, this._digit_last_ascii],\n upperCase: [this._alpha_upper_first_ascii, this._alpha_upper_last_ascii]\n });\n __publicField(this, \"_hex_dict_ranges\", {\n decDigits: [this._digit_first_ascii, this._digit_last_ascii],\n alphaDigits: [this._alpha_lower_first_ascii, this._hex_last_ascii]\n });\n __publicField(this, \"_dict_ranges\", {\n _number_dict_ranges: this._number_dict_ranges,\n _alpha_dict_ranges: this._alpha_dict_ranges,\n _alpha_lower_dict_ranges: this._alpha_lower_dict_ranges,\n _alpha_upper_dict_ranges: this._alpha_upper_dict_ranges,\n _alphanum_dict_ranges: this._alphanum_dict_ranges,\n _alphanum_lower_dict_ranges: this._alphanum_lower_dict_ranges,\n _alphanum_upper_dict_ranges: this._alphanum_upper_dict_ranges,\n _hex_dict_ranges: this._hex_dict_ranges\n });\n /* tslint:disable consistent-return */\n __publicField(this, \"log\", (...args) => {\n const finalArgs = [...args];\n finalArgs[0] = \"[short-unique-id] \".concat(args[0]);\n if (this.debug === true) {\n if (typeof console !== \"undefined\" && console !== null) {\n console.log(...finalArgs);\n return;\n }\n }\n });\n /* tslint:enable consistent-return */\n __publicField(this, \"_normalizeDictionary\", (dictionary, shuffle) => {\n let finalDict;\n if (dictionary && Array.isArray(dictionary) && dictionary.length > 1) {\n finalDict = dictionary;\n } else {\n finalDict = [];\n this.dictIndex = 0;\n const rangesName = \"_\".concat(dictionary, \"_dict_ranges\");\n const ranges = this._dict_ranges[rangesName];\n let capacity = 0;\n for (const [, rangeValue] of Object.entries(ranges)) {\n const [lower, upper] = rangeValue;\n capacity += Math.abs(upper - lower);\n }\n finalDict = new Array(capacity);\n let dictIdx = 0;\n for (const [, rangeTypeValue] of Object.entries(ranges)) {\n this.dictRange = rangeTypeValue;\n this.lowerBound = this.dictRange[0];\n this.upperBound = this.dictRange[1];\n const isAscending = this.lowerBound <= this.upperBound;\n const start = this.lowerBound;\n const end = this.upperBound;\n if (isAscending) {\n for (let i = start; i < end; i++) {\n finalDict[dictIdx++] = String.fromCharCode(i);\n this.dictIndex = i;\n }\n } else {\n for (let i = start; i > end; i--) {\n finalDict[dictIdx++] = String.fromCharCode(i);\n this.dictIndex = i;\n }\n }\n }\n finalDict.length = dictIdx;\n }\n if (shuffle) {\n const len = finalDict.length;\n for (let i = len - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [finalDict[i], finalDict[j]] = [finalDict[j], finalDict[i]];\n }\n }\n return finalDict;\n });\n /** Change the dictionary after initialization. */\n __publicField(this, \"setDictionary\", (dictionary, shuffle) => {\n this.dict = this._normalizeDictionary(dictionary, shuffle);\n this.dictLength = this.dict.length;\n this.setCounter(0);\n });\n __publicField(this, \"seq\", () => {\n return this.sequentialUUID();\n });\n /**\n * Generates UUID based on internal counter that's incremented after each ID generation.\n * @alias `const uid = new ShortUniqueId(); uid.seq();`\n */\n __publicField(this, \"sequentialUUID\", () => {\n const dictLen = this.dictLength;\n const dict = this.dict;\n let counterDiv = this.counter;\n const idParts = [];\n do {\n const counterRem = counterDiv % dictLen;\n counterDiv = Math.trunc(counterDiv / dictLen);\n idParts.push(dict[counterRem]);\n } while (counterDiv !== 0);\n const id = idParts.join(\"\");\n this.counter += 1;\n return id;\n });\n __publicField(this, \"rnd\", (uuidLength = this.uuidLength || DEFAULT_UUID_LENGTH) => {\n return this.randomUUID(uuidLength);\n });\n /**\n * Generates UUID by creating each part randomly.\n * @alias `const uid = new ShortUniqueId(); uid.rnd(uuidLength: number);`\n */\n __publicField(this, \"randomUUID\", (uuidLength = this.uuidLength || DEFAULT_UUID_LENGTH) => {\n if (uuidLength === null || typeof uuidLength === \"undefined\" || uuidLength < 1) {\n throw new Error(\"Invalid UUID Length Provided\");\n }\n const result = new Array(uuidLength);\n const dictLen = this.dictLength;\n const dict = this.dict;\n for (let j = 0; j < uuidLength; j++) {\n const randomPartIdx = Math.floor(Math.random() * dictLen);\n result[j] = dict[randomPartIdx];\n }\n return result.join(\"\");\n });\n __publicField(this, \"fmt\", (format, date) => {\n return this.formattedUUID(format, date);\n });\n /**\n * Generates custom UUID with the provided format string.\n * @alias `const uid = new ShortUniqueId(); uid.fmt(format: string);`\n */\n __publicField(this, \"formattedUUID\", (format, date) => {\n const fnMap = {\n $r: this.randomUUID,\n $s: this.sequentialUUID,\n $t: this.stamp\n };\n const result = format.replace(/\\$[rs]\\d{0,}|\\$t0|\\$t[1-9]\\d{1,}/g, (m) => {\n const fn = m.slice(0, 2);\n const len = Number.parseInt(m.slice(2), 10);\n if (fn === \"$s\") {\n return fnMap[fn]().padStart(len, \"0\");\n }\n if (fn === \"$t\" && date) {\n return fnMap[fn](len, date);\n }\n return fnMap[fn](len);\n });\n return result;\n });\n /**\n * Calculates total number of possible UUIDs.\n *\n * Given that:\n *\n * - `H` is the total number of possible UUIDs\n * - `n` is the number of unique characters in the dictionary\n * - `l` is the UUID length\n *\n * Then `H` is defined as `n` to the power of `l`:\n *\n * <div style=\"background: white; padding: 5px; border-radius: 5px; overflow: hidden;\">\n * <img src=\"data:image/png;base64,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\" />\n * </div>\n *\n * This function returns `H`.\n */\n __publicField(this, \"availableUUIDs\", (uuidLength = this.uuidLength) => {\n return Number.parseFloat(([...new Set(this.dict)].length ** uuidLength).toFixed(0));\n });\n /**\n * Calculates approximate number of hashes before first collision.\n *\n * Given that:\n *\n * - `H` is the total number of possible UUIDs, or in terms of this library,\n * the result of running `availableUUIDs()`\n * - the expected number of values we have to choose before finding the\n * first collision can be expressed as the quantity `Q(H)`\n *\n * Then `Q(H)` can be approximated as the square root of the product of half\n * of pi times `H`:\n *\n * <div style=\"background: white; padding: 5px; border-radius: 5px; overflow: hidden;\">\n * <img src=\"data:image/png;base64,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\" />\n * </div>\n *\n * This function returns `Q(H)`.\n *\n * (see [Poisson distribution](https://en.wikipedia.org/wiki/Poisson_distribution))\n */\n // Cache for memoization\n __publicField(this, \"_collisionCache\", /* @__PURE__ */ new Map());\n __publicField(this, \"approxMaxBeforeCollision\", (rounds = this.availableUUIDs(this.uuidLength)) => {\n const cacheKey = rounds;\n const cached = this._collisionCache.get(cacheKey);\n if (cached !== void 0) {\n return cached;\n }\n const result = Number.parseFloat(Math.sqrt(Math.PI / 2 * rounds).toFixed(20));\n this._collisionCache.set(cacheKey, result);\n return result;\n });\n /**\n * Calculates probability of generating duplicate UUIDs (a collision) in a\n * given number of UUID generation rounds.\n *\n * Given that:\n *\n * - `r` is the maximum number of times that `randomUUID()` will be called,\n * or better said the number of _rounds_\n * - `H` is the total number of possible UUIDs, or in terms of this library,\n * the result of running `availableUUIDs()`\n *\n * Then the probability of collision `p(r; H)` can be approximated as the result\n * of dividing the square root of the product of half of pi times `r` by `H`:\n *\n * <div style=\"background: white; padding: 5px; border-radius: 5px; overflow: hidden;\">\n * <img src=\"data:image/png;base64,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\" />\n * </div>\n *\n * This function returns `p(r; H)`.\n *\n * (see [Poisson distribution](https://en.wikipedia.org/wiki/Poisson_distribution))\n *\n * (Useful if you are wondering _\"If I use this lib and expect to perform at most\n * `r` rounds of UUID generations, what is the probability that I will hit a duplicate UUID?\"_.)\n */\n __publicField(this, \"collisionProbability\", (rounds = this.availableUUIDs(this.uuidLength), uuidLength = this.uuidLength) => {\n return Number.parseFloat(\n (this.approxMaxBeforeCollision(rounds) / this.availableUUIDs(uuidLength)).toFixed(20)\n );\n });\n /**\n * Calculate a \"uniqueness\" score (from 0 to 1) of UUIDs based on size of\n * dictionary and chosen UUID length.\n *\n * Given that:\n *\n * - `H` is the total number of possible UUIDs, or in terms of this library,\n * the result of running `availableUUIDs()`\n * - `Q(H)` is the approximate number of hashes before first collision,\n * or in terms of this library, the result of running `approxMaxBeforeCollision()`\n *\n * Then `uniqueness` can be expressed as the additive inverse of the probability of\n * generating a \"word\" I had previously generated (a duplicate) at any given iteration\n * up to the the total number of possible UUIDs expressed as the quotiend of `Q(H)` and `H`:\n *\n * <div style=\"background: white; padding: 5px; border-radius: 5px; overflow: hidden;\">\n * <img src=\"data:image/png;base64,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\" />\n * </div>\n *\n * (Useful if you need a value to rate the \"quality\" of the combination of given dictionary\n * and UUID length. The closer to 1, higher the uniqueness and thus better the quality.)\n */\n __publicField(this, \"uniqueness\", (rounds = this.availableUUIDs(this.uuidLength)) => {\n const score = Number.parseFloat(\n (1 - this.approxMaxBeforeCollision(rounds) / rounds).toFixed(20)\n );\n return score > 1 ? 1 : score < 0 ? 0 : score;\n });\n /**\n * Return the version of this module.\n */\n __publicField(this, \"getVersion\", () => {\n return this.version;\n });\n /**\n * Generates a UUID with a timestamp that can be extracted using `uid.parseStamp(stampString);`.\n *\n * ```js\n * const uidWithTimestamp = uid.stamp(32);\n * console.log(uidWithTimestamp);\n * // GDa608f973aRCHLXQYPTbKDbjDeVsSb3\n *\n * console.log(uid.parseStamp(uidWithTimestamp));\n * // 2021-05-03T06:24:58.000Z\n * ```\n */\n __publicField(this, \"stamp\", (finalLength, date) => {\n const hexStamp = Math.floor(+(date || /* @__PURE__ */ new Date()) / 1e3).toString(16);\n if (typeof finalLength === \"number\" && finalLength === 0) {\n return hexStamp;\n }\n if (typeof finalLength !== \"number\" || finalLength < 10) {\n throw new Error(\n [\n \"Param finalLength must be a number greater than or equal to 10,\",\n \"or 0 if you want the raw hexadecimal timestamp\"\n ].join(\"\\n\")\n );\n }\n const idLength = finalLength - 9;\n const rndIdx = Math.round(Math.random() * (idLength > 15 ? 15 : idLength));\n const id = this.randomUUID(idLength);\n return \"\".concat(id.substring(0, rndIdx)).concat(hexStamp).concat(id.substring(rndIdx)).concat(rndIdx.toString(16));\n });\n /**\n * Extracts the date embeded in a UUID generated using the `uid.stamp(finalLength);` method.\n *\n * ```js\n * const uidWithTimestamp = uid.stamp(32);\n * console.log(uidWithTimestamp);\n * // GDa608f973aRCHLXQYPTbKDbjDeVsSb3\n *\n * console.log(uid.parseStamp(uidWithTimestamp));\n * // 2021-05-03T06:24:58.000Z\n * ```\n */\n __publicField(this, \"parseStamp\", (suid, format) => {\n if (format && !/t0|t[1-9]\\d{1,}/.test(format)) {\n throw new Error(\"Cannot extract date from a formated UUID with no timestamp in the format\");\n }\n const stamp = format ? format.replace(/\\$[rs]\\d{0,}|\\$t0|\\$t[1-9]\\d{1,}/g, (m) => {\n const fnMap = {\n $r: (len2) => [...Array(len2)].map(() => \"r\").join(\"\"),\n $s: (len2) => [...Array(len2)].map(() => \"s\").join(\"\"),\n $t: (len2) => [...Array(len2)].map(() => \"t\").join(\"\")\n };\n const fn = m.slice(0, 2);\n const len = Number.parseInt(m.slice(2), 10);\n return fnMap[fn](len);\n }).replace(/^(.*?)(t{8,})(.*)$/g, (_m, p1, p2) => {\n return suid.substring(p1.length, p1.length + p2.length);\n }) : suid;\n if (stamp.length === 8) {\n return new Date(Number.parseInt(stamp, 16) * 1e3);\n }\n if (stamp.length < 10) {\n throw new Error(\"Stamp length invalid\");\n }\n const rndIdx = Number.parseInt(stamp.substring(stamp.length - 1), 16);\n return new Date(Number.parseInt(stamp.substring(rndIdx, rndIdx + 8), 16) * 1e3);\n });\n /**\n * Set the counter to a specific value.\n */\n __publicField(this, \"setCounter\", (counter) => {\n this.counter = counter;\n });\n /**\n * Validate given UID contains only characters from the instanced dictionary or optionally provided dictionary.\n */\n __publicField(this, \"validate\", (uid, dictionary) => {\n const finalDictionary = dictionary ? this._normalizeDictionary(dictionary) : this.dict;\n return uid.split(\"\").every((c) => finalDictionary.includes(c));\n });\n const options = __spreadValues(__spreadValues({}, DEFAULT_OPTIONS), argOptions);\n this.counter = 0;\n this.debug = false;\n this.dict = [];\n this.version = version;\n const { dictionary, shuffle, length, counter } = options;\n this.uuidLength = length;\n this.setDictionary(dictionary, shuffle);\n this.setCounter(counter);\n this.debug = options.debug;\n this.log(this.dict);\n this.log(\n \"Generator instantiated with Dictionary Size \".concat(this.dictLength, \" and counter set to \").concat(this.counter)\n );\n this.log = this.log.bind(this);\n this.setDictionary = this.setDictionary.bind(this);\n this.setCounter = this.setCounter.bind(this);\n this.seq = this.seq.bind(this);\n this.sequentialUUID = this.sequentialUUID.bind(this);\n this.rnd = this.rnd.bind(this);\n this.randomUUID = this.randomUUID.bind(this);\n this.fmt = this.fmt.bind(this);\n this.formattedUUID = this.formattedUUID.bind(this);\n this.availableUUIDs = this.availableUUIDs.bind(this);\n this.approxMaxBeforeCollision = this.approxMaxBeforeCollision.bind(this);\n this.collisionProbability = this.collisionProbability.bind(this);\n this.uniqueness = this.uniqueness.bind(this);\n this.getVersion = this.getVersion.bind(this);\n this.stamp = this.stamp.bind(this);\n this.parseStamp = this.parseStamp.bind(this);\n }\n };\n /** @hidden */\n __publicField(_ShortUniqueId, \"default\", _ShortUniqueId);\n var ShortUniqueId = _ShortUniqueId;\n return __toCommonJS(index_exports);\n})();\n//# sourceMappingURL=short-unique-id.js.map\n'undefined'!=typeof module&&(module.exports=ShortUniqueId.default),'undefined'!=typeof window&&(ShortUniqueId=ShortUniqueId.default);","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","module.exports=function(e){var r={};function t(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&r&&\"string\"!=typeof e)for(var a in e)t.d(n,a,function(r){return e[r]}.bind(null,a));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,\"a\",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p=\"\",t(t.s=0)}([function(e,r,t){\"use strict\";t.r(r),t.d(r,\"validateHTMLColorName\",(function(){return l})),t.d(r,\"validateHTMLColorSpecialName\",(function(){return i})),t.d(r,\"validateHTMLColorHex\",(function(){return u})),t.d(r,\"validateHTMLColorRgb\",(function(){return g})),t.d(r,\"validateHTMLColorHsl\",(function(){return y})),t.d(r,\"validateHTMLColorHwb\",(function(){return L})),t.d(r,\"validateHTMLColorLab\",(function(){return S})),t.d(r,\"validateHTMLColorLch\",(function(){return m})),t.d(r,\"validateHTMLColor\",(function(){return G}));const n=e=>e&&\"string\"==typeof e,a=[\"AliceBlue\",\"AntiqueWhite\",\"Aqua\",\"Aquamarine\",\"Azure\",\"Beige\",\"Bisque\",\"Black\",\"BlanchedAlmond\",\"Blue\",\"BlueViolet\",\"Brown\",\"BurlyWood\",\"CadetBlue\",\"Chartreuse\",\"Chocolate\",\"Coral\",\"CornflowerBlue\",\"Cornsilk\",\"Crimson\",\"Cyan\",\"DarkBlue\",\"DarkCyan\",\"DarkGoldenrod\",\"DarkGray\",\"DarkGrey\",\"DarkGreen\",\"DarkKhaki\",\"DarkMagenta\",\"DarkOliveGreen\",\"DarkOrange\",\"DarkOrchid\",\"DarkRed\",\"DarkSalmon\",\"DarkSeaGreen\",\"DarkSlateBlue\",\"DarkSlateGray\",\"DarkSlateGrey\",\"DarkTurquoise\",\"DarkViolet\",\"DeepPink\",\"DeepSkyBlue\",\"DimGray\",\"DimGrey\",\"DodgerBlue\",\"FireBrick\",\"FloralWhite\",\"ForestGreen\",\"Fuchsia\",\"Gainsboro\",\"GhostWhite\",\"Gold\",\"Goldenrod\",\"Gray\",\"Grey\",\"Green\",\"GreenYellow\",\"HoneyDew\",\"HotPink\",\"IndianRed\",\"Indigo\",\"Ivory\",\"Khaki\",\"Lavender\",\"LavenderBlush\",\"LawnGreen\",\"LemonChiffon\",\"LightBlue\",\"LightCoral\",\"LightCyan\",\"LightGoldenrodYellow\",\"LightGray\",\"LightGrey\",\"LightGreen\",\"LightPink\",\"LightSalmon\",\"LightSalmon\",\"LightSeaGreen\",\"LightSkyBlue\",\"LightSlateGray\",\"LightSlateGrey\",\"LightSteelBlue\",\"LightYellow\",\"Lime\",\"LimeGreen\",\"Linen\",\"Magenta\",\"Maroon\",\"MediumAquamarine\",\"MediumBlue\",\"MediumOrchid\",\"MediumPurple\",\"MediumSeaGreen\",\"MediumSlateBlue\",\"MediumSlateBlue\",\"MediumSpringGreen\",\"MediumTurquoise\",\"MediumVioletRed\",\"MidnightBlue\",\"MintCream\",\"MistyRose\",\"Moccasin\",\"NavajoWhite\",\"Navy\",\"OldLace\",\"Olive\",\"OliveDrab\",\"Orange\",\"OrangeRed\",\"Orchid\",\"PaleGoldenrod\",\"PaleGreen\",\"PaleTurquoise\",\"PaleVioletRed\",\"PapayaWhip\",\"PeachPuff\",\"Peru\",\"Pink\",\"Plum\",\"PowderBlue\",\"Purple\",\"RebeccaPurple\",\"Red\",\"RosyBrown\",\"RoyalBlue\",\"SaddleBrown\",\"Salmon\",\"SandyBrown\",\"SeaGreen\",\"SeaShell\",\"Sienna\",\"Silver\",\"SkyBlue\",\"SlateBlue\",\"SlateGray\",\"SlateGrey\",\"Snow\",\"SpringGreen\",\"SteelBlue\",\"Tan\",\"Teal\",\"Thistle\",\"Tomato\",\"Turquoise\",\"Violet\",\"Wheat\",\"White\",\"WhiteSmoke\",\"Yellow\",\"YellowGreen\"],o=[\"currentColor\",\"inherit\",\"transparent\"],l=e=>{let r=!1;return n(e)&&a.map(t=>(e.toLowerCase()===t.toLowerCase()&&(r=!0),null)),r},i=e=>{let r=!1;return n(e)&&o.map(t=>(e.toLowerCase()===t.toLowerCase()&&(r=!0),null)),r},u=e=>{if(n(e)){const r=/^#([\\da-f]{3}){1,2}$|^#([\\da-f]{4}){1,2}$/i;return e&&r.test(e)}return!1},d=\"(([\\\\d]{0,5})((\\\\.([\\\\d]{1,5}))?))\",s=`(${d}%)`,c=\"(([0-9]|[1-9][0-9]|100)%)\",f=`(${c}|(0?((\\\\.([\\\\d]{1,5}))?))|1)`,h=`([\\\\s]{0,5})\\\\)?)(([\\\\s]{0,5})(\\\\/?)([\\\\s]{1,5})${`(((${c}))|(0?((\\\\.([\\\\d]{1,5}))?))|1))?`}([\\\\s]{0,5})\\\\)`,$=\"(-?(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]|3[0-5][0-9])((\\\\.([\\\\d]{1,5}))?)|360)(deg)?)\",g=e=>{if(n(e)){const r=\"([\\\\s]{0,5})([\\\\d]{1,5})%?([\\\\s]{0,5}),?\",t=\"((([\\\\s]{0,5}),?([\\\\s]{0,5}))|(([\\\\s]{1,5})))\",n=new RegExp(`^(rgb)a?\\\\(${`${r}${t}`}${`${r}${t}`}${`${r}${t}`}(${\"(\\\\/?([\\\\s]{0,5})(0?\\\\.?([\\\\d]{1,5})%?([\\\\s]{0,5}))?|1|0)\"})?\\\\)$`);return e&&n.test(e)}return!1},y=e=>{if(n(e)){const r=new RegExp(`^(hsl)a?\\\\((([\\\\s]{0,5})(${$}|${\"(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]|3[0-9][0-9]|400)grad)\"}|${\"((([0-5])?\\\\.([\\\\d]{1,5})|6\\\\.([0-9]|1[0-9]|2[0-8])|[0-6])rad)\"}|${\"((0?((\\\\.([\\\\d]{1,5}))?)|1)turn)\"})((([\\\\s]{0,5}),([\\\\s]{0,5}))|(([\\\\s]{1,5}))))(([\\\\s]{0,5})(0|${c})((([\\\\s]{0,5}),([\\\\s]{0,5}))|(([\\\\s]{1,5}))))(([\\\\s]{0,5})(0|${c})([\\\\s]{0,5})\\\\)?)(([\\\\s]{0,5})(\\\\/?|,?)([\\\\s]{0,5})(((${c}))|(0?((\\\\.([\\\\d]{1,5}))?))|1))?\\\\)$`);return e&&r.test(e)}return!1},L=e=>{if(n(e)){const r=new RegExp(`^(hwb\\\\(([\\\\s]{0,5})${$}([\\\\s]{1,5}))((0|${c})([\\\\s]{1,5}))((0|${c})${h}$`);return e&&r.test(e)}return!1},S=e=>{if(n(e)){const r=\"(-?(([0-9]|[1-9][0-9]|1[0-5][0-9])((\\\\.([\\\\d]{1,5}))?)?|160))\",t=new RegExp(`^(lab\\\\(([\\\\s]{0,5})${s}([\\\\s]{1,5})${r}([\\\\s]{1,5})${r}${h}$`);return e&&t.test(e)}return!1},m=e=>{if(n(e)){const r=\"((([0-9]|[1-9][0-9])?((\\\\.([\\\\d]{1,5}))?)|100)(%)?)\",t=\"\"+d,n=`((${$})|(0|${f})|(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]|3[0-5][0-9])((\\\\.([\\\\d]{1,5}))?)|360))`,a=`(\\\\/([\\\\s]{0,5})${f})`,o=new RegExp(`^lch\\\\(${`(([\\\\s]{0,5})${r}([\\\\s]{1,5})${t}([\\\\s]{1,5})${n}([\\\\s]{0,5})(${a})?)`}\\\\)$`);return e&&o.test(e)}return!1},G=e=>!!(e&&u(e)||g(e)||y(e)||L(e)||S(e)||m(e));r.default=e=>!!(e&&u(e)||l(e)||i(e)||g(e)||y(e)||L(e)||S(e)||m(e))}]);","module.exports = __WEBPACK_EXTERNAL_MODULE__5663__;","module.exports = __WEBPACK_EXTERNAL_MODULE__9426__;","module.exports = __WEBPACK_EXTERNAL_MODULE__5491__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","__webpack_require__.nc = undefined;","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./CVCard.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./CVCard.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./ChatWithMe.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./ChatWithMe.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./FriendList.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./FriendList.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./ProfileCard.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./ProfileCard.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./ProfileView.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./ProfileView.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./QRCodeCard.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./QRCodeCard.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./SocialCard.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./SocialCard.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./StuffCard.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./StuffCard.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./utilities.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./utilities.css\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>o,n=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,e={HTML:1,SVG:2,MATHML:3},l=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,d=o=>null!=o?._$litType$?.h,c=o=>void 0!==o?._$litDirective$,f=o=>o?._$litDirective$,r=o=>void 0===o.strings,s=()=>document.createComment(\"\"),v=(o,n,e)=>{const l=o._$AA.parentNode,d=void 0===n?o._$AB:n._$AA;if(void 0===e){const i=l.insertBefore(s(),d),n=l.insertBefore(s(),d);e=new t(i,n,o,o.options)}else{const t=e._$AB.nextSibling,n=e._$AM,c=n!==o;if(c){let t;e._$AQ?.(o),e._$AM=o,void 0!==e._$AP&&(t=o._$AU)!==n._$AU&&e._$AP(t)}if(t!==d||c){let o=e._$AA;for(;o!==t;){const t=i(o).nextSibling;i(l).insertBefore(o,d),o=t}}}return e},u=(o,t,i=o)=>(o._$AI(t,i),o),m={},p=(o,t=m)=>o._$AH=t,M=o=>o._$AH,h=o=>{o._$AR(),o._$AA.remove()},j=o=>{o._$AR()};export{e as TemplateResultType,j as clearPart,M as getCommittedValue,f as getDirectiveClass,v as insertPart,d as isCompiledTemplateResult,c as isDirectiveResult,n as isPrimitive,r as isSingleExpression,l as isTemplateResult,h as removePart,u as setChildPartValue,p as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{isSingleExpression as i}from\"./directive-helpers.js\";import{Directive as t,PartType as e}from\"./directive.js\";export{directive}from\"./directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=(i,t)=>{const e=i._$AN;if(void 0===e)return!1;for(const i of e)i._$AO?.(t,!1),s(i,t);return!0},o=i=>{let t,e;do{if(void 0===(t=i._$AM))break;e=t._$AN,e.delete(i),i=t}while(0===e?.size)},r=i=>{for(let t;t=i._$AM;i=t){let e=t._$AN;if(void 0===e)t._$AN=e=new Set;else if(e.has(i))break;e.add(i),c(t)}};function h(i){void 0!==this._$AN?(o(this),this._$AM=i,r(this)):this._$AM=i}function n(i,t=!1,e=0){const r=this._$AH,h=this._$AN;if(void 0!==h&&0!==h.size)if(t)if(Array.isArray(r))for(let i=e;i<r.length;i++)s(r[i],!1),o(r[i]);else null!=r&&(s(r,!1),o(r));else s(this,i)}const c=i=>{i.type==e.CHILD&&(i._$AP??=n,i._$AQ??=h)};class f extends t{constructor(){super(...arguments),this._$AN=void 0}_$AT(i,t,e){super._$AT(i,t,e),r(this),this.isConnected=i._$AU}_$AO(i,t=!0){i!==this.isConnected&&(this.isConnected=i,i?this.reconnected?.():this.disconnected?.()),t&&(s(this,i),o(this))}setValue(t){if(i(this._$Ct))this._$Ct._$AI(t,this);else{const i=[...this._$Ct._$AH];i[this._$Ci]=t,this._$Ct._$AI(i,this,0)}}disconnected(){}reconnected(){}}export{f as AsyncDirective,t as Directive,e as PartType};\n//# sourceMappingURL=async-directive.js.map\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=async(t,s)=>{for await(const i of t)if(!1===await s(i))return};class s{constructor(t){this.G=t}disconnect(){this.G=void 0}reconnect(t){this.G=t}deref(){return this.G}}class i{constructor(){this.Y=void 0,this.Z=void 0}get(){return this.Y}pause(){this.Y??=new Promise(t=>this.Z=t)}resume(){this.Z?.(),this.Y=this.Z=void 0}}export{i as Pauser,s as PseudoWeakRef,t as forAwaitOf};\n//# sourceMappingURL=private-async-helpers.js.map\n","import{noChange as t}from\"../lit-html.js\";import{AsyncDirective as i}from\"../async-directive.js\";import{PseudoWeakRef as s,Pauser as r,forAwaitOf as e}from\"./private-async-helpers.js\";import{directive as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class o extends i{constructor(){super(...arguments),this._$CK=new s(this),this._$CX=new r}render(i,s){return t}update(i,[s,r]){if(this.isConnected||this.disconnected(),s===this._$CJ)return t;this._$CJ=s;let n=0;const{_$CK:o,_$CX:h}=this;return e(s,async t=>{for(;h.get();)await h.get();const i=o.deref();if(void 0!==i){if(i._$CJ!==s)return!1;void 0!==r&&(t=r(t,n)),i.commitValue(t,n),n++}return!0}),t}commitValue(t,i){this.setValue(t)}disconnected(){this._$CK.disconnect(),this._$CX.pause()}reconnected(){this._$CK.reconnect(this),this._$CX.resume()}}const h=n(o);export{o as AsyncReplaceDirective,h as asyncReplace};\n//# sourceMappingURL=async-replace.js.map\n","// QR CODE\nexport const scanQrToConnectText = 'Scan the QR code to connect with me'\n//ERRORS & SUCCESS\n//Same 'not logged in' error message like on 'Chat with me' button\nexport const userNotLoggedInErrorMessage = 'Current user not found! Not logged in?'\nexport const internalErrorMessage = 'An internal error occured!'\nexport const friendWasAddedSuccesMessage = 'Friend was added!'\nexport const contactWasAddedSuccesMessage = 'Contact was added!'\nexport const addressBookNotExists = 'Your address book was not found.'\nexport const groupIsRequired = 'You need to either pick a group or enter one.'\nexport const errorGroupCreation = 'There was an error creating group.'\nexport const errorContactCreation = 'There was an error creating contact.'\nexport const errorAddressBookCreation = 'There was an error creating the address book.'\nexport const errorReadingAddressBook = 'There was an error reading your address book.'\nexport const errorLoadingContact = 'There was an error loading the contact: '\nexport const errorGettingAddressBooks = 'There was an error getting your address books.'\nexport const errorNotExistsAddressBookUri = 'Please enter an address book URI.'\nexport const errorProcessingUriAddressBook = 'There was an error processing your address book.'\nexport const errorUnableToDetermineUserWorkspace = 'Unable to determine user workspace for new address book.'\n\n//OTHER\nexport const friendExistsMessage = 'Friend already exists'\nexport const contactExistsMessage = 'Contact already exists'\nexport const loadingMessage = 'Loading...'\n\n//BUTTONS\nexport const addMeToYourFriendsButtonText = 'Add me to your friends'\nexport const logInAddMeToYourFriendsButtonText = 'Login to add me to your friends'\nexport const addMeToYourContactsButtonText = 'Add me to your contacts'\nexport const logInAddMeToYourContactsButtonText = 'Login to add me to your contacts'\nexport const logInToChatWithMeButtonText = 'Login to chat with me'\nexport const friendExistsAlreadyButtonText = 'Already part of friends'\nexport const contactExistsAlreadyButtonText = 'Already part of contacts'\nexport const contactExistsAlreadyByNameButtonText = 'Add webID to contact'\nexport const chatWithMeButtonText = 'Chat with me'\n\n// Profile & Edit profile texts \nexport const yourContactInformationHeading = 'Contact Information'\nexport const otherPreferencesHeadingText = 'Other Preferences'\nexport const communitiesHeadingText = 'Communities You Participate In'\nexport const resumeHeadingText = 'Resume'\nexport const socialAccountsHeadingText = 'Social Accounts'\nexport const sharedItemsHeadingText = 'Shared Items'\nexport const friendsHeadingText = 'Friends'\nexport const contactHeadingText = 'Contact'\n\n\n","import { DataBrowserContext } from 'pane-registry'\nimport { widgets } from 'solid-ui'\nimport { NamedNode } from 'rdflib'\n\nfunction complain(\n buttonContainer: HTMLDivElement,\n context: DataBrowserContext,\n error: string\n): void {\n const errorBlock = widgets.errorMessageBlock(context.dom, error)\n errorBlock.setAttribute('role', 'alert')\n errorBlock.setAttribute('aria-live', 'assertive')\n errorBlock.setAttribute('tabindex', '0')\n\n // Focus the error message for screen readers\n setTimeout(() => {\n errorBlock.focus()\n }, 100)\n\n buttonContainer.appendChild(errorBlock)\n}\n\nfunction mention(buttonContainer: HTMLDivElement, message: string): void {\n const positiveFrontendMessageDiv = <HTMLDivElement>document.createElement('div')\n positiveFrontendMessageDiv.setAttribute('role', 'status')\n positiveFrontendMessageDiv.setAttribute('aria-live', 'polite')\n positiveFrontendMessageDiv.setAttribute('tabindex', '0')\n positiveFrontendMessageDiv.classList.add('actionButton', 'licOkay')\n positiveFrontendMessageDiv.innerHTML = message\n\n // Focus the success message for screen readers\n setTimeout(() => {\n positiveFrontendMessageDiv.focus()\n }, 100)\n\n buttonContainer.appendChild(positiveFrontendMessageDiv)\n}\n\nfunction clearPreviousMessage(buttonContainer: HTMLDivElement): void {\n while (buttonContainer.childNodes.length > 2) {\n buttonContainer.removeChild(buttonContainer.lastChild)\n }\n}\n\nfunction checkIfAnyUserLoggedIn(me: NamedNode): boolean {\n if (me) return true\n else return false\n}\n\nexport { complain, mention, clearPreviousMessage, checkIfAnyUserLoggedIn }\n","import { html, TemplateResult } from 'lit-html'\nimport { DataBrowserContext } from 'pane-registry'\nimport { NamedNode } from 'rdflib'\nimport { widgets } from 'solid-ui'\nimport { authn } from 'solid-logic'\nimport { asyncReplace } from 'lit-html/directives/async-replace.js'\nimport { chatWithMeButtonText, logInToChatWithMeButtonText, loadingMessage } from './texts'\nimport { checkIfAnyUserLoggedIn, complain } from './buttonsHelper'\nimport './styles/ChatWithMe.css'\n\nexport const ChatWithMe = (\n subject: NamedNode,\n context: DataBrowserContext\n): TemplateResult => {\n const logic = context.session.logic\n const longChatPane = context.session.paneRegistry.byName('long chat')\n\n async function* chatContainer() {\n const chatContainer = context.dom.createElement('section') as HTMLDivElement\n chatContainer.setAttribute('class', 'chatSection section-centered')\n chatContainer.setAttribute('aria-labelledby', 'chat-section-title')\n chatContainer.setAttribute('role', 'region')\n chatContainer.setAttribute('data-testid', 'chat')\n\n // Add hidden title for screen readers\n const title = context.dom.createElement('h3')\n title.id = 'chat-section-title'\n title.className = 'sr-only'\n title.textContent = 'Communication'\n chatContainer.appendChild(title)\n\n let exists\n try {\n yield html`\n <div class=\"buttonSubSection\">\n <div class=\"actionButton loading-text center\" role=\"status\" aria-live=\"polite\">\n ${loadingMessage.toUpperCase()}\n </div>\n </div>\n `\n exists = await logic.chat.getChat(subject, false)\n } catch (e) {\n exists = false\n }\n \n if (exists) {\n const chatArea = context.dom.createElement('div')\n chatArea.setAttribute('role', 'log')\n chatArea.setAttribute('aria-label', 'Chat conversation')\n chatArea.appendChild(longChatPane.render(exists, context, {}))\n chatContainer.appendChild(chatArea)\n yield chatContainer\n } else {\n const me = authn.currentUser()\n let label = checkIfAnyUserLoggedIn(me) ? chatWithMeButtonText.toUpperCase() : logInToChatWithMeButtonText.toUpperCase()\n const button = widgets.button(\n context.dom,\n undefined,\n label,\n setButtonHandler,\n { needsBorder: true }\n )\n\n async function setButtonHandler(event) {\n event.preventDefault()\n try {\n const chat: NamedNode = await logic.chat.getChat(subject, true)\n chatContainer.innerHTML = ''\n chatContainer.appendChild(longChatPane.render(chat, context, {}))\n } catch (error) {\n complain(chatContainer, context, error)\n }\n }\n\n button.refresh = refreshButton()\n\n function refreshButton() {\n const me = authn.currentUser()\n \n if (checkIfAnyUserLoggedIn(me)) {\n button.innerHTML = chatWithMeButtonText.toUpperCase()\n } else {\n //not logged in\n button.innerHTML = logInToChatWithMeButtonText.toUpperCase()\n }\n }\n\n button.setAttribute('type', 'button')\n button.setAttribute('aria-describedby', 'chat-button-description')\n \n const description = context.dom.createElement('span')\n description.id = 'chat-button-description'\n description.className = 'sr-only'\n description.textContent = 'Start a new conversation or sign in to continue existing chat'\n \n button.classList.add('actionButton', 'btn-primary', 'action-button-focus')\n chatContainer.appendChild(button)\n chatContainer.appendChild(description)\n yield chatContainer\n }\n }\n\n return html` ${asyncReplace(chatContainer())} `\n}","import { ns, widgets } from 'solid-ui'\nimport { DataBrowserContext } from 'pane-registry'\nimport { NamedNode } from 'rdflib'\nimport { html, TemplateResult } from 'lit-html'\nimport './styles/FriendList.css'\n\n\nexport const FriendList = (\n subject: NamedNode,\n context: DataBrowserContext\n): TemplateResult | null => {\n const friends = extractFriends(subject, context)\n if (!friends || !friends.textContent?.trim()) return null\n\n return html`\n <section\n class=\"friendListSection\"\n role=\"region\"\n aria-labelledby=\"friends-section-title\"\n data-testid=\"friend-list\"\n >\n <nav aria-label=\"Friend profiles\">\n <ul class=\"list-reset zebra-stripe\" role=\"list\">\n ${friends}\n </ul>\n </nav>\n </section>\n `\n}\n\nexport const extractFriends = (subject: NamedNode, { dom }: DataBrowserContext) => {\n const target = dom.createElement('div')\n widgets.attachmentList(dom, subject, target, {\n doc: subject.doc(),\n modify: false,\n predicate: ns.foaf('knows'),\n noun: 'friend',\n })\n if (target.textContent === '')\n return null\n // Add 'friendItem' class and unique aria-label to each <li> for accessibility\n target.querySelectorAll('li').forEach((li, idx) => {\n li.classList.add('friendItem')\n // Try to find a link or text to use as a label\n const link = li.querySelector('a')\n if (link && link.textContent) {\n li.setAttribute('aria-label', `Friend: ${link.textContent.trim()}`)\n } else if (li.textContent) {\n li.setAttribute('aria-label', `Friend: ${li.textContent.trim()}`)\n } else {\n li.setAttribute('aria-label', `Friend ${idx + 1}`)\n }\n })\n return target\n}\n","import { NamedNode, LiveStore } from 'rdflib'\nimport { ns, utils, widgets } from 'solid-ui'\nimport { store } from 'solid-logic'\nimport { Node } from 'rdflib'\nimport { validateHTMLColorHex } from 'validate-color'\n\nexport interface ProfilePresentation {\n name: string;\n imageSrc?: string;\n introduction?: string;\n languages?: string;\n location?: string;\n pronouns?: string;\n backgroundColor: string;\n highlightColor: string;\n}\n\nexport function pronounsAsText (subject:NamedNode): string {\n let pronouns = store.anyJS(subject, ns.solid('preferredSubjectPronoun')) || ''\n if (pronouns) {\n const them = store.anyJS(subject, ns.solid('preferredObjectPronoun'))\n if (them) {\n pronouns += '/' + them\n const their = store.anyJS(subject, ns.solid('preferredRelativePronoun'))\n if (their) {\n pronouns += '/' + their\n }\n }\n pronouns = ' (' + pronouns + ') '\n }\n return pronouns || ''\n}\n\nexport const presentProfile = (\n subject: NamedNode,\n store: LiveStore\n): ProfilePresentation => {\n const name = utils.label(subject)\n const imageSrc = widgets.findImage(subject)\n const role = store.anyValue(subject, ns.vcard('role'))\n const orgName = store.anyValue(subject, ns.vcard('organization-name')) // @@ Search whole store\n\n const address: Node | null = store.any(subject, ns.vcard('hasAddress'))\n const countryName =\n address != null\n ? store.anyValue(address as NamedNode, ns.vcard('country-name'))\n : null\n const locality =\n address != null\n ? store.anyValue(address as NamedNode, ns.vcard('locality'))\n : null\n const { backgroundColor, highlightColor } = getColors(subject, store)\n const pronouns = pronounsAsText(subject)\n return {\n name,\n imageSrc,\n introduction: formatIntroduction(role, orgName),\n location: formatLocation(countryName, locality),\n backgroundColor,\n pronouns,\n highlightColor,\n }\n}\n\nfunction formatLocation(countryName: string | void, locality: string | void) {\n return countryName && locality\n ? `${locality}, ${countryName}`\n : countryName || locality || null\n}\n\nfunction formatIntroduction(role: string | void, orgName: string | void) {\n return role && orgName ? `${role} at ${orgName}` : orgName || role || null\n}\n\nfunction getColors(subject: NamedNode, store: LiveStore) {\n const backgroundColor = store.anyValue(\n subject,\n ns.solid('profileBackgroundColor'),\n null,\n subject.doc()\n )\n\n const highlightColor = store.anyValue(\n subject,\n ns.solid('profileHighlightColor'),\n null,\n subject.doc()\n )\n return {\n // default colors are coming from the SolidOS theme, so we only want to set them here if they're valid colors\n backgroundColor: validColorOrDefault(backgroundColor, ''),\n highlightColor: validColorOrDefault(highlightColor, ''),\n }\n}\n\nfunction validColorOrDefault(color: string | void, fallback: string) {\n return color && validateHTMLColorHex(color) ? color : fallback\n}","import { LiveStore, NamedNode, Literal, Namespace, Node, Store } from 'rdflib'\nimport { ns, utils } from 'solid-ui'\n\nexport interface Role {\n startDate?: Literal,\n endDate: Literal,\n dates: string,\n orgName: string,\n roleText: string,\n orgHomePage?: string\n}\nexport interface CVPresentation { \n rolesByType: RolesByType;\n skills: string[];\n languages: string[];\n}\n\nexport interface RolesByType {\n PastRole: Role[];\n CurrentRole: Role[];\n FutureRole: Role[];\n}\n\nconst ORG = Namespace('http://www.w3.org/ns/org#')\n\nexport const typesOfRole = ['PastRole', 'CurrentRole', 'FutureRole']\n\nexport function skillAsText (store: Store, sk: Node):string {\n if (sk.termType === 'Literal') return sk.value // Not normal but allow this\n const publicId = store.anyJS(sk as NamedNode, ns.solid('publicId'))\n if (publicId) {\n const name = store.anyJS(publicId, ns.schema('name'))\n if (name) return name // @@ check language and get name in diff language if necessary\n }\n\n const manual = store.anyJS(sk as NamedNode, ns.vcard('role'))\n if (manual && manual[0] > '') return manual\n return ''\n}\n\nexport function languageAsText (store: Store, lan: Node):string {\n if (lan.termType === 'Literal') return lan.value // Not normal but allow this\n const publicId = store.anyJS(lan as NamedNode, ns.solid('publicId'))\n if (publicId)\n return utils.label(publicId, true) // @@ check language and get name in diff language if necessary\n return '' \n}\n\nexport function datesAsText (startDate?:Literal, endDate?:Literal):string {\n return startDate ? '(' + startDate.value.slice(0,10) + ' to ' +\n ( endDate ? endDate.value.slice(0,10) : '') +')'\n : '' \n}\n\nfunction expandRdfList(store: Store, node: Node): Node[] {\n const collectionElements = (node as { termType?: string; elements?: Node[] }).elements\n if (Array.isArray(collectionElements)) {\n return collectionElements.flatMap(element => expandRdfList(store, element))\n }\n\n const first = store.any(node as NamedNode, ns.rdf('first'))\n if (!first) return [node]\n\n const items: Node[] = []\n let current: Node | null = node\n while (current) {\n const value = store.any(current as NamedNode, ns.rdf('first')) as Node | null\n if (value) items.push(...expandRdfList(store, value))\n const rest = store.any(current as NamedNode, ns.rdf('rest')) as Node | null\n if (!rest || (rest.termType === 'NamedNode' && rest.value === ns.rdf('nil').value)) break\n current = rest\n }\n return items\n}\n\nfunction getRolesByType(\n store: LiveStore,\n subject: NamedNode\n): RolesByType {\n\n const memberships = store.each(null, ORG('member'), subject, null)\n\n const rolesByType = { PastRole: [], CurrentRole: [], FutureRole: [] }\n for (const membership of memberships) {\n let orgHomePage, orgNameGiven, publicIdName, roleName, publicId\n // Things should have start dates but we will be very lenient in this view\n const startDate = store.any(membership as NamedNode, ns.schema('startDate')) as Literal | null\n const endDate = store.any(membership as NamedNode, ns.schema('endDate')) as Literal | null\n const dates = datesAsText(startDate, endDate)\n\n const organization = store.any(membership as NamedNode, ORG('organization'))\n if (organization) {\n orgNameGiven = store.anyJS(organization as NamedNode, ns.schema('name'))\n orgHomePage = store.any(organization as NamedNode, ns.schema('uri'))\n publicId = store.any(organization as NamedNode, ns.solid('publicId'))\n }\n if (publicId) {\n publicIdName = store.anyJS(publicId as NamedNode, ns.schema('name'))\n }\n const orgName = publicIdName || orgNameGiven\n\n const escoRole = store.any(membership as NamedNode, ORG('role'))\n if (escoRole) {\n roleName = store.anyJS(escoRole as NamedNode, ns.schema('name')) as string | null\n }\n const roleText0 = store.anyJS(membership as NamedNode, ns.vcard('role'))\n const roleText = (roleText0 && roleName) ? roleName + ' - ' + roleText0\n : roleText0 || roleName\n\n const item: Role = {\n startDate: startDate as Literal, endDate, orgName, roleText, dates, orgHomePage\n }\n\n for (const t of typesOfRole) {\n if (store.holds(membership, ns.rdf('type'), ns.solid(t))) {\n rolesByType[t].push(item)\n }\n }\n }\n return rolesByType\n}\n\nexport function presentCV(\n subject: NamedNode,\n store: LiveStore\n): CVPresentation {\n \n const rolesByType = getRolesByType(store, subject)\n // Most recent thing most relevant -> sort by end date\n for (const t of typesOfRole) {\n rolesByType[t].sort(function (x, y) {\n if (x.endDate && y.endDate) {\n return x.endDate > y.endDate ? -1 : 1\n }\n return x.startDate > y.startDate ? -1 : 1\n })\n }\n\n const skills = store\n .each(subject, ns.schema('skills'))\n .map((sk) => skillAsText(store, sk))\n .filter((skill) => skill !== '')\n\n const languageNodes = store.each(subject, ns.schema('knowsLanguage'))\n const languages = languageNodes\n .flatMap(node => expandRdfList(store, node))\n .map(lan => languageAsText(store, lan))\n // Deduplicate languages\n const uniqueLanguages = Array.from(new Set(languages))\n\n return { rolesByType, skills, languages: uniqueLanguages }\n}\n","import { NamedNode, Store, Namespace, sym, parse } from 'rdflib'\nimport { widgets } from 'solid-ui'\n\nconst baseUri = 'https://solidos.github.io/profile-pane/src/ontology/'\n\nexport default function renderForm(\n div: HTMLElement,\n subject: NamedNode, // Represents the RDF that fills the form\n formSource: string, // The imported form Turtle source\n formName: string, // The name of the form file (e.g., 'socialMedia.ttl')\n store: Store,\n dom: Document,\n editableProfile: NamedNode | null,\n whichForm?: string ) {// Optional: specify which form to use if multiple 'a ui:Form' are present in the file{\n // --- Form resource setup ---\n const formUri = baseUri + formName // Full URI to the form file\n const exactForm = whichForm || 'this' // If there are more 'a ui:Form' elements in a form file\n const formThis = Namespace(formUri + '#')(exactForm) // NamedNode for #this in the form\n\n loadDocument(store, formSource, formName, formUri)\n\n widgets.appendForm(\n dom,\n div,\n {},\n subject,\n formThis,\n editableProfile,\n (ok, mes) => {\n if (!ok) widgets.errorMessageBlock(dom, mes)\n }\n )\n } // renderForm\n\n// we need to load into the store some additional information about Social Media accounts\nexport function loadDocument(\n store: Store,\n documentSource: string,\n documentName: string,\n documentURI?: string\n ) {\n const finalDocumentUri = documentURI || baseUri + documentName // Full URI to the file\n const document = sym(finalDocumentUri) // rdflib NamedNode for the document \n \n if (!store.holds(undefined, undefined, undefined, document)) {\n // we are using the social media form because it contains the information we need\n // the form can be used for both use cases: create UI for edit and render UI for display\n parse(documentSource, store, finalDocumentUri, 'text/turtle', () => null) // Load doc directly\n }\n}","import { LiveStore, NamedNode, Node } from 'rdflib'\nimport { ns, utils, icons } from 'solid-ui'\nimport socialMediaForm from './ontology/socialMedia.ttl'\nimport { loadDocument } from './rdfFormsHelper'\n\nconst socialMediaFormName = 'socialMedia.ttl' // The name of the file to upload\n\nconst DEFAULT_ICON_URI = icons.iconBase + 'noun_10636_grey.svg' // grey disc\nexport interface Account {\n name: string,\n icon: string,\n homepage: string,\n}\nexport interface SocialPresentation { \n accounts: Account[];\n}\n\nfunction expandRdfList(store: LiveStore, node: Node): Node[] {\n const visited = new Set<string>()\n function inner(node: Node): Node[] {\n const termType = (node as any).termType || typeof node\n const value = (node as any).value || String(node)\n const key = `${termType}:${value}`\n if (visited.has(key)) return []\n visited.add(key)\n\n const collectionElements = (node as { termType?: string; elements?: Node[] }).elements\n if (Array.isArray(collectionElements)) {\n return collectionElements.flatMap(element => inner(element))\n }\n\n const first = store.any(node as NamedNode, ns.rdf('first'))\n if (!first) return [node]\n\n const items: Node[] = []\n let current: Node | null = node\n while (current) {\n const value = store.any(current as NamedNode, ns.rdf('first')) as Node | null\n if (value) items.push(...inner(value))\n const rest = store.any(current as NamedNode, ns.rdf('rest')) as Node | null\n if (!rest || (rest.termType === 'NamedNode' && rest.value === ns.rdf('nil').value)) break\n current = rest\n }\n return items\n }\n return inner(node)\n}\n\nexport function presentSocial(\n subject: NamedNode,\n store: LiveStore\n): SocialPresentation {\n \n function nameForAccount (subject):string {\n const acName = store.any(subject, ns.foaf('name')) ||\n store.any(subject, ns.rdfs('label')) // on the account itself?\n if (acName) return acName.value\n const classes = store.each(subject, ns.rdf('type')) as NamedNode[]\n for (const k of classes) {\n const classIcon: Node = store.any(k as NamedNode, ns.rdfs('label'))\n if (classIcon) {\n return classIcon.value\n }\n return utils.label(k)\n }\n return 'Unknown Account'\n }\n\n function iconForAccount (subject):string {\n const acIcon = store.any(subject, ns.foaf('icon')) // on the account itself?\n if (acIcon) return acIcon.value\n const classes = store.each(subject, ns.rdf('type'))\n if (classes.length > 0) {\n \n for (const k of (classes as Node[])) {\n const classIcon: Node | null = store.any(k as any, ns.foaf('icon'))\n if (classIcon !== null) {\n return classIcon.value\n }\n }\n }\n return DEFAULT_ICON_URI\n }\n\n function homepageForAccount (subject):string {\n const acHomepage = store.any(subject, ns.foaf('homepage')) // on the account itself?\n if (acHomepage) return acHomepage.value\n const id = store.anyJS(subject, ns.foaf('accountName'), null, subject.doc()) || 'No_account_Name'\n const classes = store.each(subject, ns.rdf('type'))\n for (const k of classes) {\n // Fix: ensure k is a NamedNode for store.any\n if (k.termType === 'NamedNode') {\n const userProfilePrefix: Node | null = store.any(k as NamedNode, ns.foaf('userProfilePrefix'))\n if (userProfilePrefix) {\n return userProfilePrefix.value + id.trim()\n }\n }\n }\n return store.anyJS(subject, ns.foaf('homepage'), null, subject.doc()) || ''\n }\n\n function accountAsObject (ac) {\n return {\n name: nameForAccount(ac),\n icon: iconForAccount(ac),\n homepage: homepageForAccount(ac)\n }\n\n }\n \n // we need to load the social media accounts ontology to be able to query all data needed\n loadDocument(store, socialMediaForm, socialMediaFormName)\n\n const accountNodes = store.each(subject, ns.foaf('account'))\n let accountThings = accountNodes.flatMap(node => expandRdfList(store, node))\n // Deduplicate by foaf:accountName value\n const accountNameSet = new Set<string>()\n const accounts: Account[] = []\n for (const ac of accountThings) {\n if (ac.termType === 'NamedNode') {\n const accountNameNode = store.any(ac as NamedNode, ns.foaf('accountName'))\n const accountName = accountNameNode ? accountNameNode.value : ''\n if (!accountNameSet.has(accountName)) {\n accountNameSet.add(accountName)\n accounts.push(accountAsObject(ac))\n }\n }\n }\n if (!accounts.length) return { accounts: [] }\n return { accounts }\n}\n","import { NamedNode, uri } from 'rdflib'\nimport { ns, utils, widgets, icons } from 'solid-ui'\nimport { solidLogicSingleton } from 'solid-logic'\n\nconst { iconForClass } = widgets\nconst { typeIndex } = solidLogicSingleton\nconst { getScopedAppInstances } = typeIndex\n\n\nexport interface Item {\n href: string,\n name: string,\n icon: string,\n instance: NamedNode\n}\n\nexport interface StuffPresentation {\n stuff: Item[];\n}\n\nexport const iconForClassMap = {} // @@ move to buttons in solid-ui\nfor (const k in iconForClass) {\n const pref = k.split(':')[0]\n const id = k.split(':')[1]\n const theClass = ns[pref](id)\n iconForClassMap[theClass.uri] = uri.join(iconForClass[k], icons.iconBase)\n}\n\nexport function getIconForClass (klass:NamedNode) {\n const icon0 = iconForClassMap[klass.uri]\n return icon0 || icons.iconBase + 'noun_10636.svg' // fall back to black disk\n}\n\nexport async function presentStuff(\n subject: NamedNode\n): Promise<StuffPresentation> {\n\n const scopedItems = await getScopedAppInstances(null, subject)\n // console.log('scopedItems', scopedItems)\n\n const stuff = scopedItems.map(item => { // work with old or new solid-logic\n const icon = getIconForClass((item as any).type || ns.rdf('Resource')) \n const href = item.instance.uri\n const name = utils.label(item.instance)\n const instance = item.instance\n // console.log(` href=${href} name=${name} icon=${icon}`)\n return { href, name, icon, instance }\n })\n\n return { stuff }\n}\n","import { html, TemplateResult } from 'lit-html'\nimport { DataBrowserContext } from 'pane-registry'\nimport { authn } from 'solid-logic'\nimport { LiveStore, NamedNode, st } from 'rdflib'\nimport { ns, widgets } from 'solid-ui'\nimport {\n clearPreviousMessage, complain,\n mention\n} from './buttonsHelper'\nimport {\n addMeToYourFriendsButtonText, friendExistsAlreadyButtonText, friendExistsMessage, friendWasAddedSuccesMessage, logInAddMeToYourFriendsButtonText, userNotLoggedInErrorMessage\n} from './texts'\nimport './styles/ProfileCard.css'\n\nlet buttonContainer = <HTMLDivElement>document.createElement('section')\n\nconst addMeToYourFriendsDiv = (\n subject: NamedNode,\n context: DataBrowserContext\n): TemplateResult => {\n\n buttonContainer = context.dom.createElement('section') as HTMLDivElement\n buttonContainer.setAttribute('class', 'buttonSubSection text-truncate text-center section-centered')\n buttonContainer.setAttribute('aria-labelledby', 'add-me-to-your-friends-button-section')\n buttonContainer.setAttribute('data-testid', 'button')\n\n // Add a visually hidden heading for accessibility\n const heading = context.dom.createElement('h3')\n heading.setAttribute('id', 'add-me-to-your-friends-button-section')\n heading.setAttribute('class', 'sr-only')\n heading.textContent = 'Add me to your friends actions'\n buttonContainer.appendChild(heading)\n\n const button = createAddMeToYourFriendsButton(subject, context)\n button.classList.add('actionButton', 'btn-primary', 'action-button-focus')\n buttonContainer.appendChild(button)\n return html`${buttonContainer}`\n}\n\nconst createAddMeToYourFriendsButton = (\n subject: NamedNode,\n context: DataBrowserContext\n): HTMLButtonElement => {\n const me = authn.currentUser()\n let label = checkIfAnyUserLoggedIn(me) ? addMeToYourFriendsButtonText.toUpperCase() : logInAddMeToYourFriendsButtonText.toUpperCase()\n const button = widgets.button(\n context.dom,\n undefined,\n label,\n setButtonHandler, //sets an onclick event listener\n {\n needsBorder: true,\n }\n )\n\n function setButtonHandler(event) {\n event.preventDefault()\n saveNewFriend(subject, context)\n .then(() => {\n clearPreviousMessage(buttonContainer)\n mention(buttonContainer, friendWasAddedSuccesMessage)\n refreshButton()\n })\n .catch((error) => {\n clearPreviousMessage(buttonContainer)\n //else UI.widgets.complain(buttonContainer, message); //displays an error message at the top of the window\n complain(buttonContainer, context, error)\n })\n }\n\n button.refresh = refreshButton()\n\n function refreshButton() {\n const me = authn.currentUser()\n const store: LiveStore = context.session.store\n\n if (checkIfAnyUserLoggedIn(me)) {\n checkIfFriendExists(store, me, subject).then((friendExists) => {\n if (friendExists) {\n //logged in and friend exists or friend was just added\n button.innerHTML = friendExistsAlreadyButtonText.toUpperCase()\n } else {\n //logged in and friend does not exist yet\n button.innerHTML = addMeToYourFriendsButtonText.toUpperCase()\n }\n })\n } else {\n //not logged in\n button.innerHTML = logInAddMeToYourFriendsButtonText.toUpperCase()\n }\n }\n\n return button\n}\n\nasync function saveNewFriend(\n subject: NamedNode,\n context: DataBrowserContext\n): Promise<void> {\n const me = authn.currentUser()\n const store: LiveStore = context.session.store\n\n if (checkIfAnyUserLoggedIn(me)) {\n if (!(await checkIfFriendExists(store , me, subject))) {\n //if friend does not exist, we add her/him\n await store.fetcher.load(me)\n const updater = store.updater\n const toBeInserted = [st(me, ns.foaf('knows'), subject, me.doc())]\n try {\n await updater.update([], toBeInserted)\n } catch (error) {\n let errorMessage = error\n if (errorMessage.toString().includes('Unauthenticated'))\n errorMessage = userNotLoggedInErrorMessage\n throw new Error(errorMessage)\n }\n } else throw new Error(friendExistsMessage)\n } else throw new Error(userNotLoggedInErrorMessage)\n}\n\nfunction checkIfAnyUserLoggedIn(me: NamedNode): boolean {\n if (me) return true\n else return false\n}\n\nasync function checkIfFriendExists(\n store: LiveStore,\n me: NamedNode,\n subject: NamedNode\n): Promise<boolean> {\n await store.fetcher.load(me)\n if (store.whether(me, ns.foaf('knows'), subject, me.doc()) === 0)\n return false\n else return true\n}\n\nexport {\n addMeToYourFriendsDiv,\n createAddMeToYourFriendsButton,\n saveNewFriend,\n checkIfFriendExists,\n}\n","import { DataBrowserContext } from 'pane-registry'\nimport { complain } from './buttonsHelper'\n\nexport const addErrorToErrorDisplay = (\n context: DataBrowserContext,\n message: string\n) => {\n const errorDisplaySection = context.dom.getElementById('error-display-section')\n if (errorDisplaySection) {\n errorDisplaySection.classList.add('contactsShowErrors')\n errorDisplaySection.textContent = message\n } else {\n const buttonContainer = context.dom.getElementById('add-to-contacts-button-container')\n complain(buttonContainer as HTMLDivElement , context, message)\n }\n}\n\nexport const checkAndAddErrorDisplay = (\n context: DataBrowserContext,\n message: string\n) => {\n \n const selectedGroupElements = context.dom.querySelectorAll('.selectedGroup')\n\n const groupNameField = context.dom.querySelector('#groupNameInput')\n // @ts-ignore\n const enteredGroupName = groupNameField.value\n if (selectedGroupElements.length === 0 && !enteredGroupName) {\n addErrorToErrorDisplay(context, message)\n }\n}\n\n","import { DataBrowserContext } from 'pane-registry'\nimport { addANewAddressBookUriToAddressBooks, addGroupToAddressBookData, addWebIDToExistingContact, checkIfContactExistsByName, checkIfContactExistsByWebID, createContactInAddressBook, handleAddressBookCreation, refreshButton } from './contactsHelpers'\nimport { AddressBookDetails, AddressBooksData, ContactData, GroupData } from './contactsTypes'\nimport ContactsModuleRdfLib from '@solid-data-modules/contacts-rdflib'\nimport { clearPreviousMessage, complain, mention } from './buttonsHelper'\nimport { contactExistsMessage, contactWasAddedSuccesMessage, errorContactCreation, errorGroupCreation, errorNotExistsAddressBookUri, groupIsRequired } from './texts'\nimport { addErrorToErrorDisplay, checkAndAddErrorDisplay } from './contactsErrors'\n\nconst CONTACTS_POPUP_OVERLAY_ID = 'contacts-popup-overlay'\nconst CONTACTS_OVERLAY_ACTIVE_CLASS = 'contactsOverlayActive'\n\nexport const createAddressBookUriSelectorDialog = (context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n contactData: ContactData,\n addressBooksData: AddressBooksData\n): HTMLDialogElement => {\n const addressBookUriSelectorDialog = context.dom.createElement('dialog')\n addressBookUriSelectorDialog.setAttribute('role', 'dialog')\n addressBookUriSelectorDialog.setAttribute('aria-live', 'polite')\n addressBookUriSelectorDialog.setAttribute('aria-label', 'Contact address book selection dialog')\n addressBookUriSelectorDialog.setAttribute('aria-describedby', 'addressbook-contacts-selection')\n addressBookUriSelectorDialog.classList.add('contactsAddressBookSelector')\n addressBookUriSelectorDialog.setAttribute('id', 'contacts-selector-dialog')\n\n const button = context.dom.getElementById('add-to-contacts-button')\n button.setAttribute('disabled', '')\n\n const closeButton = createCloseButton(context, addressBookUriSelectorDialog, 'contactsCloseButton')\n\n const addressBookCreationDiv = context.dom.createElement('div')\n addressBookCreationDiv.setAttribute('id', 'addressbook-creation-div')\n addressBookCreationDiv.setAttribute('role', 'addressBookCreation')\n addressBookCreationDiv.setAttribute('aria-live', 'polite')\n addressBookCreationDiv.setAttribute('tabindex', '0')\n addressBookCreationDiv.setAttribute('aria-label', 'Address book creation section')\n addressBookCreationDiv.setAttribute('aria-describedby', 'addressbook-details-section')\n addressBookCreationDiv.classList.add('contactsAddressBookCreationDiv')\n\n const addressBookContactSubmitButton = createNewContactCreationButton(context, contactsModule, addressBooksData, contactData)\n\n const addressBookDetailsSection = createAddressBookDetailsSection(context)\n const errorDisplaySection = createErrorDisplaySection(context) \n const addressBookListDiv = createAddressBookListDiv(context, contactsModule, contactData, addressBooksData, addressBookDetailsSection)\n addressBookDetailsSection.appendChild(addressBookListDiv)\n\n addressBookCreationDiv.appendChild(addressBookDetailsSection)\n addressBookCreationDiv.appendChild(addressBookContactSubmitButton)\n \n addressBookUriSelectorDialog.appendChild(closeButton)\n addressBookUriSelectorDialog.appendChild(addressBookCreationDiv)\n\n addressBookUriSelectorDialog.appendChild(errorDisplaySection)\n \n return addressBookUriSelectorDialog\n}\n\nconst createAddressBookDetailsSection = (\n context: DataBrowserContext\n): HTMLElement => {\n const addressBookDetailsSection = context.dom.createElement('section')\n addressBookDetailsSection.setAttribute('id', 'addressbook-details-section')\n addressBookDetailsSection.setAttribute('role', 'addressBookDetails')\n addressBookDetailsSection.setAttribute('aria-live', 'polite')\n addressBookDetailsSection.setAttribute('tabindex', '0')\n addressBookDetailsSection.classList.add('contactsAddressBookDetails')\n\n return addressBookDetailsSection\n}\n\nconst createAddressBookCreationButton = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n): HTMLButtonElement => {\n const setButtonOnClickHandler = async (event) => { \n event.preventDefault()\n const newAddressBookForm = createNewAddressBookForm(context, addressBooksData, contactsModule, contactData)\n const addressBookDialog = context.dom.getElementById('contacts-selector-dialog')\n showPopupOverlay(context)\n addressBookDialog.appendChild(newAddressBookForm)\n }\n\n const addressBookCreationButton = context.dom.createElement('button')\n addressBookCreationButton.setAttribute('id', 'contacts-create-addressbook-button')\n addressBookCreationButton.setAttribute('type', 'button')\n addressBookCreationButton.setAttribute('role', 'button')\n addressBookCreationButton.setAttribute('aria-label', 'Create a new address book')\n addressBookCreationButton.setAttribute('tabindex', '0')\n addressBookCreationButton.textContent = 'Create Address Book'\n addressBookCreationButton.classList.add('contactsActionButton', 'contactsAddressBookCreationButton')\n addressBookCreationButton.addEventListener('click', setButtonOnClickHandler)\n return addressBookCreationButton\n}\n\nconst createAddressBookUriEntryButton = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n): HTMLButtonElement => {\n const setButtonOnClickHandler = async (event) => { \n event.preventDefault()\n const addressBookUriSelectorDialog = context.dom.getElementById('contacts-selector-dialog')\n const addressBookUriEntryDiv = createAddressBookUriEntryDiv(context, contactsModule, addressBooksData, contactData)\n showPopupOverlay(context)\n addressBookUriSelectorDialog.appendChild(addressBookUriEntryDiv)\n }\n const addressBookCreationButton = context.dom.createElement('button')\n addressBookCreationButton.setAttribute('id', 'contacts-addressbook-uri-entry-button')\n addressBookCreationButton.setAttribute('type', 'button')\n addressBookCreationButton.setAttribute('role', 'button')\n addressBookCreationButton.setAttribute('aria-label', 'Enter an address book URI to add the contact to a specific address book')\n addressBookCreationButton.setAttribute('tabindex', '0')\n addressBookCreationButton.textContent = 'Enter Address Book URI'\n addressBookCreationButton.classList.add('contactsActionButton', 'contactsAddressBookUriEntryButton')\n addressBookCreationButton.addEventListener('click', setButtonOnClickHandler)\n return addressBookCreationButton\n}\n\nconst createAddressBookUriEntryDiv = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n): HTMLDivElement => {\n const addressBookUriEntryDiv = context.dom.createElement('div')\n addressBookUriEntryDiv.setAttribute('role', 'addressBookUriEntry')\n addressBookUriEntryDiv.setAttribute('aria-live', 'polite')\n addressBookUriEntryDiv.setAttribute('tabindex', '0')\n addressBookUriEntryDiv.setAttribute('aria-label', 'Address book URI entry div')\n addressBookUriEntryDiv.setAttribute('aria-describedby', 'addressbook-uri-entry-div')\n addressBookUriEntryDiv.setAttribute('id', 'contacts-addressbook-uri-entry')\n addressBookUriEntryDiv.classList.add('contactsPopupDialog', 'contactsAddressBookUriEntry')\n\n const closeButton = createCloseButton(context, addressBookUriEntryDiv, 'contactsAddressBookUriEntryCloseButton')\n addressBookUriEntryDiv.appendChild(closeButton)\n \n addressBookUriEntryDiv.appendChild(createAddressBookUriEntryForm(context, contactsModule, addressBooksData, contactData)) \n return addressBookUriEntryDiv\n}\n\nconst createAddressBookUriEntryForm = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n): HTMLFormElement => {\n\n const setButtonOnSubmitHandler = async (event) => {\n event.preventDefault()\n const addressBookUriField = context.dom.querySelector('#addressBookUriInput')\n\n // @ts-ignore\n const enteredAddressBookUri = addressBookUriField.value\n\n if (!enteredAddressBookUri) {\n addErrorToErrorDisplay(context, errorNotExistsAddressBookUri)\n return\n } else {\n const uriCheck = enteredAddressBookUri.substring(enteredAddressBookUri.length - 5, enteredAddressBookUri.length)\n const normalizedUri = (uriCheck === '#this') ? enteredAddressBookUri : enteredAddressBookUri + '#this'\n const books = await addANewAddressBookUriToAddressBooks(context, contactsModule, addressBooksData, normalizedUri)\n \n const addressBookListDiv = context.dom.querySelector('#addressbook-list')\n if (addressBookListDiv) {\n const addressBookUriEntry = context.dom.getElementById('contacts-addressbook-uri-entry')\n addressBookUriEntry.remove()\n removePopupOverlayIfNoPopup(context)\n const addressBookCreationButton = context.dom.getElementById('contacts-create-addressbook-button')\n const addressBookUriEntryButton = context.dom.getElementById('contacts-addressbook-uri-entry-button') \n addressBookCreationButton.remove()\n addressBookUriEntryButton.remove()\n addressBookListDiv.appendChild(createAddressBookButton(context, contactsModule, books.addressBooksData, books.addressBook, enteredAddressBookUri, contactData))\n addressBookListDiv.appendChild(createAddressBookCreationButton(context, contactsModule, books.addressBooksData, contactData)) \n addressBookListDiv.appendChild(createAddressBookUriEntryButton(context, contactsModule, books.addressBooksData, contactData))\n }}\n }\n\n const inputAddressUriEventListener = () => { \n checkAndRemoveErrorDisplay(context)\n }\n const addressBookUriEntryForm = context.dom.createElement('form')\n addressBookUriEntryForm.setAttribute('id', 'contacts-address-uri-entry-form')\n addressBookUriEntryForm.classList.add('contactsAddressBookUriEntryForm')\n addressBookUriEntryForm.method = 'post'\n addressBookUriEntryForm.addEventListener('submit', setButtonOnSubmitHandler)\n\n const addressBookUriEntryLabel = context.dom.createElement('label')\n addressBookUriEntryLabel.classList.add('label')\n addressBookUriEntryLabel.setAttribute('for', 'addressBookUriInput')\n\n const addressBookNameInputBox = context.dom.createElement('input')\n addressBookNameInputBox.type = 'text'\n addressBookNameInputBox.name = 'addressBookUri'\n addressBookNameInputBox.id = 'addressBookUriInput' \n addressBookNameInputBox.placeholder = 'Enter address book URI to find your address book' \n addressBookNameInputBox.classList.add('input', 'contactsAddressBookUriInput')\n addressBookNameInputBox.addEventListener('click', inputAddressUriEventListener)\n \n addressBookUriEntryForm.appendChild(addressBookUriEntryLabel)\n addressBookUriEntryForm.appendChild(addressBookNameInputBox)\n addressBookUriEntryForm.appendChild(createAddressBookUriEntryAddButton(context))\n \n return addressBookUriEntryForm\n}\n\nconst createAddressBookUriEntryAddButton = (\n context: DataBrowserContext\n): HTMLButtonElement => {\n\n const setButtonOnClickHandler = async (event) => {\n event.preventDefault()\n const addressBookUriEntryForm = context.dom.querySelector('#contacts-address-uri-entry-form') \n // @ts-ignore\n if (addressBookUriEntryForm) addressBookUriEntryForm.requestSubmit()\n }\n\n const entryButton = context.dom.createElement('button')\n entryButton.setAttribute('id', 'contacts-addressbook-entry-button')\n entryButton.setAttribute('role', 'button')\n entryButton.setAttribute('aria-label', 'Create Address Book from entered URI')\n entryButton.setAttribute('tabindex', '0')\n entryButton.classList.add('contactsActionButton', 'contactsAddressBookUriEntryAddButton')\n entryButton.setAttribute('type', 'submit')\n entryButton.addEventListener('click', setButtonOnClickHandler)\n entryButton.innerHTML = 'Add'\n return entryButton\n}\n\nconst createAddressBookListDiv = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n contactData: ContactData,\n addressBooksData: AddressBooksData,\n addressBookDetailsSection: HTMLElement\n): HTMLDivElement => {\n\n const addressBookListDiv = context.dom.createElement('div')\n addressBookListDiv.setAttribute('class', 'contactsAddressBookList')\n addressBookListDiv.setAttribute('role', 'addressBooksList')\n addressBookListDiv.setAttribute('aria-live', 'polite')\n addressBookListDiv.setAttribute('tabindex', '0')\n addressBookListDiv.setAttribute('aria-label', 'Address book list to select which address book to add the contact to')\n addressBookListDiv.setAttribute('aria-describedby', 'addressbook-list')\n addressBookListDiv.setAttribute('id', 'addressbook-list')\n\n addressBookListDiv.innerHTML = 'Address Books'\n addressBooksData.public.forEach((addressBook, addressBookUri) => {\n addressBookListDiv.appendChild(createAddressBookButton(context, contactsModule, addressBooksData, addressBook, addressBookUri, contactData))\n })\n\n addressBooksData.private.forEach((addressBook, addressBookUri) => {\n addressBookListDiv.appendChild(createAddressBookButton(context, contactsModule, addressBooksData, addressBook, addressBookUri, contactData))\n })\n const addressBookCreationButton = createAddressBookCreationButton(context, contactsModule, addressBooksData, contactData)\n const addressBookUriEntryButton = createAddressBookUriEntryButton(context, contactsModule, addressBooksData, contactData)\n\n addressBookListDiv.appendChild(addressBookCreationButton)\n addressBookListDiv.appendChild(addressBookUriEntryButton)\n return addressBookListDiv\n}\n\nconst createAddressBookGroupCreationButton = (\n context: DataBrowserContext, \n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n): HTMLButtonElement => {\n const setButtonOnClickHandler = async (event) => { \n event.preventDefault()\n const addressBookDialog = context.dom.getElementById('contacts-selector-dialog')\n const groupNameForm = context.dom.getElementById('new-group-form')\n if (!groupNameForm) {\n showPopupOverlay(context)\n addressBookDialog.appendChild(createGroupNameForm(context, contactsModule, addressBooksData, contactData))\n }\n }\n const groupCreationButton = context.dom.createElement('button')\n groupCreationButton.setAttribute('id', 'contacts-create-group-button')\n groupCreationButton.setAttribute('type', 'button')\n groupCreationButton.setAttribute('role', 'button')\n groupCreationButton.setAttribute('aria-label', 'Create a new group in the selected address book')\n groupCreationButton.setAttribute('tabindex', '0')\n groupCreationButton.textContent = 'Create Group'\n groupCreationButton.classList.add('contactsActionButton', 'contactsCreateGroupCreationButton')\n groupCreationButton.addEventListener('click', setButtonOnClickHandler)\n return groupCreationButton\n}\n\nconst createGroupListDiv = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n addressBook: AddressBookDetails,\n contactData: ContactData\n): HTMLDivElement => {\n\n const groupListDiv = context.dom.createElement('div')\n groupListDiv.setAttribute('class', 'contactsGroupList')\n groupListDiv.setAttribute('role', 'groupList')\n groupListDiv.setAttribute('aria-live', 'polite')\n groupListDiv.setAttribute('tabindex', '0')\n groupListDiv.setAttribute('aria-label', 'Group list to select which groups in the address book to add the contact to')\n groupListDiv.setAttribute('aria-describedby', 'group-list')\n groupListDiv.setAttribute('id', 'group-list')\n\n groupListDiv.innerHTML = 'Groups'\n if (addressBook) {\n addressBook.groups.map((group) => {\n groupListDiv.appendChild(createGroupButton(context, group))\n })\n } \n groupListDiv.appendChild(createAddressBookGroupCreationButton(context, contactsModule, addressBooksData, contactData))\n return groupListDiv\n}\n\nconst createErrorDisplaySection = (\n context: DataBrowserContext\n): HTMLElement => {\n const setButtonOnClickHandler = (event) => {\n event.preventDefault()\n errorDisplaySection.classList.remove('contactsShowErrors')\n }\n\n const errorDisplaySection = context.dom.createElement('section')\n errorDisplaySection.setAttribute('role', 'errorDisplay')\n errorDisplaySection.setAttribute('aria-live', 'assertive')\n errorDisplaySection.setAttribute('tabindex', '0')\n errorDisplaySection.setAttribute('aria-label', 'Section to display error messages related to contact creation')\n errorDisplaySection.setAttribute('id', 'error-display-section')\n errorDisplaySection.classList.add('contactsErrorDisplay')\n\n const closeButton = context.dom.createElement('button')\n closeButton.setAttribute('type', 'button')\n closeButton.setAttribute('aria-label', 'Close error message display')\n closeButton.setAttribute('tabindex', '0')\n closeButton.setAttribute('role', 'button')\n closeButton.classList.add('contactsCloseErrorDisplayButton')\n closeButton.textContent = 'x'\n closeButton.addEventListener('click', setButtonOnClickHandler)\n errorDisplaySection.appendChild(closeButton)\n return errorDisplaySection\n}\n\nconst checkAndRemoveErrorDisplay = (\n context: DataBrowserContext\n) => {\n const errorDisplaySection = context.dom.getElementById('error-display-section')\n if (errorDisplaySection.classList.contains('contactsShowErrors')) {\n errorDisplaySection.classList.remove('contactsShowErrors')\n errorDisplaySection.innerHTML = ''\n }\n}\n\nconst createNewContactCreationButton = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n): HTMLButtonElement => {\n const setButtonOnClickHandler = async (event) => {\n event.preventDefault()\n\n const contactExistsByWebID = checkIfContactExistsByWebID(addressBooksData, contactData.webID)\n const contactExistsByName = checkIfContactExistsByName(addressBooksData, contactData.name)\n const contactExistsHandled = handleContactExists(\n context,\n contactsModule,\n addressBooksData,\n contactData,\n contactExistsByWebID,\n contactExistsByName\n )\n if (contactExistsHandled) return\n \n let selectedAddressBookUri = null \n let selectedGroupUris = []\n\n const selectedAddressBookElement = context.dom.querySelectorAll('.selectedAddressBook')\n selectedAddressBookElement.forEach((addressBookButton) => {\n selectedAddressBookUri = addressBookButton.getAttribute('id')\n })\n\n const selectedGroupElements = context.dom.querySelectorAll('.selectedGroup')\n selectedGroupElements.forEach((groupButtons) => {\n selectedGroupUris.push(groupButtons.getAttribute('id'))\n })\n \n if (selectedGroupUris.length) {\n \n const selectedAddressBookUris = { \n addressBookUri: selectedAddressBookUri,\n groupUris: selectedGroupUris \n }\n\n try {\n const contactUri = await createContactInAddressBook(context, contactsModule, addressBooksData, contactData, selectedAddressBookUris)\n finalizeContactEntry(context, addressBooksData, contactData, contactUri)\n } catch(error) {\n addErrorToErrorDisplay(context, `${errorContactCreation}\\n${error}`)\n }\n } else {\n addErrorToErrorDisplay(context, groupIsRequired)\n }\n }\n\n const button = context.dom.createElement('button')\n button.setAttribute('type', 'submit')\n button.setAttribute('id', 'add-contact')\n button.setAttribute('role', 'button')\n button.setAttribute('aria-label', 'Add contact to selected address book')\n button.setAttribute('tabindex', '0')\n button.classList.add('contactsActionButton', 'contactsNewContactCreationButton')\n button.addEventListener('click', setButtonOnClickHandler)\n button.textContent = 'Add Contact'\n return button\n}\n\nconst createAddressBookButton = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n addressBook: AddressBookDetails,\n addressBookUri: string,\n contactData: ContactData\n): HTMLButtonElement => {\n \n const setButtonOnClickHandler = (event) => {\n event.preventDefault()\n const selectedAddressBookButton = event.target\n const previouslySelected = selectedAddressBookButton.classList.contains('contactsSelectedButton') \n const addressBookDetailsSection = context.dom.getElementById('addressbook-details-section')\n \n let addressBook = null\n // remove the previous groups\n const groupDivToRemove = context.dom.getElementById('group-list')\n if (groupDivToRemove) groupDivToRemove.remove()\n \n // remove presious address book selection bc you can only have one\n const selectedAddressBookElements = context.dom.querySelectorAll('.selectedAddressBook')\n selectedAddressBookElements.forEach((addressBookButton) => {\n addressBookButton.classList.remove('contactsSelectedButton', 'selectedAddressBook')\n })\n \n if (previouslySelected) {\n selectedAddressBookButton.classList.remove('contactsSelectedButton', 'selectedAddressBook') \n const groupForm = context.dom.getElementById('new-group-form')\n if (groupForm) {\n groupForm.remove()\n removePopupOverlayIfNoPopup(context)\n }\n } else {\n const addressForm = context.dom.getElementById('new-addressbook-form')\n if (addressForm) {\n addressForm.remove()\n removePopupOverlayIfNoPopup(context)\n }\n\n selectedAddressBookButton.classList.add('contactsSelectedButton', 'selectedAddressBook') \n // selected address book code\n const selectedAddressBookUri = event.target.id\n // can check for the class on private\n addressBook = addressBooksData.public.get(selectedAddressBookUri) \n if (!addressBook) addressBook = addressBooksData.private.get(selectedAddressBookUri) \n \n // remove the previous groups\n const groupDivToRemove = context.dom.getElementById('group-list')\n if (groupDivToRemove) groupDivToRemove.remove()\n // add groups for addressbook \n const groupListDiv = createGroupListDiv(context, contactsModule, addressBooksData, addressBook, contactData) \n addressBookDetailsSection.appendChild(groupListDiv)\n }\n }\n\n const button = context.dom.createElement('button')\n button.setAttribute('value', addressBook.name)\n button.setAttribute('id', addressBookUri)\n button.setAttribute('role', 'button') \n button.setAttribute('type', 'submit')\n button.setAttribute('aria-label', 'Select address book ' + addressBook.name)\n button.setAttribute('tabindex', '0')\n button.classList.add('contactsButton')\n button.addEventListener('click', setButtonOnClickHandler)\n button.innerHTML = addressBook.name\n return button\n}\n\nconst createNewAddressBookForm = (\n context: DataBrowserContext,\n addressBooksData: AddressBooksData,\n contactsModule: ContactsModuleRdfLib,\n contactData: ContactData\n): HTMLFormElement => {\n const newAddressBookEventListener = async (event) => {\n event.preventDefault() \n let enteredAddressBookUri = null \n let newGroupUri = null\n\n const addressNameField = context.dom.querySelector('#addressBookNameInput')\n\n // @ts-ignore\n const enteredAddressName = addressNameField.value\n\n const addressContainerField = context.dom.querySelector('#addressBookContainerInput')\n\n // @ts-ignore\n const enteredAddressContainer = addressContainerField.value\n\n const groupNameField = context.dom.querySelector('#groupNameInput')\n // @ts-ignore\n const enteredGroupName = groupNameField.value\n\n if (enteredAddressName) {\n // add addressbook first \n try {\n enteredAddressBookUri = await handleAddressBookCreation(context, enteredAddressContainer, enteredAddressName)\n const books = await addANewAddressBookUriToAddressBooks(context, contactsModule, addressBooksData, enteredAddressBookUri)\n \n if (enteredGroupName) {\n newGroupUri = await contactsModule.createNewGroup({addressBookUri: enteredAddressBookUri, groupName: enteredGroupName })\n const groupAdded = await addGroupToAddressBookData(addressBooksData, enteredAddressBookUri, { name: enteredGroupName, uri: newGroupUri })\n if (!groupAdded) {\n addErrorToErrorDisplay(context, errorGroupCreation)\n return\n }\n }\n \n const addressBookListDiv = context.dom.querySelector('#addressbook-list')\n const groupListDiv = context.dom.querySelector('#group-list')\n \n if (addressBookListDiv) {\n newAddressBookForm.remove()\n removePopupOverlayIfNoPopup(context)\n const addressBookCreationButton = context.dom.getElementById('contacts-create-addressbook-button')\n const addressBookUriEntryButton = context.dom.getElementById('contacts-addressbook-uri-entry-button') \n addressBookCreationButton.remove()\n addressBookUriEntryButton.remove()\n addressBookListDiv.appendChild(createAddressBookButton(context, contactsModule, addressBooksData, books.addressBook, enteredAddressBookUri, contactData)) \n addressBookListDiv.appendChild(addressBookCreationButton)\n addressBookListDiv.appendChild(addressBookUriEntryButton)\n }\n if (groupListDiv) {\n const groupCreationButton = context.dom.getElementById('contacts-create-group-button')\n groupCreationButton.remove()\n groupListDiv.appendChild(createGroupButton(context, {uri: newGroupUri, name: enteredGroupName}))\n groupListDiv.appendChild(groupCreationButton)\n }\n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n \n } \n } \n\n const submitFormEventListener = (event) => {\n event.preventDefault()\n newAddressBookForm.requestSubmit()\n }\n\n const newAddressBookForm = context.dom.createElement('form')\n newAddressBookForm.method = 'post'\n newAddressBookForm.innerHTML = 'Create a new address book'\n newAddressBookForm.setAttribute('id', 'new-addressbook-form')\n newAddressBookForm.classList.add('contactsPopupDialog', 'contactsNewAddressForm')\n \n const addressBookNameLabel = context.dom.createElement('label')\n addressBookNameLabel.classList.add('label')\n addressBookNameLabel.setAttribute('for', 'addressBookNameInput')\n\n const addressBookNameInputBox = context.dom.createElement('input')\n addressBookNameInputBox.type = 'text'\n addressBookNameInputBox.name = 'addressBookName'\n addressBookNameInputBox.id = 'addressBookNameInput' \n addressBookNameInputBox.placeholder = 'New address book name' \n addressBookNameInputBox.classList.add('input', 'contactsAddressBookInput')\n addressBookNameInputBox.required = true\n\n const addressBookContainerLabel = context.dom.createElement('label')\n addressBookContainerLabel.classList.add('label')\n addressBookContainerLabel.setAttribute('for', 'addressBookContainerInput')\n\n const addressBookContainerInputBox = context.dom.createElement('input')\n addressBookContainerInputBox.type = 'text'\n addressBookContainerInputBox.name = 'addressBookContainer'\n addressBookContainerInputBox.id = 'addressBookContainerInput' \n addressBookContainerInputBox.placeholder = 'Address book container' \n addressBookContainerInputBox.classList.add('input', 'contactsAddressBookInput')\n addressBookContainerInputBox.required = true\n\n const groupNameLabel = context.dom.createElement('label')\n groupNameLabel.classList.add('label')\n groupNameLabel.setAttribute('for', 'groupNameInput')\n\n const groupNameInputBox = context.dom.createElement('input')\n groupNameInputBox.type = 'text' \n groupNameInputBox.name = 'groupName' \n groupNameInputBox.id = 'groupNameInput' \n groupNameInputBox.placeholder = 'New group name' \n groupNameInputBox.classList.add('input', 'contactsGroupInput')\n groupNameInputBox.required = true\n\n const submitButton = context.dom.createElement('button')\n submitButton.setAttribute('id', 'submit-addressbook')\n submitButton.setAttribute('role', 'button') \n submitButton.setAttribute('type', 'submit')\n submitButton.setAttribute('aria-label', 'Create a new address book with the entered name, container, type and group')\n submitButton.setAttribute('tabindex', '0')\n submitButton.classList.add('contactsActionButton', 'contactsAddressBookCreationSubmitButton')\n submitButton.addEventListener('click', submitFormEventListener)\n submitButton.innerHTML = 'Create Address Book' \n \n const closeButton = createCloseButton(context, newAddressBookForm, 'contactsAddressBookCreationCloseButton')\n\n newAddressBookForm.appendChild(closeButton)\n\n newAddressBookForm.appendChild(addressBookNameLabel)\n newAddressBookForm.appendChild(addressBookNameInputBox)\n\n newAddressBookForm.appendChild(addressBookContainerLabel)\n newAddressBookForm.appendChild(addressBookContainerInputBox)\n\n newAddressBookForm.appendChild(groupNameLabel)\n newAddressBookForm.appendChild(groupNameInputBox)\n newAddressBookForm.appendChild(submitButton)\n newAddressBookForm.addEventListener('submit', newAddressBookEventListener)\n \n return newAddressBookForm\n}\n\nconst createCloseButton = (\n context: DataBrowserContext,\n element: HTMLElement,\n specialClass: string\n): HTMLButtonElement => {\n\n const setButtonOnClickHandler = (event) => {\n event.preventDefault()\n if (element) {\n element.remove()\n removePopupOverlayIfNoPopup(context)\n }\n if (specialClass === 'contactsCloseButton') {\n const button = context.dom.getElementById('add-to-contacts-button')\n if (button) button.removeAttribute('disabled')\n }\n }\n\n const closeButton = context.dom.createElement('button')\n closeButton.setAttribute('id', 'close-addressbook')\n closeButton.setAttribute('role', 'button')\n closeButton.setAttribute('type', 'button')\n const ariaLabel = specialClass === 'contactsCloseButton'\n ? 'Close contacts dialog'\n : 'Close dialog'\n closeButton.setAttribute('aria-label', ariaLabel)\n closeButton.setAttribute('tabindex', '0')\n closeButton.classList.add('contactsCloseButton', specialClass)\n closeButton.addEventListener('click', setButtonOnClickHandler)\n closeButton.innerHTML = 'x' \n return closeButton\n} \n\nconst createGroupNameForm = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData, \n contactData: ContactData\n): HTMLFormElement => {\n\n const addGroupEventListener = async (event) => {\n event.preventDefault()\n let selectedAddressBookUri = null \n\n const selectedAddressBookElement = context.dom.querySelectorAll('.selectedAddressBook')\n selectedAddressBookElement.forEach((addressBookButton) => {\n selectedAddressBookUri = addressBookButton.getAttribute('id')\n })\n \n const groupNameField = context.dom.querySelector('#groupNameInput')\n // @ts-ignore\n const enteredGroupName = groupNameField.value\n\n if (!selectedAddressBookUri) {\n addErrorToErrorDisplay(context, errorNotExistsAddressBookUri)\n return\n }\n\n if (enteredGroupName) {\n // add group first \n try {\n const newGroupUri = await contactsModule.createNewGroup({addressBookUri: selectedAddressBookUri, groupName: enteredGroupName })\n const newGroup = { name: enteredGroupName, uri: newGroupUri }\n const wasUpdated = addGroupToAddressBookData(addressBooksData, selectedAddressBookUri, newGroup)\n if (!wasUpdated) {\n addErrorToErrorDisplay(context, errorNotExistsAddressBookUri)\n return\n }\n \n const removeGroupAddButton = context.dom.getElementById('contacts-create-group-button')\n if (removeGroupAddButton) removeGroupAddButton.remove()\n\n const groupListDiv = context.dom.querySelector('#group-list')\n if (groupListDiv) {\n groupListDiv.appendChild(createGroupButton(context, newGroup))\n groupListDiv.appendChild(createAddressBookGroupCreationButton(context, contactsModule, addressBooksData, contactData))\n } \n newGroupForm.remove()\n removePopupOverlayIfNoPopup(context)\n } catch (error) {\n addErrorToErrorDisplay(context, `${errorGroupCreation}\\n${error}`)\n } \n }\n } \n \n const newGroupForm = context.dom.createElement('form')\n newGroupForm.addEventListener('submit', addGroupEventListener) \n newGroupForm.innerHTML = 'Create a new group'\n newGroupForm.setAttribute('id', 'new-group-form')\n newGroupForm.classList.add('contactsPopupDialog', 'contactsNewGroupForm')\n \n const groupNameLabel = context.dom.createElement('label')\n groupNameLabel.classList.add('label')\n groupNameLabel.setAttribute('for', 'groupNameInput')\n\n const groupNameInputBox = context.dom.createElement('input')\n groupNameInputBox.type = 'text' \n groupNameInputBox.name = 'groupName' \n groupNameInputBox.id = 'groupNameInput' \n groupNameInputBox.placeholder = 'New group name' \n groupNameInputBox.classList.add('input', 'contactsGroupInput')\n \n const submitButton = createAddGroupButton(context, newGroupForm)\n const closeButton = createCloseButton(context, newGroupForm, 'contactsGroupCreationCloseButton')\n\n newGroupForm.appendChild(groupNameLabel)\n newGroupForm.appendChild(groupNameInputBox)\n newGroupForm.appendChild(submitButton)\n newGroupForm.appendChild(closeButton)\n \n return newGroupForm\n}\n\nconst createAddGroupButton = (\n context: DataBrowserContext,\n form: HTMLFormElement\n): HTMLButtonElement => {\n const setButtonOnClickHandler = async (event) => {\n event.preventDefault()\n form.requestSubmit()\n }\n\n const button = context.dom.createElement('button')\n button.setAttribute('id', 'contacts-create-group-button')\n button.setAttribute('type', 'button')\n button.setAttribute('role', 'button')\n button.setAttribute('aria-label', 'Create a new group in the selected address book')\n button.setAttribute('tabindex', '0')\n button.textContent = 'Create Group'\n button.classList.add('contactsActionButton', 'contactsCreateGroupCreationButton')\n button.addEventListener('click', setButtonOnClickHandler)\n return button\n} \n\nconst handleContactExists = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData,\n contactExistsByWebID: boolean,\n contactExistsByName: string,\n): boolean => {\n\n if (contactExistsByWebID) {\n addErrorToErrorDisplay(context, contactExistsMessage )\n return true\n } else if (contactExistsByName) {\n // need to disable and possibly grey out the dialog\n const selectorDialog = context.dom.getElementById('contacts-selector-dialog')\n \n const contactExistsDiv = context.dom.createElement('div')\n contactExistsDiv.setAttribute('role', 'alert')\n contactExistsDiv.setAttribute('aria-live', 'assertive')\n contactExistsDiv.setAttribute('tabindex', '0')\n contactExistsDiv.setAttribute('aria-label', 'Alert message indicating that the contact already exists')\n contactExistsDiv.setAttribute('id', 'contacts-contact-exists')\n contactExistsDiv.classList.add('contactsContactExistsAlert')\n contactExistsDiv.innerHTML = `${contactData.name} already exists. \\n Do you want to add their WebID?`\n \n const confirmButton = context.dom.createElement('button')\n confirmButton.setAttribute('id', 'contacts-confirm-add-webid-button')\n confirmButton.setAttribute('role', 'button')\n confirmButton.setAttribute('type', 'button')\n confirmButton.setAttribute('aria-label', 'Confirm adding the contact webID to the existing contact')\n confirmButton.setAttribute('tabindex', '0') \n confirmButton.classList.add('contactsConfirmButton')\n confirmButton.innerHTML = 'Yes'\n confirmButton.addEventListener('click', async (event) => {\n event.preventDefault()\n await addWebIDToExistingContact(context, contactsModule, addressBooksData, contactData.webID, contactExistsByName)\n finalizeContactEntry(context, addressBooksData, contactData, addressBooksData.contactWebIDs.get(contactData.webID))\n refreshButton(context, addressBooksData, contactData) \n })\n\n const cancelButton = context.dom.createElement('button')\n cancelButton.setAttribute('id', 'contacts-cancel-add-webid-button')\n cancelButton.setAttribute('role', 'button')\n cancelButton.setAttribute('type', 'button')\n cancelButton.setAttribute('aria-label', 'Cancel adding the contact webID to the existing contact')\n cancelButton.setAttribute('tabindex', '0')\n cancelButton.classList.add('contactsCancelButton')\n cancelButton.innerHTML = 'No'\n cancelButton.addEventListener('click', (event) => {\n event.preventDefault()\n selectorDialog.remove()\n \n complain(getButtonContainer(context), context, 'Contact was not added')\n setTimeout(() => {\n clearPreviousMessage(getButtonContainer(context))\n }, 2000) \n refreshButton(context, addressBooksData, contactData) \n })\n\n const actionsDiv = context.dom.createElement('div')\n actionsDiv.setAttribute('id', 'contacts-contact-exists-actions')\n actionsDiv.setAttribute('role', 'group')\n actionsDiv.setAttribute('aria-label', 'Actions for existing contact alert') \n actionsDiv.setAttribute('tabindex', '0')\n actionsDiv.classList.add('contactsContactExistsActions')\n actionsDiv.appendChild(confirmButton)\n actionsDiv.appendChild(cancelButton)\n\n contactExistsDiv.appendChild(actionsDiv)\n showPopupOverlay(context)\n selectorDialog.appendChild(contactExistsDiv)\n return true\n }\n\n return false\n}\n\nconst finalizeContactEntry = (\n context: DataBrowserContext,\n addressBooksData: AddressBooksData,\n contactData: ContactData,\n contactUri: string,\n) => {\n addressBooksData.contactWebIDs.set(contactData.webID, contactUri)\n const selectorDialog = context.dom.getElementById('contacts-selector-dialog')\n selectorDialog.remove()\n \n const buttonContainer = getButtonContainer(context)\n mention(buttonContainer, contactWasAddedSuccesMessage)\n const button = context.dom.getElementById('add-to-contacts-button')\n button.removeAttribute('disabled') \n setTimeout(() => {\n clearPreviousMessage(buttonContainer)\n }, 2000) \n refreshButton(context, addressBooksData, contactData) \n}\n\nconst createGroupButton = (\n context: DataBrowserContext,\n group: GroupData\n): HTMLButtonElement => {\n const setButtonOnClickHandler = async (event) => {\n event.preventDefault()\n \n const selectedGroupButton = event.target\n const previouslySelected = selectedGroupButton.classList.contains('contactsSelectedButton') \n \n if (previouslySelected) {\n selectedGroupButton.classList.remove('contactsSelectedButton', 'selectedGroup')\n checkAndAddErrorDisplay(context, groupIsRequired)\n } else {\n selectedGroupButton.classList.add('contactsSelectedButton', 'selectedGroup') \n checkAndRemoveErrorDisplay(context)\n }\n } \n\n const button = context.dom.createElement('button')\n button.setAttribute('value', group.name)\n button.setAttribute('id', group.uri)\n button.setAttribute('type', 'button')\n button.setAttribute('role', 'button')\n button.setAttribute('aria-label', 'Select group ' + group.name)\n button.setAttribute('tabindex', '0')\n button.classList.add('contactsButton')\n button.addEventListener('click', setButtonOnClickHandler)\n button.innerHTML = group.name\n\n return button\n}\n\nexport function getButtonContainer(\n context: DataBrowserContext\n): HTMLDivElement {\n\n const buttonContainer = context.dom.getElementById('add-to-contacts-button-container')\n return buttonContainer as HTMLDivElement\n}\n\nconst showPopupOverlay = (\n context: DataBrowserContext\n): void => {\n const selectorDialog = context.dom.getElementById('contacts-selector-dialog')\n if (!selectorDialog) return\n\n selectorDialog.classList.add(CONTACTS_OVERLAY_ACTIVE_CLASS)\n\n const existingOverlay = selectorDialog.querySelector(`#${CONTACTS_POPUP_OVERLAY_ID}`)\n if (existingOverlay) return\n\n const overlay = context.dom.createElement('div')\n overlay.setAttribute('role', 'popupOverlay')\n overlay.setAttribute('aria-label', 'Overlay to focus on the active popup message and disable interaction with the rest of the dialog') \n overlay.setAttribute('tabindex', '0')\n overlay.setAttribute('id', CONTACTS_POPUP_OVERLAY_ID)\n overlay.classList.add('contactsPopupOverlay')\n selectorDialog.appendChild(overlay)\n}\n\nconst removePopupOverlayIfNoPopup = (\n context: DataBrowserContext\n): void => {\n const selectorDialog = context.dom.getElementById('contacts-selector-dialog')\n if (!selectorDialog) return\n\n const activePopup = selectorDialog.querySelector('.contactsPopupDialog, .contactsContactExistsAlert')\n if (activePopup) return\n\n const overlay = selectorDialog.querySelector(`#${CONTACTS_POPUP_OVERLAY_ID}`)\n if (overlay) overlay.remove()\n selectorDialog.classList.remove(CONTACTS_OVERLAY_ACTIVE_CLASS)\n}\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./ContactsCard.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./ContactsCard.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { LiveStore, NamedNode, sym, st, literal } from 'rdflib'\nimport { login, ns, utils } from 'solid-ui'\nimport ContactsModuleRdfLib from '@solid-data-modules/contacts-rdflib'\nimport type { NewContact, AddressBook } from '@solid-data-modules/contacts-rdflib'\nimport { DataBrowserContext } from 'pane-registry' \nimport { createAddressBookUriSelectorDialog } from './ContactsCard' \nimport './styles/ContactsCard.css'\nimport { authn, solidLogicSingleton } from 'solid-logic' \nimport { AddressBookDetails, AddressBooksData, ContactData, EmailDetails, GroupData, PhoneDetails, SelectedAddressBookUris } from './contactsTypes' \nimport { addMeToYourContactsButtonText, contactExistsAlreadyButtonText, contactExistsAlreadyByNameButtonText, errorAddressBookCreation, errorGettingAddressBooks, errorLoadingContact, errorProcessingUriAddressBook, errorReadingAddressBook, errorUnableToDetermineUserWorkspace, groupIsRequired, logInAddMeToYourContactsButtonText } from './texts' \nimport { checkIfAnyUserLoggedIn } from './buttonsHelper' \nimport { addErrorToErrorDisplay } from './contactsErrors' \nimport contacts from 'contacts-pane'\n\nasync function addContactToAddressBook(\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n contactData: ContactData,\n addressBooksData: AddressBooksData,\n container: HTMLDivElement\n) {\n\n const addressBookUriSelectorDialog = createAddressBookUriSelectorDialog(context, contactsModule, contactData, addressBooksData)\n container.appendChild(addressBookUriSelectorDialog) \n addressBookUriSelectorDialog.setAttribute('open', '') \n}\n\nasync function getAddressData(\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBookUri: string\n): Promise<AddressBook | null> {\n let result = null\n try {\n result = await contactsModule.readAddressBook(addressBookUri)\n \n } catch (error) {\n addErrorToErrorDisplay(context, `${errorReadingAddressBook}\\n${error}`)\n }\n return result\n}\n\nasync function getWebID(\n context: DataBrowserContext, \n contact\n): Promise<{webID: string, uri: string} | null> {\n let webID = null\n let node = null\n let webIDNode = null\n\n try {\n await context.session.store.fetcher.load(contact.uri.substring(0, contact.uri.length - 5))\n node = new NamedNode(contact.uri)\n webIDNode = context.session.store.any(node, ns.vcard('url'), undefined, node.doc())\n if (webIDNode) {\n webID = context.session.store.anyValue(webIDNode, ns.vcard('value'), undefined, node.doc())\n return { webID, uri: contact.uri }\n }\n return null\n } catch (error) {\n addErrorToErrorDisplay(context, `${errorLoadingContact}${contact.uri}\\n${error}`)\n } \n}\n\nasync function getAddressBooks(\n context: DataBrowserContext, \n contactsModule: ContactsModuleRdfLib\n): Promise<AddressBooksData> {\n\n const allContacts = []\n const me = authn.currentUser()\n const dom = context.dom\n const div = dom.getElementById('add-to-contacts-button-container') as HTMLDivElement\n\n const contextForFindAppInstances = {\n target: me,\n me,\n noun: 'address book',\n div,\n dom\n }\n\n let addressBooksData = { \n public: new Map(),\n private: new Map(),\n contactWebIDs: new Map(),\n contactNames: new Map()\n }\n \ntry {\n \n await context.session.store.fetcher.load(me)\n \n const addressBookContext = await login.findAppInstances(contextForFindAppInstances, ns.vcard('AddressBook'))\n const addressBookNodes = addressBookContext.instances\n let addressBookUris = {\n publicUris: (addressBookNodes || []).map((node) => node.value),\n privateUris: []\n }\n // let addressBookUris = await contactsModule.listAddressBooks(me.value) \n\n const publicAddressBookPromises = addressBookUris.publicUris.map(addressBook => getAddressData(context, contactsModule, addressBook))\n const publicAddressBooksData = await Promise.all(publicAddressBookPromises)\n publicAddressBooksData.map((addressBook) => {\n if (!addressBook) return\n addressBooksData.public.set(addressBook.uri, {\n name: addressBook.title,\n groups: addressBook.groups,\n contacts: addressBook.contacts\n })\n addressBook.contacts.map((contact) => {\n addressBooksData.contactNames.set(contact.name, contact.uri)\n allContacts.push(contact)\n })\n })\n const privateAddressBookPromises = addressBookUris.privateUris.map(addressBook => getAddressData(context, contactsModule, addressBook))\n const privateAddressBooksData = await Promise.all(privateAddressBookPromises)\n privateAddressBooksData.map((addressBook) => {\n if (!addressBook) return\n addressBooksData.private.set(addressBook.uri, {\n name: addressBook.title,\n groups: addressBook.groups,\n contacts: addressBook.contacts\n })\n addressBook.contacts.map((contact) => {\n addressBooksData.contactNames.set(contact.name, contact.uri)\n allContacts.push(contact)\n })\n })\n \n addressBooksData = await processContactWebIDs(context, addressBooksData, allContacts)\n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n return addressBooksData\n}\n\nasync function getAddressBooksData(\n context: DataBrowserContext,\n contactModule: ContactsModuleRdfLib\n): Promise<AddressBooksData> {\n\n const me = authn.currentUser()\n if (!me) return null\n let addressBooksData = null\n\n try {\n addressBooksData = await getAddressBooks(context, contactModule)\n } catch (error) {\n addErrorToErrorDisplay(context, `${errorGettingAddressBooks}\\n${error}`)\n }\n return addressBooksData\n}\n\nasync function processContactWebIDs(\n context: DataBrowserContext,\n addressBooksData: AddressBooksData,\n allContacts: Array<{ name: string, uri: string }>\n): Promise<AddressBooksData> {\n\n const contactPromises = allContacts.map(getWebID.bind(null, context))\n const results = await Promise.all(contactPromises)\n \n results.map((contact) => {\n if (contact?.webID) addressBooksData.contactWebIDs.set(contact.webID.trim(), contact.uri)\n })\n\n return addressBooksData\n}\n\nasync function getContactData(\n store: LiveStore,\n subject: NamedNode\n): Promise<ContactData> {\n let emails: EmailDetails[] = []\n let phoneNumbers: PhoneDetails[] = []\n let type = null\n let email = null\n let phoneNumber = null\n\n const name = utils.label(subject)\n\n const emailNodes = store.each(subject, ns.vcard('hasEmail'), null, subject.doc()) || null\n const phoneNodes = store.each(subject, ns.vcard('hasTelephone'), null, subject.doc()) || null\n \n emailNodes.map((node) => {\n email = store.any(node as NamedNode, ns.vcard('value'), null, subject.doc())\n type = store.any(node as NamedNode, ns.rdf('type'), null, subject.doc())\n emails.push({ type, email})\n })\n phoneNodes.map((node) => {\n phoneNumber = store.any(node as NamedNode, ns.vcard('value'), null, subject.doc())\n type = store.any(node as NamedNode, ns.rdf('type'), null, subject.doc())\n phoneNumbers.push({type, phoneNumber}) \n })\n\n const webID = subject.value\n return {\n name,\n emails,\n phoneNumbers,\n webID \n }\n}\n\nasync function addANewAddressBookUriToAddressBooks(\n context:DataBrowserContext, \n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n enteredAddressBookUri: string\n): Promise<{ addressBooksData: AddressBooksData, addressBook: AddressBookDetails }> {\n let allContacts = []\n let contactsAddressBook = null\n\n try {\n const addressBook = await getAddressData(context, contactsModule, enteredAddressBookUri)\n if (!addressBook) {\n return { addressBooksData, addressBook: null }\n }\n contactsAddressBook = {\n name: addressBook.title,\n groups: addressBook.groups,\n contacts: addressBook.contacts\n }\n addressBooksData.private.set(enteredAddressBookUri, contactsAddressBook)\n \n addressBook.contacts.map((contact) => {\n addressBooksData.contactNames.set(contact.name, contact.uri)\n allContacts.push(contact)\n })\n \n addressBooksData = await processContactWebIDs(context, addressBooksData, allContacts)\n } catch (error) {\n addErrorToErrorDisplay(context, errorProcessingUriAddressBook + '\\n' + error)\n } \n\n return { addressBooksData, addressBook: contactsAddressBook }\n}\n\nasync function createContactInAddressBook(\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData,\n selectedAddressBookUris: SelectedAddressBookUris\n): Promise<string>{\n let contactUri = null\n const newContact: NewContact = {\n name: contactData.name\n }\n\n try { \n \n const groupUris = (selectedAddressBookUris.groupUris.length) ? selectedAddressBookUris.groupUris : undefined\n if (groupUris) {\n contactUri = await contactsModule.createNewContact({addressBookUri: selectedAddressBookUris.addressBookUri, contact: newContact, groupUris}) \n } else {\n addErrorToErrorDisplay(context, groupIsRequired) \n return\n }\n await context.session.store.fetcher.load(contactUri)\n await addWebIDToContact(context, groupUris, contactUri, contactData.webID)\n if (contactData.emails.length || contactData.phoneNumbers.length) {\n await addContactDetails(context, contactUri, contactData)\n }\n return contactUri\n } catch (error) {\n addErrorToErrorDisplay(context, error)\n } \n}\n\nasync function addContactDetails(\n context: DataBrowserContext, \n contactUri: string, \n contactData: ContactData\n) {\n const store = context.session.store\n const contactNode = new NamedNode(contactUri)\n const detailDoc = contactNode.doc()\n // needs to be a 13 digit random number.\n const max = 9999999999999\n const min = 1000000000000\n\n const createDetailNode = (): NamedNode => {\n const randomId = Math.floor(Math.random() * (max - min + 1)) + min\n return sym(`${detailDoc.uri}#id${randomId}`) as NamedNode\n }\n\n let insertions = []\n\n try {\n \n contactData.emails.map((emailInfo) => {\n const node = createDetailNode()\n insertions.push(st(contactNode, ns.vcard('hasEmail'), node , detailDoc))\n insertions.push(st(node, ns.rdf('type'), emailInfo.type, detailDoc))\n insertions.push(st(node, ns.vcard('value'), emailInfo.email, detailDoc))\n }) \n contactData.phoneNumbers.map((phoneInfo) => {\n const node = createDetailNode()\n insertions.push(st(contactNode, ns.vcard('hasTelephone'), node , detailDoc))\n insertions.push(st(node, ns.rdf('type'), phoneInfo.type, detailDoc))\n insertions.push(st(node, ns.vcard('value'), phoneInfo.phoneNumber, detailDoc))\n })\n\n await store.updater.update([],insertions) \n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n}\n\nasync function addWebIDToContact(\n context: DataBrowserContext,\n groupUris: string[],\n contactUri: string,\n webID: string\n) {\n const store = context.session.store\n const contactNode = new NamedNode(contactUri)\n const webIDNode = sym(webID)\n const vcardURLNode = store.bnode()\n let groupUriNode = null\n\n try {\n if (groupUris?.length) {\n for (const groupUri of groupUris) {\n await context.session.store.fetcher.load(groupUri)\n groupUriNode = new NamedNode(groupUri)\n const groupDoc = groupUriNode.doc()\n const deletions = context.session.store.statementsMatching(\n groupUriNode,\n ns.vcard('hasMember'),\n contactNode,\n groupDoc\n )\n const insertions = [\n st(groupUriNode, ns.vcard('hasMember'), webIDNode, groupDoc),\n st(webIDNode, ns.owl('sameAs'), contactNode, groupDoc)\n ]\n await store.updater.update(deletions, insertions)\n }\n }\n\n const personInsertions = [\n st(contactNode, ns.vcard('url'), vcardURLNode, contactNode.doc()),\n st(vcardURLNode, ns.rdf('type'), ns.vcard('WebID'), contactNode.doc()),\n st(vcardURLNode, ns.vcard('value'), literal(webID), contactNode.doc())\n ]\n await store.updater.update([], personInsertions)\n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n}\n\nasync function addAddressToTypeIndex(\n context: DataBrowserContext,\n typeOfIndex: string,\n addressBookUri: string\n): Promise<boolean> {\n const store = context.session.store\n const me = authn.currentUser()\n let typeIndexNode = null\n \n try {\n await store.fetcher.load(me)\n const typeIndexes = await solidLogicSingleton.typeIndex.loadTypeIndexesFor(me)\n if (!typeIndexes.length) {\n throw new Error('No type index found for the current user')\n return\n }\n typeIndexes.map((typeIndex) => {\n if (typeIndex.label === typeOfIndex) typeIndexNode = typeIndex.index\n })\n if (typeIndexNode) {\n const registration = await solidLogicSingleton.typeIndex.registerInTypeIndex(sym(addressBookUri), typeIndexNode, ns.vcard('AddressBook'))\n if (registration) return true\n }\n } catch(error) {\n addErrorToErrorDisplay(context, error)\n } \n return false\n}\n\nasync function updateAddressBookName(\n context: DataBrowserContext,\n addressBookUri: string,\n newName: string\n) {\n const store = context.session.store\n const addressBookNode = sym(addressBookUri)\n const addressBookDoc = addressBookNode.doc()\n const trimmedName = newName?.trim()\n\n if (!trimmedName) return\n\n try {\n await store.fetcher.load(addressBookDoc)\n\n const deletions = [\n ...store.statementsMatching(addressBookNode, ns.dc('title'), null, addressBookDoc),\n ...store.statementsMatching(addressBookNode, ns.vcard('fn'), null, addressBookDoc)\n ]\n\n const insertions = [\n st(addressBookNode, ns.dc('title'), literal(trimmedName), addressBookDoc),\n st(addressBookNode, ns.vcard('fn'), literal(trimmedName), addressBookDoc)\n ]\n\n await store.updater.update(deletions, insertions)\n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n}\n\nfunction refreshButton(\n context: DataBrowserContext,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n) {\n const me = authn.currentUser()\n const button = context.dom.getElementById('add-to-contacts-button')\n if (checkIfAnyUserLoggedIn(me)) {\n const contactExistsByWebID = checkIfContactExistsByWebID(addressBooksData, contactData.webID)\n const contactExistsByName = checkIfContactExistsByName(addressBooksData, contactData.name)\n if (contactExistsByWebID) {\n //logged in and friend exists or friend was just added\n button.innerHTML = contactExistsAlreadyButtonText.toUpperCase()\n button.onclick = null \n } else if (contactExistsByName) {\n button.innerHTML = contactExistsAlreadyByNameButtonText.toUpperCase()\n button.removeAttribute('disabled') \n }\n else {\n //logged in and friend does not exist yet\n button.innerHTML = addMeToYourContactsButtonText.toUpperCase()\n }\n } else {\n //not logged in\n button.innerHTML = logInAddMeToYourContactsButtonText.toUpperCase()\n }\n }\n\nfunction checkIfContactExistsByWebID(\n addressBooksData: AddressBooksData,\n subjectUri: string,\n): boolean {\n if (!subjectUri?.trim()) return false\n return addressBooksData.contactWebIDs.has(subjectUri.trim())\n}\n\nfunction checkIfContactExistsByName(\n addressBooksData: AddressBooksData,\n name: string\n): string | null {\n let normalizedContactName = null\n let contactUri = null\n\n const normalizedSubjectName = name.replace(/\\s/g, '').toLowerCase().trim()\n \n addressBooksData.contactNames.forEach((uri, contactName) => {\n normalizedContactName = contactName.replace(/\\s/g, '').toLowerCase().trim()\n if (normalizedSubjectName === normalizedContactName) return contactUri = uri\n })\n \n return contactUri\n}\n\nasync function addWebIDToExistingContact(\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n webID: string,\n contactUri: string\n) {\n\n try {\n const groupUris = await getGroupUrisForContact(contactsModule, addressBooksData, contactUri)\n await addWebIDToContact(context, groupUris, contactUri, webID)\n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n}\n\nasync function getGroupUrisForContact(\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactUri: string\n): Promise<Array<string>> {\n let groupUrisForContact = []\n let addressBookForContact = null\n let allGroupUrisForAddressBook = []\n \n addressBooksData.public.forEach((book, uri) => {\n book.contacts.map((contact) => {\n if (contact.uri === contactUri) {\n addressBookForContact = book\n }\n })\n })\n addressBooksData.private.forEach((book, uri) => {\n book.contacts.map((contact) => {\n if (contact.uri === contactUri) {\n addressBookForContact = book\n }\n })\n })\n allGroupUrisForAddressBook = addressBookForContact.groups\n const groupPromises = allGroupUrisForAddressBook.map(async (group) => {\n group = await contactsModule.readGroup(group.uri)\n return { groupUri: group.uri, group }\n }) \n const groups = await Promise.all(groupPromises)\n\n groups.map((groupInfo) => {\n groupInfo.group.members.map((contact) => {\n if (contact.uri === contactUri) {\n if (!groupUrisForContact.includes(groupInfo.groupUri)) {\n groupUrisForContact.push(groupInfo.groupUri)\n } \n }\n })\n })\n \n return groupUrisForContact\n}\n\nfunction addGroupToAddressBookData(\n addressBooksData: AddressBooksData,\n addressBookUri: string,\n group: GroupData\n): boolean {\n const publicAddressBook = addressBooksData.public.get(addressBookUri)\n if (publicAddressBook) {\n const groupExists = publicAddressBook.groups.some((existingGroup) => existingGroup.uri === group.uri)\n if (!groupExists) {\n addressBooksData.public.set(addressBookUri, {\n ...publicAddressBook,\n groups: [...publicAddressBook.groups, group]\n })\n }\n return true\n }\n\n const privateAddressBook = addressBooksData.private.get(addressBookUri)\n if (privateAddressBook) {\n const groupExists = privateAddressBook.groups.some((existingGroup) => existingGroup.uri === group.uri)\n if (!groupExists) {\n addressBooksData.private.set(addressBookUri, {\n ...privateAddressBook,\n groups: [...privateAddressBook.groups, group]\n })\n }\n return true\n }\n\n return false\n}\n\nasync function handleAddressBookCreation(\n dataBrowserContext: DataBrowserContext,\n containerName: string,\n enteredAddressName: string\n): Promise<string> {\n const me = authn.currentUser()\n const newAddressContainer = me?.site()?.value\n let addressBookUri = null\n\n const div = dataBrowserContext.dom.getElementById('new-addressbook-form') as HTMLDivElement\n try {\n if (!me || !newAddressContainer) {\n throw new Error(errorUnableToDetermineUserWorkspace)\n }\n\n const normalizedContainer = newAddressContainer.endsWith('/')\n ? newAddressContainer\n : `${newAddressContainer}/`\n\n const addressBookSlug = (containerName || 'address-book')\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '') || 'address-book'\n\n const newBase = `${normalizedContainer}${addressBookSlug}/`\n const mintResult = await contacts.mintNew(dataBrowserContext, {\n me,\n dom: dataBrowserContext.dom,\n div,\n newBase,\n instanceClass: ns.vcard('AddressBook'),\n instanceName: enteredAddressName\n })\n\n addressBookUri = mintResult?.newInstance?.uri || `${newBase}index.ttl#this`\n await updateAddressBookName(dataBrowserContext, addressBookUri, enteredAddressName)\n\n } catch (error) {\n addErrorToErrorDisplay(dataBrowserContext, errorAddressBookCreation + '\\n' + error)\n }\n return addressBookUri\n}\n\nexport {\n getAddressBooksData,\n getContactData,\n addContactToAddressBook,\n createContactInAddressBook,\n addAddressToTypeIndex,\n refreshButton,\n checkIfContactExistsByWebID,\n checkIfContactExistsByName,\n addWebIDToExistingContact,\n addANewAddressBookUriToAddressBooks,\n addGroupToAddressBookData,\n updateAddressBookName,\n handleAddressBookCreation\n}","import { Namespace } from \"rdflib\";\nexport const vcard = Namespace(\"http://www.w3.org/2006/vcard/ns#\");\nexport const dc = Namespace(\"http://purl.org/dc/elements/1.1/\");\n//# sourceMappingURL=namespaces.js.map","import ShortUniqueId from \"short-unique-id\";\nconst uid = new ShortUniqueId({ length: 10 });\n/**\n * Generates a short ID that can be used for URI fragments, document or container names.\n */\nexport function generateId() {\n return uid.rnd(6);\n}\n//# sourceMappingURL=generate-id.js.map","export * from \"./generate-id.js\";\n//# sourceMappingURL=index.js.map","import { isNamedNode, sym } from \"rdflib\";\nimport { dc, vcard } from \"../namespaces.js\";\nimport { generateId } from \"@solid-data-modules/rdflib-utils/identifier\";\nexport class AddressBookQuery {\n constructor(store, addressBookNode) {\n this.store = store;\n this.addressBookNode = addressBookNode;\n this.addressBookDoc = addressBookNode.doc();\n }\n proposeNewContactNode() {\n return this.proposeNewNode(\"Person\");\n }\n proposeNewGroupNode() {\n return this.proposeNewNode(\"Group\");\n }\n proposeNewNode(containerPath) {\n const id = generateId();\n const baseUri = this.addressBookNode.dir()?.uri;\n return sym(`${baseUri}${containerPath}/${id}/index.ttl#this`);\n }\n queryTitle() {\n return (this.store.anyValue(this.addressBookNode, dc(\"title\"), undefined, this.addressBookDoc) ?? \"\");\n }\n queryNameEmailIndex() {\n const index = this.store.any(this.addressBookNode, vcard(\"nameEmailIndex\"), undefined, this.addressBookDoc);\n if (isNamedNode(index)) {\n return index;\n }\n else {\n return null;\n }\n }\n queryContacts() {\n const nameEmailIndex = this.queryNameEmailIndex();\n return nameEmailIndex && isNamedNode(nameEmailIndex)\n ? this.store\n .each(null, vcard(\"inAddressBook\"), this.addressBookNode, nameEmailIndex)\n .filter((it) => isNamedNode(it))\n .map((node) => ({\n name: this.store.anyValue(node, vcard(\"fn\"), null, nameEmailIndex) ??\n \"\",\n uri: node.value,\n }))\n : [];\n }\n queryGroupIndex() {\n const index = this.store.any(this.addressBookNode, vcard(\"groupIndex\"), undefined, this.addressBookDoc);\n if (isNamedNode(index)) {\n return index;\n }\n else {\n return null;\n }\n }\n queryGroups() {\n const groupIndex = this.queryGroupIndex(); //?\n return groupIndex && isNamedNode(groupIndex)\n ? this.store\n .each(this.addressBookNode, vcard(\"includesGroup\"), null, groupIndex)\n .filter((it) => isNamedNode(it))\n .map((node) => ({\n name: this.store.anyValue(node, vcard(\"fn\"), null, groupIndex) ?? \"\",\n uri: node.value,\n }))\n : [];\n }\n}\n//# sourceMappingURL=AddressBookQuery.js.map","import { isNamedNode, sym } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nconst MAILTO_URI_SCHEME = \"mailto:\";\nconst TEl_URI_SCHEME = \"tel:\";\nexport class ContactQuery {\n constructor(store, contactNode) {\n this.store = store;\n this.contactNode = contactNode;\n this.contactDoc = contactNode.doc();\n }\n queryName() {\n return (this.store.anyValue(this.contactNode, vcard(\"fn\"), undefined, this.contactDoc) ?? \"\");\n }\n queryEmails() {\n const uris = this.getValuesOf(vcard(\"hasEmail\"));\n if (uris.length === 0) {\n return [];\n }\n return uris\n .map((uri) => {\n const valueNode = this.getValueNode(uri);\n if (isMailtoNode(valueNode)) {\n return {\n uri,\n value: valueNode.value.split(MAILTO_URI_SCHEME)[1],\n };\n }\n })\n .filter((value) => !!value);\n }\n queryPhoneNumbers() {\n const uris = this.getValuesOf(vcard(\"hasTelephone\"));\n if (uris.length === 0) {\n return [];\n }\n return uris\n .map((uri) => {\n const valueNode = this.getValueNode(uri);\n if (isTelNode(valueNode)) {\n return {\n uri,\n value: valueNode.value.split(TEl_URI_SCHEME)[1],\n };\n }\n })\n .filter((value) => !!value);\n }\n getValuesOf(predicate) {\n return this.store\n .statementsMatching(this.contactNode, predicate, undefined, this.contactDoc)\n .map((it) => it.object.value);\n }\n getValueNode(uri) {\n return this.store.any(sym(uri), vcard(\"value\"), undefined, this.contactDoc);\n }\n}\nfunction isMailtoNode(valueNode) {\n return (isNamedNode(valueNode) && valueNode.value.startsWith(MAILTO_URI_SCHEME));\n}\nfunction isTelNode(valueNode) {\n return isNamedNode(valueNode) && valueNode.value.startsWith(TEl_URI_SCHEME);\n}\n//# sourceMappingURL=ContactQuery.js.map","import { isNamedNode } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport class GroupQuery {\n constructor(store, groupNode) {\n this.store = store;\n this.groupNode = groupNode;\n this.groupDoc = groupNode.doc();\n }\n queryName() {\n return (this.store.anyValue(this.groupNode, vcard(\"fn\"), undefined, this.groupDoc) ?? \"\");\n }\n queryMembers() {\n return this.store\n .each(this.groupNode, vcard(\"hasMember\"), null, this.groupDoc)\n .filter((it) => isNamedNode(it))\n .map((node) => ({\n uri: node.value,\n name: this.store.anyValue(node, vcard(\"fn\"), null, this.groupDoc) ?? \"\",\n }));\n }\n}\n//# sourceMappingURL=GroupQuery.js.map","export { AddressBookQuery } from \"./AddressBookQuery.js\";\nexport { ContactQuery } from \"./ContactQuery.js\";\nexport { GroupQuery } from \"./GroupQuery.js\";\n//# sourceMappingURL=index.js.map","import { lit, st, sym } from \"rdflib\";\nimport { dc, vcard } from \"../namespaces.js\";\nimport { generateId } from \"@solid-data-modules/rdflib-utils/identifier\";\nexport function createAddressBook(container, name) {\n const id = generateId();\n const uri = `${container}${id}/index.ttl#this`;\n const nameEmailIndexUri = `${container}${id}/people.ttl`;\n const groupIndexUri = `${container}${id}/groups.ttl`;\n const insertions = [\n st(sym(uri), sym(\"http://www.w3.org/1999/02/22-rdf-syntax-ns#type\"), vcard(\"AddressBook\"), sym(uri).doc()),\n st(sym(uri), dc(\"title\"), lit(name), sym(uri).doc()),\n st(sym(uri), vcard(\"nameEmailIndex\"), sym(nameEmailIndexUri), sym(uri).doc()),\n st(sym(uri), vcard(\"groupIndex\"), sym(groupIndexUri), sym(uri).doc()),\n ];\n return {\n uri,\n deletions: [],\n insertions,\n filesToCreate: [{ url: nameEmailIndexUri }, { url: groupIndexUri }],\n };\n}\n//# sourceMappingURL=createAddressBook.js.map","/**\n * Applies the described updates to a Pod\n * @param fetcher - The fetcher to use for the update\n * @param updater - The updater to use for the update\n * @param operation - The operations to perform\n */\nexport async function executeUpdate(fetcher, updater, operation) {\n await updater.updateMany(operation.deletions, operation.insertions);\n operation.filesToCreate.map((file) => {\n createEmptyTurtleFile(fetcher, file.url);\n });\n}\nfunction createEmptyTurtleFile(fetcher, url) {\n return fetcher.webOperation(\"PUT\", url, {\n contentType: \"text/turtle\",\n });\n}\n//# sourceMappingURL=executeUpdate.js.map","/**\n * Nullsafe fetching of a node\n * @param fetcher - The fetcher to use\n * @param node - A node to fetch, or null to do nothing at all\n */\nexport async function fetchNode(fetcher, node) {\n if (node) {\n await fetcher.load(node.value);\n }\n}\n//# sourceMappingURL=fetchNode.js.map","export * from \"./executeUpdate.js\";\nexport * from \"./fetchNode.js\";\n//# sourceMappingURL=index.js.map","import { Namespace } from \"rdflib\";\nexport const rdf = Namespace(\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\");\nexport const solid = Namespace(\"http://www.w3.org/ns/solid/terms#\");\nexport const pim = Namespace(\"http://www.w3.org/ns/pim/space#\");\nexport const ldp = Namespace(\"http://www.w3.org/ns/ldp#\");\n//# sourceMappingURL=index.js.map","import { isNamedNode } from \"rdflib\";\nimport { solid } from \"../namespaces/index.js\";\n/**\n * Used query data from a user's preferences file\n */\nexport class PreferencesQuery {\n constructor(store, \n /**\n * The WebID of the user\n */\n webIdNode, \n /**\n * The preferences file\n */\n preferencesDoc) {\n this.store = store;\n this.webIdNode = webIdNode;\n this.preferencesDoc = preferencesDoc;\n }\n /**\n * Look up the private type index. Returns null if none is found or if the predicated does not link to a proper named node\n */\n queryPrivateTypeIndex() {\n const node = this.store.any(this.webIdNode, solid(\"privateTypeIndex\"), null, this.preferencesDoc);\n if (isNamedNode(node)) {\n return node;\n }\n return null;\n }\n}\n//# sourceMappingURL=PreferencesQuery.js.map","import { isNamedNode } from \"rdflib\";\nimport { pim, solid } from \"../namespaces/index.js\";\n/**\n * Used query data from a user's profile document\n */\nexport class ProfileQuery {\n constructor(\n /**\n * The WebID of the user\n */\n webIdNode, store) {\n this.webIdNode = webIdNode;\n this.store = store;\n }\n /**\n * Look up the public type index. Returns null if none is found or if the predicated does not link to a proper named node\n */\n queryPublicTypeIndex() {\n const predicate = solid(\"publicTypeIndex\");\n return this.queryNamedNode(predicate);\n }\n /**\n * Look up the preferences file. Returns null if none is found or if the predicated does not link to a proper named node\n */\n queryPreferencesFile() {\n const predicate = pim(\"preferencesFile\");\n return this.queryNamedNode(predicate);\n }\n queryNamedNode(predicate) {\n const node = this.store.any(this.webIdNode, predicate, null, this.webIdNode.doc());\n if (isNamedNode(node)) {\n return node;\n }\n return null;\n }\n}\n//# sourceMappingURL=ProfileQuery.js.map","import { isNamedNode } from \"rdflib\";\nimport { solid } from \"../namespaces/index.js\";\n/**\n * Used query data from a type index document\n */\nexport class TypeIndexQuery {\n constructor(store, typeIndexDoc) {\n this.store = store;\n this.typeIndexDoc = typeIndexDoc;\n }\n /**\n * Look up the instances in the type registration for the given RDF class\n * @param type - The RDF class to look up\n * @returns A list of the URIs of the found instances\n */\n queryInstancesForClass(type) {\n const registrations = this.store.each(null, solid(\"forClass\"), type, this.typeIndexDoc);\n return registrations.flatMap((registration) => {\n if (!isNamedNode(registration))\n return [];\n return this.getInstanceValues(registration);\n });\n }\n getInstanceValues(registration) {\n return this.store\n .each(registration, solid(\"instance\"), null, this.typeIndexDoc)\n .map((it) => it.value);\n }\n}\n//# sourceMappingURL=TypeIndexQuery.js.map","export { PreferencesQuery } from \"./PreferencesQuery.js\";\nexport { ProfileQuery } from \"./ProfileQuery.js\";\nexport { TypeIndexQuery } from \"./TypeIndexQuery.js\";\n//# sourceMappingURL=index.js.map","import { sym } from \"rdflib\";\nimport { fetchNode } from \"../index.js\";\nimport { ldp, rdf } from \"../namespaces/index.js\";\n/**\n * Provides common functionality useful for many rdflib-based data modules\n */\nexport class ModuleSupport {\n constructor(config) {\n this.store = config.store;\n this.fetcher = config.fetcher;\n this.updater = config.updater;\n }\n /**\n * Nullsafe fetching of a node\n * @param node - A node to fetch, or null to do nothing at all\n */\n async fetchNode(node) {\n return fetchNode(this.fetcher, node);\n }\n /**\n * Fetch all the given nodes in parallel\n * @param nodes\n */\n async fetchAll(nodes) {\n return Promise.all(nodes.map((it) => this.fetchNode(it)));\n }\n /**\n * Checks whether the resource identified by the given URL is a LDP container\n * @param storageUrl - The URL to check\n * @returns true if it is a container, false otherwise\n */\n async isContainer(storageUrl) {\n const storageNode = sym(storageUrl);\n await this.fetcher.load(storageNode.value);\n return this.store.holds(storageNode, rdf(\"type\"), ldp(\"Container\"), storageNode.doc());\n }\n}\n//# sourceMappingURL=ModuleSupport.js.map","export { ModuleSupport } from \"./ModuleSupport.js\";\n//# sourceMappingURL=index.js.map","import { st, sym } from \"rdflib\";\nimport { generateId } from \"../identifier/index.js\";\nimport { rdf, solid } from \"../namespaces/index.js\";\n/**\n * Create a new type registration for the given type that links to the given resource instance\n * @param typeIndexDoc - The type index document (private or public)\n * @param instanceUri - The URI of the instance to add\n * @param type - The RDF class to register the instance for\n */\nexport function addInstanceToTypeIndex(typeIndexDoc, instanceUri, type) {\n const registrationNode = sym(`${typeIndexDoc.value}#${generateId()}`);\n return {\n deletions: [],\n filesToCreate: [],\n insertions: [\n st(registrationNode, rdf(\"type\"), solid(\"TypeRegistration\"), typeIndexDoc),\n st(registrationNode, solid(\"forClass\"), type, typeIndexDoc),\n st(registrationNode, solid(\"instance\"), sym(instanceUri), typeIndexDoc),\n ],\n };\n}\n//# sourceMappingURL=addInstanceToTypeIndex.js.map","export { addInstanceToTypeIndex } from \"./addInstanceToTypeIndex.js\";\n//# sourceMappingURL=index.js.map","export * from \"./web-operations/index.js\";\nexport * from \"./queries/index.js\";\nexport * from \"./module/index.js\";\nexport * from \"./update-operations/index.js\";\nexport * from \"./namespaces/index.js\";\n//# sourceMappingURL=index.js.map","import { lit, st, sym } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nimport { rdf } from \"@solid-data-modules/rdflib-utils\";\nexport function createNewContact(addressBook, newContact) {\n const contactNode = addressBook.proposeNewContactNode();\n const nameEmailIndex = addressBook.queryNameEmailIndex();\n if (!nameEmailIndex) {\n throw new Error(\"name-email index is missing or invalid\");\n }\n const insertions = [\n st(contactNode, vcard(\"inAddressBook\"), addressBook.addressBookNode, nameEmailIndex),\n st(contactNode, vcard(\"fn\"), lit(newContact.name), nameEmailIndex),\n st(contactNode, vcard(\"fn\"), lit(newContact.name), contactNode.doc()),\n st(contactNode, rdf(\"type\"), vcard(\"Individual\"), contactNode.doc()),\n ];\n if (newContact.email) {\n const emailNode = sym(contactNode.doc().uri + \"#email\");\n insertions.push(st(contactNode, vcard(\"hasEmail\"), emailNode, contactNode.doc()), st(emailNode, vcard(\"value\"), sym(\"mailto:\" + newContact.email), contactNode.doc()));\n }\n if (newContact.phoneNumber) {\n const phoneNode = sym(contactNode.doc().uri + \"#phone\");\n insertions.push(st(contactNode, vcard(\"hasTelephone\"), phoneNode, contactNode.doc()), st(phoneNode, vcard(\"value\"), sym(\"tel:\" + newContact.phoneNumber), contactNode.doc()));\n }\n return {\n uri: contactNode.uri,\n deletions: [],\n insertions: insertions,\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=createNewContact.js.map","import { lit, st } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nimport { rdf } from \"@solid-data-modules/rdflib-utils\";\nexport function createNewGroup(addressBook, groupName) {\n const groupIndex = addressBook.queryGroupIndex();\n if (!groupIndex) {\n throw new Error(\"group index is missing or invalid\");\n }\n const groupNode = addressBook.proposeNewGroupNode();\n const groupDoc = groupNode.doc();\n return {\n uri: groupNode.uri,\n insertions: [\n st(groupNode, vcard(\"fn\"), lit(groupName), groupIndex),\n st(groupNode, vcard(\"fn\"), lit(groupName), groupDoc),\n st(groupNode, rdf(\"type\"), vcard(\"Group\"), groupDoc),\n st(addressBook.addressBookNode, vcard(\"includesGroup\"), groupNode, groupIndex),\n ],\n deletions: [],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=createNewGroup.js.map","import { lit, st } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function addContactToGroup(contactQuery, groupQuery) {\n const name = contactQuery.queryName();\n return {\n insertions: [\n st(groupQuery.groupNode, vcard(\"hasMember\"), contactQuery.contactNode, groupQuery.groupNode.doc()),\n st(contactQuery.contactNode, vcard(\"fn\"), lit(name), groupQuery.groupNode.doc()),\n ],\n deletions: [],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=addContactToGroup.js.map","import { st, sym } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nimport { generateId } from \"@solid-data-modules/rdflib-utils/identifier\";\nexport function addNewEmailAddress(contactNode, emailAddress) {\n const id = generateId();\n const uri = `${contactNode.doc().uri}#${id}`;\n return {\n uri,\n insertions: [\n st(contactNode, vcard(\"hasEmail\"), sym(uri), contactNode.doc()),\n st(sym(uri), vcard(\"value\"), sym(\"mailto:\" + emailAddress), contactNode.doc()),\n ],\n deletions: [],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=addNewEmailAddress.js.map","import { st, sym } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nimport { generateId } from \"@solid-data-modules/rdflib-utils/identifier\";\nexport function addNewPhoneNumber(contactNode, phoneNumber) {\n const id = generateId();\n const uri = `${contactNode.doc().uri}#${id}`;\n return {\n uri,\n insertions: [\n st(contactNode, vcard(\"hasTelephone\"), sym(uri), contactNode.doc()),\n st(sym(uri), vcard(\"value\"), sym(\"tel:\" + phoneNumber), contactNode.doc()),\n ],\n deletions: [],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=addNewPhoneNumber.js.map","import { lit, st } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function removeContactFromGroup(contactQuery, groupQuery) {\n const contactUri = contactQuery.contactNode.uri;\n const member = groupQuery.queryMembers().find((it) => it.uri === contactUri);\n if (!member) {\n throw new Error(\"member not found in group\");\n }\n return {\n insertions: [],\n deletions: [\n st(groupQuery.groupNode, vcard(\"hasMember\"), contactQuery.contactNode, groupQuery.groupNode.doc()),\n st(contactQuery.contactNode, vcard(\"fn\"), lit(member.name), groupQuery.groupNode.doc()),\n ],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=removeContactFromGroup.js.map","import { st } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function removeEmailAddress(contactNode, emailNode, store) {\n const emailStatements = store.statementsMatching(emailNode, null, null, emailNode.doc());\n return {\n insertions: [],\n deletions: [\n ...emailStatements,\n st(contactNode, vcard(\"hasEmail\"), emailNode, contactNode.doc()),\n ],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=removeEmailAddress.js.map","import { st } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function removePhoneNumber(contactNode, phoneNode, store) {\n const phoneStatements = store.statementsMatching(phoneNode, null, null, phoneNode.doc());\n return {\n insertions: [],\n deletions: [\n ...phoneStatements,\n st(contactNode, vcard(\"hasTelephone\"), phoneNode, contactNode.doc()),\n ],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=removePhoneNumber.js.map","import { lit, st } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function renameContact(store, contactNode, newName) {\n const deletions = store.statementsMatching(contactNode, vcard(\"fn\"), null, null);\n const insertions = deletions.map((it) => st(it.subject, it.predicate, lit(newName), it.graph));\n return {\n insertions,\n deletions,\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=renameContact.js.map","import { st, sym } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function updateEmailAddress(emailAddressNode, newEmailAddress, store) {\n const oldValue = store.any(emailAddressNode, vcard(\"value\"));\n const deletions = oldValue\n ? [st(emailAddressNode, vcard(\"value\"), oldValue, emailAddressNode.doc())]\n : [];\n const insertions = [\n st(emailAddressNode, vcard(\"value\"), sym(\"mailto:\" + newEmailAddress), emailAddressNode.doc()),\n ];\n return {\n insertions,\n deletions,\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=updateEmailAddress.js.map","import { st, sym } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function updatePhoneNumber(phoneNumberNode, newPhoneNumber, store) {\n const oldValue = store.any(phoneNumberNode, vcard(\"value\"));\n const deletions = oldValue\n ? [st(phoneNumberNode, vcard(\"value\"), oldValue, phoneNumberNode.doc())]\n : [];\n const insertions = [\n st(phoneNumberNode, vcard(\"value\"), sym(\"tel:\" + newPhoneNumber), phoneNumberNode.doc()),\n ];\n return {\n insertions,\n deletions,\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=updatePhoneNumber.js.map","export { createAddressBook } from \"./createAddressBook.js\";\nexport { createNewContact } from \"./createNewContact.js\";\nexport { createNewGroup } from \"./createNewGroup.js\";\nexport { addContactToGroup } from \"./addContactToGroup.js\";\nexport { addNewEmailAddress } from \"./addNewEmailAddress.js\";\nexport { addNewPhoneNumber } from \"./addNewPhoneNumber.js\";\nexport { removeContactFromGroup } from \"./removeContactFromGroup.js\";\nexport { removeEmailAddress } from \"./removeEmailAddress.js\";\nexport { removePhoneNumber } from \"./removePhoneNumber.js\";\nexport { renameContact } from \"./renameContact.js\";\nexport { updateEmailAddress } from \"./updateEmailAddress.js\";\nexport { updatePhoneNumber } from \"./updatePhoneNumber.js\";\n//# sourceMappingURL=index.js.map","import { sym } from \"rdflib\";\nimport { AddressBookQuery, ContactQuery, GroupQuery } from \"./queries/index.js\";\nimport { createAddressBook, createNewContact, createNewGroup, renameContact, updatePhoneNumber, updateEmailAddress, addContactToGroup, removePhoneNumber, addNewPhoneNumber, removeEmailAddress, addNewEmailAddress, removeContactFromGroup, } from \"./update-operations/index.js\";\nimport { executeUpdate, ModuleSupport, PreferencesQuery, ProfileQuery, TypeIndexQuery, addInstanceToTypeIndex, } from \"@solid-data-modules/rdflib-utils\";\nimport { vcard } from \"./namespaces.js\";\nconst VCARD_ADDRESS_BOOK = vcard(\"AddressBook\");\nexport class ContactsModuleRdfLib {\n constructor(config) {\n this.support = new ModuleSupport(config);\n this.store = config.store;\n this.fetcher = config.fetcher;\n this.updater = config.updater;\n }\n async readAddressBook(uri) {\n const addressBookNode = sym(uri);\n await this.support.fetchNode(addressBookNode);\n const query = new AddressBookQuery(this.store, addressBookNode);\n const title = query.queryTitle();\n const nameEmailIndex = query.queryNameEmailIndex();\n const groupIndex = query.queryGroupIndex();\n await this.support.fetchAll([nameEmailIndex, groupIndex]);\n const contacts = query.queryContacts();\n const groups = query.queryGroups();\n return {\n uri,\n title,\n contacts,\n groups,\n };\n }\n async createAddressBook({ containerUri, name, ownerWebId, }) {\n const operation = createAddressBook(containerUri, name);\n await executeUpdate(this.fetcher, this.updater, operation);\n if (ownerWebId) {\n await this.updatePrivateTypeIndex(ownerWebId, operation.uri);\n }\n return operation.uri;\n }\n async updatePrivateTypeIndex(ownerWebId, addressBookUri) {\n const profileNode = sym(ownerWebId);\n await this.support.fetchNode(profileNode);\n const profileQuery = new ProfileQuery(profileNode, this.store);\n const preferencesFile = profileQuery.queryPreferencesFile();\n const privateTypeIndex = await this.fetchPrivateTypeIndex(profileNode, preferencesFile);\n if (!privateTypeIndex) {\n throw new Error(`Private type not found for WebID ${ownerWebId}.`);\n }\n const operation = addInstanceToTypeIndex(privateTypeIndex, addressBookUri, VCARD_ADDRESS_BOOK);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async createNewContact({ addressBookUri, contact, groupUris, }) {\n const contactQuery = await this.executeCreateNewContact(addressBookUri, contact);\n await this.executeAddContactToGroups(groupUris, contactQuery);\n return contactQuery.contactNode.uri;\n }\n async executeAddContactToGroups(groupUris, contactQuery) {\n const groupNodes = (groupUris ?? []).map((it) => sym(it));\n await this.support.fetchAll(groupNodes);\n const groupUpdates = groupNodes.map((groupNode) => {\n const groupQuery = new GroupQuery(this.store, groupNode);\n const operation = addContactToGroup(contactQuery, groupQuery);\n return executeUpdate(this.fetcher, this.updater, operation);\n });\n await Promise.allSettled(groupUpdates);\n }\n async executeCreateNewContact(addressBookUri, contact) {\n const addressBookNode = sym(addressBookUri);\n await this.support.fetchNode(addressBookNode);\n const operation = createNewContact(new AddressBookQuery(this.store, addressBookNode), contact);\n await executeUpdate(this.fetcher, this.updater, operation);\n return new ContactQuery(this.store, sym(operation.uri));\n }\n async readContact(uri) {\n const contactNode = sym(uri);\n await this.support.fetchNode(contactNode);\n const query = new ContactQuery(this.store, contactNode);\n const name = query.queryName();\n const emails = query.queryEmails();\n const phoneNumbers = query.queryPhoneNumbers();\n return {\n uri,\n name,\n emails,\n phoneNumbers,\n };\n }\n async createNewGroup({ addressBookUri, groupName }) {\n const addressBookNode = sym(addressBookUri);\n await this.support.fetchNode(addressBookNode);\n const query = new AddressBookQuery(this.store, addressBookNode);\n const operation = createNewGroup(query, groupName);\n await executeUpdate(this.fetcher, this.updater, operation);\n return operation.uri;\n }\n async readGroup(uri) {\n const groupNode = sym(uri);\n await this.support.fetchNode(groupNode);\n const query = new GroupQuery(this.store, groupNode);\n const name = query.queryName();\n const members = query.queryMembers();\n return {\n uri,\n name,\n members,\n };\n }\n async addContactToGroup({ contactUri, groupUri }) {\n const contactNode = sym(contactUri);\n const groupNode = sym(groupUri);\n await this.support.fetchNode(contactNode);\n const contactQuery = new ContactQuery(this.store, contactNode);\n const groupQuery = new GroupQuery(this.store, groupNode);\n const operation = addContactToGroup(contactQuery, groupQuery);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async removeContactFromGroup({ contactUri, groupUri, }) {\n const contactNode = sym(contactUri);\n const groupNode = sym(groupUri);\n await this.support.fetchNode(groupNode);\n const contactQuery = new ContactQuery(this.store, contactNode);\n const groupQuery = new GroupQuery(this.store, groupNode);\n const operation = removeContactFromGroup(contactQuery, groupQuery);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async addNewPhoneNumber({ contactUri, newPhoneNumber, }) {\n const contactNode = sym(contactUri);\n const operation = addNewPhoneNumber(contactNode, newPhoneNumber);\n await executeUpdate(this.fetcher, this.updater, operation);\n return operation.uri;\n }\n async addNewEmailAddress({ contactUri, newEmailAddress, }) {\n const contactNode = sym(contactUri);\n const operation = addNewEmailAddress(contactNode, newEmailAddress);\n await executeUpdate(this.fetcher, this.updater, operation);\n return operation.uri;\n }\n async removePhoneNumber({ contactUri, phoneNumberUri, }) {\n const contactNode = sym(contactUri);\n const phoneNumberNode = sym(phoneNumberUri);\n await this.support.fetchNode(phoneNumberNode);\n const operation = removePhoneNumber(contactNode, phoneNumberNode, this.store);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async removeEmailAddress({ contactUri, emailAddressUri, }) {\n const contactNode = sym(contactUri);\n const emailAddressNode = sym(emailAddressUri);\n await this.support.fetchNode(emailAddressNode);\n const operation = removeEmailAddress(contactNode, emailAddressNode, this.store);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async updatePhoneNumber({ phoneNumberUri, newPhoneNumber, }) {\n const phoneNumberNode = sym(phoneNumberUri);\n await this.support.fetchNode(phoneNumberNode);\n const operation = updatePhoneNumber(phoneNumberNode, newPhoneNumber, this.store);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async updateEmailAddress({ emailAddressUri, newEmailAddress, }) {\n const emailAddressNode = sym(emailAddressUri);\n await this.support.fetchNode(emailAddressNode);\n const operation = updateEmailAddress(emailAddressNode, newEmailAddress, this.store);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async listAddressBooks(webId) {\n const profileNode = sym(webId);\n await this.support.fetchNode(profileNode);\n const profileQuery = new ProfileQuery(profileNode, this.store);\n const publicTypeIndexNode = profileQuery.queryPublicTypeIndex();\n const preferencesFile = profileQuery.queryPreferencesFile();\n const promisePublicUris = this.fetchIndexedAddressBooks(publicTypeIndexNode);\n const promisePrivateTypeIndex = this.fetchPrivateTypeIndex(profileNode, preferencesFile);\n const [publicUris, privateTypeIndex] = await Promise.allSettled([\n promisePublicUris,\n promisePrivateTypeIndex,\n ]);\n const privateUris = privateTypeIndex.status === \"fulfilled\"\n ? await this.fetchIndexedAddressBooks(privateTypeIndex.value)\n : [];\n return {\n publicUris: publicUris.status === \"fulfilled\" ? publicUris.value : [],\n privateUris,\n };\n }\n async fetchIndexedAddressBooks(publicTypeIndexNode) {\n if (!publicTypeIndexNode) {\n return [];\n }\n await this.support.fetchNode(publicTypeIndexNode);\n return new TypeIndexQuery(this.store, publicTypeIndexNode).queryInstancesForClass(VCARD_ADDRESS_BOOK);\n }\n async fetchPrivateTypeIndex(profileNode, preferencesFile) {\n if (!preferencesFile) {\n return null;\n }\n await this.support.fetchNode(preferencesFile);\n const preferencesQuery = new PreferencesQuery(this.store, profileNode, preferencesFile);\n return preferencesQuery.queryPrivateTypeIndex();\n }\n async renameContact({ contactUri, newName }) {\n const contactNode = sym(contactUri);\n await this.support.fetchNode(contactNode);\n const operation = renameContact(this.store, contactNode, newName);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n}\n//# sourceMappingURL=ContactsModuleRdfLib.js.map","import { ContactsModuleRdfLib } from \"./rdflib/ContactsModuleRdfLib.js\";\nexport default ContactsModuleRdfLib;\n//# sourceMappingURL=index.js.map","import { html, TemplateResult } from 'lit-html'\nimport { DataBrowserContext } from 'pane-registry'\nimport { authn } from 'solid-logic'\nimport { LiveStore, NamedNode } from 'rdflib'\nimport { widgets } from 'solid-ui'\nimport {\n clearPreviousMessage, complain, checkIfAnyUserLoggedIn\n} from './buttonsHelper'\nimport { getContactData, getAddressBooksData, addContactToAddressBook, checkIfContactExistsByWebID, checkIfContactExistsByName, addWebIDToExistingContact } from './contactsHelpers'\nimport { AddressBooksData, ContactData } from './contactsTypes'\nimport {\n addMeToYourContactsButtonText, contactExistsAlreadyButtonText, contactExistsAlreadyByNameButtonText, contactExistsMessage, logInAddMeToYourContactsButtonText, userNotLoggedInErrorMessage\n} from './texts'\nimport './styles/ProfileCard.css'\nimport ContactsModuleRdfLib from '@solid-data-modules/contacts-rdflib'\nimport { addErrorToErrorDisplay } from './contactsErrors'\n\nlet buttonContainer = <HTMLDivElement>document.createElement('section')\n\nconst addMeToYourContactsDiv = async (\n subject: NamedNode,\n context: DataBrowserContext\n): Promise<TemplateResult> => {\n \n buttonContainer = context.dom.createElement('section') as HTMLDivElement\n buttonContainer.setAttribute('id', 'add-to-contacts-button-container')\n buttonContainer.setAttribute('class', 'buttonSubSection text-truncate text-center section-centered')\n buttonContainer.setAttribute('aria-labelledby', 'add-me-to-your-contacts-button-section')\n buttonContainer.setAttribute('data-testid', 'button')\n\n // Add a visually hidden heading for accessibility\n const heading = context.dom.createElement('h3')\n heading.setAttribute('id', 'add-me-to-your-contacts-button-section')\n heading.setAttribute('class', 'sr-only')\n heading.textContent = 'Add me to your contacts actions'\n buttonContainer.appendChild(heading)\n\n const button = await createAddMeToYourContactsButton(subject, context)\n button.classList.add('actionButton', 'btn-primary', 'action-button-focus')\n buttonContainer.appendChild(button)\n return html`${buttonContainer}`\n}\n\nconst createAddMeToYourContactsButton = async (\n subject: NamedNode,\n context: DataBrowserContext\n): Promise<HTMLButtonElement> => {\n const me = authn.currentUser()\n \n let addressBooksData = null\n let contactData = null\n const store: LiveStore = context.session.store\n const fetcher = store.fetcher\n const updater = store.updater\n const contactsModule = new ContactsModuleRdfLib({ store, fetcher, updater})\n\n try {\n addressBooksData = await getAddressBooksData(context, contactsModule)\n contactData = await getContactData(store, subject) \n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n function setButtonHandler(event) {\n event.preventDefault()\n saveNewContact(subject, context, contactsModule, addressBooksData)\n .catch((error) => {\n clearPreviousMessage(buttonContainer)\n complain(buttonContainer, context, error)\n })\n }\n let label = checkIfAnyUserLoggedIn(me) ? addMeToYourContactsButtonText.toUpperCase() : logInAddMeToYourContactsButtonText.toUpperCase()\n const button = widgets.button(\n context.dom,\n undefined,\n label,\n setButtonHandler, //sets an onclick event listener\n {\n needsBorder: true,\n }\n )\n button.setAttribute('id', 'add-to-contacts-button')\n button.refresh = refreshButton()\n \n function refreshButton() {\n if (checkIfAnyUserLoggedIn(me)) {\n const contactExistsByWebID = (contactData) ? checkIfContactExistsByWebID(addressBooksData, contactData.webID) : false\n const contactExistsByName = (contactData) ? checkIfContactExistsByName(addressBooksData, contactData.name) : false\n if (contactExistsByWebID) {\n //logged in and friend exists or friend was just added\n button.innerHTML = contactExistsAlreadyButtonText.toUpperCase()\n button.onclick = null \n button.setAttribute('disabled', 'true')\n } else if (contactExistsByName) {\n button.innerHTML = contactExistsAlreadyByNameButtonText.toUpperCase()\n }\n else {\n //logged in and friend does not exist yet\n button.innerHTML = addMeToYourContactsButtonText.toUpperCase()\n }\n } else {\n //not logged in\n button.innerHTML = logInAddMeToYourContactsButtonText.toUpperCase()\n }\n }\n return button\n}\n\nasync function saveNewContact(\n subject: NamedNode,\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData\n): Promise<void> {\n const me = authn.currentUser()\n const store: LiveStore = context.session.store\n\n// need to find out where the user wants to add the Contact\n if (checkIfAnyUserLoggedIn(me)) {\n if (!(checkIfContactExistsByWebID(addressBooksData, subject.value))) {\n //if contact does not exist, we add her/him\n await store.fetcher.load(me)\n try {\n const contactData: ContactData = await getContactData(store, subject) \n const contactExistsByNameUri = checkIfContactExistsByName(addressBooksData, contactData.name)\n if (contactExistsByNameUri) {\n await addWebIDToExistingContact(context, contactsModule, addressBooksData, contactData.webID, contactExistsByNameUri)\n } else {\n await addContactToAddressBook(context, contactsModule, contactData, addressBooksData, buttonContainer)\n }\n } catch (error) {\n let errorMessage = error\n if (errorMessage.toString().includes('Unauthenticated'))\n errorMessage = userNotLoggedInErrorMessage\n throw new Error(errorMessage)\n }\n } \n else throw new Error(contactExistsMessage)\n } else throw new Error(userNotLoggedInErrorMessage)\n}\n\nexport {\n addMeToYourContactsDiv,\n createAddMeToYourContactsButton,\n saveNewContact\n}\n","import { html, TemplateResult } from 'lit-html'\nimport { NamedNode } from 'rdflib'\nimport { utils } from 'solid-ui'\nimport './styles/QRCodeCard.css'\nimport { scanQrToConnectText } from './texts'\n\n\n\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n // Remove leading # if present\n hex = hex.replace(/^#/, '')\n if (hex.length === 3) {\n hex = hex.split('').map(x => x + x).join('')\n }\n if (hex.length !== 6) return null\n const num = parseInt(hex, 16)\n return {\n r: (num >> 16) & 255,\n g: (num >> 8) & 255,\n b: num & 255,\n }\n}\n\nfunction luminance({ r, g, b }: { r: number; g: number; b: number }): number {\n const a = [r, g, b].map(function (v) {\n v /= 255\n return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4)\n })\n return 0.2126 * a[0] + 0.7152 * a[1] + 0.0722 * a[2]\n}\n\nfunction contrastRatio(hex1: string, hex2: string): number {\n const rgb1 = hexToRgb(hex1)\n const rgb2 = hexToRgb(hex2)\n if (!rgb1 || !rgb2) return 1\n const lum1 = luminance(rgb1)\n const lum2 = luminance(rgb2)\n const brightest = Math.max(lum1, lum2)\n const darkest = Math.min(lum1, lum2)\n return (brightest + 0.05) / (darkest + 0.05)\n}\n\nexport const QRCodeCard = (\n highlightColor: string, \n backgroundColor: string,\n subject: NamedNode\n): TemplateResult => {\n const hC = highlightColor || '#000000'\n const bC = backgroundColor || '#ffffff'\n const name = utils.label(subject)\n\n // Color contrast check\n const ratio = contrastRatio(hC, bC)\n if (ratio < 4.5) {\n \n console.warn(\n `QRCodeCard: The contrast ratio between highlightColor (${hC}) and backgroundColor (${bC}) is ${ratio.toFixed(2)}, which is below the WCAG 2.1 recommended minimum of 4.5:1 for normal text.`\n )\n }\n\n const BEGIN = 'BEGIN:VCARD\\r\\n'\n const END = 'END:VCARD\\r\\n'\n const FN = 'FN:' + name + '\\r\\n'\n const URL = 'URL:' + subject.uri + 'r\\n'\n const VERSIONV = 'VERSION:4.0\\r\\n'\n\n // Accessibility check: Ensure QR code is rendered as an accessible image or canvas\n // This assumes the QR code is rendered inside the <div> below by another library or script.\n // If you use a library, ensure it sets role=\"img\" and an appropriate aria-label or alt attribute.\n // If not, warn the developer.\n setTimeout(() => {\n const container = document.querySelector('.QRCode [role=\"img\"]')\n if (container) {\n const hasAriaLabel = container.hasAttribute('aria-label')\n const hasAlt = container.hasAttribute('alt')\n if (!hasAriaLabel && !hasAlt) {\n \n console.warn('QRCodeCard: The QR code element should have an accessible label (aria-label or alt attribute) for screen readers.')\n }\n } else {\n \n console.warn('QRCodeCard: No element with role=\"img\" found for the QR code. Ensure the QR code is rendered as an <img> or <canvas> with proper ARIA attributes.')\n }\n }, 0)\n\n const vCard: string = BEGIN + FN + URL + END + VERSIONV\n\n // console.log(`@@ qrcodes colours highlightColor ${highlightColor}, backgroundColor ${backgroundColor}`)\n \n \n return html`\n <figure \n class=\"QRCode\"\n data-value=\"${vCard}\"\n highlightColor=\"${hC}\"\n backgroundColor=\"${bC}\"\n data-testid=\"qrcode-card\"\n aria-labelledby=\"qr-code-caption\"\n role=\"img\"\n aria-describedby=\"qr-code-description\"\n >\n <div \n aria-label=\"Static QR code containing contact information for ${name}\"\n role=\"img\"\n tabindex=\"0\"\n ></div>\n <figcaption \n id=\"qr-code-caption\" \n class=\"qrCaption\"\n >\n ${scanQrToConnectText}\n </figcaption>\n <div \n id=\"qr-code-description\" \n class=\"sr-only\"\n >\n This is a static QR code containing vCard information for ${name}, including profile URL ${subject.uri}. The QR code is not interactive.\n </div>\n </figure>\n `\n}\n","import { html, nothing } from 'lit-html'\nimport './styles/ProfileCard.css'\nimport { ProfilePresentation } from './presenter'\nimport { addMeToYourFriendsDiv } from './addMeToYourFriends'\nimport { addMeToYourContactsDiv } from './addMeToYourContacts'\nimport { DataBrowserContext } from 'pane-registry'\nimport { NamedNode } from 'rdflib'\nimport { QRCodeCard } from './QRCodeCard'\n\nexport const ProfileCard = async ({\n name, imageSrc, introduction, location, pronouns, highlightColor, backgroundColor\n}: ProfilePresentation, context: DataBrowserContext, subject: NamedNode) => {\n\n return html`\n <article class=\"profileCard\" aria-labelledby=\"profile-name\">\n <h2 id=\"profile-name\" class=\"sr-only\">${name}</h2>\n <header class=\"header flex-column-center mb-md\" aria-label=\"Profile information\">\n ${Image(imageSrc, name)}\n </header>\n \n <section class=\"intro text-center\" aria-label=\"About\">\n ${Line(introduction, '', 'About')}\n ${Line(location, '🌐', 'Location')}\n ${Line(pronouns, '', 'Pronouns')}\n </section>\n \n <section class=\"buttonSection text-center\" aria-label=\"Friend actions\">\n ${addMeToYourFriendsDiv(subject, context)}\n </section>\n\n <section class=\"buttonSection text-center\" aria-label=\"Contact actions\">\n ${await addMeToYourContactsDiv(subject, context)}\n </section>\n\n <div class=\"qrCodeSection section-centered\">\n ${QRCodeCard(highlightColor, backgroundColor, subject)}\n </div>\n </article>\n `\n}\n\nconst Line = (value, prefix: symbol | string = nothing, label: string = '') =>\n value ? html`\n <div class=\"details\" role=\"text\" ${label ? `aria-label=\"${label}: ${value}\"` : ''}>\n ${prefix} ${value}\n </div>\n ` : nothing\n\nconst Image = (src, alt) =>\n src\n ? html`\n <img\n class=\"image\"\n src=${src}\n alt=\"Profile photo of ${alt}\"\n width=\"160\"\n height=\"160\"\n loading=\"eager\"\n />\n `\n : html`\n <div class=\"image-alt\" role=\"img\" aria-label=\"${alt}\" tabindex=\"0\">\n ${alt}\n </div>\n `\n","import { html } from 'lit-html'\nimport { CVPresentation } from './CVPresenter'\nimport './styles/CVCard.css'\n\nexport const CVCard = (\n cvData: CVPresentation\n) => {\n const { rolesByType, skills, languages } = cvData\n\n const futureRolesArr = rolesByType['FutureRole'] || []\n const currentRolesArr = rolesByType['CurrentRole'] || []\n const pastRolesArr = rolesByType['PastRole'] || []\n const skillsArr = skills || []\n const languagesArr = languages || []\n\n const hasFutureRole = Array.isArray(futureRolesArr) && futureRolesArr.length > 0\n const hasCurrentRole = Array.isArray(currentRolesArr) && currentRolesArr.length > 0\n const hasPastRole = Array.isArray(pastRolesArr) && pastRolesArr.length > 0\n const hasSkills = Array.isArray(skillsArr) && skillsArr.length > 0\n const hasLanguages = Array.isArray(languagesArr) && languagesArr.length > 0\n\n if (!(hasFutureRole || hasCurrentRole || hasPastRole || hasSkills || hasLanguages)) return html``\n\n return html`\n <article class=\"cvCard\" aria-label=\"Resume\" data-testid=\"curriculum-vitae\">\n ${hasFutureRole ? html`\n <section class=\"cvSection\" aria-labelledby=\"cv-future-heading\">\n <h3 id=\"cv-future-heading\">Future Roles</h3>\n <ul role=\"list\" aria-label=\"Upcoming work experience\">\n ${renderRoles(futureRolesArr, true)}\n </ul>\n </section>\n ` : ''}\n \n ${hasCurrentRole ? html`\n <section class=\"cvSection\" aria-labelledby=\"cv-current-heading\">\n <h3 id=\"cv-current-heading\">Current Roles</h3>\n <ul role=\"list\" aria-label=\"Current work experience\">\n ${renderRoles(currentRolesArr, true)}\n </ul>\n </section>\n ` : ''}\n \n ${hasPastRole ? html`\n <section class=\"cvSection\" aria-labelledby=\"cv-past-heading\">\n <h3 id=\"cv-past-heading\">Past Roles</h3>\n <ul role=\"list\" aria-label=\"Previous work experience\">\n ${renderRoles(pastRolesArr, true)}\n </ul>\n </section>\n ` : ''}\n \n ${hasSkills ? html`\n <section class=\"cvSection\" aria-labelledby=\"cv-skills-heading\">\n <h3 id=\"cv-skills-heading\">Skills</h3>\n <ul role=\"list\" aria-label=\"Professional skills and competencies\">\n ${renderSkills(skillsArr, true)}\n </ul>\n </section>\n ` : ''}\n \n ${hasLanguages ? html`\n <section class=\"cvSection\" aria-labelledby=\"cv-languages-heading\">\n <h3 id=\"cv-languages-heading\">Languages</h3>\n <ul role=\"list\" aria-label=\"Known languages\">\n ${renderLanguages(languagesArr, true)}\n </ul>\n </section>\n ` : ''}\n </article>\n `\n}\n\nfunction renderRole(role, asList = false) {\n if (!role) return html``\n return asList\n ? html`\n <li class=\"cvRole\" role=\"listitem\">\n <strong class=\"cvOrg\" aria-label=\"Organization\">${role.orgName}</strong>\n <span aria-label=\"Role title\">${strToUpperCase(role.roleText)}</span>\n <time aria-label=\"Employment period\">${role.dates}</time>\n </li>`\n : html``\n}\n\nfunction renderRoles(roles, asList = false) {\n if (!roles || !roles.length || !roles[0]) return html``\n return html`${renderRole(roles[0], asList)}${roles.length > 1 ? renderRoles(roles.slice(1), asList) : html``}`\n}\n\nfunction renderSkill(skill, asList = false) {\n if (!skill) return html``\n return asList\n ? html`<li class=\"cvSkill\">${strToUpperCase(skill)}</li>`\n : html``\n}\n\nfunction renderSkills(skills, asList = false) {\n if (!skills || !skills.length || !skills[0]) return html``\n return html`${renderSkill(skills[0], asList)}${skills.length > 1 ? renderSkills(skills.slice(1), asList) : html``}`\n}\n\nfunction renderLan(language, asList = false) {\n if (!language) return html``\n return asList\n ? html`<li class=\"cvLanguage\">${language}</li>`\n : html``\n}\n\nfunction renderLanguages(languages, asList = false) {\n if (!languages || !languages.length || !languages[0]) return html``\n return html`${renderLan(languages[0], asList)}${languages.length > 1 ? renderLanguages(languages.slice(1), asList) : html``}`\n}\n\nfunction strToUpperCase(str) {\n if (str && str[0] > '') {\n const strCase = str.split(' ')\n for (let i = 0; i < strCase.length; i++) {\n strCase[i] = strCase[i].charAt(0).toUpperCase() +\n strCase[i].substring(1)\n }\n return strCase.join(' ')\n }\n return ''\n}\n","import { html, TemplateResult } from 'lit-html'\nimport { SocialPresentation } from './SocialPresenter'\nimport './styles/SocialCard.css'\n\n\nexport const SocialCard = (\n SocialData: SocialPresentation\n): TemplateResult => {\n \n const { accounts } = SocialData\n\n if(accounts.length){\n\n return html`\n <section\n class=\"socialCard\"\n aria-labelledby=\"social-card-title\"\n data-testid=\"social-media\"\n >\n <nav aria-label=\"Social media profiles\">\n <ul class=\"socialList list-reset\" role=\"list\">\n ${accounts.map(account => renderAccount(account))}\n </ul>\n </nav>\n </section>\n `\n }\n\n function renderAccount(account) {\n return account.homepage && account.name && account.icon\n ? html`\n <li class=\"socialItem\" role=\"listitem\">\n <a \n href=\"${account.homepage}\" \n target=\"_blank\" \n rel=\"noopener noreferrer\" \n aria-label=\"Visit ${account.name} profile (opens in new tab)\"\n >\n <img \n class=\"socialIcon\" \n src=\"${account.icon}\" \n alt=\"${account.name} icon\"\n width=\"40\"\n height=\"40\"\n loading=\"lazy\"\n />\n <span class=\"text-wrap-anywhere\">${account.name}</span>\n </a>\n </li>\n `\n : html``\n }\n\n}\n","import { html, TemplateResult } from 'lit-html'\nimport { NamedNode } from 'rdflib'\nimport { DataBrowserContext } from 'pane-registry'\nimport { widgets } from 'solid-ui'\nimport './styles/StuffCard.css'\nimport { ProfilePresentation } from './presenter'\n\n\nexport const StuffCard = (profileBasics: ProfilePresentation,\n context: DataBrowserContext,\n subject: NamedNode, stuffData): TemplateResult => {\n const { stuff } = stuffData\n const dom = context.dom || document\n return html`\n <section\n class=\"stuffCard\"\n aria-labelledby=\"stuff-card-title\"\n role=\"region\"\n data-testid=\"stuff\"\n >\n <header>\n <h3 id=\"stuff-card-title\" class=\"sr-only\">Shared Resources</h3>\n </header>\n <div>\n <table class=\"stuffTable\" data-testid=\"stuffTable\">\n <caption class=\"sr-only\">Files and resources shared by ${profileBasics.name}</caption>\n <tbody class=\"zebra-stripe\">\n ${renderThings(stuff, dom)}\n </tbody>\n </table>\n </div>\n </section>\n `\n}\n\nexport function renderThingAsDOM (thing, dom) {\n const options = {}\n // widgets.personTR returns a DOM node, so we need to convert it to HTML string\n const row = widgets.personTR(dom, null, thing.instance, options)\n return row\n}\n\nexport function renderThing (thing, dom) {\n return renderThingAsDOM(thing, dom)\n}\n\nexport function renderThings(things, dom) {\n if (things.length === 0) return html``\n return html`${renderThing(things[0], dom)}${things.length > 1 ? renderThings(things.slice(1), dom) : html``}`\n}","import { html, TemplateResult } from 'lit-html'\nimport { DataBrowserContext } from 'pane-registry'\nimport { NamedNode, LiveStore } from 'rdflib'\nimport './styles/ProfileView.css'\nimport { ChatWithMe } from './ChatWithMe'\nimport { FriendList } from './FriendList'\nimport { presentProfile } from './presenter'\nimport { presentCV } from './CVPresenter' // 20210527\nimport { presentSocial } from './SocialPresenter' // 20210527\nimport { presentStuff } from './StuffPresenter' // 20210527\nimport { ProfileCard } from './ProfileCard'\nimport { CVCard } from './CVCard'\nimport { SocialCard } from './SocialCard'\nimport { StuffCard } from './StuffCard'\nimport {\n resumeHeadingText,\n socialAccountsHeadingText,\n sharedItemsHeadingText,\n friendsHeadingText,\n contactHeadingText\n} from './texts'\n\n// The edit button switches to the editor pane\n/*\nfunction renderEditButton (subject) {\n return \n authn.currentUser() && authn.currentUser().sameTerm(subject) ?\n html `<button type=\"button\" class=\"ProfilePaneCVEditButton\">\n <img src=\"${editButtonURI}\">\n Edit</button>`\n : html``;\n}\n*/\n\nexport async function ProfileView (\n subject: NamedNode,\n context: DataBrowserContext\n): Promise <TemplateResult> {\n const store = context.session.store as LiveStore\n \n const profileBasics = presentProfile(subject, store)\n const rolesByType = presentCV(subject, store)\n const accounts = presentSocial(subject, store)\n const stuffData = await presentStuff(subject)\n\n return html` \n <main\n id=\"main-content\"\n class=\"profile-grid\"\n style=\"--profile-grid-bg: radial-gradient(circle, ${profileBasics.backgroundColor} 80%, ${profileBasics.highlightColor} 100%)\"\n role=\"main\"\n aria-label=\"Profile for ${profileBasics.name}\"\n tabindex=\"-1\"\n > \n\n <article \n aria-labelledby=\"profile-card-heading\" \n class=\"profileSection section-bg\" \n role=\"region\"\n tabindex=\"-1\"\n >\n <header class=\"text-center mb-md\">\n <h2 id=\"profile-card-heading\" tabindex=\"-1\">${profileBasics.name}</h2>\n </header>\n ${await ProfileCard(profileBasics, context, subject)}\n </article>\n\n ${(() => {\n const cv = CVCard(rolesByType)\n return cv && cv.strings && cv.strings.join('').trim() !== '' ? html`\n <section \n aria-labelledby=\"cv-heading\" \n class=\"profileSection section-bg\" \n role=\"region\"\n tabindex=\"-1\"\n >\n <header class=\"text-center mb-md\">\n <h2 id=\"cv-heading\" tabindex=\"-1\">${resumeHeadingText}</h2>\n </header>\n <div>\n ${cv}\n </div>\n </section>\n ` : ''\n })()}\n\n ${accounts.accounts && accounts.accounts.length > 0 ? html`\n <aside \n aria-labelledby=\"social-heading\" \n class=\"profileSection section-bg\" \n role=\"complementary\"\n tabindex=\"-1\"\n >\n <header class=\"text-center mb-md\">\n <h2 id=\"social-heading\" tabindex=\"-1\">${socialAccountsHeadingText}</h2>\n </header>\n <nav aria-label=\"Social media links\">\n ${SocialCard(accounts)}\n </nav>\n </aside>\n ` : ''}\n\n ${stuffData.stuff && stuffData.stuff.length > 0 ? html`\n <section \n aria-labelledby=\"stuff-heading\" \n class=\"profileSection section-bg\" \n role=\"region\"\n tabindex=\"-1\"\n >\n <header class=\"text-center mb-md\">\n <h2 id=\"stuff-heading\" tabindex=\"-1\">${sharedItemsHeadingText}</h2>\n </header>\n <div>\n ${StuffCard(profileBasics, context, subject, stuffData)}\n </div>\n </section>\n ` : ''}\n\n ${(() => {\n const friends = FriendList(subject, context)\n return friends ? html`\n <aside \n aria-labelledby=\"friends-heading\" \n class=\"profileSection section-bg\" \n role=\"complementary\"\n tabindex=\"-1\"\n >\n <header class=\"text-center mb-md\">\n <h2 id=\"friends-heading\" tabindex=\"-1\">${friendsHeadingText}</h2>\n </header>\n <div role=\"list\" aria-label=\"Friend connections\">\n ${friends}\n </div>\n </aside>\n ` : ''\n })()}\n\n <section \n aria-labelledby=\"chat-heading\" \n class=\"profileSection section-bg\" \n role=\"region\"\n tabindex=\"-1\"\n >\n <header class=\"text-center mb-md\">\n <h2 id=\"chat-heading\" tabindex=\"-1\">${contactHeadingText}</h2>\n </header>\n <div>\n ${ChatWithMe(subject, context)}\n </div>\n </section>\n </main>\n `\n}\n","import { DataBrowserContext } from 'pane-registry'\nimport { NamedNode } from 'rdflib'\nimport { yourContactInformationHeading } from '../texts'\n\nexport function EditContactsSection(context: DataBrowserContext, me: NamedNode): HTMLElement {\n const section = context.dom.createElement('section')\n section.setAttribute('aria-labelledby', 'edit-profile-contact-heading')\n section.classList.add('profileSection', 'section-bg', 'profile-form')\n\n const header = context.dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n const heading = context.dom.createElement('h2')\n heading.id = 'edit-profile-contact-heading'\n heading.classList.add('section-title')\n heading.textContent = yourContactInformationHeading\n header.appendChild(heading)\n section.appendChild(header)\n\n section.appendChild(paneDiv(context, me, 'contact'))\n\n return section\n}\n\nfunction paneDiv (\n context: DataBrowserContext, \n subject: NamedNode,\n paneName: string\n): HTMLElement {\n const view = context.session.paneRegistry.byName(paneName)\n if (!view) {\n const warning = context.dom.createElement('div')\n warning.innerText = `Unable to load view: ${paneName}`\n return warning\n }\n const viewContainer = view.render(subject, context)\n \n // Handle different node types\n let container: HTMLElement\n \n if (viewContainer && typeof viewContainer.setAttribute === 'function') {\n // It's already an Element node\n container = viewContainer as HTMLElement\n } else if (viewContainer && viewContainer.nodeType === Node.TEXT_NODE) {\n // It's a Text node, wrap it in a section for semantics\n container = context.dom.createElement('section')\n container.appendChild(viewContainer)\n } else {\n // Fallback for other cases\n container = context.dom.createElement('section')\n container.innerText = `View render did not return a valid Node for: ${paneName}`\n }\n\n container.setAttribute('role', 'region')\n container.setAttribute('aria-label', `${paneName} section`)\n return container\n}\n","import { DataBrowserContext } from 'pane-registry'\nimport { NamedNode } from 'rdflib'\nimport { ns, widgets } from 'solid-ui'\nimport { friendsHeadingText } from '../texts'\n\nexport function EditFriendsSection(context: DataBrowserContext, me: NamedNode, editableProfile: NamedNode | null, profile: NamedNode) {\n const section = context.dom.createElement('section')\n section.setAttribute('aria-labelledby', 'edit-profile-friends-heading')\n section.classList.add('profileSection', 'section-bg')\n\n const header = context.dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n\n const heading = context.dom.createElement('h2')\n heading.id = 'edit-profile-friends-heading'\n heading.classList.add('section-title')\n heading.textContent = friendsHeadingText\n\n header.appendChild(heading)\n section.appendChild(header)\n\n const comment1 = context.dom.createElement('p')\n comment1.id = 'edit-profile-friends-description'\n comment1.classList.add('p-md')\n comment1.textContent = 'This is your public social network. Only put people here to whom you are happy to be publicly connected. (You can always keep private track of friends and family in your contacts.)'\n section.appendChild(comment1)\n\n let comment2: HTMLParagraphElement | null = null\n if (editableProfile) {\n comment2 = context.dom.createElement('p')\n comment2.id = 'edit-profile-friends-help'\n comment2.classList.add('p-md')\n comment2.textContent = 'Drag people onto the target below to add people.'\n section.appendChild(comment2)\n }\n\n const attachmentList = widgets.attachmentList(context.dom, me, section, {\n doc: profile,\n modify: !!editableProfile,\n predicate: ns.foaf('knows'),\n noun: 'friend'\n })\n\n const descriptions = [comment1.id]\n if (comment2?.id) {\n descriptions.push(comment2.id)\n }\n attachmentList.setAttribute('aria-describedby', descriptions.join(' '))\n section.appendChild(attachmentList)\n\n return section\n}\n","import { DataBrowserContext } from 'pane-registry'\nimport { NamedNode, Store} from 'rdflib'\nimport socialMediaForm from '../ontology/socialMedia.ttl'\nimport renderForm from '../rdfFormsHelper'\nimport { socialAccountsHeadingText } from '../texts'\n\nconst socialMediaFormName = 'socialMedia.ttl' // The name of the form file\n\nexport function EditSocialSection(context: DataBrowserContext, me: NamedNode, editableProfile: NamedNode | null, store: Store) {\n const section = context.dom.createElement('section')\n section.setAttribute('data-testid', 'edit-social-section')\n section.setAttribute('aria-labelledby', 'edit-profile-social-heading')\n section.classList.add('profileSection', 'section-bg', 'profile-form')\n\n const header = context.dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n\n const heading = context.dom.createElement('h2')\n heading.id = 'edit-profile-social-heading'\n heading.classList.add('section-title')\n heading.textContent = socialAccountsHeadingText\n\n header.appendChild(heading)\n section.appendChild(header)\n\n if (editableProfile) {\n const comment2 = context.dom.createElement('p')\n comment2.classList.add('p-md')\n comment2.textContent = 'Add links to your social media accounts here. These will be publicly visible on your profile.'\n section.appendChild(comment2)\n } else {\n const comment1 = context.dom.createElement('p')\n comment1.classList.add('p-md')\n comment1.textContent = 'Login to add social media accounts to your profile.'\n section.appendChild(comment1)\n }\n\n renderForm(section, me, socialMediaForm, socialMediaFormName, store, context.dom, editableProfile)\n\n return section\n}\n","import { DataBrowserContext } from 'pane-registry'\nimport { NamedNode } from 'rdflib'\nimport { ns, widgets } from 'solid-ui'\nimport { communitiesHeadingText } from '../texts'\n\nexport function EditProfileCommunitiesSection(context: DataBrowserContext, me: NamedNode, editableProfile: NamedNode | null, profile: NamedNode) {\n const section = context.dom.createElement('section')\n section.setAttribute('aria-labelledby', 'edit-profile-communities-heading')\n section.classList.add('profileSection', 'section-bg')\n\n const header = context.dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n\n const heading = context.dom.createElement('h2')\n heading.id = 'edit-profile-communities-heading'\n heading.classList.add('section-title')\n heading.textContent = communitiesHeadingText\n header.appendChild(heading)\n section.appendChild(header)\n\n const comment1 = context.dom.createElement('p')\n comment1.id = 'edit-profile-communities-description'\n comment1.classList.add('p-md')\n comment1.textContent = 'These are organizations and projects whose stuff you share'\n section.appendChild(comment1)\n\n let comment2: HTMLParagraphElement | null = null\n if (editableProfile) {\n comment2 = context.dom.createElement('p')\n comment2.id = 'edit-profile-communities-help'\n comment2.classList.add('p-md')\n comment2.textContent = 'Drag organizations onto the target below to add organizations.'\n section.appendChild(comment2)\n }\n\n const attachmentList = widgets.attachmentList(context.dom, me, section, {\n doc: profile,\n modify: !!editableProfile,\n predicate: ns.solid('community'),\n noun: 'community'\n })\n\n const descriptions = [comment1.id]\n if (comment2?.id) {\n descriptions.push(comment2.id)\n }\n attachmentList.setAttribute('aria-describedby', descriptions.join(' '))\n section.appendChild(attachmentList)\n\n return section\n}\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./rdfFormsEnforced.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./rdfFormsEnforced.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { DataBrowserContext } from 'pane-registry'\nimport { NamedNode, Store} from 'rdflib'\nimport resumeForm from '../ontology/resumeForm.ttl'\nimport renderForm from '../rdfFormsHelper'\nimport { resumeHeadingText } from '../texts'\n\nconst resumeFormName = 'resumeForm.ttl' // The name of the form file\n\nexport function EditCVSection(context: DataBrowserContext, me: NamedNode, editableProfile: NamedNode | null, store: Store) {\n const section = context.dom.createElement('section')\n section.setAttribute('data-testid', 'edit-cv-section')\n section.setAttribute('aria-labelledby', 'edit-profile-cv-heading')\n section.classList.add('profileSection', 'section-bg', 'profile-form')\n\n const header = context.dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n\n const heading = context.dom.createElement('h2')\n heading.id = 'edit-profile-cv-heading'\n heading.classList.add('section-title')\n heading.textContent = resumeHeadingText\n\n header.appendChild(heading)\n section.appendChild(header)\n\n if (editableProfile) {\n const comment2 = context.dom.createElement('p')\n comment2.classList.add('p-md')\n comment2.textContent = 'Edit your resume. These will be publicly visible on your profile.'\n section.appendChild(comment2)\n } else {\n const comment1 = context.dom.createElement('p')\n comment1.classList.add('p-md')\n comment1.textContent = 'Login to add resume information to your profile.'\n section.appendChild(comment1)\n }\n\n renderForm(section, me, resumeForm, resumeFormName, store, context.dom, editableProfile)\n\n return section\n}\n","import { DataBrowserContext } from 'pane-registry'\nimport { NamedNode, Store} from 'rdflib'\nimport otherPreferencesForm from '../ontology/otherPreferencesForm.ttl'\nimport renderForm from '../rdfFormsHelper'\nimport { otherPreferencesHeadingText } from '../texts'\n\nconst otherPreferencesFormName = 'otherPreferencesForm.ttl' // The name of the form file\n\nexport function EditOtherPreferencesSection(context: DataBrowserContext, me: NamedNode, editableProfile: NamedNode | null, store: Store) {\n const section = context.dom.createElement('section')\n section.setAttribute('data-testid', 'edit-other-preferences-section')\n section.setAttribute('aria-labelledby', 'edit-profile-other-preferences-heading')\n section.classList.add('profileSection', 'section-bg', 'profile-form')\n\n const header = context.dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n\n const heading = context.dom.createElement('h2')\n heading.id = 'edit-profile-other-preferences-heading'\n heading.classList.add('section-title')\n heading.textContent = otherPreferencesHeadingText\n\n header.appendChild(heading)\n section.appendChild(header)\n\n renderForm(section, me, otherPreferencesForm, otherPreferencesFormName, store, context.dom, editableProfile)\n\n return section\n}\n","/**\n * Profile Editing App Pane\n *\n * Unlike view panes, this is available any place whatever the real subject,\n * and allows the user to edit their own profile.\n *\n * Usage: paneRegistry.register('/profile/editProfile.view')\n * or standalone script adding onto existing mashlib.\n */\n\nimport { PaneDefinition } from 'pane-registry'\nimport { NamedNode, Store } from 'rdflib'\nimport { icons, login, ns, widgets } from 'solid-ui'\nimport { EditContactsSection } from './EditContactsCard'\nimport { EditFriendsSection } from './EditFriendsCard'\nimport { EditSocialSection } from './EditSocialCard'\nimport { EditProfileCommunitiesSection } from './EditCommunitiesCard'\nimport '../styles/utilities.css'\nimport '../styles/rdfFormsEnforced.css'\nimport { EditCVSection } from './EditCVCard'\nimport { EditOtherPreferencesSection } from './EditOtherPreferences'\n\nconst editProfileView: PaneDefinition = {\n global: true,\n\n icon: icons.iconBase + 'noun_492246.svg',\n\n name: 'editProfile',\n\n label: () => null, // don't use this in the normal solid-panes dispatching\n\n render: function (subject, context) {\n //console.log('@@@ render edit profile pane: subject, context', subject, context)\n const dom = context.dom\n const store = context.session.store as Store\n\n // Use <section> as the main container for better semantics\n const div = dom.createElement('section')\n div.setAttribute('data-testid', 'profile-editor')\n div.setAttribute('role', 'region')\n div.setAttribute('aria-label', 'Edit your profile')\n let editableProfile: NamedNode | null\n\n // Use <main> for the main content area, styled as a grid like ProfileView\n const main = dom.createElement('main')\n main.setAttribute('id', 'profile-edit-main-content')\n main.setAttribute('aria-busy', 'true')\n main.setAttribute('tabindex', '-1')\n main.classList.add('profile-grid', 'no-focus-ring')\n const mainHeading = dom.createElement('h1')\n mainHeading.classList.add('visually-hidden')\n mainHeading.textContent = 'Edit Profile'\n main.appendChild(mainHeading)\n div.appendChild(main)\n\n // Use <aside> for the status area\n const statusArea = dom.createElement('aside')\n statusArea.classList.add('p-sm')\n statusArea.setAttribute('role', 'status')\n statusArea.setAttribute('aria-live', 'polite')\n statusArea.setAttribute('aria-atomic', 'true')\n const ensureStatusArea = () => {\n if (!statusArea.isConnected) {\n div.appendChild(statusArea)\n }\n }\n\n const profileContext = {\n dom: dom,\n div: main,\n statusArea: statusArea,\n me: null\n }\n\n login.ensureLoadedProfile(profileContext)\n .then(theContext => {\n const me = theContext.me!\n\n const profile = me.doc()\n if (!store.updater) {\n throw new Error('Store has no updater')\n }\n if (store.any(me, ns.solid('editableProfile'))) {\n editableProfile = store.any(me, ns.solid('editableProfile')) as NamedNode\n } else if (store.updater.editable(profile.uri, store)) {\n editableProfile = profile\n } else {\n ensureStatusArea()\n statusArea.appendChild(widgets.errorMessageBlock(dom, `⚠️ Your profile ${profile} is not editable, so we cannot do much here.`, 'straw'))\n return\n }\n\n // Render each section as a card with consistent classes\n // Your contact information Section\n main.appendChild(EditContactsSection(context, me))\n\n // Resume Section\n main.appendChild(EditCVSection(context, me, editableProfile, store))\n\n // Social Accounts Section\n main.appendChild(EditSocialSection(context, me, editableProfile, store))\n\n \n // Other preferences Section\n main.appendChild(EditOtherPreferencesSection(context, me, editableProfile, store))\n \n // People you know Section\n main.appendChild(EditFriendsSection(context, me, editableProfile, profile))\n \n // Communities you participate in Section\n main.appendChild(EditProfileCommunitiesSection(context, me, editableProfile, profile))\n\n main.setAttribute('aria-busy', 'false')\n main.focus()\n \n }).catch(error => {\n ensureStatusArea()\n statusArea.appendChild(widgets.errorMessageBlock(dom, error, '#fee'))\n main.setAttribute('aria-busy', 'false')\n })\n return div\n }\n}\n\nexport default editProfileView\n","import { DataBrowserContext } from 'pane-registry'\nimport './styles/CVCard.css'\nimport './styles/ChatWithMe.css'\nimport './styles/FriendList.css'\nimport './styles/ProfileCard.css'\nimport './styles/ProfileView.css'\nimport './styles/QRCodeCard.css'\nimport './styles/SocialCard.css'\nimport './styles/StuffCard.css'\nimport './styles/utilities.css'\nimport { NamedNode, LiveStore } from 'rdflib'\nimport { render } from 'lit-html'\nimport { ProfileView } from './ProfileView'\nimport editProfileView from './editProfilePane/EditProfileView'\nimport { icons, ns } from 'solid-ui'\nimport * as qrcode from 'qrcode'\n\nasync function loadExtendedProfile(store: LiveStore, subject: NamedNode) {\n const otherProfiles = store.each(\n subject,\n ns.rdfs('seeAlso'),\n null,\n subject.doc()\n ) as Array<NamedNode>\n if (otherProfiles.length > 0) {\n await store.fetcher.load(otherProfiles)\n }\n}\n\n\nconst Pane = {\n global: false,\n icon: icons.iconBase + 'noun_15059.svg',\n name: 'profile',\n label: function (\n subject: NamedNode,\n context: DataBrowserContext\n ): string | null {\n const t = context.session.store.findTypeURIs(subject)\n \n if (\n t[ns.vcard('Individual').uri] ||\n t[ns.foaf('Person').uri] ||\n t[ns.schema('Person').uri]\n ) {\n return 'Profile'\n }\n return null\n },\n editor: editProfileView, \n render: (subject: NamedNode, context: DataBrowserContext): HTMLElement => {\n const target = context.dom.createElement('div')\n const store = context.session.store\n\n loadExtendedProfile(store, subject).then(async () => {\n render(await ProfileView(subject, context), target)\n const QRCodeEles = Array.from(target.getElementsByClassName('QRCode')) // was context.dom\n if (!QRCodeEles.length) return console.error('QRCode Ele missing')\n for (const QRCodeElement of QRCodeEles as HTMLElement[]) {\n const value = QRCodeElement.getAttribute('data-value')\n if (!value) return console.error('QRCode data-value missing')\n const highlightColor = QRCodeElement.getAttribute('highlightColor') || '#000000'\n const backgroundColor = QRCodeElement.getAttribute('backgroundColor') || '#ffffff'\n // console.log(`@@ qrcodes2 colours highlightColor ${highlightColor}, backgroundColor ${backgroundColor}`)\n\n const options = {\n type: 'svg',\n color: {\n dark: highlightColor,\n light: backgroundColor\n }\n }\n\n qrcode.toString(value, options, function (error, svg) {\n if (error) {\n console.error('QRcode error!', error)\n } else {\n // console.log('QRcode success.', svg);\n QRCodeElement.innerHTML = svg\n QRCodeElement.style.width = '80%'\n QRCodeElement.style.height = '80%'\n QRCodeElement.style.margin = '10%'\n }\n })\n\n }\n })\n\n return target\n },\n}\n\nexport default Pane\n"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"profile-pane.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;ACVA;AACA,IAAI,IAAyD;AAC7D,2BAA2B,mBAAO,CAAC,IAAa,GAAG,mBAAO,CAAC,IAAU,GAAG,mBAAO,CAAC,IAAQ;AACxF,MAAM;AAAA,EAKyE;AAC/E,CAAC;AACD,yBAAyB;AACzB;AACA;;AAEA;AACA,SAAS,0BAAmB,EAAE,8BAAmB;;AAEjD,qBAAqB,8BAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,4GAA4G,8BAAmB;AAC/H,iIAAiI,8BAAmB;AACpJ,qGAAqG,8BAAmB;AACxH,0HAA0H,8BAAmB;AAC7I;;;AAGA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;A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ACA;AACA,qBAAqB,qBAAqB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sFAAsF,qBAAqB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,iDAAiD,qBAAqB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sDAAsD,qBAAqB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,cAAc;AACrE;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;;;AAIA;AACA;AACA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA,mCAAmC,gCAAmB;;;;AAItD;AACA;AACA,eAAe,KAAI,GAAG,gCAAmB,MAAM,CAAC;AAChD;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;;;AAIA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;;;AAIA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;;AAEA;;AAEA,OAAO;;AAEP;AACA;;AAEA;;AAEA,OAAO;;AAEP;AACA;;AAEA;;AAEA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mBAAmB,gCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,gCAAmB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B;AACA;AACA;AACA,YAAY,gCAAmB,aAAa,WAAW;AACvD;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B;AACA,gBAAgB,gCAAmB,wBAAwB,gCAAmB;AAC9E,oDAAoD,wCAAwC;AAC5F;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B,WAAW;AACX;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B,WAAW;AACX;AACA;AACA,IAAI,0BAAmB;;AAEvB;AACA,gCAAmB,GAAG,0BAAmB;AACzC;AACA,CAAC;;AAED;;AAEA,8BAA8B;AAC9B,2FAA2F,gCAAmB;AAC9G,8BAA8B;AAC9B,0EAA0E,gCAAmB;AAC7F,8BAA8B;AAC9B,sEAAsE,gCAAmB;AACzF;AACA,+BAA+B,gCAAmB;AAClD,oDAAoD,gCAAmB;AACvE;AACA,kBAAkB,gCAAmB;AACrC,uCAAuC,gCAAmB;AAC1D;AACA,uBAAuB,gCAAmB;AAC1C,4CAA4C,gCAAmB;AAC/D;AACA,qCAAqC,gCAAmB;AACxD,0DAA0D,gCAAmB;AAC7E;AACA,yBAAyB,gCAAmB;AAC5C,8CAA8C,gCAAmB;AACjE;AACA,wBAAwB,gCAAmB;AAC3C,6CAA6C,gCAAmB;AAChE;AACA,mBAAmB,gCAAmB;AACtC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;AAKA;;AAEA,CAAC;AACD;;;;;;;;AAQA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ,uBAAuB,WAAW,IAAI,OAAO;AAC7C;;AAEA;AACA,2BAA2B,QAAQ,IAAI,WAAW,IAAI,MAAM;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iKAAiK;AACjK;AACA,GAAG;AACH;AACA;AACA,IAAI,cAAc,0CAA0C,WAAW,IAAI,MAAM;AACjF;;AAEA;AACA,+BAA+B,QAAQ,QAAQ,WAAW,IAAI,MAAM;;AAEpE;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,gBAAgB,YAAY,EAAE,MAAM;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yCAAyC,WAAW;AACpD,sBAAsB,WAAW;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,SAAS,KAAK,SAAS;AAC3E;AACA;AACA;AACA,mCAAmC,eAAe,UAAU,WAAW;AACvE,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,8EAA8E,OAAO,OAAO,OAAO,IAAI,IAAI;AAC3G;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,4EAA4E,QAAQ,IAAI,IAAI;AAC5F;AACA;AACA,KAAK;AACL,qEAAqE,QAAQ,IAAI,IAAI;AACrF;AACA,KAAK;AACL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,wEAAwE,OAAO,KAAK,OAAO,IAAI,IAAI;AACnG;AACA;AACA;;AAEA,UAAU,MAAM;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC;AACD;;;;;;;AAOA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,OAAO;AACrC;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,oCAAoC,OAAO,WAAW,MAAM;AAC5D;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,OAAO;AACb;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B,OAAO,MAAM,UAAU,WAAW,OAAO,OAAO,SAAS;AACxF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA,wCAAwC;AACxC,iEAAiE,QAAQ,KAAK,MAAM;AACpF;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,QAAQ;AACR,KAAK;AACL,GAAG;AACH,WAAW;AACX,EAAE;;AAEF;;AAEA,CAAC;;;;;AAKD,QAAQ,mBAAmB;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4BAA4B;AACxD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,YAAY,2DAA2D;AACvE,YAAY,2DAA2D;AACvE,YAAY,sCAAsC;AAClD;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,iBAAiB,aAAa,eAAe;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,6BAA6B;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,mDAAmD;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA,qBAAqB,gCAAmB;AACxC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;AAKA;;AAEA,CAAC;;;;;;AAMD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,UAAU;AACV;AACA,2DAA2D,OAAO,QAAQ,IAAI;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAU,MAAM;AAChB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,CAAC;AACD,m0BAAm0B,kDAAkD,4WAA4W,4BAA4B,gCAAgC,sFAAsF,0CAA0C,gCAAgC,2FAA2F,0CAA0C,gCAAgC,iFAAiF,yCAAyC,+BAA+B,4EAA4E,mPAAmP,wCAAwC,gIAAgI,wCAAwC,0HAA0H,uCAAuC,6HAA6H,wCAAwC,wHAAwH,wCAAwC,mFAAmF,6BAA6B,yEAAyE,2EAA2E,kHAAkH,mBAAmB,wGAAwG,uCAAuC,0CAA0C,sCAAsC,2EAA2E,iCAAiC,6FAA6F,uDAAuD,6HAA6H,4GAA4G,uCAAuC,mDAAmD,sCAAsC,8EAA8E,+BAA+B,0CAA0C,uFAAuF,0CAA0C,mtBAAmtB,wDAAwD,qNAAqN,qDAAqD,sGAAsG,mCAAmC;AACv3K,CAAC;AACD,+XAA+X,sCAAsC,0DAA0D,4DAA4D,+BAA+B,0DAA0D,0DAA0D,6BAA6B,oDAAoD,0DAA0D,sCAAsC,iDAAiD,6BAA6B,oDAAoD,0DAA0D,sCAAsC,kDAAkD,8BAA8B,wDAAwD,0DAA0D,8DAA8D,+BAA+B,0DAA0D,gEAAgE,mCAAmC,0DAA0D,8DAA8D,iCAAiC,0DAA0D,iEAAiE,oCAAoC,0DAA0D,+DAA+D,kCAAkC,0DAA0D,4DAA4D,+BAA+B,0DAA0D,2DAA2D,8BAA8B,0DAA0D,0DAA0D,6BAA6B,oDAAoD,0DAA0D,6BAA6B,uDAAuD,mCAAmC,0DAA0D,0DAA0D,6BAA6B,0DAA0D,+DAA+D,gCAAgC,0DAA0D,wDAAwD,gCAAgC,0DAA0D,2DAA2D,8BAA8B,sGAAsG,0DAA0D,oDAAoD,8BAA8B,oDAAoD,0DAA0D,6BAA6B,sDAAsD,kCAAkC,oDAAoD,0DAA0D,6BAA6B,kDAAkD,8BAA8B,oDAAoD,0DAA0D,6BAA6B,iDAAiD,6BAA6B,0DAA0D,4DAA4D,+BAA+B,oDAAoD,0DAA0D,6BAA6B,kDAAkD,8BAA8B,0DAA0D,oDAAoD,4BAA4B,0DAA0D,0DAA0D,6BAA6B,0DAA0D,4DAA4D,+BAA+B,oDAAoD,0DAA0D,sCAAsC,iDAAiD,6BAA6B,oDAAoD,0DAA0D,sCAAsC,kDAAkD,8BAA8B,0DAA0D,+DAA+D,kCAAkC,0DAA0D,2DAA2D,8BAA8B,0DAA0D,uDAAuD,+BAA+B,0DAA0D,qDAAqD,6BAA6B,oDAAoD,0DAA0D,sCAAsC,mDAAmD,+BAA+B,0DAA0D,+DAA+D,gCAAgC,oDAAoD,0DAA0D,6BAA6B,oDAAoD,gCAAgC,0DAA0D,6DAA6D,gCAAgC,oDAAoD,0DAA0D,6BAA6B,kDAAkD,8BAA8B,oDAAoD,0DAA0D,6BAA6B,qDAAqD,iCAAiC,0DAA0D,6DAA6D,gCAAgC,0DAA0D,iEAAiE,oCAAoC,0DAA0D,0DAA0D,6BAA6B,2FAA2F,0DAA0D,kDAAkD,8BAA8B,qDAAqD,0DAA0D,kEAAkE,oCAAoC,0DAA0D,gEAAgE,iCAAiC,0DAA0D,uDAAuD,+BAA+B,0DAA0D,8DAA8D,+BAA+B,0DAA0D,6DAA6D,8BAA8B,mGAAmG,0DAA0D,oDAAoD,8BAA8B,oDAAoD,0DAA0D,6BAA6B,0DAA0D,iCAAiC,gEAAgE,0DAA0D,2EAA2E,+BAA+B,oEAAoE,0DAA0D,oEAAoE,qCAAqC,8EAA8E,0DAA0D,oCAAoC,0FAA0F,oCAAoC,mEAAmE,0DAA0D,oCAAoC,gHAAgH,kCAAkC,yFAAyF,0DAA0D,gEAAgE,+BAA+B,kEAAkE,0DAA0D,4DAA4D,+BAA+B,gEAAgE,0DAA0D,sFAAsF,0CAA0C,kEAAkE,0DAA0D,0DAA0D,6BAA6B,gEAAgE,0DAA0D,mFAAmF,6CAA6C,qGAAqG,qGAAqG,2CAA2C,8GAA8G,qGAAqG,2CAA2C,8GAA8G,wGAAwG,8CAA8C,wJAAwJ,iGAAiG,sCAAsC,8FAA8F,oGAAoG,0CAA0C,kGAAkG,2FAA2F,4CAA4C,oGAAoG,mGAAmG,yCAAyC,iGAAiG,+FAA+F,oCAAoC,+JAA+J,kGAAkG,wCAAwC,gGAAgG,wGAAwG,8CAA8C,sGAAsG,wGAAwG,8CAA8C,sGAAsG,uGAAuG,uCAAuC,+IAA+I,iGAAiG,sCAAsC,8FAA8F,iGAAiG,sCAAsC,8FAA8F,iGAAiG,sCAAsC,8FAA8F,0DAA0D,iEAAiE,kCAAkC,0FAA0F,yGAAyG,+CAA+C,uGAAuG,yGAAyG,oDAAoD,4GAA4G,mGAAmG,yCAAyC,iGAAiG,+FAA+F,oCAAoC,4FAA4F,gGAAgG,qCAAqC,sHAAsH,6FAA6F,kCAAkC,0FAA0F,+FAA+F,oCAAoC,yFAAyF,sGAAsG,4CAA4C,oGAAoG,8FAA8F,mCAAmC,2FAA2F,4FAA4F,iCAAiC,uHAAuH,8FAA8F,mCAAmC,uHAAuH,6FAA6F,+BAA+B,kEAAkE,0DAA0D,iEAAiE,kCAAkC,yIAAyI,gGAAgG,kCAAkC,8EAA8E,0DAA0D,kEAAkE,mCAAmC,8EAA8E,0DAA0D,+DAA+D,gCAAgC,kEAAkE,0DAA0D,6DAA6D,8BAA8B,6DAA6D,0DAA0D,4DAA4D,sCAAsC,0GAA0G,0DAA0D,gGAAgG,kDAAkD,8FAA8F,0DAA0D,6BAA6B,0FAA0F,yCAAyC,kEAAkE,0DAA0D,+DAA+D,oCAAoC,6FAA6F,0DAA0D,8DAA8D,kCAAkC,4EAA4E,0DAA0D,iEAAiE,8BAA8B,0GAA0G,0DAA0D,sEAAsE,iCAAiC,uIAAuI,0DAA0D,gEAAgE,+BAA+B,wEAAwE,0DAA0D,6DAA6D,mCAAmC,uIAAuI,0DAA0D,gEAAgE,+BAA+B,mHAAmH,oFAAoF,iCAAiC,6FAA6F,0DAA0D,yCAAyC,2CAA2C,oEAAoE,oEAAoE,2FAA2F,wFAAwF,wFAAwF,oEAAoE,gEAAgE,2FAA2F,wFAAwF,oFAAoF,oEAAoE,mEAAmE,2FAA2F,wFAAwF,uFAAuF,oEAAoE,8DAA8D,2FAA2F,wFAAwF,kFAAkF,oEAAoE,sEAAsE,2FAA2F,wFAAwF,wGAAwG,+BAA+B,4JAA4J,0DAA0D,mDAAmD,+BAA+B,8KAA8K,0DAA0D,6BAA6B,gFAAgF,yCAAyC,wDAAwD,qDAAqD,0EAA0E,qFAAqF,6CAA6C,wFAAwF,oCAAoC,4EAA4E,0DAA0D,6BAA6B,iFAAiF,8BAA8B,+EAA+E,0DAA0D,yCAAyC,2CAA2C,oEAAoE,uEAAuE,2FAA2F,wFAAwF,2FAA2F,oEAAoE,mEAAmE,2FAA2F,wFAAwF,uFAAuF,oEAAoE,kEAAkE,2FAA2F,wFAAwF,sFAAsF,oEAAoE,wEAAwE,2FAA2F,wFAAwF,4FAA4F,oEAAoE,wEAAwE,2FAA2F,wFAAwF,0GAA0G,+BAA+B,uLAAuL,0DAA0D,iEAAiE,wCAAwC,sFAAsF,0DAA0D,mEAAmE,qCAAqC,4FAA4F,0DAA0D,+DAA+D,mCAAmC,oGAAoG,0DAA0D,2DAA2D,iCAAiC,6IAA6I,4FAA4F,iCAAiC,4GAA4G,0DAA0D,sEAAsE,kCAAkC,4FAA4F,0DAA0D,uEAAuE,kCAAkC,+EAA+E,0DAA0D,wBAAwB,qEAAqE,mCAAmC,kHAAkH,0DAA0D,yEAAyE,mCAAmC,mHAAmH,0DAA0D,6EAA6E,uCAAuC,uGAAuG,0DAA0D,qEAAqE,iCAAiC,4FAA4F,0DAA0D,kEAAkE,6BAA6B,gEAAgE,0DAA0D,sEAAsE,8BAA8B,gEAAgE,0DAA0D,oEAAoE,8BAA8B,gEAAgE,0DAA0D,6EAA6E,kCAAkC,oEAAoE,0DAA0D,8DAA8D,+BAA+B,gEAAgE,0DAA0D,yEAAyE,+BAA+B,gEAAgE,0DAA0D,uEAAuE,mCAAmC,gEAAgE,0DAA0D,2EAA2E,6BAA6B,gEAAgE,0DAA0D,iEAAiE,kCAAkC,6EAA6E,0DAA0D,6BAA6B,mFAAmF,yCAAyC,0EAA0E,0DAA0D,uEAAuE,sCAAsC,sFAAsF,0DAA0D,sEAAsE,qCAAqC,sEAAsE,0DAA0D,qEAAqE,oCAAoC,qEAAqE,0DAA0D,kEAAkE,oCAAoC,0IAA0I,0BAA0B,0DAA0D,sEAAsE,0CAA0C,uFAAuF,0DAA0D,2EAA2E,0CAA0C,uFAAuF,0DAA0D,mEAAmE,kCAAkC,sGAAsG,0DAA0D,4EAA4E,2CAA2C,yFAAyF,0DAA0D,sEAAsE,qCAAqC,qFAAqF,0DAA0D,iEAAiE,gCAAgC,yGAAyG,0DAA0D,yEAAyE,wCAAwC,wFAAwF,0DAA0D,4DAA4D,sCAAsC,+PAA+P,0DAA0D,sDAAsD,gCAAgC,mHAAmH,iFAAiF,8BAA8B,4DAA4D,0DAA0D,+CAA+C,yEAAyE,0CAA0C,4EAA4E,8BAA8B,6GAA6G,0FAA0F,+BAA+B,+IAA+I,wFAAwF,uCAAuC,4IAA4I,gHAAgH,4CAA4C,+DAA+D;AAC/lrC;AACA,iBAAiB,gCAAmB;AACpC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;AAKA;;AAEA;AACA,uBAAuB,gCAAmB;AAC1C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;AAKA;;AAEA,CAAC;;;;AAID;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;;AAYD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA,IAAI;;AAEJ;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,EAAE;;AAEF;AACA,gBAAgB,gCAAmB;AACnC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;AAKA;;AAEA,CAAC;AACD;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;;AAEvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,mBAAmB;AACnB;AACA;AACA,aAAa;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA,kCAAkC,wBAAwB;AAC1D,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,uBAAuB;AAC3D;AACA,sCAAsC,wBAAwB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,YAAY;;AAEZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,kCAAkC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,8BAA8B,0BAA0B;AACxD;AACA;AACA;AACA;AACA,oCAAoC,yEAAyE;AAC7G;AACA;AACA,8BAA8B,+BAA+B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,+BAA+B;AAC/D;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,aAAa;AACb,YAAY;;AAEZ;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,wBAAwB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA,8BAA8B,6BAA6B;AAC3D;AACA;AACA;AACA,8BAA8B,2BAA2B;AACzD;AACA;AACA;AACA;AACA,8BAA8B,wBAAwB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,0BAA0B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB,eAAe;AACf;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0BAA0B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB,eAAe;AACf;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,eAAe;AACf,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kBAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,mBAAmB;AACzC;AACA;;AAEA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA,UAAU,OAAO;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;;AAEF;;AAEA;AACA,mBAAmB,gCAAmB;AACtC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;AAKA;;AAEA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AAWA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;;AAEA;AACA,iEAAiE;AACjE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU,iEAAiE;AAC3E;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;;AAEhC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,kBAAkB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,0BAA0B,qCAAqC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA,aAAa;AACb;AACA;AACA;AACA,0BAA0B,qCAAqC;AAC/D;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb,WAAW;AACX;;AAEA;AACA;AACA;AACA,0BAA0B,oBAAoB;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,0BAA0B,qBAAqB;AAC/C;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA,UAAU;;AAEV;AACA,0BAA0B,2BAA2B;AACrD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;;AAEA,kBAAkB,WAAW;;AAE7B,8EAA8E,WAAW;AACzF;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,UAAU;;AAEV;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;;AAEV;AACA;AACA;AACA;AACA;;AAEA,YAAY;;AAEZ;;AAEA;AACA,sCAAsC,2CAA2C;;AAEjF;AACA;AACA,QAAQ;;AAER;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;;AAEX;AACA,QAAQ;AACR,uDAAuD;AACvD,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,IAAI;AACJ,CAAC,GAAG;AACJ;;AAEA;AACA;AACA;AACA;;AAEA,0BAAmB,GAAG,0BAAmB;AACzC,iBAAiB,0BAAmB;AACpC,UAAU;AACV;AACA,CAAC;AACD,wC;;;;;;;;;;;;;;;AC78IA;AAC6G;AACjB;AAC5F,8BAA8B,mFAA2B,CAAC,4FAAqC;AAC/F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,6FAA6F,aAAa,MAAM,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,YAAY,WAAW,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,wHAAwH,0BAA0B,GAAG,aAAa,gCAAgC,qCAAqC,yCAAyC,kBAAkB,2BAA2B,eAAe,GAAG,YAAY,qBAAqB,gCAAgC,GAAG,2BAA2B,qBAAqB,gCAAgC,qCAAqC,yCAAyC,GAAG,mBAAmB,6BAA6B,mCAAmC,qBAAqB,0CAA0C,qCAAqC,sDAAsD,sCAAsC,GAAG,qBAAqB;AAC/vC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC5CvC;AAC6G;AACjB;AAC5F,8BAA8B,mFAA2B,CAAC,4FAAqC;AAC/F;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,mGAAmG,cAAc,MAAM,YAAY,wJAAwJ,qBAAqB,GAAG,qBAAqB;AAC/U;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACbvC;AAC6G;AACjB;AAC5F,8BAA8B,mFAA2B,CAAC,4FAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,8FAA8F,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,UAAU,YAAY,aAAa,aAAa,WAAW,UAAU,UAAU,YAAY,WAAW,UAAU,UAAU,UAAU,MAAM,KAAK,KAAK,UAAU,UAAU,UAAU,YAAY,OAAO,KAAK,wBAAwB,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,MAAM,MAAM,KAAK,KAAK,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,MAAM,MAAM,UAAU,YAAY,WAAW,KAAK,MAAM,KAAK,UAAU,YAAY,aAAa,aAAa,WAAW,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,WAAW,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,aAAa,aAAa,WAAW,MAAM,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,WAAW,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,aAAa,WAAW,UAAU,YAAY,cAAc,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,WAAW,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,UAAU,UAAU,YAAY,WAAW,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,OAAO,KAAK,YAAY,aAAa,WAAW,UAAU,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,YAAY,aAAa,WAAW,UAAU,YAAY,aAAa,WAAW,MAAM,KAAK,YAAY,aAAa,aAAa,MAAM,KAAK,YAAY,WAAW,UAAU,YAAY,WAAW,UAAU,YAAY,WAAW,UAAU,MAAM,KAAK,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,WAAW,UAAU,YAAY,aAAa,aAAa,WAAW,UAAU,UAAU,UAAU,YAAY,aAAa,WAAW,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,aAAa,aAAa,WAAW,MAAM,KAAK,YAAY,WAAW,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,YAAY,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,UAAU,YAAY,aAAa,WAAW,YAAY,WAAW,UAAU,YAAY,WAAW,UAAU,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,MAAM,MAAM,YAAY,aAAa,aAAa,WAAW,UAA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;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,kGAAkG,cAAc,MAAM,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,MAAM,YAAY,aAAa,aAAa,mGAAmG,gBAAgB,8BAA8B,qCAAqC,sBAAsB,GAAG,yBAAyB,qBAAqB,+BAA+B,qBAAqB,6BAA6B,GAAG,qCAAqC,iDAAiD,qBAAqB,qBAAqB,GAAG,qBAAqB;AACxwB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC9BvC;AAC6G;AACjB;AAC5F,8BAA8B,mFAA2B,CAAC,4FAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AAC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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,mBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC;AACxC;AACA,OAAO,mGAAmG,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,MAAM,MAAM,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,OAAO,MAAM,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,KAAK,KAAK,UAAU,MAAM,YAAY,uB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1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sFAAsF,qBAAqB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,iDAAiD,qBAAqB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sDAAsD,qBAAqB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;ACpFa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,cAAc;AACrE;AACA;AACA;AACA;AACA,E;;;;;;;;ACfa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;;AAGA;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;ACnKA,mBAAmB,mBAAO,CAAC,IAAe;;AAE1C,eAAe,mBAAO,CAAC,GAAe;AACtC,uBAAuB,mBAAO,CAAC,IAAmB;AAClD,oBAAoB,mBAAO,CAAC,IAAuB;;AAEnD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA,yBAAc;AACd,yBAAgB;AAChB,yBAAiB;;AAEjB;AACA,gBAAgB;AAChB;AACA,CAAC;;;;;;;;AC3ED;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,yCAAgC;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,uBAAuB;AACvB;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,kBAAkB;AACpC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gFAAgF;AAChF;AACA;AACA;AACA,2BAA2B,uBAAuB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,oBAAoB;AACpB;AACA;AACA;;AAEA,kBAAkB,eAAe;AACjC,oBAAoB,eAAe;AACnC;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;AClFA,aAAa,mBAAO,CAAC,GAAQ;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;AC1DA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA,oBAAoB,YAAY;AAChC;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;ACpCA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,SAAS;AACrB,YAAY,SAAS;AACrB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;;;;;;;;AChEA,aAAa,mBAAO,CAAC,GAAQ;;AAE7B;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;;AAEA;;;;;;;;AC7BA,gBAAgB,mBAAO,CAAC,IAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,6BAA6B;AACzC;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,6BAA6B;AACzC;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtIA,SAAS,KAAK;AACd,SAAS,KAAK;AACd,SAAS,KAAK;AACd,SAAS,KAAK;;AAEd;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,eAAe;AACf;AACA;AACA;;AAEA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;ACjDA,sBAAsB,yCAAgC;AACtD;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,oBAAoB;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrBA,cAAc,mBAAO,CAAC,IAAS;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,6BAA6B;AACzC;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,CAAC;AACD;AACA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,oBAAoB,SAAS;AAC7B;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA,WAAW;AACX;;AAEA;AACA,WAAW;AACX;AACA;;;;;;;;ACpEA,aAAa,mBAAO,CAAC,GAAQ;AAC7B,cAAc,mBAAO,CAAC,IAAS;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc,sBAAsB;AACpC;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;ACrDA;AACA;AACA,UAAU;AACV;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,SAAS;AACrB,YAAY,iBAAiB;AAC7B;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,eAAe;AAC3B,YAAY,4BAA4B;AACxC;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,YAAY;AAChC;AACA;;AAEA,sBAAsB,YAAY;AAClC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA,oBAAoB,gBAAgB;AACpC,sBAAsB,gBAAgB;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA,oBAAoB,YAAY;AAChC;AACA,sBAAsB,YAAY;AAClC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA,kBAAkB,kBAAkB;;AAEpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,oBAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB;AACA,iBAAiB;AACjB;;AAEA,oBAAoB,YAAY;AAChC,sBAAsB,YAAY;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,QAAQ;AACpB;AACA,mBAAmB;AACnB;AACA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;ACzOA,qBAAqB,mBAAO,CAAC,IAAiB;AAC9C,cAAc,mBAAO,CAAC,IAAS;;AAE/B;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,SAAS;AACtB;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,aAAa;AACzB,YAAY,aAAa;AACzB,YAAY,0BAA0B;AACtC;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;ACtKA,aAAa,mBAAO,CAAC,GAAQ;;AAE7B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;AC1CA,WAAW,mBAAO,CAAC,IAAgB;;AAEnC;AACA;AACA;AACA,YAAY,YAAY;AACxB,YAAY,YAAY;AACxB,YAAY,eAAe;AAC3B;AACA,WAAW;AACX;;AAEA,kBAAkB,eAAe;AACjC,oBAAoB,eAAe;AACnC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,YAAY;AACxB,YAAY,YAAY;AACxB,YAAY,qBAAqB;AACjC;AACA,WAAW;AACX;;AAEA;AACA;;AAEA,oBAAoB,oBAAoB;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,eAAe;AAC3B;AACA,4BAA4B;AAC5B;AACA,kBAAkB,YAAY;AAC9B;AACA;;AAEA;AACA;;;;;;;;AC7DA,cAAc,mBAAO,CAAC,IAAS;AAC/B,gBAAgB,mBAAO,CAAC,IAA0B;AAClD,kBAAkB,mBAAO,CAAC,IAAc;AACxC,kBAAkB,mBAAO,CAAC,IAAc;AACxC,yBAAyB,mBAAO,CAAC,IAAqB;AACtD,sBAAsB,mBAAO,CAAC,IAAkB;AAChD,oBAAoB,mBAAO,CAAC,IAAgB;AAC5C,eAAe,mBAAO,CAAC,IAAyB;AAChD,2BAA2B,mBAAO,CAAC,IAAwB;AAC3D,gBAAgB,mBAAO,CAAC,IAAW;AACnC,mBAAmB,mBAAO,CAAC,IAAe;AAC1C,aAAa,mBAAO,CAAC,GAAQ;AAC7B,iBAAiB,mBAAO,CAAC,IAAY;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA,qBAAqB,QAAQ;AAC7B;;AAEA,uBAAuB,QAAQ;AAC/B;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA,YAAY,WAAW;AACvB;AACA;AACA;;AAEA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB;AACA;AACA;;AAEA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA,qBAAqB,QAAQ;AAC7B,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,yBAAyB;AACrC,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA,cAAc,QAAQ;AACtB;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,YAAY;AACxB,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,SAAS;AACpC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY,wBAAwB;AACpC,YAAY,UAAU;AACtB,YAAY,+BAA+B;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,sBAAsB;AAClC,YAAY,gCAAgC;AAC5C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,iBAAiB;AAC/B,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,aAAa;AAC3B,gBAAgB,mBAAmB;AACnC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,qBAAqB;AACjC,YAAY,aAAa;AACzB,YAAY,6BAA6B;AACzC;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,gEAAgE;AAChE;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;AC9eA,mBAAmB,mBAAO,CAAC,IAAc;;AAEzC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,YAAY;AACxB,YAAY,iBAAiB;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,aAAa;AACb,kBAAkB;AAClB,YAAY;AACZ,eAAe;AACf,oBAAoB;;AAEpB;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA;;AAEA,mBAAmB;AACnB;AACA;;AAEA,wBAAwB;AACxB;AACA;;;;;;;;AC9BA,aAAa,mBAAO,CAAC,GAAQ;AAC7B,oBAAoB,mBAAO,CAAC,IAAgB;AAC5C,yBAAyB,mBAAO,CAAC,IAAqB;AACtD,iBAAiB,mBAAO,CAAC,IAAa;AACtC,kBAAkB,mBAAO,CAAC,IAAc;AACxC,cAAc,mBAAO,CAAC,IAAS;AAC/B,cAAc,mBAAO,CAAC,IAAS;AAC/B,iBAAiB,mBAAO,CAAC,IAAY;;AAErC;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,YAAY;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,aAAa;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,MAAM;AAClB,YAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,YAAY;AACxB;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;;AAEA;AACA;AACA;AACA,YAAY,6DAA6D;AACzE,YAAY;AACZ;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,kBAAkB,kBAAkB;AACpC;AACA;;AAEA,oBAAoB,sBAAsB;AAC1C;AACA;;AAEA;AACA,qBAAqB;AACrB;;AAEA,sBAAsB,wBAAwB;AAC9C;;AAEA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,wBAAwB;AAC1C;AACA;;AAEA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,eAAe;AAC3B,YAAY,yBAAyB;AACrC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,aAAa;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB,qBAAqB;AACvC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,aAAa;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;;;;;;;ACzUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,+BAA+B;AAC/B;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,aAAa;AACzB;AACA,mBAAmB;AACnB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;;AAEA,0BAA0B;AAC1B;AACA;;AAEA,cAAc;AACd;AACA;;;;;;;;AC9DA;AACA;AACA;AACA,YAAY,SAAS;AACrB,YAAY,iBAAiB;AAC7B;AACA,eAAe;AACf;AACA;;;;;;;;ACRA,cAAc,mBAAO,CAAC,IAAS;AAC/B,eAAe,mBAAO,CAAC,IAAyB;AAChD,gBAAgB,mBAAO,CAAC,IAA0B;AAClD,aAAa,mBAAO,CAAC,GAAQ;AAC7B,qBAAqB,mBAAO,CAAC,IAAiB;;AAE9C;AACA;AACA;;AAEA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,eAAe;AAC3B,YAAY,eAAe;AAC3B,YAAY,4BAA4B;AACxC;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,6BAA6B;AACzC;AACA,mBAAmB;AACnB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,SAAS;AACrB,YAAY,QAAQ;AACpB,YAAY,MAAM;AAClB,YAAY,iCAAiC;AAC7C;AACA,6BAA6B;AAC7B;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,gBAAgB;AAC5B;AACA,sBAAsB;AACtB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;AClKA,cAAc,mBAAO,CAAC,IAAS;;AAE/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;;;;;;;AC9DA,cAAc,mBAAO,CAAC,IAAS;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;AChFA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,gBAAgB;AAClC,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClGa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,6DAA6D;AAC7I;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAkC;AAClE;AACA;AACA;AACA;AACA;AACA,+BAA+B,4FAA4F;AAC3H;AACA;AACA;AACA,sDAAsD,kBAAkB,aAAa;AACrF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,SAAS;AAC3C;AACA;AACA;AACA,cAAc;AACd,kCAAkC,SAAS;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,kDAAkD,UAAU;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,kDAAkD,4BAA4B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,kDAAkD,wBAAwB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,GAAG,iBAAiB,GAAG;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,cAAc,oBAAoB,iBAAiB;AAC3F,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,cAAc,oBAAoB,iBAAiB;AAC3F,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA,wCAAwC,cAAc,oBAAoB,iBAAiB;AAC3F,mCAAmC;AACnC;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,cAAc,oBAAoB,iBAAiB;AAC3F,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,oGAAoG;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,yFAAyF;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,GAAG;AACvC;AACA;AACA,wDAAwD,GAAG,iBAAiB,GAAG;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,GAAG;AAChC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,sDAAsD;AACtD;AACA;AACA;AACA;AACA,cAAc,uCAAuC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,KAA0B,2G;;;;;;;;ACheb;;AAEb;AACA;AACA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;ACnFa;;AAEb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kC;;;;;;;;ACjCa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oC;;;;;;;;ACTa;;AAEb;AACA;AACA,cAAc,KAAwC,GAAG,sBAAiB,GAAG,CAAI;AACjF;AACA;AACA;AACA;AACA,gD;;;;;;;;ACTa;;AAEb;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wB;;;;;;;;AC5Da;;AAEb;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,mC;;;;;;;ACbA,2BAA2B,SAAS,cAAc,4BAA4B,YAAY,q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B,KAAK;AACjC,gCAAgC,gCAAW;AAC3C;AACA,gDAAgD,KAAK;AACrD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,2DAA2D,KAAK;AAChE,YAAY,gCAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD,6BAA6B,gCAAW;AACxC;AACA,4CAA4C,KAAK;AACjD,gCAAgC,gCAAW;AAC3C;AACA,gDAAgD,KAAK;AACrD;AACA,aAAa;AACb;AACA;AACA;AACA,4C;;ACnE0C;AACD;AACzC;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,KAAK;AAC3D;AACA;AACA,sCAAsC,KAAK;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sCAAsC,KAAK;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,wBAAG,OAAO,KAAK;AAC7C;AACA;AACA;AACA,YAAY,gCAAW;AACvB;AACA;AACA,WAAW,gCAAW;AACtB;AACA,wC;;AC9DqC;AACI;AAClC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,KAAK;AACzD;AACA;AACA;AACA,kCAAkC,KAAK;AACvC,4BAA4B,gCAAW;AACvC;AACA;AACA,4CAA4C,KAAK;AACjD,SAAS;AACT;AACA;AACA,sC;;ACrByD;AACR;AACJ;AAC7C,iC;;ACHsC;AACO;AAC4B;AAClE;AACP,eAAe,UAAU;AACzB,mBAAmB,UAAU,EAAE,GAAG;AAClC,iCAAiC,UAAU,EAAE,GAAG;AAChD,6BAA6B,UAAU,EAAE,GAAG;AAC5C;AACA,QAAQ,uBAAE,CAAC,wBAAG,OAAO,wBAAG,qDAAqD,KAAK,iBAAiB,wBAAG;AACtG,QAAQ,uBAAE,CAAC,wBAAG,OAAO,EAAE,WAAW,wBAAG,QAAQ,wBAAG;AAChD,QAAQ,uBAAE,CAAC,wBAAG,OAAO,KAAK,oBAAoB,wBAAG,qBAAqB,wBAAG;AACzE,QAAQ,uBAAE,CAAC,wBAAG,OAAO,KAAK,gBAAgB,wBAAG,iBAAiB,wBAAG;AACjE;AACA;AACA;AACA;AACA;AACA,0BAA0B,wBAAwB,IAAI,oBAAoB;AAC1E;AACA;AACA,6C;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,yC;;ACjBA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,qC;;ACVmC;AACJ;AAC/B,iC;;ACFmC;AAC5B,YAAY,8BAAS;AACrB,cAAc,8BAAS;AACvB,YAAY,8BAAS;AACrB,YAAY,8BAAS;AAC5B,iC;;ACLqC;AACU;AAC/C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,KAAK;AACzD,YAAY,gCAAW;AACvB;AACA;AACA;AACA;AACA;AACA,4C;;AC9BqC;AACe;AACpD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,KAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,GAAG;AAC7B;AACA;AACA;AACA;AACA,YAAY,gCAAW;AACvB;AACA;AACA;AACA;AACA;AACA,wC;;ACpCqC;AACU;AAC/C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,KAAK;AACzD;AACA,iBAAiB,gCAAW;AAC5B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,gCAAgC,KAAK;AACrC;AACA;AACA;AACA,0C;;AC7ByD;AACR;AACI;AACrD,iC;;ACH6B;AACW;AACU;AAClD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wBAAG;AAC/B;AACA,6CAA6C,GAAG,UAAU,GAAG;AAC7D;AACA;AACA,yC;;ACrCmD;AACnD,iC;;ACDiC;AACmB;AACA;AACpD;AACA;AACA;AACA;AACA;AACA;AACO;AACP,6BAA6B,wBAAG,IAAI,mBAAmB,GAAG,UAAU,GAAG;AACvE;AACA;AACA;AACA;AACA,YAAY,uBAAE,mBAAmB,GAAG,UAAU,KAAK;AACnD,YAAY,uBAAE,mBAAmB,KAAK;AACtC,YAAY,uBAAE,mBAAmB,KAAK,cAAc,wBAAG;AACvD;AACA;AACA;AACA,kD;;ACrBqE;AACrE,iC;;ACD0C;AACP;AACD;AACW;AACP;AACtC,iC;;ACLsC;AACG;AACc;AAChD;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uBAAE,cAAc,KAAK;AAC7B,QAAQ,uBAAE,cAAc,KAAK,QAAQ,wBAAG;AACxC,QAAQ,uBAAE,cAAc,KAAK,QAAQ,wBAAG;AACxC,QAAQ,uBAAE,cAAc,GAAG,UAAU,KAAK;AAC1C;AACA;AACA,0BAA0B,wBAAG;AAC7B,wBAAwB,uBAAE,cAAc,KAAK,6CAA6C,uBAAE,YAAY,KAAK,WAAW,wBAAG;AAC3H;AACA;AACA,0BAA0B,wBAAG;AAC7B,wBAAwB,uBAAE,cAAc,KAAK,iDAAiD,uBAAE,YAAY,KAAK,WAAW,wBAAG;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4C;;AC9BiC;AACQ;AACc;AAChD;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uBAAE,YAAY,KAAK,QAAQ,wBAAG;AAC1C,YAAY,uBAAE,YAAY,KAAK,QAAQ,wBAAG;AAC1C,YAAY,uBAAE,YAAY,GAAG,UAAU,KAAK;AAC5C,YAAY,uBAAE,8BAA8B,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA,0C;;ACtBiC;AACQ;AAClC;AACP;AACA;AACA;AACA,YAAY,uBAAE,uBAAuB,KAAK;AAC1C,YAAY,uBAAE,2BAA2B,KAAK,QAAQ,wBAAG;AACzD;AACA;AACA;AACA;AACA;AACA,6C;;ACbiC;AACQ;AACgC;AAClE;AACP,eAAe,UAAU;AACzB,mBAAmB,sBAAsB,GAAG,GAAG;AAC/C;AACA;AACA;AACA,YAAY,uBAAE,cAAc,KAAK,cAAc,wBAAG;AAClD,YAAY,uBAAE,CAAC,wBAAG,OAAO,KAAK,WAAW,wBAAG;AAC5C;AACA;AACA;AACA;AACA;AACA,8C;;AChBiC;AACQ;AACgC;AAClE;AACP,eAAe,UAAU;AACzB,mBAAmB,sBAAsB,GAAG,GAAG;AAC/C;AACA;AACA;AACA,YAAY,uBAAE,cAAc,KAAK,kBAAkB,wBAAG;AACtD,YAAY,uBAAE,CAAC,wBAAG,OAAO,KAAK,WAAW,wBAAG;AAC5C;AACA;AACA;AACA;AACA;AACA,6C;;AChBiC;AACQ;AAClC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uBAAE,uBAAuB,KAAK;AAC1C,YAAY,uBAAE,2BAA2B,KAAK,QAAQ,wBAAG;AACzD;AACA;AACA;AACA;AACA,kD;;ACjB4B;AACa;AAClC;AACP;AACA;AACA;AACA;AACA;AACA,YAAY,uBAAE,cAAc,KAAK;AACjC;AACA;AACA;AACA;AACA,8C;;ACb4B;AACa;AAClC;AACP;AACA;AACA;AACA;AACA;AACA,YAAY,uBAAE,cAAc,KAAK;AACjC;AACA;AACA;AACA;AACA,6C;;ACbiC;AACQ;AAClC;AACP,4DAA4D,KAAK;AACjE,6CAA6C,uBAAE,2BAA2B,wBAAG;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,yC;;ACXiC;AACQ;AAClC;AACP,iDAAiD,KAAK;AACtD;AACA,WAAW,uBAAE,mBAAmB,KAAK;AACrC;AACA;AACA,QAAQ,uBAAE,mBAAmB,KAAK,WAAW,wBAAG;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8C;;AChBiC;AACQ;AAClC;AACP,gDAAgD,KAAK;AACrD;AACA,WAAW,uBAAE,kBAAkB,KAAK;AACpC;AACA;AACA,QAAQ,uBAAE,kBAAkB,KAAK,WAAW,wBAAG;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6C;;AChB2D;AACF;AACJ;AACM;AACE;AACF;AACU;AACR;AACF;AACR;AACU;AACF;AAC3D,iC;;ACZ6B;AACmD;AACmM;AAC1H;AACjH;AACxC,2BAA2B,KAAK;AACzB;AACP;AACA,2BAA2B,aAAa;AACxC;AACA;AACA;AACA;AACA;AACA,gCAAgC,wBAAG;AACnC;AACA,0BAA0B,gBAAgB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iCAAiC;AAC/D,0BAA0B,iBAAiB;AAC3C,cAAc,aAAa;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wBAAG;AAC/B;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;AACA,gEAAgE,WAAW;AAC3E;AACA,0BAA0B,sBAAsB;AAChD,cAAc,aAAa;AAC3B;AACA,6BAA6B,qCAAqC;AAClE;AACA;AACA;AACA;AACA;AACA,yDAAyD,wBAAG;AAC5D;AACA;AACA,mCAAmC,UAAU;AAC7C,8BAA8B,iBAAiB;AAC/C,mBAAmB,aAAa;AAChC,SAAS;AACT;AACA;AACA;AACA,gCAAgC,wBAAG;AACnC;AACA,0BAA0B,gBAAgB,KAAK,gBAAgB;AAC/D,cAAc,aAAa;AAC3B,mBAAmB,YAAY,aAAa,wBAAG;AAC/C;AACA;AACA,4BAA4B,wBAAG;AAC/B;AACA,0BAA0B,YAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2BAA2B;AACtD,gCAAgC,wBAAG;AACnC;AACA,0BAA0B,gBAAgB;AAC1C,0BAA0B,cAAc;AACxC,cAAc,aAAa;AAC3B;AACA;AACA;AACA,0BAA0B,wBAAG;AAC7B;AACA,0BAA0B,UAAU;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sBAAsB;AACpD,4BAA4B,wBAAG;AAC/B,0BAA0B,wBAAG;AAC7B;AACA,iCAAiC,YAAY;AAC7C,+BAA+B,UAAU;AACzC,0BAA0B,iBAAiB;AAC3C,cAAc,aAAa;AAC3B;AACA,mCAAmC,uBAAuB;AAC1D,4BAA4B,wBAAG;AAC/B,0BAA0B,wBAAG;AAC7B;AACA,iCAAiC,YAAY;AAC7C,+BAA+B,UAAU;AACzC,0BAA0B,sBAAsB;AAChD,cAAc,aAAa;AAC3B;AACA,8BAA8B,6BAA6B;AAC3D,4BAA4B,wBAAG;AAC/B,0BAA0B,iBAAiB;AAC3C,cAAc,aAAa;AAC3B;AACA;AACA,+BAA+B,8BAA8B;AAC7D,4BAA4B,wBAAG;AAC/B,0BAA0B,kBAAkB;AAC5C,cAAc,aAAa;AAC3B;AACA;AACA,8BAA8B,6BAA6B;AAC3D,4BAA4B,wBAAG;AAC/B,gCAAgC,wBAAG;AACnC;AACA,0BAA0B,iBAAiB;AAC3C,cAAc,aAAa;AAC3B;AACA,+BAA+B,8BAA8B;AAC7D,4BAA4B,wBAAG;AAC/B,iCAAiC,wBAAG;AACpC;AACA,0BAA0B,kBAAkB;AAC5C,cAAc,aAAa;AAC3B;AACA,8BAA8B,iCAAiC;AAC/D,gCAAgC,wBAAG;AACnC;AACA,0BAA0B,iBAAiB;AAC3C,cAAc,aAAa;AAC3B;AACA,+BAA+B,mCAAmC;AAClE,iCAAiC,wBAAG;AACpC;AACA,0BAA0B,kBAAkB;AAC5C,cAAc,aAAa;AAC3B;AACA;AACA,4BAA4B,wBAAG;AAC/B;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,gBAAgB;AACrD;AACA;AACA,0BAA0B,qBAAqB;AAC/C,4BAA4B,wBAAG;AAC/B;AACA,0BAA0B,aAAa;AACvC,cAAc,aAAa;AAC3B;AACA;AACA,gD;;AC5MwE;AACxE,2CAAe,oBAAoB,EAAC;AACpC,iC;;ACF+C;AAEZ;AAED;AAGV;AAC4J;AAIpK;AACiB;AACqC;AACb;AAEzD,IAAI,mCAAe,GAAmB,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;AAEvE,MAAM,sBAAsB,GAAG,KAAK,EAClC,OAAkB,EAClB,OAA2B,EACF,EAAE;IAE3B,mCAAe,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAmB;IACxE,mCAAe,CAAC,YAAY,CAAC,IAAI,EAAE,kCAAkC,CAAC;IACtE,mCAAe,CAAC,YAAY,CAAC,OAAO,EAAE,6DAA6D,CAAC;IACpG,mCAAe,CAAC,YAAY,CAAC,iBAAiB,EAAE,wCAAwC,CAAC;IACzF,mCAAe,CAAC,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC;IAErD,kDAAkD;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;IAC/C,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,wCAAwC,CAAC;IACpE,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC;IACxC,OAAO,CAAC,WAAW,GAAG,iCAAiC;IACvD,mCAAe,CAAC,WAAW,CAAC,OAAO,CAAC;IAEpC,MAAM,MAAM,GAAG,MAAM,+BAA+B,CAAC,OAAO,EAAE,OAAO,CAAC;IACtE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,EAAE,aAAa,EAAE,qBAAqB,CAAC;IAC1E,mCAAe,CAAC,WAAW,CAAC,MAAM,CAAC;IACnC,OAAO,CAAI,IAAG,mCAAe,EAAE;AACjC,CAAC;AAED,MAAM,+BAA+B,GAAG,KAAK,EAC3C,OAAkB,EAClB,OAA2B,EACC,EAAE;IAC9B,MAAM,EAAE,GAAG,0BAAK,CAAC,WAAW,EAAE;IAE9B,IAAI,gBAAgB,GAAG,IAAI;IAC3B,IAAI,WAAW,GAAG,IAAI;IACtB,MAAM,KAAK,GAAc,OAAO,CAAC,OAAO,CAAC,KAAK;IAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;IAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;IAC7B,MAAM,cAAc,GAAG,IAAI,IAAoB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAC,CAAC;IAE3E,IAAI,CAAC;QACH,gBAAgB,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC;QACrE,WAAW,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC;IACxC,CAAC;IACD,SAAS,gBAAgB,CAAC,KAAK;QAC7B,KAAK,CAAC,cAAc,EAAE;QACtB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,CAAC;aAC/D,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,oBAAoB,CAAC,mCAAe,CAAC;YACrC,QAAQ,CAAC,mCAAe,EAAE,OAAO,EAAE,KAAK,CAAC;QAC3C,CAAC,CAAC;IACN,CAAC;IACD,IAAI,KAAK,GAAG,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,kCAAkC,CAAC,WAAW,EAAE;IACvI,MAAM,MAAM,GAAG,oBAAO,CAAC,MAAM,CAC3B,OAAO,CAAC,GAAG,EACX,SAAS,EACT,KAAK,EACL,gBAAgB,EAAE,gCAAgC;IAClD;QACE,WAAW,EAAE,IAAI;KAClB,CACF;IACD,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACnD,MAAM,CAAC,OAAO,GAAG,aAAa,EAAE;IAEhC,SAAS,aAAa;QACpB,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7B,MAAM,oBAAoB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,gBAAgB,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;YACrH,MAAM,mBAAmB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK;YAClH,IAAI,oBAAoB,EAAE,CAAC;gBACzB,sDAAsD;gBACtD,MAAM,CAAC,SAAS,GAAG,8BAA8B,CAAC,WAAW,EAAE;gBAC/D,MAAM,CAAC,OAAO,GAAG,IAAI;gBACrB,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC;YACzC,CAAC;iBAAM,IAAI,mBAAmB,EAAE,CAAC;gBAC/B,MAAM,CAAC,SAAS,GAAG,oCAAoC,CAAC,WAAW,EAAE;YACvE,CAAC;iBACM,CAAC;gBACN,yCAAyC;gBACzC,MAAM,CAAC,SAAS,GAAG,6BAA6B,CAAC,WAAW,EAAE;YAChE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,eAAe;YACf,MAAM,CAAC,SAAS,GAAG,kCAAkC,CAAC,WAAW,EAAE;QACrE,CAAC;IACH,CAAC;IACH,OAAO,MAAM;AACf,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,OAAkB,EAClB,OAA2B,EAC3B,cAAoC,EACpC,gBAAkC;IAElC,MAAM,EAAE,GAAG,0BAAK,CAAC,WAAW,EAAE;IAC9B,MAAM,KAAK,GAAc,OAAO,CAAC,OAAO,CAAC,KAAK;IAEhD,2DAA2D;IACzD,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,2BAA2B,CAAC,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACpE,2CAA2C;YAC3C,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,WAAW,GAAgB,MAAM,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;gBACrE,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC;gBAC7F,IAAI,sBAAsB,EAAE,CAAC;oBAC3B,MAAM,yBAAyB,CAAC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,CAAC,KAAK,EAAE,sBAAsB,CAAC;gBACvH,CAAC;qBAAM,CAAC;oBACN,MAAM,uBAAuB,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,mCAAe,CAAC;gBACxG,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,YAAY,GAAG,KAAK;gBACxB,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;oBACrD,YAAY,GAAG,2BAA2B;gBAC5C,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC;YAC/B,CAAC;QACH,CAAC;;YACM,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;IAC9C,CAAC;;QAAM,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;AACrD,CAAC;AAMA;;;AChJ8C;AAEf;AACA;AACa;AAI7C,SAAS,QAAQ,CAAC,GAAW;IAC3B,8BAA8B;IAC9B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAC3B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI;IACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;IAC7B,OAAO;QACL,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG;QACpB,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG;QACnB,CAAC,EAAE,GAAG,GAAG,GAAG;KACb;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAuC;IACjE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,CAAC,IAAI,GAAG;QACR,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC;IACtE,CAAC,CAAC;IACF,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,IAAY;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC;IAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;IACpC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;AAC9C,CAAC;AAEM,MAAM,qBAAU,GAAG,CACxB,cAAsB,EACtB,eAAuB,EACvB,OAAkB,EACF,EAAE;IAClB,MAAM,EAAE,GAAG,cAAc,IAAI,SAAS;IACtC,MAAM,EAAE,GAAG,eAAe,IAAI,SAAS;IACvC,MAAM,IAAI,GAAG,kBAAK,CAAC,KAAK,CAAC,OAAO,CAAC;IAEjC,uBAAuB;IACvB,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC;IACnC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAEhB,OAAO,CAAC,IAAI,CACV,0DAA0D,EAAE,0BAA0B,EAAE,QAAQ,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6EAA6E,CAC9L;IACH,CAAC;IAED,MAAM,KAAK,GAAG,iBAAiB;IAC/B,MAAM,GAAG,GAAG,eAAe;IAC3B,MAAM,EAAE,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM;IAChC,MAAM,GAAG,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,KAAK;IACxC,MAAM,QAAQ,GAAG,iBAAiB;IAElC,mFAAmF;IACnF,4FAA4F;IAC5F,kGAAkG;IAClG,8BAA8B;IAC9B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAC;QAChE,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC;YACzD,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC;YAC5C,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;gBAE7B,OAAO,CAAC,IAAI,CAAC,mHAAmH,CAAC;YACnI,CAAC;QACH,CAAC;aAAM,CAAC;YAEN,OAAO,CAAC,IAAI,CAAC,mJAAmJ,CAAC;QACnK,CAAC;IACH,CAAC,EAAE,CAAC,CAAC;IAEL,MAAM,KAAK,GAAW,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ;IAEvD,yGAAyG;IAGzG,OAAO,CAAI;;;oBAGO,KAAK;wBACD,EAAE;yBACD,EAAE;;;;;;;wEAO6C,IAAI;;;;;;;;UAQlE,mBAAmB;;;;;;oEAMuC,IAAI,2BAA2B,OAAO,CAAC,GAAG;;;GAG3G;AACH,CAAC;;;ACxHuC;AACP;AAE2B;AACE;AAGrB;AAElC,MAAM,uBAAW,GAAG,KAAK,EAAE,EAChC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAC7D,EAAE,OAA2B,EAAE,OAAkB,EAAE,EAAE;IAEzE,OAAO,CAAI;;8CAEiC,IAAI;;UAExC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;;;;UAIrB,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,CAAC;UAC/B,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC;UAChC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,CAAC;;;;UAI9B,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC;;;;UAIvC,MAAM,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC;;;;UAI9C,qBAAU,CAAC,cAAc,EAAE,eAAe,EAAE,OAAO,CAAC;;;GAG3D;AACH,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,SAA0B,CAAO,EAAE,QAAgB,EAAE,EAAE,EAAE,CAC5E,KAAK,CAAC,CAAC,CAAC,CAAI;uCACyB,KAAK,CAAC,CAAC,CAAC,eAAe,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE;QAC7E,MAAM,IAAI,KAAK;;GAEpB,CAAC,CAAC,CAAC,CAAO;AAEb,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CACzB,GAAG;IACD,CAAC,CAAC,CAAI;;;gBAGM,GAAG;kCACe,GAAG;;;;;OAK9B;IACH,CAAC,CAAC,CAAI;wDAC8C,GAAG;YAC/C,GAAG;;OAER;;;AChEwB;AAEH;AAErB,MAAM,aAAM,GAAG,CACpB,MAAsB,EACtB,EAAE;IACF,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM;IAEjD,MAAM,cAAc,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE;IACtD,MAAM,eAAe,GAAG,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE;IACxD,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE;IAClD,MAAM,SAAS,GAAG,MAAM,IAAI,EAAE;IAC9B,MAAM,YAAY,GAAG,SAAS,IAAI,EAAE;IAEpC,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;IAChF,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;IACnF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;IAC1E,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;IAClE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;IAE3E,IAAI,CAAC,CAAC,aAAa,IAAI,cAAc,IAAI,WAAW,IAAI,SAAS,IAAI,YAAY,CAAC;QAAE,OAAO,CAAI,GAAE;IAEjG,OAAO,CAAI;;QAEL,aAAa,CAAC,CAAC,CAAC,CAAI;;;;cAId,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC;;;OAGxC,CAAC,CAAC,CAAC,EAAE;;QAEJ,cAAc,CAAC,CAAC,CAAC,CAAI;;;;cAIf,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC;;;OAGzC,CAAC,CAAC,CAAC,EAAE;;QAEJ,WAAW,CAAC,CAAC,CAAC,CAAI;;;;cAIZ,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC;;;OAGtC,CAAC,CAAC,CAAC,EAAE;;QAEJ,SAAS,CAAC,CAAC,CAAC,CAAI;;;;cAIV,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC;;;OAGpC,CAAC,CAAC,CAAC,EAAE;;QAEJ,YAAY,CAAC,CAAC,CAAC,CAAI;;;;cAIb,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC;;;OAG1C,CAAC,CAAC,CAAC,EAAE;;GAET;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IACtC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAI,GAAE;IACxB,OAAO,MAAM;QACX,CAAC,CAAC,CAAI;;0DAEgD,IAAI,CAAC,OAAO;wCAC9B,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;+CACtB,IAAI,CAAC,KAAK;YAC7C;QACR,CAAC,CAAC,CAAI,GAAE;AACZ,CAAC;AAED,SAAS,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK;IACxC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,CAAI,GAAE;IACvD,OAAO,CAAI,IAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAI,GAAE,EAAE;AAChH,CAAC;AAED,SAAS,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,CAAI,GAAE;IACzB,OAAO,MAAM;QACX,CAAC,CAAC,CAAI,wBAAuB,cAAc,CAAC,KAAK,CAAC,OAAO;QACzD,CAAC,CAAC,CAAI,GAAE;AACZ,CAAC;AAED,SAAS,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK;IAC1C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAAE,OAAO,CAAI,GAAE;IAC1D,OAAO,CAAI,IAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAI,GAAE,EAAE;AACrH,CAAC;AAED,SAAS,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK;IACzC,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAI,GAAE;IAC5B,OAAO,MAAM;QACX,CAAC,CAAC,CAAI,2BAA0B,QAAQ,OAAO;QAC/C,CAAC,CAAC,CAAI,GAAE;AACZ,CAAC;AAED,SAAS,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK;IAChD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,CAAI,GAAE;IACnE,OAAO,CAAI,IAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAI,GAAE,EAAE;AAC/H,CAAC;AAED,SAAS,cAAc,CAAC,GAAG;IACzB,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;gBAC7C,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B,CAAC;IACD,OAAO,EAAE;AACX,CAAC;;;AC5H8C;AAEf;AAGzB,MAAM,qBAAU,GAAG,CACxB,UAA8B,EACd,EAAE;IAElB,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU;IAE/B,IAAG,QAAQ,CAAC,MAAM,EAAC,CAAC;QAElB,OAAO,CAAI;;;;;;;;cAQD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;;;;KAIxD;IACH,CAAC;IAED,SAAS,aAAa,CAAC,OAAO;QAC5B,OAAO,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;YACrD,CAAC,CAAC,CAAI;;;sBAGU,OAAO,CAAC,QAAQ;;;kCAGJ,OAAO,CAAC,IAAI;;;;uBAIvB,OAAO,CAAC,IAAI;uBACZ,OAAO,CAAC,IAAI;;;;;iDAKc,OAAO,CAAC,IAAI;;;SAGpD;YACH,CAAC,CAAC,CAAI,GAAE;IACZ,CAAC;AAEH,CAAC;;;ACrD8C;AAGb;AACH;AAIxB,MAAM,mBAAS,GAAG,CAAC,aAAkC,EAC1D,OAA2B,EAC3B,OAAkB,EAAE,SAAS,EAAkB,EAAE;IACjD,MAAM,EAAE,KAAK,EAAE,GAAI,SAAS;IAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,QAAQ;IACnC,OAAO,CAAI;;;;;;;;;;;;mEAYsD,aAAa,CAAC,IAAI;;cAEvE,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC;;;;;GAKnC;AACH,CAAC;AAEM,SAAS,gBAAgB,CAAE,KAAK,EAAE,GAAG;IAC1C,MAAM,OAAO,GAAG,EAAE;IAClB,+EAA+E;IAC/E,MAAM,GAAG,GAAG,oBAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;IAChE,OAAO,GAAG;AACZ,CAAC;AAEM,SAAS,WAAW,CAAE,KAAK,EAAE,GAAG;IACrC,OAAO,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC;AACrC,CAAC;AAEM,SAAS,YAAY,CAAC,MAAM,EAAE,GAAG;IACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAI,GAAE;IACtC,OAAO,CAAI,IAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAI,GAAE,EAAE;AAC/G,CAAC;;;ACjD8C;AAGd;AACQ;AACA;AACG;AACH,CAAC,WAAW;AACJ,CAAC,WAAW;AACd,CAAC,WAAW;AAChB;AACV;AACQ;AACF;AAOvB;AAEhB,8CAA8C;AAC9C;;;;;;;;;EASE;AAEK,KAAK,UAAU,uBAAW,CAC/B,OAAkB,EAClB,OAA2B;IAE3B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAkB;IAEhD,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC;IACpD,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC;IAC7C,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC;IAC9C,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC;IAE7C,OAAO,CAAI;;;;0DAI6C,aAAa,CAAC,eAAe,SAAS,aAAa,CAAC,cAAc;;gCAE5F,aAAa,CAAC,IAAI;;;;;;;;;;;wDAWM,aAAa,CAAC,IAAI;;UAEhE,MAAM,uBAAW,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC;;;QAGpD,CAAC,GAAG,EAAE;QACN,MAAM,EAAE,GAAG,aAAM,CAAC,WAAW,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAI;;;;;;;;kDAQzB,iBAAiB;;;gBAGnD,EAAE;;;SAGT,CAAC,CAAC,CAAC,EAAE;IACR,CAAC,CAAC,EAAE;;QAEF,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAI;;;;;;;;oDAQZ,yBAAyB;;;cAG/D,qBAAU,CAAC,QAAQ,CAAC;;;OAG3B,CAAC,CAAC,CAAC,EAAE;;QAEJ,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAI;;;;;;;;mDAQT,sBAAsB;;;cAG3D,mBAAS,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;;;OAG5D,CAAC,CAAC,CAAC,EAAE;;QAEJ,CAAC,GAAG,EAAE;QACN,MAAM,OAAO,GAAG,qBAAU,CAAC,OAAO,EAAE,OAAO,CAAC;QAC5C,OAAO,OAAO,CAAC,CAAC,CAAC,CAAI;;;;;;;;uDAQ0B,kBAAkB;;;gBAGzD,OAAO;;;SAGd,CAAC,CAAC,CAAC,EAAE;IACR,CAAC,CAAC,EAAE;;;;;;;;;gDASsC,kBAAkB;;;YAGtD,qBAAU,CAAC,OAAO,EAAE,OAAO,CAAC;;;;GAIrC;AACH,CAAC;;;ACtJuD;AAEjD,SAAS,mBAAmB,CAAC,OAA2B,EAAE,EAAa;IAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;IACpD,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;IACvE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,EAAE,cAAc,CAAC;IAErE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC;IAClD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,GAAG,8BAA8B;IAC3C,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;IACtC,OAAO,CAAC,WAAW,GAAG,6BAA6B;IACnD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;IAC3B,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;IAE3B,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAEpD,OAAO,OAAO;AAChB,CAAC;AAED,SAAS,OAAO,CACd,OAA2B,EAC3B,OAAkB,EAClB,QAAgB;IAEhB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;QAChD,OAAO,CAAC,SAAS,GAAG,wBAAwB,QAAQ,EAAE;QACtD,OAAO,OAAO;IAChB,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;IAEnD,8BAA8B;IAC9B,IAAI,SAAsB;IAE1B,IAAI,aAAa,IAAI,OAAO,aAAa,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QACtE,+BAA+B;QAC/B,SAAS,GAAG,aAA4B;IAC1C,CAAC;SAAM,IAAI,aAAa,IAAI,aAAa,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;QACtE,uDAAuD;QACvD,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;QAChD,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,2BAA2B;QAC3B,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;QAChD,SAAS,CAAC,SAAS,GAAG,gDAAgD,QAAQ,EAAE;IAClF,CAAC;IAED,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IACxC,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,QAAQ,UAAU,CAAC;IAC3D,OAAO,SAAS;AAClB,CAAC;;;ACrDqC;AACO;AAEtC,SAAS,kBAAkB,CAAC,OAA2B,EAAE,EAAa,EAAE,eAAiC,EAAE,OAAkB;IAClI,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;IACpD,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;IACvE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC;IAErD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC;IAClD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC;IAE5C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,GAAG,8BAA8B;IAC3C,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;IACtC,OAAO,CAAC,WAAW,GAAG,kBAAkB;IAExC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;IAC3B,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;IAE3B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC;IAC/C,QAAQ,CAAC,EAAE,GAAG,kCAAkC;IAChD,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,GAAG,sLAAsL;IAC7M,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAE7B,IAAI,QAAQ,GAAgC,IAAI;IAChD,IAAI,eAAe,EAAE,CAAC;QACpB,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC;QACzC,QAAQ,CAAC,EAAE,GAAG,2BAA2B;QACzC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QAC9B,QAAQ,CAAC,WAAW,GAAG,kDAAkD;QACzE,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED,MAAM,cAAc,GAAG,oBAAO,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE;QACtE,GAAG,EAAE,OAAO;QACZ,MAAM,EAAE,CAAC,CAAC,eAAe;QACzB,SAAS,EAAE,eAAE,CAAC,IAAI,CAAC,OAAO,CAAC;QAC3B,IAAI,EAAE,QAAQ;KACf,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClC,IAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,EAAE,EAAE,CAAC;QACjB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAChC,CAAC;IACD,cAAc,CAAC,YAAY,CAAC,kBAAkB,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvE,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC;IAEnC,OAAO,OAAO;AAChB,CAAC;;;ACjDwD;AACf;AACU;AAEpD,MAAM,kCAAmB,GAAG,iBAAiB,EAAC,4BAA4B;AAEnE,SAAS,iBAAiB,CAAC,OAA2B,EAAE,EAAa,EAAE,eAAiC,EAAE,KAAY;IAC3H,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;IACpD,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,qBAAqB,CAAC;IAC1D,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;IACtE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,EAAE,cAAc,CAAC;IAErE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC;IAClD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC;IAE5C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,GAAG,6BAA6B;IAC1C,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;IACtC,OAAO,CAAC,WAAW,GAAG,yBAAyB;IAE/C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;IAC3B,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;IAE3B,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC;QAC/C,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QAC9B,QAAQ,CAAC,WAAW,GAAG,+FAA+F;QACtH,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC;QAC/C,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QAC9B,QAAQ,CAAC,WAAW,GAAG,qDAAqD;QAC5E,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,2BAAe,EAAE,kCAAmB,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC;IAElG,OAAO,OAAO;AAChB,CAAC;;;ACtCqC;AACW;AAE1C,SAAS,6BAA6B,CAAC,OAA2B,EAAE,EAAa,EAAE,eAAiC,EAAE,OAAkB;IAC7I,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;IACpD,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;IAC3E,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC;IAErD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC;IAClD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC;IAE5C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,GAAG,kCAAkC;IAC/C,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;IACtC,OAAO,CAAC,WAAW,GAAG,sBAAsB;IAC5C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;IAC3B,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;IAE3B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC;IAC/C,QAAQ,CAAC,EAAE,GAAG,sCAAsC;IACpD,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,GAAG,4DAA4D;IACnF,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAE7B,IAAI,QAAQ,GAAgC,IAAI;IAChD,IAAI,eAAe,EAAE,CAAC;QACpB,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC;QACzC,QAAQ,CAAC,EAAE,GAAG,+BAA+B;QAC7C,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QAC9B,QAAQ,CAAC,WAAW,GAAG,gEAAgE;QACvF,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED,MAAM,cAAc,GAAG,oBAAO,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE;QACtE,GAAG,EAAE,OAAO;QACZ,MAAM,EAAE,CAAC,CAAC,eAAe;QACzB,SAAS,EAAE,eAAE,CAAC,KAAK,CAAC,WAAW,CAAC;QAChC,IAAI,EAAE,WAAW;KAClB,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClC,IAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,EAAE,EAAE,CAAC;QACjB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAChC,CAAC;IACD,cAAc,CAAC,YAAY,CAAC,kBAAkB,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvE,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC;IAEnC,OAAO,OAAO;AAChB,CAAC;;;;;;ACjDD,MAAkG;AAClG,MAAwF;AACxF,MAA+F;AAC/F,MAAkH;AAClH,MAA2G;AAC3G,MAA2G;AAC3G,MAAiH;AACjH;AACA;;AAEA,IAAI,wBAAO;;AAEX,wBAAO,qBAAqB,6BAAmB;AAC/C,wBAAO,iBAAiB,0CAAa;AACrC,wBAAO,UAAU,+BAAa;AAC9B,wBAAO,UAAU,uBAAM;AACvB,wBAAO,sBAAsB,8BAAkB;;AAE/C,IAAI,uBAAM,GAAG,kCAAG,CAAC,+BAAO,EAAE,wBAAO;;;;AAIkD;AACnF,OAAO,8DAAe,+BAAO,IAAI,+BAAO,UAAU,+BAAO,mBAAmB,EAAC;;;;;ACtB1B;AACT;AACE;AAE5C,MAAM,cAAc,GAAG,gBAAgB,EAAC,4BAA4B;AAE7D,SAAS,aAAa,CAAC,OAA2B,EAAE,EAAa,EAAE,eAAiC,EAAE,KAAY;IACvH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;IACpD,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,iBAAiB,CAAC;IACtD,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;IAClE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,EAAE,cAAc,CAAC;IAErE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC;IAClD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC;IAE5C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,GAAG,yBAAyB;IACtC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;IACtC,OAAO,CAAC,WAAW,GAAG,iBAAiB;IAEvC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;IAC3B,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;IAE3B,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC;QAC/C,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QAC9B,QAAQ,CAAC,WAAW,GAAG,mEAAmE;QAC1F,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC;QAC/C,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QAC9B,QAAQ,CAAC,WAAW,GAAG,kDAAkD;QACzE,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,0BAAU,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC;IAExF,OAAO,OAAO;AAChB,CAAC;;;;;ACtCsE;AAC7B;AACY;AAEtD,MAAM,wBAAwB,GAAG,0BAA0B,EAAC,4BAA4B;AAEjF,SAAS,2BAA2B,CAAC,OAA2B,EAAE,EAAa,EAAE,eAAiC,EAAE,KAAY;IACrI,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;IACpD,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,gCAAgC,CAAC;IACrE,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,wCAAwC,CAAC;IACjF,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,EAAE,cAAc,CAAC;IAErE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC;IAClD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC;IAE5C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,GAAG,wCAAwC;IACrD,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;IACtC,OAAO,CAAC,WAAW,GAAG,2BAA2B;IAEjD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;IAC3B,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;IAE3B,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,oCAAoB,EAAE,wBAAwB,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC;IAE5G,OAAO,OAAO;AAChB,CAAC;;;AC5BD;;;;;;;;GAQG;AAIiD;AACI;AACF;AACF;AACiB;AACrC;AACO;AACK;AACwB;AAEpE,MAAM,eAAe,GAAmB;IACtC,MAAM,EAAE,IAAI;IAEZ,IAAI,EAAE,kBAAK,CAAC,QAAQ,GAAG,iBAAiB;IAExC,IAAI,EAAE,aAAa;IAEnB,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,uDAAuD;IAE1E,MAAM,EAAE,UAAU,OAAO,EAAE,OAAO;QAChC,kFAAkF;QAClF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAc;QAE5C,2DAA2D;QAC3D,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;QACxC,GAAG,CAAC,YAAY,CAAC,aAAa,EAAE,gBAAgB,CAAC;QACjD,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;QAClC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,mBAAmB,CAAC;QACnD,IAAI,eAAiC;QAErC,0EAA0E;QAC1E,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,2BAA2B,CAAC;QACpD,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC;QACnD,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;QAC3C,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC5C,WAAW,CAAC,WAAW,GAAG,cAAc;QACxC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;QAC7B,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;QAErB,kCAAkC;QAClC,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC;QAC7C,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QAChC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;QACzC,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC;QAC9C,UAAU,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;QAC9C,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;gBAC5B,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG;YACrB,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,IAAI;YACT,UAAU,EAAE,UAAU;YACtB,EAAE,EAAE,IAAI;SACT;QAED,kBAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC;aACtC,IAAI,CAAC,UAAU,CAAC,EAAE;YACjB,MAAM,EAAE,GAAG,UAAU,CAAC,EAAG;YAEzB,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;YACzC,CAAC;YACD,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,eAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;gBAC/C,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,eAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAc;YAC3E,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;gBACtD,eAAe,GAAG,OAAO;YAC3B,CAAC;iBAAM,CAAC;gBACN,gBAAgB,EAAE;gBAClB,UAAU,CAAC,WAAW,CAAC,oBAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,OAAO,8CAA8C,EAAE,OAAO,CAAC,CAAC;gBACzI,OAAM;YACR,CAAC;YAED,wDAAwD;YACxD,mCAAmC;YACnC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAElD,iBAAiB;YACjB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;YAEpE,0BAA0B;YAC1B,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;YAGxE,4BAA4B;YAC5B,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;YAElF,0BAA0B;YAC1B,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;YAE3E,yCAAyC;YACzC,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;YAEtF,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC;YACvC,IAAI,CAAC,KAAK,EAAE;QAEd,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACf,gBAAgB,EAAE;YAClB,UAAU,CAAC,WAAW,CAAC,oBAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YACrE,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC;QACzC,CAAC,CAAC;QACJ,OAAO,GAAG;IACZ,CAAC;CACF;AAED,sDAAe,eAAe;;;;;AC3HF;AACI;AACA;AACC;AACA;AACD;AACA;AACD;AACA;AAEE;AACU;AACoB;AAC3B;AACJ;AAEhC,KAAK,UAAU,mBAAmB,CAAC,KAAgB,EAAE,OAAkB;IACrE,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAC9B,OAAO,EACP,eAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAClB,IAAI,EACJ,OAAO,CAAC,GAAG,EAAE,CACM;IACrB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;IACzC,CAAC;AACH,CAAC;AAGD,MAAM,IAAI,GAAG;IACX,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,kBAAK,CAAC,QAAQ,GAAG,gBAAgB;IACvC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,UACL,OAAkB,EAClB,OAA2B;QAE3B,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;QAErD,IACE,CAAC,CAAC,eAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC;YAC7B,CAAC,CAAC,eAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;YACxB,CAAC,CAAC,eAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAC1B,CAAC;YACD,OAAO,SAAS;QAClB,CAAC;QACD,OAAO,IAAI;IACb,CAAC;IACD,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,CAAC,OAAkB,EAAE,OAA2B,EAAe,EAAE;QACvE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK;QAEnC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAClD,CAAM,CAAC,MAAM,uBAAW,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC;YACnD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,EAAC,kBAAkB;YACzF,IAAI,CAAC,UAAU,CAAC,MAAM;gBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC;YAClE,KAAK,MAAM,aAAa,IAAI,UAA2B,EAAE,CAAC;gBACxD,MAAM,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC;gBACtD,IAAI,CAAC,KAAK;oBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC;gBAC7D,MAAM,cAAc,GAAG,aAAa,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,SAAS;gBAChF,MAAM,eAAe,GAAG,aAAa,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,SAAS;gBAClF,0GAA0G;gBAE1G,MAAM,OAAO,GAAG;oBACd,IAAI,EAAE,KAAK;oBACX,KAAK,EAAE;wBACL,IAAI,EAAE,cAAc;wBACpB,KAAK,EAAE,eAAe;qBACvB;iBACF;gBAED,gBAAe,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,KAAK,EAAE,GAAG;oBAClD,IAAI,KAAK,EAAE,CAAC;wBACV,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC;oBACvC,CAAC;yBAAM,CAAC;wBACN,uCAAuC;wBACvC,aAAa,CAAC,SAAS,GAAG,GAAG;wBAC7B,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;wBACjC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;wBAClC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;oBACpC,CAAC;gBACH,CAAC,CAAC;YAEJ,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,MAAM;IACf,CAAC;CACF;AAED,0CAAe,IAAI","sources":["webpack://ProfilePane/webpack/universalModuleDefinition","webpack://ProfilePane/./node_modules/contacts-pane/dist/contactsPane.js","webpack://ProfilePane/./src/styles/CVCard.css","webpack://ProfilePane/./src/styles/ChatWithMe.css","webpack://ProfilePane/./src/styles/ContactsCard.css","webpack://ProfilePane/./src/styles/FriendList.css","webpack://ProfilePane/./src/styles/ProfileCard.css","webpack://ProfilePane/./src/styles/ProfileView.css","webpack://ProfilePane/./src/styles/QRCodeCard.css","webpack://ProfilePane/./src/styles/SocialCard.css","webpack://ProfilePane/./src/styles/StuffCard.css","webpack://ProfilePane/./src/styles/rdfFormsEnforced.css","webpack://ProfilePane/./src/styles/utilities.css","webpack://ProfilePane/./node_modules/css-loader/dist/runtime/api.js","webpack://ProfilePane/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://ProfilePane/./node_modules/dijkstrajs/dijkstra.js","webpack://ProfilePane/./node_modules/qrcode/lib/browser.js","webpack://ProfilePane/./node_modules/qrcode/lib/can-promise.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/alignment-pattern.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/alphanumeric-data.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/bit-buffer.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/bit-matrix.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/byte-data.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/error-correction-code.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/error-correction-level.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/finder-pattern.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/format-info.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/galois-field.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/kanji-data.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/mask-pattern.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/mode.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/numeric-data.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/polynomial.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/qrcode.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/reed-solomon-encoder.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/regex.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/segments.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/utils.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/version-check.js","webpack://ProfilePane/./node_modules/qrcode/lib/core/version.js","webpack://ProfilePane/./node_modules/qrcode/lib/renderer/canvas.js","webpack://ProfilePane/./node_modules/qrcode/lib/renderer/svg-tag.js","webpack://ProfilePane/./node_modules/qrcode/lib/renderer/utils.js","webpack://ProfilePane/./node_modules/short-unique-id/dist/short-unique-id.js","webpack://ProfilePane/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://ProfilePane/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://ProfilePane/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://ProfilePane/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://ProfilePane/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://ProfilePane/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://ProfilePane/./node_modules/validate-color/lib/index.js","webpack://ProfilePane/external umd \"SolidLogic\"","webpack://ProfilePane/external umd \"UI\"","webpack://ProfilePane/external umd \"rdflib\"","webpack://ProfilePane/webpack/bootstrap","webpack://ProfilePane/webpack/runtime/compat get default export","webpack://ProfilePane/webpack/runtime/define property getters","webpack://ProfilePane/webpack/runtime/hasOwnProperty shorthand","webpack://ProfilePane/webpack/runtime/nonce","webpack://ProfilePane/./src/styles/CVCard.css?991d","webpack://ProfilePane/./src/styles/ChatWithMe.css?2963","webpack://ProfilePane/./src/styles/FriendList.css?4665","webpack://ProfilePane/./src/styles/ProfileCard.css?4c2f","webpack://ProfilePane/./src/styles/ProfileView.css?48de","webpack://ProfilePane/./src/styles/QRCodeCard.css?9d8e","webpack://ProfilePane/./src/styles/SocialCard.css?9a5c","webpack://ProfilePane/./src/styles/StuffCard.css?8d30","webpack://ProfilePane/./src/styles/utilities.css?4cc3","webpack://ProfilePane/./node_modules/lit-html/lit-html.js","webpack://ProfilePane/./node_modules/lit-html/directive-helpers.js","webpack://ProfilePane/./node_modules/lit-html/directive.js","webpack://ProfilePane/./node_modules/lit-html/async-directive.js","webpack://ProfilePane/./node_modules/lit-html/directives/private-async-helpers.js","webpack://ProfilePane/./node_modules/lit-html/directives/async-replace.js","webpack://ProfilePane/./src/texts.ts","webpack://ProfilePane/./src/buttonsHelper.ts","webpack://ProfilePane/./src/ChatWithMe.ts","webpack://ProfilePane/./src/FriendList.ts","webpack://ProfilePane/./src/presenter.ts","webpack://ProfilePane/./src/CVPresenter.ts","webpack://ProfilePane/./src/rdfFormsHelper.ts","webpack://ProfilePane/./src/SocialPresenter.ts","webpack://ProfilePane/./src/StuffPresenter.ts","webpack://ProfilePane/./src/addMeToYourFriends.ts","webpack://ProfilePane/./src/contactsErrors.ts","webpack://ProfilePane/./src/ContactsCard.ts","webpack://ProfilePane/./src/styles/ContactsCard.css?ad98","webpack://ProfilePane/./src/contactsHelpers.ts","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/namespaces.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/identifier/generate-id.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/identifier/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/queries/AddressBookQuery.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/queries/ContactQuery.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/queries/GroupQuery.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/queries/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/createAddressBook.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/web-operations/executeUpdate.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/web-operations/fetchNode.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/web-operations/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/namespaces/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/queries/PreferencesQuery.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/queries/ProfileQuery.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/queries/TypeIndexQuery.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/queries/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/module/ModuleSupport.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/module/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/update-operations/addInstanceToTypeIndex.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/update-operations/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/rdflib-utils/dist/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/createNewContact.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/createNewGroup.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/addContactToGroup.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/addNewEmailAddress.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/addNewPhoneNumber.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/removeContactFromGroup.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/removeEmailAddress.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/removePhoneNumber.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/renameContact.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/updateEmailAddress.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/updatePhoneNumber.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/update-operations/index.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/rdflib/ContactsModuleRdfLib.js","webpack://ProfilePane/./node_modules/@solid-data-modules/contacts-rdflib/dist/index.js","webpack://ProfilePane/./src/addMeToYourContacts.ts","webpack://ProfilePane/./src/QRCodeCard.ts","webpack://ProfilePane/./src/ProfileCard.ts","webpack://ProfilePane/./src/CVCard.ts","webpack://ProfilePane/./src/SocialCard.ts","webpack://ProfilePane/./src/StuffCard.ts","webpack://ProfilePane/./src/ProfileView.ts","webpack://ProfilePane/./src/editProfilePane/EditContactsCard.ts","webpack://ProfilePane/./src/editProfilePane/EditFriendsCard.ts","webpack://ProfilePane/./src/editProfilePane/EditSocialCard.ts","webpack://ProfilePane/./src/editProfilePane/EditCommunitiesCard.ts","webpack://ProfilePane/./src/styles/rdfFormsEnforced.css?8628","webpack://ProfilePane/./src/editProfilePane/EditCVCard.ts","webpack://ProfilePane/./src/editProfilePane/EditOtherPreferences.ts","webpack://ProfilePane/./src/editProfilePane/EditProfileView.ts","webpack://ProfilePane/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"UI\"), require(\"SolidLogic\"), require(\"rdflib\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"UI\", \"SolidLogic\", \"rdflib\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ProfilePane\"] = factory(require(\"UI\"), require(\"SolidLogic\"), require(\"rdflib\"));\n\telse\n\t\troot[\"ProfilePane\"] = factory(root[\"UI\"], root[\"SolidLogic\"], root[\"rdflib\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE__9426__, __WEBPACK_EXTERNAL_MODULE__5663__, __WEBPACK_EXTERNAL_MODULE__5491__) => {\nreturn ","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"solid-logic\"), require(\"solid-ui\"), require(\"rdflib\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"solid-logic\", \"solid-ui\", \"rdflib\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ContactsPane\"] = factory(require(\"solid-logic\"), require(\"solid-ui\"), require(\"rdflib\"));\n\telse\n\t\troot[\"ContactsPane\"] = factory(root[\"SolidLogic\"], root[\"UI\"], root[\"$rdf\"]);\n})(globalThis, (__WEBPACK_EXTERNAL_MODULE__941__, __WEBPACK_EXTERNAL_MODULE__104__, __WEBPACK_EXTERNAL_MODULE__53__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 903\n(module, __webpack_exports__, __webpack_require__) {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* Visually hidden utility for accessibility */\n.visually-hidden {\n position: absolute !important;\n height: 1px; width: 1px;\n overflow: hidden;\n clip: rect(1px, 1px, 1px, 1px);\n white-space: nowrap;\n border: 0;\n padding: 0;\n margin: -1px;\n}\n\n/* Focus indicator for keyboard navigation */\n.personRow:focus, .dataCell:focus, tr[tabindex=\"0\"]:focus {\n outline: 2px solid #1976d2;\n outline-offset: 2px;\n background: #e3f2fd;\n}\n/* contactsPane styles — extracted from inline styles in contactsPane.js */\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\n\n/* ── Layout: Three-column browser ────────────────────────────── */\n\n.contactPane .bookTable {\n border-collapse: collapse;\n margin-right: 0;\n max-height: 9in;\n}\n\n.contactPane .groupsHeader {\n min-width: 10em;\n padding-bottom: 0.2em;\n}\n\n.contactPane .peopleHeader {\n min-width: 18em;\n}\n\n.contactPane .peopleMain {\n overflow: scroll;\n}\n\n.contactPane .cardMain {\n margin: 0;\n}\n\n.contactPane .groupsMain,\n.contactPane .groupsFooter {\n padding: 0.1em;\n}\n\n/* ── Search ──────────────────────────────────────────────────── */\n\n.contactPane .searchInput {\n border: 0.1em solid var(--color-text-muted);\n border-radius: var(--border-radius-base);\n width: 100%;\n font-size: var(--font-size-base);\n padding: 0.1em 0.6em;\n margin: 0.2em;\n}\n\n/* ── Data cells ──────────────────────────────────────────────── */\n\n.contactPane .dataCell {\n padding: 0.1em;\n}\n\n/* ── Rendered sub-pane ───────────────────────────────────────── */\n\n.contactPane .renderPane {\n border: 0.1em solid var(--color-text-muted);\n border-radius: var(--border-radius-base);\n}\n\n/* ── Delete button ───────────────────────────────────────────── */\n\n.contactPane .deleteButton {\n height: 2em;\n}\n\n/* ── Sharing button & icon ───────────────────────────────────── */\n\n.contactPane .sharingButton {\n padding: var(--spacing-md);\n margin: var(--spacing-md);\n}\n\n.contactPane .sharingButtonIcon {\n width: var(--spacing-lg);\n height: var(--spacing-lg);\n}\n\n/* ── \"All\" groups button ─────────────────────────────────────── */\n\n.contactPane .allGroupsButton {\n margin-left: var(--spacing-md);\n font-size: var(--font-size-base);\n}\n\n.contactPane .allGroupsButton--loading {\n background-color: #ff8;\n}\n\n.contactPane .allGroupsButton--active {\n background-color: var(--color-text);\n color: var(--color-background);\n}\n\n.contactPane .allGroupsButton--loaded {\n background-color: #cfc;\n}\n\n/* ── Selection & visibility states ───────────────────────────── */\n\n.contactPane .selected {\n background-color: #cce;\n}\n\n.contactPane .group-loading {\n background-color: #ffe;\n}\n\n.contactPane .hidden {\n display: none;\n}\n\n/* ── Mint new address book ───────────────────────────────────── */\n\n.contactPane .claimSuccess {\n font-size: 140%;\n}\n\n.contactPane .addressBook-grid {\n max-width: max-content;\n\n}\n\n.contactPane .addressBookSection {\n width: 100%;\n max-width: 100%;\n box-sizing: border-box;\n margin-bottom: var(--spacing-md);\n box-sizing: border-box;\n margin-bottom: var(--spacing-md);\n}\n\n@media (min-width: 900px) {\n .contactPane .addressBookSection {\n margin-bottom: 0;\n }\n}\n\n/* Section Title - primary colored heading */\n.contactPane .section-title {\n font-size: 1.25em;\n font-weight: 600;\n color: var(--color-primary);\n margin: 0;\n}\n\n/* Card Section Background */\n.contactPane .section-bg {\n background: var(--color-section-bg);\n border-radius: var(--border-radius-full);\n box-shadow: var(--box-shadow);\n padding: var(--spacing-md);\n}\n\n.contactPane td {\n border: 1px dotted #999;\n}\n\n/* Primary Button */\n.btn-primary {\n min-height: var(--min-touch-target);\n padding: var(--spacing-sm) var(--spacing-md);\n border: 1px solid var(--color-primary);\n border-radius: var(--border-radius-base);\n background: var(--color-primary);\n color: white;\n font-weight: 600;\n cursor: pointer;\n transition: all var(--animation-duration) ease;\n}\n\n.btn-primary:hover {\n background: color-mix(in srgb, var(--color-primary) 90%, black);\n box-shadow: 0 2px 4px rgba(124, 77, 255, 0.2);\n}\n\n.btn-primary:active {\n box-shadow: 0 1px 2px rgba(124, 77, 255, 0.2);\n}\n\n.btn-primary:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n transform: none;\n}\n\n/* Secondary button */\n.btn-secondary {\n min-height: var(--min-touch-target);\n padding: var(--spacing-sm) var(--spacing-md);\n border: var(--border-width-thin) solid var(--color-secondary);\n border-radius: var(--border-radius-base);\n background: var(--color-secondary);\n color: var(--color-background);\n font-weight: var(--font-weight-bold);\n cursor: pointer;\n transition: all var(--animation-duration) ease;\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.btn-secondary:hover {\n background: color-mix(in srgb, var(--color-secondary) 85%, black);\n}\n\n.btn-secondary:disabled {\n opacity: var(--opacity-disabled);\n cursor: not-allowed;\n}\n\n/* Action Button Focus - used by ChatWithMe, ProfileCard */\n.action-button-focus:focus,\n.action-button-focus:focus-visible {\n outline: 3px solid var(--color-primary) !important;\n outline-offset: 2px !important;\n box-shadow: 0 0 0 2px var(--color-background), 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\n z-index: 1;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/contactsPane.css\"],\"names\":[],\"mappings\":\"AAAA,8CAA8C;AAC9C;EACE,6BAA6B;EAC7B,WAAW,EAAE,UAAU;EACvB,gBAAgB;EAChB,8BAA8B;EAC9B,mBAAmB;EACnB,SAAS;EACT,UAAU;EACV,YAAY;AACd;;AAEA,4CAA4C;AAC5C;EACE,0BAA0B;EAC1B,mBAAmB;EACnB,mBAAmB;AACrB;AACA,0EAA0E;AAC1E,qFAAqF;;AAErF,mEAAmE;;AAEnE;EACE,yBAAyB;EACzB,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,qBAAqB;AACvB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,SAAS;AACX;;AAEA;;EAEE,cAAc;AAChB;;AAEA,mEAAmE;;AAEnE;EACE,2CAA2C;EAC3C,wCAAwC;EACxC,WAAW;EACX,gCAAgC;EAChC,oBAAoB;EACpB,aAAa;AACf;;AAEA,mEAAmE;;AAEnE;EACE,cAAc;AAChB;;AAEA,mEAAmE;;AAEnE;EACE,2CAA2C;EAC3C,wCAAwC;AAC1C;;AAEA,mEAAmE;;AAEnE;EACE,WAAW;AACb;;AAEA,mEAAmE;;AAEnE;EACE,0BAA0B;EAC1B,yBAAyB;AAC3B;;AAEA;EACE,wBAAwB;EACxB,yBAAyB;AAC3B;;AAEA,mEAAmE;;AAEnE;EACE,8BAA8B;EAC9B,gCAAgC;AAClC;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,mCAAmC;EACnC,8BAA8B;AAChC;;AAEA;EACE,sBAAsB;AACxB;;AAEA,mEAAmE;;AAEnE;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,aAAa;AACf;;AAEA,mEAAmE;;AAEnE;EACE,eAAe;AACjB;;AAEA;EACE,sBAAsB;;AAExB;;AAEA;EACE,WAAW;EACX,eAAe;EACf,sBAAsB;EACtB,gCAAgC;EAChC,sBAAsB;EACtB,gCAAgC;AAClC;;AAEA;EACE;IACE,gBAAgB;EAClB;AACF;;AAEA,4CAA4C;AAC5C;EACE,iBAAiB;EACjB,gBAAgB;EAChB,2BAA2B;EAC3B,SAAS;AACX;;AAEA,4BAA4B;AAC5B;EACE,mCAAmC;EACnC,wCAAwC;EACxC,6BAA6B;EAC7B,0BAA0B;AAC5B;;AAEA;EACE,uBAAuB;AACzB;;AAEA,mBAAmB;AACnB;EACE,mCAAmC;EACnC,4CAA4C;EAC5C,sCAAsC;EACtC,wCAAwC;EACxC,gCAAgC;EAChC,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,8CAA8C;AAChD;;AAEA;EACE,+DAA+D;EAC/D,6CAA6C;AAC/C;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,YAAY;EACZ,mBAAmB;EACnB,eAAe;AACjB;;AAEA,qBAAqB;AACrB;EACE,mCAAmC;EACnC,4CAA4C;EAC5C,6DAA6D;EAC7D,wCAAwC;EACxC,kCAAkC;EAClC,8BAA8B;EAC9B,oCAAoC;EACpC,eAAe;EACf,8CAA8C;EAC9C,qBAAqB;EACrB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,iEAAiE;AACnE;;AAEA;EACE,gCAAgC;EAChC,mBAAmB;AACrB;;AAEA,0DAA0D;AAC1D;;EAEE,kDAAkD;EAClD,8BAA8B;EAC9B,4FAA4F;EAC5F,UAAU;AACZ\",\"sourcesContent\":[\"/* Visually hidden utility for accessibility */\\n.visually-hidden {\\n position: absolute !important;\\n height: 1px; width: 1px;\\n overflow: hidden;\\n clip: rect(1px, 1px, 1px, 1px);\\n white-space: nowrap;\\n border: 0;\\n padding: 0;\\n margin: -1px;\\n}\\n\\n/* Focus indicator for keyboard navigation */\\n.personRow:focus, .dataCell:focus, tr[tabindex=\\\"0\\\"]:focus {\\n outline: 2px solid #1976d2;\\n outline-offset: 2px;\\n background: #e3f2fd;\\n}\\n/* contactsPane styles — extracted from inline styles in contactsPane.js */\\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\\n\\n/* ── Layout: Three-column browser ────────────────────────────── */\\n\\n.contactPane .bookTable {\\n border-collapse: collapse;\\n margin-right: 0;\\n max-height: 9in;\\n}\\n\\n.contactPane .groupsHeader {\\n min-width: 10em;\\n padding-bottom: 0.2em;\\n}\\n\\n.contactPane .peopleHeader {\\n min-width: 18em;\\n}\\n\\n.contactPane .peopleMain {\\n overflow: scroll;\\n}\\n\\n.contactPane .cardMain {\\n margin: 0;\\n}\\n\\n.contactPane .groupsMain,\\n.contactPane .groupsFooter {\\n padding: 0.1em;\\n}\\n\\n/* ── Search ──────────────────────────────────────────────────── */\\n\\n.contactPane .searchInput {\\n border: 0.1em solid var(--color-text-muted);\\n border-radius: var(--border-radius-base);\\n width: 100%;\\n font-size: var(--font-size-base);\\n padding: 0.1em 0.6em;\\n margin: 0.2em;\\n}\\n\\n/* ── Data cells ──────────────────────────────────────────────── */\\n\\n.contactPane .dataCell {\\n padding: 0.1em;\\n}\\n\\n/* ── Rendered sub-pane ───────────────────────────────────────── */\\n\\n.contactPane .renderPane {\\n border: 0.1em solid var(--color-text-muted);\\n border-radius: var(--border-radius-base);\\n}\\n\\n/* ── Delete button ───────────────────────────────────────────── */\\n\\n.contactPane .deleteButton {\\n height: 2em;\\n}\\n\\n/* ── Sharing button & icon ───────────────────────────────────── */\\n\\n.contactPane .sharingButton {\\n padding: var(--spacing-md);\\n margin: var(--spacing-md);\\n}\\n\\n.contactPane .sharingButtonIcon {\\n width: var(--spacing-lg);\\n height: var(--spacing-lg);\\n}\\n\\n/* ── \\\"All\\\" groups button ─────────────────────────────────────── */\\n\\n.contactPane .allGroupsButton {\\n margin-left: var(--spacing-md);\\n font-size: var(--font-size-base);\\n}\\n\\n.contactPane .allGroupsButton--loading {\\n background-color: #ff8;\\n}\\n\\n.contactPane .allGroupsButton--active {\\n background-color: var(--color-text);\\n color: var(--color-background);\\n}\\n\\n.contactPane .allGroupsButton--loaded {\\n background-color: #cfc;\\n}\\n\\n/* ── Selection & visibility states ───────────────────────────── */\\n\\n.contactPane .selected {\\n background-color: #cce;\\n}\\n\\n.contactPane .group-loading {\\n background-color: #ffe;\\n}\\n\\n.contactPane .hidden {\\n display: none;\\n}\\n\\n/* ── Mint new address book ───────────────────────────────────── */\\n\\n.contactPane .claimSuccess {\\n font-size: 140%;\\n}\\n\\n.contactPane .addressBook-grid {\\n max-width: max-content;\\n\\n}\\n\\n.contactPane .addressBookSection {\\n width: 100%;\\n max-width: 100%;\\n box-sizing: border-box;\\n margin-bottom: var(--spacing-md);\\n box-sizing: border-box;\\n margin-bottom: var(--spacing-md);\\n}\\n\\n@media (min-width: 900px) {\\n .contactPane .addressBookSection {\\n margin-bottom: 0;\\n }\\n}\\n\\n/* Section Title - primary colored heading */\\n.contactPane .section-title {\\n font-size: 1.25em;\\n font-weight: 600;\\n color: var(--color-primary);\\n margin: 0;\\n}\\n\\n/* Card Section Background */\\n.contactPane .section-bg {\\n background: var(--color-section-bg);\\n border-radius: var(--border-radius-full);\\n box-shadow: var(--box-shadow);\\n padding: var(--spacing-md);\\n}\\n\\n.contactPane td {\\n border: 1px dotted #999;\\n}\\n\\n/* Primary Button */\\n.btn-primary {\\n min-height: var(--min-touch-target);\\n padding: var(--spacing-sm) var(--spacing-md);\\n border: 1px solid var(--color-primary);\\n border-radius: var(--border-radius-base);\\n background: var(--color-primary);\\n color: white;\\n font-weight: 600;\\n cursor: pointer;\\n transition: all var(--animation-duration) ease;\\n}\\n\\n.btn-primary:hover {\\n background: color-mix(in srgb, var(--color-primary) 90%, black);\\n box-shadow: 0 2px 4px rgba(124, 77, 255, 0.2);\\n}\\n\\n.btn-primary:active {\\n box-shadow: 0 1px 2px rgba(124, 77, 255, 0.2);\\n}\\n\\n.btn-primary:disabled {\\n opacity: 0.6;\\n cursor: not-allowed;\\n transform: none;\\n}\\n\\n/* Secondary button */\\n.btn-secondary {\\n min-height: var(--min-touch-target);\\n padding: var(--spacing-sm) var(--spacing-md);\\n border: var(--border-width-thin) solid var(--color-secondary);\\n border-radius: var(--border-radius-base);\\n background: var(--color-secondary);\\n color: var(--color-background);\\n font-weight: var(--font-weight-bold);\\n cursor: pointer;\\n transition: all var(--animation-duration) ease;\\n text-decoration: none;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.btn-secondary:hover {\\n background: color-mix(in srgb, var(--color-secondary) 85%, black);\\n}\\n\\n.btn-secondary:disabled {\\n opacity: var(--opacity-disabled);\\n cursor: not-allowed;\\n}\\n\\n/* Action Button Focus - used by ChatWithMe, ProfileCard */\\n.action-button-focus:focus,\\n.action-button-focus:focus-visible {\\n outline: 3px solid var(--color-primary) !important;\\n outline-offset: 2px !important;\\n box-shadow: 0 0 0 2px var(--color-background), 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\\n z-index: 1;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ },\n\n/***/ 479\n(module, __webpack_exports__, __webpack_require__) {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* individual.js styles — extracted from inline styles */\n\n/* ── Individual pane container ───────────────────────────────── */\n\n.contactPane .individualPane {\n padding: var(--spacing-xs) var(--spacing-lg) var(--spacing-md) var(--spacing-lg);\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/individual.css\"],\"names\":[],\"mappings\":\"AAAA,wDAAwD;;AAExD,mEAAmE;;AAEnE;EACE,gFAAgF;AAClF\",\"sourcesContent\":[\"/* individual.js styles — extracted from inline styles */\\n\\n/* ── Individual pane container ───────────────────────────────── */\\n\\n.contactPane .individualPane {\\n padding: var(--spacing-xs) var(--spacing-lg) var(--spacing-md) var(--spacing-lg);\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ },\n\n/***/ 715\n(module, __webpack_exports__, __webpack_require__) {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* mugshotGallery.js styles — extracted from inline styles */\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\n\n/* ── Mugshot image ───────────────────────────────────────────── */\n\n.contactPane .mugshotImage {\n max-height: 10em;\n border-radius: var(--border-radius-full);\n margin: 0.7em;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/mugshotGallery.css\"],\"names\":[],\"mappings\":\"AAAA,4DAA4D;AAC5D,qFAAqF;;AAErF,mEAAmE;;AAEnE;EACE,gBAAgB;EAChB,wCAAwC;EACxC,aAAa;AACf\",\"sourcesContent\":[\"/* mugshotGallery.js styles — extracted from inline styles */\\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\\n\\n/* ── Mugshot image ───────────────────────────────────────────── */\\n\\n.contactPane .mugshotImage {\\n max-height: 10em;\\n border-radius: var(--border-radius-full);\\n margin: 0.7em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ },\n\n/***/ 434\n(module, __webpack_exports__, __webpack_require__) {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* Solid-UI form */\n.individualPane .hoverControl:not(:has(> img:first-child)) {\n border: 0.1em solid rgb(136, 136, 136) !important;\n}\n\n.individualPane .hoverControl:has(> img:first-child) {\n background-color: transparent !important;\n border: none !important;\n margin: 0 !important;\n border-radius: 0 !important;\n padding: 0.7em !important;\n min-height: var(--min-touch-target);\n min-width: var(--min-touch-target);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.individualPane .hoverControlHide {\n width: 1.5em !important;\n height: 1.5em !important;\n display: block;\n margin-top: 0 !important;\n margin-left: 0 !important;\n margin-right: 0 !important;\n margin-bottom: 0.3em !important;\n}\n\n.individualPane .hoverControl:has(> img:first-child) > span {\n display: inline-flex;\n align-items: center;\n margin-left: 0.3em;\n}\n\n.individualPane div[style*=\"padding: 0.5em\"]:has(> img) {\n display: inline-flex;\n align-items: center;\n}\n\n.individualPane div[style*=\"padding: 0.5em\"]:has(> img) > span {\n margin-left: 0.3em;\n}\n\n.individualPane .hoverControl:has(> img:first-child):hover {\n background-color: transparent !important;\n}\n\n.individualPane button:has(> img[src\\$=\".svg\"]) {\n background-color: transparent !important;\n border: none !important;\n margin: 0 !important;\n border-radius: 0 !important;\n}\n\n.individualPane button {\n min-height: var(--min-touch-target);\n min-width: var(--min-touch-target);\n}\n\n.individualPane input:not([type=\"color\"]),\n.individualPane textarea,\n.individualPane select {\n max-width: 100%;\n min-width: 0;\n box-sizing: border-box ;\n font: inherit;\n color: var(--color-text);\n background-color: var(--color-card-bg) !important;\n border: 1px solid var(--color-border-pale);\n}\n\n.individualPane textarea {\n border-color: var(--color-border-pale) !important;\n margin: 0 !important;\n padding: 0 !important;\n}\n\n.individualPane input[type=\"date\"],\n.individualPane input[type=\"month\"],\n.individualPane input[type=\"week\"],\n.individualPane input[type=\"time\"],\n.individualPane input[type=\"datetime-local\"] {\n min-height: var(--min-touch-target);\n}\n\n.individualPane .hoverControl:has(> img:first-child):focus-visible,\n.individualPane button:focus-visible,\n.individualPane input:not([type=\"color\"]):focus-visible,\n.individualPane textarea:focus-visible,\n.individualPane select:focus-visible {\n outline: var(--focus-ring-width) solid var(--color-primary) !important;\n outline-offset: 2px;\n box-shadow: 0 0 0 1px var(--color-background);\n}\n\n.individualPane input[type=\"url\"] {\n width: 100%;\n}\n\n.individualPane .formFieldValue {\n min-width: 0;\n margin-bottom: var(--spacing-sm);\n}\n\n.individualPane .formFieldValue table {\n margin: 0 !important;\n padding: 0 !important;\n}\n\n.individualPane .formFieldValue td {\n padding: 0 !important;\n}\n\n.individualPane .formFieldValue input:not([type=\"color\"]),\n.individualPane .formFieldValue textarea,\n.individualPane .formFieldValue select {\n width: 100%;\n max-width: 100%;\n}\n\n.individualPane select#formSelect {\n width: 100%;\n max-width: 97%;\n box-sizing: border-box;\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.individualPane span select {\n max-width: 96% !important;\n box-sizing: border-box;\n margin: 0 !important;\n}\n\n.individualPane .formFieldValue span select {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n/* Remove border/padding from the first wrapper div (and its first child wrapper). */\n.individualPane > div:first-of-type,\n.individualPane > div:first-of-type > div:first-of-type {\n border: none !important;\n padding: 0 !important;\n}\n\n/* Align schema.org, solid terms, FOAF, vCard, and org field labels with their input values. */\n.individualPane :not(.choiceBox):has(> .formFieldName):has(> .formFieldValue) {\n display: flex;\n align-items: baseline;\n margin-bottom: var(--spacing-sm);\n}\n\n.individualPane :not(.choiceBox):has(> .formFieldName):has(> .formFieldValue) > .formFieldValue {\n margin-bottom: 0;\n}\n\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://schema.org/\"]),\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/solid/terms#\"]),\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://xmlns.com/foaf/0.1/\"]),\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/2006/vcard/ns\"]),\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/org#\"]) {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n}\n\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://schema.org/\"]) + .formFieldValue,\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/solid/terms#\"]) + .formFieldValue,\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://xmlns.com/foaf/0.1/\"]) + .formFieldValue,\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/2006/vcard/ns\"]) + .formFieldValue,\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/org#\"]) + .formFieldValue {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n flex: 1;\n min-width: 0;\n}\n\n.individualPane textarea,\n.individualPane .formFieldValue textarea {\n appearance: none;\n -webkit-appearance: none;\n border: .05em solid #88c !important;\n border-style: solid !important;\n border-width: .05em !important;\n border-color: #88c !important;\n border-radius: 0.2em !important;\n width: 100%;\n box-sizing: border-box;\n margin-top: var(--spacing-xs);\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n/* Center textarea label vertically in flex rows. */\n.individualPane div[style*=\"display: flex\"][style*=\"flex-direction: row\"]:has(textarea) {\n align-items: flex-start;\n}\n\n.individualPane div[style*=\"display: flex\"][style*=\"flex-direction: row\"]:has(textarea) > div:has(> a) {\n padding-left: var(--spacing-xs);\n}\n\n/* Keep autocomplete/table-based fields (e.g. Occupation) aligned to label text baseline. */\n.individualPane :not(.choiceBox):has(> .formFieldValue input[data-testid=\"autocomplete-input\"]) {\n align-items: flex-start;\n}\n\n.individualPane :not(.choiceBox):has(> .formFieldValue input[data-testid=\"autocomplete-input\"]) > .formFieldName {\n padding-top: 0.55em !important;\n}\n\n.individualPane .formFieldValue:has(input[data-testid=\"autocomplete-input\"]) {\n align-self: flex-start;\n}\n\n.individualPane .formFieldValue table[data-testid=\"autocomplete-table\"],\n.individualPane .formFieldValue input[data-testid=\"autocomplete-input\"] {\n margin: 0 !important;\n}\n\n.individualPane .formFieldValue table[data-testid=\"autocomplete-table\"] {\n vertical-align: baseline;\n}\n\n.individualPane input:not([type=\"color\"]) {\n width: 100%;\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.individualPane input:disabled,\n.individualPane textarea:disabled,\n.individualPane select:disabled,\n.individualPane input[readonly],\n.individualPane textarea[readonly],\n.individualPane input:read-only,\n.individualPane textarea:read-only {\n background-color: var(--color-background) !important;\n cursor: not-allowed;\n opacity: 0.75;\n border: 0.05em solid white !important;\n}\n\n.individualPane textarea,\n.individualPane .formFieldValue textarea {\n padding: 0.5em !important;\n}\n\n.webidControl table td div.contactPane.namedPane {\n border: none !important;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/rdfFormsEnforced.css\"],\"names\":[],\"mappings\":\"AAAA,kBAAkB;AAClB;EACE,iDAAiD;AACnD;;AAEA;EACE,wCAAwC;EACxC,uBAAuB;EACvB,oBAAoB;EACpB,2BAA2B;EAC3B,yBAAyB;EACzB,mCAAmC;EACnC,kCAAkC;EAClC,eAAe;EACf,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,uBAAuB;EACvB,wBAAwB;EACxB,cAAc;EACd,wBAAwB;EACxB,yBAAyB;EACzB,0BAA0B;EAC1B,+BAA+B;AACjC;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,wCAAwC;EACxC,uBAAuB;EACvB,oBAAoB;EACpB,2BAA2B;AAC7B;;AAEA;EACE,mCAAmC;EACnC,kCAAkC;AACpC;;AAEA;;;EAGE,eAAe;EACf,YAAY;EACZ,uBAAuB;EACvB,aAAa;EACb,wBAAwB;EACxB,iDAAiD;EACjD,0CAA0C;AAC5C;;AAEA;EACE,iDAAiD;EACjD,oBAAoB;EACpB,qBAAqB;AACvB;;AAEA;;;;;EAKE,mCAAmC;AACrC;;AAEA;;;;;EAKE,sEAAsE;EACtE,mBAAmB;EACnB,6CAA6C;AAC/C;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,YAAY;EACZ,gCAAgC;AAClC;;AAEA;EACE,oBAAoB;EACpB,qBAAqB;AACvB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;;;EAGE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,cAAc;EACd,sBAAsB;EACtB,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA;EACE,yBAAyB;EACzB,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA,oFAAoF;AACpF;;EAEE,uBAAuB;EACvB,qBAAqB;AACvB;;AAEA,8FAA8F;AAC9F;EACE,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;AAEA;EACE,gBAAgB;AAClB;;AAEA;;;;;EAKE,oBAAoB;EACpB,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA;;;;;EAKE,oBAAoB;EACpB,mBAAmB;EACnB,sBAAsB;EACtB,OAAO;EACP,YAAY;AACd;;AAEA;;EAEE,gBAAgB;EAChB,wBAAwB;EACxB,mCAAmC;EACnC,8BAA8B;EAC9B,8BAA8B;EAC9B,6BAA6B;EAC7B,+BAA+B;EAC/B,WAAW;EACX,sBAAsB;EACtB,6BAA6B;EAC7B,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA,mDAAmD;AACnD;EACE,uBAAuB;AACzB;;AAEA;EACE,+BAA+B;AACjC;;AAEA,2FAA2F;AAC3F;EACE,uBAAuB;AACzB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,sBAAsB;AACxB;;AAEA;;EAEE,oBAAoB;AACtB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,WAAW;EACX,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA;;;;;;;EAOE,oDAAoD;EACpD,mBAAmB;EACnB,aAAa;EACb,qCAAqC;AACvC;;AAEA;;EAEE,yBAAyB;AAC3B;;AAEA;EACE,uBAAuB;AACzB\",\"sourcesContent\":[\"/* Solid-UI form */\\n.individualPane .hoverControl:not(:has(> img:first-child)) {\\n border: 0.1em solid rgb(136, 136, 136) !important;\\n}\\n\\n.individualPane .hoverControl:has(> img:first-child) {\\n background-color: transparent !important;\\n border: none !important;\\n margin: 0 !important;\\n border-radius: 0 !important;\\n padding: 0.7em !important;\\n min-height: var(--min-touch-target);\\n min-width: var(--min-touch-target);\\n cursor: pointer;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.individualPane .hoverControlHide {\\n width: 1.5em !important;\\n height: 1.5em !important;\\n display: block;\\n margin-top: 0 !important;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n margin-bottom: 0.3em !important;\\n}\\n\\n.individualPane .hoverControl:has(> img:first-child) > span {\\n display: inline-flex;\\n align-items: center;\\n margin-left: 0.3em;\\n}\\n\\n.individualPane div[style*=\\\"padding: 0.5em\\\"]:has(> img) {\\n display: inline-flex;\\n align-items: center;\\n}\\n\\n.individualPane div[style*=\\\"padding: 0.5em\\\"]:has(> img) > span {\\n margin-left: 0.3em;\\n}\\n\\n.individualPane .hoverControl:has(> img:first-child):hover {\\n background-color: transparent !important;\\n}\\n\\n.individualPane button:has(> img[src$=\\\".svg\\\"]) {\\n background-color: transparent !important;\\n border: none !important;\\n margin: 0 !important;\\n border-radius: 0 !important;\\n}\\n\\n.individualPane button {\\n min-height: var(--min-touch-target);\\n min-width: var(--min-touch-target);\\n}\\n\\n.individualPane input:not([type=\\\"color\\\"]),\\n.individualPane textarea,\\n.individualPane select {\\n max-width: 100%;\\n min-width: 0;\\n box-sizing: border-box ;\\n font: inherit;\\n color: var(--color-text);\\n background-color: var(--color-card-bg) !important;\\n border: 1px solid var(--color-border-pale);\\n}\\n\\n.individualPane textarea {\\n border-color: var(--color-border-pale) !important;\\n margin: 0 !important;\\n padding: 0 !important;\\n}\\n\\n.individualPane input[type=\\\"date\\\"],\\n.individualPane input[type=\\\"month\\\"],\\n.individualPane input[type=\\\"week\\\"],\\n.individualPane input[type=\\\"time\\\"],\\n.individualPane input[type=\\\"datetime-local\\\"] {\\n min-height: var(--min-touch-target);\\n}\\n\\n.individualPane .hoverControl:has(> img:first-child):focus-visible,\\n.individualPane button:focus-visible,\\n.individualPane input:not([type=\\\"color\\\"]):focus-visible,\\n.individualPane textarea:focus-visible,\\n.individualPane select:focus-visible {\\n outline: var(--focus-ring-width) solid var(--color-primary) !important;\\n outline-offset: 2px;\\n box-shadow: 0 0 0 1px var(--color-background);\\n}\\n\\n.individualPane input[type=\\\"url\\\"] {\\n width: 100%;\\n}\\n\\n.individualPane .formFieldValue {\\n min-width: 0;\\n margin-bottom: var(--spacing-sm);\\n}\\n\\n.individualPane .formFieldValue table {\\n margin: 0 !important;\\n padding: 0 !important;\\n}\\n\\n.individualPane .formFieldValue td {\\n padding: 0 !important;\\n}\\n\\n.individualPane .formFieldValue input:not([type=\\\"color\\\"]),\\n.individualPane .formFieldValue textarea,\\n.individualPane .formFieldValue select {\\n width: 100%;\\n max-width: 100%;\\n}\\n\\n.individualPane select#formSelect {\\n width: 100%;\\n max-width: 97%;\\n box-sizing: border-box;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n.individualPane span select {\\n max-width: 96% !important;\\n box-sizing: border-box;\\n margin: 0 !important;\\n}\\n\\n.individualPane .formFieldValue span select {\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n/* Remove border/padding from the first wrapper div (and its first child wrapper). */\\n.individualPane > div:first-of-type,\\n.individualPane > div:first-of-type > div:first-of-type {\\n border: none !important;\\n padding: 0 !important;\\n}\\n\\n/* Align schema.org, solid terms, FOAF, vCard, and org field labels with their input values. */\\n.individualPane :not(.choiceBox):has(> .formFieldName):has(> .formFieldValue) {\\n display: flex;\\n align-items: baseline;\\n margin-bottom: var(--spacing-sm);\\n}\\n\\n.individualPane :not(.choiceBox):has(> .formFieldName):has(> .formFieldValue) > .formFieldValue {\\n margin-bottom: 0;\\n}\\n\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://schema.org/\\\"]),\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/solid/terms#\\\"]),\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://xmlns.com/foaf/0.1/\\\"]),\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/2006/vcard/ns\\\"]),\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/org#\\\"]) {\\n display: inline-flex;\\n align-items: center;\\n vertical-align: middle;\\n}\\n\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://schema.org/\\\"]) + .formFieldValue,\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/solid/terms#\\\"]) + .formFieldValue,\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://xmlns.com/foaf/0.1/\\\"]) + .formFieldValue,\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/2006/vcard/ns\\\"]) + .formFieldValue,\\n.individualPane :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/org#\\\"]) + .formFieldValue {\\n display: inline-flex;\\n align-items: center;\\n vertical-align: middle;\\n flex: 1;\\n min-width: 0;\\n}\\n\\n.individualPane textarea,\\n.individualPane .formFieldValue textarea {\\n appearance: none;\\n -webkit-appearance: none;\\n border: .05em solid #88c !important;\\n border-style: solid !important;\\n border-width: .05em !important;\\n border-color: #88c !important;\\n border-radius: 0.2em !important;\\n width: 100%;\\n box-sizing: border-box;\\n margin-top: var(--spacing-xs);\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n/* Center textarea label vertically in flex rows. */\\n.individualPane div[style*=\\\"display: flex\\\"][style*=\\\"flex-direction: row\\\"]:has(textarea) {\\n align-items: flex-start;\\n}\\n\\n.individualPane div[style*=\\\"display: flex\\\"][style*=\\\"flex-direction: row\\\"]:has(textarea) > div:has(> a) {\\n padding-left: var(--spacing-xs);\\n}\\n\\n/* Keep autocomplete/table-based fields (e.g. Occupation) aligned to label text baseline. */\\n.individualPane :not(.choiceBox):has(> .formFieldValue input[data-testid=\\\"autocomplete-input\\\"]) {\\n align-items: flex-start;\\n}\\n\\n.individualPane :not(.choiceBox):has(> .formFieldValue input[data-testid=\\\"autocomplete-input\\\"]) > .formFieldName {\\n padding-top: 0.55em !important;\\n}\\n\\n.individualPane .formFieldValue:has(input[data-testid=\\\"autocomplete-input\\\"]) {\\n align-self: flex-start;\\n}\\n\\n.individualPane .formFieldValue table[data-testid=\\\"autocomplete-table\\\"],\\n.individualPane .formFieldValue input[data-testid=\\\"autocomplete-input\\\"] {\\n margin: 0 !important;\\n}\\n\\n.individualPane .formFieldValue table[data-testid=\\\"autocomplete-table\\\"] {\\n vertical-align: baseline;\\n}\\n\\n.individualPane input:not([type=\\\"color\\\"]) {\\n width: 100%;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n.individualPane input:disabled,\\n.individualPane textarea:disabled,\\n.individualPane select:disabled,\\n.individualPane input[readonly],\\n.individualPane textarea[readonly],\\n.individualPane input:read-only,\\n.individualPane textarea:read-only {\\n background-color: var(--color-background) !important;\\n cursor: not-allowed;\\n opacity: 0.75;\\n border: 0.05em solid white !important;\\n}\\n\\n.individualPane textarea,\\n.individualPane .formFieldValue textarea {\\n padding: 0.5em !important;\\n}\\n\\n.webidControl table td div.contactPane.namedPane {\\n border: none !important;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ },\n\n/***/ 295\n(module, __webpack_exports__, __webpack_require__) {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* toolsPane.js styles — extracted from inline styles */\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\n\n/* ── Tools pane table ────────────────────────────────────────── */\n\n.contactPane .toolsTable {\n font-size: 120%;\n margin: var(--spacing-md);\n border: 0.1em solid var(--color-border-pale);\n}\n\n/* ── Tools header row ────────────────────────────────────────── */\n\n.contactPane .toolsHeader {\n min-width: 20em;\n padding: var(--spacing-md);\n font-size: 150%;\n border-bottom: 0.1em solid var(--color-error);\n margin-bottom: var(--spacing-xl);\n}\n\n/* ── Status block ────────────────────────────────────────────── */\n\n.contactPane .toolsStatusBlock {\n padding: var(--spacing-xl);\n}\n\n/* ── Tools buttons ───────────────────────────────────────────── */\n\n.contactPane .toolsButton {\n font-size: var(--font-size-base);\n margin: 0.8em;\n padding: var(--spacing-xs);\n}\n\n/* ── Load index button states ────────────────────────────────── */\n\n.contactPane .toolsButton--loading {\n background-color: #ffc;\n}\n\n.contactPane .toolsButton--error {\n background-color: #fcc;\n}\n\n.contactPane .toolsButton--success {\n background-color: #cfc;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/toolsPane.css\"],\"names\":[],\"mappings\":\"AAAA,uDAAuD;AACvD,qFAAqF;;AAErF,mEAAmE;;AAEnE;EACE,eAAe;EACf,yBAAyB;EACzB,4CAA4C;AAC9C;;AAEA,mEAAmE;;AAEnE;EACE,eAAe;EACf,0BAA0B;EAC1B,eAAe;EACf,6CAA6C;EAC7C,gCAAgC;AAClC;;AAEA,mEAAmE;;AAEnE;EACE,0BAA0B;AAC5B;;AAEA,mEAAmE;;AAEnE;EACE,gCAAgC;EAChC,aAAa;EACb,0BAA0B;AAC5B;;AAEA,mEAAmE;;AAEnE;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;AACxB\",\"sourcesContent\":[\"/* toolsPane.js styles — extracted from inline styles */\\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\\n\\n/* ── Tools pane table ────────────────────────────────────────── */\\n\\n.contactPane .toolsTable {\\n font-size: 120%;\\n margin: var(--spacing-md);\\n border: 0.1em solid var(--color-border-pale);\\n}\\n\\n/* ── Tools header row ────────────────────────────────────────── */\\n\\n.contactPane .toolsHeader {\\n min-width: 20em;\\n padding: var(--spacing-md);\\n font-size: 150%;\\n border-bottom: 0.1em solid var(--color-error);\\n margin-bottom: var(--spacing-xl);\\n}\\n\\n/* ── Status block ────────────────────────────────────────────── */\\n\\n.contactPane .toolsStatusBlock {\\n padding: var(--spacing-xl);\\n}\\n\\n/* ── Tools buttons ───────────────────────────────────────────── */\\n\\n.contactPane .toolsButton {\\n font-size: var(--font-size-base);\\n margin: 0.8em;\\n padding: var(--spacing-xs);\\n}\\n\\n/* ── Load index button states ────────────────────────────────── */\\n\\n.contactPane .toolsButton--loading {\\n background-color: #ffc;\\n}\\n\\n.contactPane .toolsButton--error {\\n background-color: #fcc;\\n}\\n\\n.contactPane .toolsButton--success {\\n background-color: #cfc;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ },\n\n/***/ 886\n(module, __webpack_exports__, __webpack_require__) {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(354);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* webidControl.js styles — extracted from inline styles */\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\n\n/* ── Named pane (rendered sub-pane) ──────────────────────────── */\n\n.contactPane .namedPane {\n border: 0.1em solid var(--color-text-muted);\n border-radius: var(--border-radius-base);\n}\n\n/* ── WebID / Public ID outer container ───────────────────────── */\n\n.contactPane .webidControl {\n border-radius: 0.3em;\n border: 0.1em solid #888;\n}\n\n/* ── Persona row ─────────────────────────────────────────────── */\n\n.contactPane .personaRow {\n padding: 0.2em;\n}\n\n.contactPane .personaRow--webid {\n background-color: #ffe6ff;\n}\n\n/* ── Full-width elements ─────────────────────────────────────── */\n\n.contactPane .fullWidth {\n width: 100%;\n}\n\n/* ── Open/close profile button ───────────────────────────────── */\n\n.contactPane .personaOpenButton {\n float: right;\n background-color: transparent;\n border: none;\n}\n\n/* ── Section heading ─────────────────────────────────────────── */\n\n.contactPane .webidHeading {\n font-size: 110%;\n font-weight: bold;\n color: var(--color-primary);\n padding: 0.2em;\n margin: 0.7em 0;\n}\n\n/* ── Prompt text ─────────────────────────────────────────────── */\n\n.contactPane .webidPrompt {\n padding: 0.7em;\n border: none;\n font-size: var(--font-size-base);\n white-space: pre-wrap;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/webidControl.css\"],\"names\":[],\"mappings\":\"AAAA,0DAA0D;AAC1D,qFAAqF;;AAErF,mEAAmE;;AAEnE;EACE,2CAA2C;EAC3C,wCAAwC;AAC1C;;AAEA,mEAAmE;;AAEnE;EACE,oBAAoB;EACpB,wBAAwB;AAC1B;;AAEA,mEAAmE;;AAEnE;EACE,cAAc;AAChB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA,mEAAmE;;AAEnE;EACE,WAAW;AACb;;AAEA,mEAAmE;;AAEnE;EACE,YAAY;EACZ,6BAA6B;EAC7B,YAAY;AACd;;AAEA,mEAAmE;;AAEnE;EACE,eAAe;EACf,iBAAiB;EACjB,2BAA2B;EAC3B,cAAc;EACd,eAAe;AACjB;;AAEA,mEAAmE;;AAEnE;EACE,cAAc;EACd,YAAY;EACZ,gCAAgC;EAChC,qBAAqB;AACvB\",\"sourcesContent\":[\"/* webidControl.js styles — extracted from inline styles */\\n/* Uses CSS custom properties from the global stylesheet (dev-global.css / mashlib) */\\n\\n/* ── Named pane (rendered sub-pane) ──────────────────────────── */\\n\\n.contactPane .namedPane {\\n border: 0.1em solid var(--color-text-muted);\\n border-radius: var(--border-radius-base);\\n}\\n\\n/* ── WebID / Public ID outer container ───────────────────────── */\\n\\n.contactPane .webidControl {\\n border-radius: 0.3em;\\n border: 0.1em solid #888;\\n}\\n\\n/* ── Persona row ─────────────────────────────────────────────── */\\n\\n.contactPane .personaRow {\\n padding: 0.2em;\\n}\\n\\n.contactPane .personaRow--webid {\\n background-color: #ffe6ff;\\n}\\n\\n/* ── Full-width elements ─────────────────────────────────────── */\\n\\n.contactPane .fullWidth {\\n width: 100%;\\n}\\n\\n/* ── Open/close profile button ───────────────────────────────── */\\n\\n.contactPane .personaOpenButton {\\n float: right;\\n background-color: transparent;\\n border: none;\\n}\\n\\n/* ── Section heading ─────────────────────────────────────────── */\\n\\n.contactPane .webidHeading {\\n font-size: 110%;\\n font-weight: bold;\\n color: var(--color-primary);\\n padding: 0.2em;\\n margin: 0.7em 0;\\n}\\n\\n/* ── Prompt text ─────────────────────────────────────────────── */\\n\\n.contactPane .webidPrompt {\\n padding: 0.7em;\\n border: none;\\n font-size: var(--font-size-base);\\n white-space: pre-wrap;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ },\n\n/***/ 314\n(module) {\n\n\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};\n\n/***/ },\n\n/***/ 354\n(module) {\n\n\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};\n\n/***/ },\n\n/***/ 72\n(module) {\n\n\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};\n\n/***/ },\n\n/***/ 659\n(module) {\n\n\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;\n\n/***/ },\n\n/***/ 540\n(module) {\n\n\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;\n\n/***/ },\n\n/***/ 56\n(module, __unused_webpack_exports, __webpack_require__) {\n\n\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = true ? __webpack_require__.nc : 0;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;\n\n/***/ },\n\n/***/ 825\n(module) {\n\n\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;\n\n/***/ },\n\n/***/ 113\n(module) {\n\n\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;\n\n/***/ },\n\n/***/ 53\n(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__53__;\n\n/***/ },\n\n/***/ 941\n(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__941__;\n\n/***/ },\n\n/***/ 104\n(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__104__;\n\n/***/ }\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/nonce */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.nc = undefined;\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": () => (/* binding */ src_contactsPane)\n});\n\n// UNUSED EXPORTS: getSameAs\n\n// EXTERNAL MODULE: external {\"commonjs\":\"solid-logic\",\"commonjs2\":\"solid-logic\",\"amd\":\"solid-logic\",\"root\":\"SolidLogic\"}\nvar external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_ = __webpack_require__(941);\n// EXTERNAL MODULE: external {\"commonjs\":\"solid-ui\",\"commonjs2\":\"solid-ui\",\"amd\":\"solid-ui\",\"root\":\"UI\"}\nvar external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_ = __webpack_require__(104);\n// EXTERNAL MODULE: external {\"commonjs\":\"rdflib\",\"commonjs2\":\"rdflib\",\"amd\":\"rdflib\",\"root\":\"$rdf\"}\nvar external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_ = __webpack_require__(53);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\nvar injectStylesIntoStyleTag = __webpack_require__(72);\nvar injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleDomAPI.js\nvar styleDomAPI = __webpack_require__(825);\nvar styleDomAPI_default = /*#__PURE__*/__webpack_require__.n(styleDomAPI);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertBySelector.js\nvar insertBySelector = __webpack_require__(659);\nvar insertBySelector_default = /*#__PURE__*/__webpack_require__.n(insertBySelector);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\nvar setAttributesWithoutAttributes = __webpack_require__(56);\nvar setAttributesWithoutAttributes_default = /*#__PURE__*/__webpack_require__.n(setAttributesWithoutAttributes);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertStyleElement.js\nvar insertStyleElement = __webpack_require__(540);\nvar insertStyleElement_default = /*#__PURE__*/__webpack_require__.n(insertStyleElement);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleTagTransform.js\nvar styleTagTransform = __webpack_require__(113);\nvar styleTagTransform_default = /*#__PURE__*/__webpack_require__.n(styleTagTransform);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/styles/webidControl.css\nvar webidControl = __webpack_require__(886);\n;// ./src/styles/webidControl.css\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (styleTagTransform_default());\noptions.setAttributes = (setAttributesWithoutAttributes_default());\noptions.insert = insertBySelector_default().bind(null, \"head\");\noptions.domAPI = (styleDomAPI_default());\noptions.insertStyleElement = (insertStyleElement_default());\n\nvar update = injectStylesIntoStyleTag_default()(webidControl/* default */.A, options);\n\n\n\n\n /* harmony default export */ const styles_webidControl = (webidControl/* default */.A && webidControl/* default */.A.locals ? webidControl/* default */.A.locals : undefined);\n\n;// ./src/webidControl.js\n// Render a control to record the webids we have for this agent\n\n\n\n\n\n\n\nconst ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\nconst widgets = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets\nconst utils = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils\nconst kb = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store\n\nconst wikidataClasses = widgets.publicData.wikidataClasses // @@ move to solid-logic\nconst wikidataParameters = widgets.publicData.wikidataParameters // @@ move to solid-logic\n\nconst WEBID_NOUN = 'Solid ID'\nconst PUBLICID_NOUN = 'In public data'\nconst DOWN_ARROW = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.icons.iconBase + 'noun_1369241.svg'\nconst UP_ARROW = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.icons.iconBase + 'noun_1369237.svg'\n\n/// ///////////////////////// Logic\n\nasync function addWebIDToContacts (person, webid, urlType, kb) {\n /*\n if (!webid.startsWith('https:')) { /// @@ well we will have other protcols like DID\n if (webid.startsWith('http://') {\n webid = 'https:' + webid.slice(5) // @@ No, data won't match in store. Add the 's' on fetch()\n } else {\n throw new Error('Does not look like a webid, must start with https: ' + webid)\n }\n }\n */\n\n // check this is a url\n try {\n // eslint-disable-next-line no-unused-vars\n const _url = new URL(webid)\n } catch (error) {\n throw new Error(`${WEBID_NOUN}: ${webid} is not a valid url.`)\n }\n\n // create a person's webID\n console.log(`Adding to ${person} a ${WEBID_NOUN}: ${webid}.`)\n const vcardURLThing = kb.bnode()\n const insertables = [\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, ns.vcard('url'), vcardURLThing, person.doc()),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(vcardURLThing, ns.rdf('type'), urlType, person.doc()),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(vcardURLThing, ns.vcard('value'), webid, person.doc())\n ]\n // insert WebID in groups\n // replace person with WebID in vcard:hasMember (WebID may already exist)\n // insert owl:sameAs\n const groups = kb.each(null, ns.vcard('hasMember'), person)\n let deletables = []\n groups.forEach(group => {\n deletables = deletables.concat(kb.statementsMatching(group, ns.vcard('hasMember'), person, group.doc()))\n insertables.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, ns.vcard('hasMember'), kb.sym(webid), group.doc())) // May exist; do we need to check?\n insertables.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(kb.sym(webid), ns.owl('sameAs'), person, group.doc()))\n })\n try {\n await updateMany(deletables, insertables)\n } catch (err) { throw new Error(`Could not create webId ${WEBID_NOUN}: ${webid}.`) }\n}\n\nasync function removeWebIDFromContacts (person, webid, urlType, kb) {\n console.log(`Removing from ${person} their ${WEBID_NOUN}: ${webid}.`)\n\n // remove webID from card\n const existing = kb.each(person, ns.vcard('url'), null, person.doc())\n .filter(urlObject => kb.holds(urlObject, ns.rdf('type'), urlType, person.doc()))\n .filter(urlObject => kb.holds(urlObject, ns.vcard('value'), webid, person.doc()))\n if (!existing.length) {\n throw new Error(`Person ${person} does not have ${WEBID_NOUN} ${webid}.`)\n }\n const vcardURLThing = existing[0]\n const deletables = [\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, ns.vcard('url'), vcardURLThing, person.doc()),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(vcardURLThing, ns.rdf('type'), urlType, person.doc()),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(vcardURLThing, ns.vcard('value'), webid, person.doc())\n ]\n await kb.updater.update(deletables, [])\n\n // remove webIDs from groups\n const groups = kb.each(null, ns.vcard('hasMember'), kb.sym(webid))\n let removeFromGroups = []\n const insertInGroups = []\n groups.forEach(async group => {\n removeFromGroups = removeFromGroups.concat(kb.statementsMatching(kb.sym(webid), ns.owl('sameAs'), person, group.doc()))\n insertInGroups.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, ns.vcard('hasMember'), person, group.doc()))\n if (kb.statementsMatching(kb.sym(webid), ns.owl('sameAs'), null, group.doc()).length < 2) {\n removeFromGroups = removeFromGroups.concat(kb.statementsMatching(group, ns.vcard('hasMember'), kb.sym(webid), group.doc()))\n }\n })\n await updateMany(removeFromGroups, insertInGroups)\n}\n\n// Trace things the same as this - other IDs for same thing\n// returns as array of node\nfunction getSameAs (kb, thing, doc) { // Should this recurse?\n const found = new Set()\n const agenda = new Set([thing.uri])\n\n while (agenda.size) {\n const uri = Array.from(agenda)[0] // clumsy\n agenda.delete(uri)\n if (found.has(uri)) continue\n found.add(uri)\n const node = kb.sym(uri)\n kb.each(node, ns.owl('sameAs'), null, doc)\n .concat(kb.each(null, ns.owl('sameAs'), node, doc))\n .forEach(next => {\n console.log(' OWL sameAs found ' + next)\n agenda.add(next.uri)\n })\n kb.each(node, ns.schema('sameAs'), null, doc)\n .concat(kb.each(null, ns.schema('sameAs'), node, doc))\n .forEach(next => {\n console.log(' Schema sameAs found ' + next)\n agenda.add(next.uri)\n })\n }\n found.delete(thing.uri) // don't want the one we knew about\n return Array.from(found).map(uri => kb.sym(uri)) // return as array of nodes\n}\n\n// find person webIDs\nfunction getPersonas (kb, person) {\n const lits = vcardWebIDs(kb, person).concat(getSameAs(kb, person, person.doc()))\n const strings = new Set(lits.map(lit => lit.value)) // remove dups\n const personas = [...strings].map(uri => kb.sym(uri)) // The UI tables do better with Named Nodes than Literals\n personas.sort() // for repeatability\n personas.filter(x => !x.sameTerm(person))\n return personas\n}\n\nfunction vcardWebIDs (kb, person, urlType) {\n return kb.each(person, ns.vcard('url'), null, person.doc())\n .filter(urlObject => kb.holds(urlObject, ns.rdf('type'), urlType, person.doc()))\n .map(urlObject => kb.any(urlObject, ns.vcard('value'), null, person.doc()))\n .filter(x => !!x) // remove nulls\n}\n\nfunction isOrganization (agent) {\n const doc = agent.doc()\n return kb.holds(agent, ns.rdf('type'), ns.vcard('Organization'), doc) ||\n kb.holds(agent, ns.rdf('type'), ns.schema('Organization'), doc)\n}\n/// ////////////////////////////////////////////////////////////// UI\n\n// Utility function to render another different pane\n\nfunction renderNamedPane (dom, subject, paneName, dataBrowserContext) {\n const p = dataBrowserContext.session.paneRegistry.byName(paneName)\n const d = p.render(subject, dataBrowserContext) // @@@ change some bits of context!\n d.classList.add('namedPane')\n return d\n}\n\nasync function renderWebIdControl (person, dataBrowserContext) {\n const options = {\n longPrompt: `If you know someone's ${WEBID_NOUN}, you can do more stuff with them.\n To record their ${WEBID_NOUN}, drag it onto the plus, or click the plus\n to enter it by hand.`,\n idNoun: WEBID_NOUN,\n urlType: ns.vcard('WebID')\n }\n return renderIdControl(person, dataBrowserContext, options)\n}\n\nasync function renderPublicIdControl (person, dataBrowserContext) {\n let orgClass = kb.sym('http://www.wikidata.org/wiki/Q43229')\n let orgClassId = 'Organization'\n for (const classId in wikidataClasses) {\n if (kb.holds(person, ns.rdf('type'), ns.schema(classId), person.doc())) {\n orgClass = kb.sym(wikidataClasses[classId])\n orgClassId = classId\n console.log(` renderPublicIdControl bingo: ${classId} -> ${orgClass}`)\n }\n }\n const options = {\n longPrompt: `If you know the ${PUBLICID_NOUN} of this ${orgClassId}, you can do more stuff with it.\n To record its ${PUBLICID_NOUN}, drag it onto the plus, or click the magnifyinng glass\n to search for it in WikiData.`,\n idNoun: PUBLICID_NOUN,\n urlType: ns.vcard('PublicId'),\n dbLookup: true,\n class: orgClass, // Organization\n queryParams: wikidataParameters\n }\n return renderIdControl(person, dataBrowserContext, options)\n}\n\n// The main control rendered by this module\nasync function renderIdControl (person, dataBrowserContext, options) {\n // IDs which are as WebId in VCARD data\n // like :me vcard:hasURL [ a vcard:WebId; vcard:value <https://...foo> ]\n //\n // Display the data about x specifically stored at x.doc()\n // in a fold-away thing\n //\n function renderPersona (dom, persona, kb) {\n function profileOpenHandler (_event) {\n profileIsVisible = !profileIsVisible\n main.style.visibility = profileIsVisible ? 'visible' : 'collapse'\n openButton.children[0].src = profileIsVisible ? UP_ARROW : DOWN_ARROW // @@ fragile\n }\n function renderNewRow (webidObject) {\n const webid = new external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.Literal(webidObject.uri)\n async function deleteFunction () {\n try {\n await removeWebIDFromContacts(person, webid, options.urlType, kb)\n } catch (err) {\n div.appendChild(widgets.errorMessageBlock(dom, `Error removing Id ${webid} from ${person}: ${err}`))\n }\n await refreshWebIDTable()\n }\n const isWebId = options.urlType.sameTerm(ns.vcard('WebID'))\n const delFunParam = options.editable ? deleteFunction : null\n const opts = { deleteFunction: delFunParam, draggable: true }\n if (isWebId) {\n opts.title = webidObject.uri.split('/')[2]\n opts.image = widgets.faviconOrDefault(dom, webidObject.site()) // just for domain\n }\n const row = widgets.personTR(dom, external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns.foaf('knows'), webidObject, opts)\n if (isWebId) {\n row.children[1].textConent = opts.title // @@ will be overwritten\n row.classList.add('personaRow--webid')\n }\n row.classList.add('personaRow')\n return row\n }\n\n const div = dom.createElement('div')\n div.classList.add('fullWidth')\n const personaTable = div.appendChild(dom.createElement('table'))\n personaTable.classList.add('fullWidth')\n const nav = personaTable.appendChild(renderNewRow(persona))\n nav.classList.add('fullWidth')\n const mainRow = personaTable.appendChild(dom.createElement('tr'))\n const mainCell = mainRow.appendChild(dom.createElement('td'))\n mainCell.setAttribute('colspan', 3)\n let main\n\n let profileIsVisible = true\n\n const rhs = nav.children[2]\n const openButton = rhs.appendChild(widgets.button(dom, DOWN_ARROW, 'View', profileOpenHandler))\n openButton.classList.add('personaOpenButton')\n const paneName = isOrganization(person) || isOrganization(persona) ? 'profile' : 'profile' // was default for org\n\n widgets.publicData.loadPublicDataThing(kb, person, persona).then(_resp => {\n // loadPublicDataThing(kb, person, persona).then(_resp => {\n try {\n main = renderNamedPane(dom, persona, paneName, dataBrowserContext)\n console.log('main: ', main)\n main.classList.add('fullWidth')\n console.log('renderIdControl: main element: ', main)\n // main.style.visibility = 'collapse'\n mainCell.appendChild(main)\n } catch (err) {\n main = widgets.errorMessageBlock(dom, `Problem displaying persona ${persona}: ${err}`)\n mainCell.appendChild(main)\n }\n }, err => {\n main = widgets.errorMessageBlock(dom, `Error loading persona ${persona}: ${err}`)\n mainCell.appendChild(main)\n })\n return div\n } // renderPersona\n\n async function refreshWebIDTable () {\n const personas = getPersonas(kb, person)\n console.log('WebId personas: ' + person + ' -> ' + personas.map(p => p.uri).join(',\\n '))\n prompt.style.display = personas.length ? 'none' : ''\n utils.syncTableToArrayReOrdered(profileArea, personas, persona => renderPersona(dom, persona, kb))\n }\n async function addOneIdAndRefresh (person, webid) {\n try {\n await addWebIDToContacts(person, webid, options.urlType, kb)\n } catch (err) {\n div.appendChild(widgets.errorMessageBlock(dom, `Error adding Id ${webid} to ${person}: ${err}`))\n }\n await refreshWebIDTable()\n }\n\n const { dom } = dataBrowserContext\n options = options || {}\n options.editable = kb.updater.editable(person.doc().uri, kb)\n const div = dom.createElement('div')\n div.classList.add('webidControl')\n\n if (getPersonas(kb, person).length === 0 && !options.editable) {\n div.style.display = 'none'\n return div // No point listing an empty list you can't change\n }\n\n const h4 = div.appendChild(dom.createElement('h4'))\n h4.textContent = options.idNoun\n h4.classList.add('webidHeading')\n\n const prompt = div.appendChild(dom.createElement('p'))\n prompt.classList.add('webidPrompt')\n prompt.textContent = options.longPrompt\n const table = div.appendChild(dom.createElement('table'))\n table.classList.add('fullWidth')\n\n if (options.editable) { // test\n const barOptions = {\n editable: options.editable,\n manualURIEntry: true, // introduced in solid-ui 2.4.2\n idNoun: options.idNoun,\n dbLookup: options.dbLookup\n }\n const acOptions = {\n queryParams: options.queryParams || wikidataParameters,\n targetClass: options.class\n }\n try {\n div.appendChild(await widgets.renderAutocompleteControl(dom, person, barOptions, acOptions, addOneIdAndRefresh))\n } catch (err) {\n console.error('renderAutocompleteControl failed:', err)\n div.appendChild(widgets.errorMessageBlock(dom, 'Error rendering autocomplete: ' + err))\n }\n }\n const profileArea = div.appendChild(dom.createElement('div'))\n await refreshWebIDTable()\n\n return div\n}\n\n;// ./src/contactLogic.js\n// Logic for solid contacts\n\n\n\n\n\n\nconst contactLogic_ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\nconst contactLogic_utils = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils\nconst contactLogic_kb = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store\nconst updater = contactLogic_kb.updater\n\n/** Perform updates on more than one document @@ Move to rdflib!\n*/\nasync function updateMany (deletions, insertions = []) {\n const docs = deletions.concat(insertions).map(st => st.why)\n const uniqueDocs = []\n docs.forEach(doc => {\n if (!uniqueDocs.find(uniqueDoc => uniqueDoc.equals(doc))) uniqueDocs.push(doc)\n })\n const updates = uniqueDocs.map(doc =>\n contactLogic_kb.updater.update(deletions.filter(st => st.why.sameTerm(doc)),\n insertions.filter(st => st.why.sameTerm(doc))))\n return Promise.all(updates)\n}\n\n/** Add a new person to the web data\n*\n* adds them to the given groups as well.\n* @returns {NamedNode} the person\n*/\nasync function saveNewContact (book, name, selectedGroups, klass) {\n await contactLogic_kb.fetcher.load(book.doc())\n const nameEmailIndex = contactLogic_kb.any(book, contactLogic_ns.vcard('nameEmailIndex'))\n\n const uuid = contactLogic_utils.genUuid()\n const person = contactLogic_kb.sym(\n book.dir().uri + 'Person/' + uuid + '/index.ttl#this'\n )\n const doc = person.doc()\n\n // Set of statements to different files\n const agenda = [\n // Patch the main index to add the person\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, contactLogic_ns.vcard('inAddressBook'), book, nameEmailIndex), // The people index\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, contactLogic_ns.vcard('fn'), name, nameEmailIndex),\n // The new person file\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, contactLogic_ns.vcard('fn'), name, doc),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, contactLogic_ns.rdf('type'), klass, doc),\n\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(doc, contactLogic_ns.dct('created'), new Date(), doc) // Note when created - useful for triaging later\n // Note this is propert of the file -- not when the person was created!\n ]\n\n for (const gu in selectedGroups) {\n const g = contactLogic_kb.sym(gu)\n const gd = g.doc()\n agenda.push(\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(g, contactLogic_ns.vcard('hasMember'), person, gd),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(person, contactLogic_ns.vcard('fn'), name, gd)\n )\n }\n\n try {\n await updater.updateMany([], agenda) // @@ in future, updater.updateMany\n } catch (e) {\n console.error('Error: can\\'t update ' + person + ' as new contact:' + e)\n throw new Error('Updating new contact: ' + e)\n }\n return person\n}\n\nfunction sanitizeToAlpha (name) { // https://mathiasbynens.be/notes/es6-unicode-regex\n const n2 = name.replace(/\\W/gu, '_') // Anything which is not a unicode word characeter\n return n2.replace(/_+/g, '_') // https://www.regular-expressions.info/shorthand.html\n}\n\n/** Write new group to web\n * Creates an empty new group file and adds it to the index\n * @returns group\n*/\nasync function saveNewGroup (book, name) {\n await contactLogic_kb.fetcher.load(book.doc())\n const gix = contactLogic_kb.any(book, contactLogic_ns.vcard('groupIndex'))\n\n const gname = sanitizeToAlpha(name)\n const group = contactLogic_kb.sym(book.dir().uri + 'Group/' + gname + '.ttl#this')\n const doc = group.doc()\n // console.log(' New group will be: ' + group + '\\n')\n try {\n await contactLogic_kb.fetcher.load(gix)\n } catch (err) {\n throw new Error('Error loading group index!' + gix.uri + ': ' + err)\n }\n if (contactLogic_kb.holds(book, contactLogic_ns.vcard('includesGroup'), group, gix)) {\n return group // Already exists\n }\n const insertTriples = [\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(book, contactLogic_ns.vcard('includesGroup'), group, gix),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.rdf('type'), contactLogic_ns.vcard('Group'), gix),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.vcard('fn'), name, gix)\n ]\n try {\n await updater.update([], insertTriples)\n } catch (e) {\n throw new Error('Could not update group index ' + e) // fail\n }\n\n const triples = [\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(book, contactLogic_ns.vcard('includesGroup'), group, doc), // Pointer back to book\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.rdf('type'), contactLogic_ns.vcard('Group'), doc),\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.vcard('fn'), name, doc)\n ]\n try {\n await updater.update([], triples)\n } catch (err) {\n throw new Error('Could not update group file: ' + err) // fail\n }\n return group\n}\n\nasync function addPersonToGroup (thing, group) {\n const toBeFetched = [thing.doc(), group.doc()]\n try {\n await contactLogic_kb.fetcher.load(toBeFetched)\n } catch (e) {\n throw new Error('addPersonToGroup: ' + e)\n }\n\n const types = contactLogic_kb.findTypeURIs(thing)\n // for (const ty in types) {\n // console.log(' drop object type includes: ' + ty) // @@ Allow email addresses and phone numbers to be dropped?\n // }\n if (!(contactLogic_ns.vcard('Individual').uri in types ||\n contactLogic_ns.vcard('Organization').uri in types)) {\n return alert(`Can't add ${thing} to a group: it has to be an individual or another group.`)\n }\n const pname = contactLogic_kb.any(thing, contactLogic_ns.vcard('fn'))\n const gname = contactLogic_kb.any(group, contactLogic_ns.vcard('fn'))\n if (!pname) { return alert('No vcard name known for ' + thing) }\n const already = contactLogic_kb.holds(thing, contactLogic_ns.vcard('fn'), null, group.doc())\n if (already) {\n return alert(\n 'ALREADY added ' + pname + ' to group ' + gname\n )\n }\n const message = 'Add ' + pname + ' to group ' + gname + '?'\n if (!confirm(message)) return\n const ins = [\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(thing, contactLogic_ns.vcard('fn'), pname, group.doc())\n ]\n // find person webIDs and insert in vcard:hasMember\n const webIDs = getPersonas(contactLogic_kb, thing).map(webid => webid.value)\n if (webIDs.length) {\n webIDs.forEach(webid => {\n ins.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(contactLogic_kb.sym(webid), contactLogic_ns.owl('sameAs'), thing, group.doc()))\n ins.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.vcard('hasMember'), contactLogic_kb.sym(webid), group.doc()))\n })\n } else {\n ins.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.vcard('hasMember'), thing, group.doc()))\n }\n try {\n await updater.update([], ins)\n // to allow refresh of card groupList\n contactLogic_kb.fetcher.unload(group.doc())\n await contactLogic_kb.fetcher.load(group.doc())\n } catch (e) {\n throw new Error(`Error adding ${pname} to group ${gname}:` + e)\n }\n return thing\n}\n\n/**\n * Find persons member of a group\n */\n\nfunction groupMembers (kb, group) {\n const a = kb.each(group, contactLogic_ns.vcard('hasMember'), null, group.doc())\n let b = []\n a.forEach(item => {\n /* const contacts = kb.each(item, ns.owl('sameAs'), null, group.doc())\n if (contacts.length) {\n if (!kb.any(contacts[0], ns.vard('fn'))) b = b.concat(item) // this is the old data model\n else b = b.concat(contacts)\n } else { b = b.concat(item) }\n b = b.concat(item) */\n\n // to keep compatibility with old data model\n // check if item is a contact, else it is a WebID and parse 'sameAs' for contacts\n b = kb.any(item, contactLogic_ns.vcard('fn'), null, group.doc()) ? b.concat(item) : b.concat(kb.each(item, contactLogic_ns.owl('sameAs'), null, group.doc()))\n })\n const strings = new Set(b.map(contact => contact.uri)) // remove dups\n b = [...strings].map(uri => kb.sym(uri))\n return b\n}\n\nfunction isLocal (group, item) {\n const tree = group.dir().dir().dir()\n const local = item.uri && item.uri.startsWith(tree.uri)\n // console.log(` isLocal ${local} for ${item.uri} in group ${group} tree ${tree.uri}`)\n return local\n}\n\nfunction contactLogic_getSameAs (kb, item, doc) {\n return kb.each(item, contactLogic_ns.owl('sameAs'), null, doc).concat(\n kb.each(null, contactLogic_ns.owl('sameAs'), item, doc))\n}\n\nasync function getDataModelIssues (groups) {\n const del = []\n const ins = []\n groups.forEach(group => {\n const members = contactLogic_kb.each(group, contactLogic_ns.vcard('hasMember'), null, group.doc())\n members.forEach((member) => {\n const others = contactLogic_getSameAs(contactLogic_kb, member, group.doc())\n if (others.length && isLocal(group, member)) { // Problem: local ID used instead of webID\n for (const other of others) {\n if (!isLocal(group, other)) { // Let's use this one as the immediate member for CSS ACLs'\n // console.warn(`getDataModelIssues: Need to swap ${member} to ${other}`)\n del.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.vcard('hasMember'), member, group.doc()))\n ins.push(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, contactLogic_ns.vcard('hasMember'), other, group.doc()))\n break\n }\n // console.log('getDataModelIssues: ??? expected id not to be local ' + other)\n } // other\n } // if\n }) // member\n }) // next group\n return { del, ins }\n} // getDataModelIssues\n\n// Ends\n\n;// ./src/mintNewAddressBook.js\n\n\n\n\nconst { setACLUserPublic } = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.solidLogicSingleton.acl\n// const mime = require('mime-types')\n// const toolsPane0 = require('./toolsPane')\n// const toolsPane = toolsPane0.toolsPane\n\n// const ns = UI.ns\n// const utils = UI.utils\n\n// Mint a new address book\n\nfunction mintNewAddressBook (dataBrowserContext, context) {\n return new Promise(function (resolve, reject) {\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.login.ensureLoadedProfile(context).then(\n context => {\n // 20180713\n console.log('Logged in as ' + context.me)\n const me = context.me\n\n const dom = context.dom\n const div = context.div\n const kb = dataBrowserContext.session.store\n const ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\n const newBase = context.newBase || context.newInstance.dir().uri\n const instanceClass = context.instanceClass || ns.vcard('AddressBook')\n\n if (instanceClass.sameTerm(ns.vcard('Group'))) {\n // Make a group not an address book\n const g =\n context.newInstance || kb.sym(context.newBase + 'index.ttl#this')\n const doc = g.doc()\n kb.add(g, ns.rdf('type'), ns.vcard('Group'), doc)\n kb.add(\n g,\n ns.vcard('fn'),\n context.instanceName || 'untitled group',\n doc\n ) // @@ write doc back\n kb.fetcher\n .putBack(doc, { contentType: 'text/turtle' })\n .then(function (_xhr) {\n resolve(context)\n })\n .catch(function (err) {\n reject(\n new Error('Error creating document for new group ' + err)\n )\n })\n return\n }\n const appInstanceNoun = 'address book'\n\n function complain (message) {\n div.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n\n let bookContents = `@prefix vcard: <http://www.w3.org/2006/vcard/ns#>.\n @prefix ab: <http://www.w3.org/ns/pim/ab#>.\n @prefix dc: <http://purl.org/dc/elements/1.1/>.\n @prefix xsd: <http://www.w3.org/2001/XMLSchema#>.\n\n <#this> a vcard:AddressBook;\n dc:title \"New address Book\";\n vcard:nameEmailIndex <people.ttl>;\n vcard:groupIndex <groups.ttl>.\n`\n\n bookContents +=\n '<#this> <http://www.w3.org/ns/auth/acl#owner> <' +\n me.uri +\n '>.\\n\\n'\n\n const newAppInstance = kb.sym(newBase + 'index.ttl#this')\n\n const toBeWritten = [\n {\n to: 'index.ttl',\n content: bookContents,\n contentType: 'text/turtle'\n },\n { to: 'groups.ttl', content: '', contentType: 'text/turtle' },\n { to: 'people.ttl', content: '', contentType: 'text/turtle' },\n { to: '', existing: true, aclOptions: { defaultForNew: true } }\n ]\n\n // @@ Ask user abut ACLs?\n\n //\n // @@ Add header to PUT If-None-Match: * to prevent overwrite\n //\n\n function claimSuccess (newAppInstance, appInstanceNoun) {\n // @@ delete or grey other stuff\n console.log(`New ${appInstanceNoun} created at ${newAppInstance}`)\n const p = div.appendChild(dom.createElement('p'))\n p.classList.add('claimSuccess')\n p.innerHTML =\n 'Your <a href=\\'' +\n newAppInstance.uri +\n '\\'><b>new ' +\n appInstanceNoun +\n '</b></a> is ready. ' +\n '<br/><br/><a href=\\'' +\n newAppInstance.uri +\n '\\'>Go to new ' +\n appInstanceNoun +\n '</a>'\n const newContext = Object.assign(\n { newInstance: newAppInstance },\n context\n )\n resolve(newContext)\n }\n\n function doNextTask () {\n function checkOKSetACL (uri, ok) {\n if (!ok) {\n complain('Error writing new file ' + task.to)\n return reject(new Error('Error writing new file ' + task.to))\n }\n\n setACLUserPublic(dest, me, aclOptions)\n .then(() => doNextTask())\n .catch(err => {\n const message =\n 'Error setting access permissions for ' +\n task.to +\n ' : ' +\n err.message\n complain(message)\n return reject(new Error(message))\n })\n }\n\n if (toBeWritten.length === 0) {\n claimSuccess(newAppInstance, appInstanceNoun)\n } else {\n var task = toBeWritten.shift() /* eslint-disable-line no-var */\n console.log('Creating new file ' + task.to + ' in new instance ')\n var dest = external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.uri.join(task.to, newBase) /* eslint-disable-line no-var */\n var aclOptions = task.aclOptions || {} /* eslint-disable-line no-var */\n\n if ('content' in task) {\n kb.fetcher\n .webOperation('PUT', dest, {\n data: task.content,\n saveMetadata: true,\n contentType: task.contentType\n })\n .then(() => checkOKSetACL(dest, true))\n } else if ('existing' in task) {\n checkOKSetACL(dest, true)\n } else {\n reject(new Error('copy not expected buiding new app!!'))\n // const from = task.from || task.to // default source to be same as dest\n // UI.widgets.webCopy(base + from, dest, task.contentType, checkOKSetACL)\n }\n }\n }\n doNextTask()\n },\n err => {\n // log in then\n context.div.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(err))\n }\n )\n })\n}\n\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/styles/mugshotGallery.css\nvar mugshotGallery = __webpack_require__(715);\n;// ./src/styles/mugshotGallery.css\n\n \n \n \n \n \n \n \n \n \n\nvar mugshotGallery_options = {};\n\nmugshotGallery_options.styleTagTransform = (styleTagTransform_default());\nmugshotGallery_options.setAttributes = (setAttributesWithoutAttributes_default());\nmugshotGallery_options.insert = insertBySelector_default().bind(null, \"head\");\nmugshotGallery_options.domAPI = (styleDomAPI_default());\nmugshotGallery_options.insertStyleElement = (insertStyleElement_default());\n\nvar mugshotGallery_update = injectStylesIntoStyleTag_default()(mugshotGallery/* default */.A, mugshotGallery_options);\n\n\n\n\n /* harmony default export */ const styles_mugshotGallery = (mugshotGallery/* default */.A && mugshotGallery/* default */.A.locals ? mugshotGallery/* default */.A.locals : undefined);\n\n;// ./src/mugshotGallery.js\n\n\n\n\n\n// Lightweight MIME helpers replacing the heavy mime-types/mime-db packages (~170 KiB)\nconst mimeMap = {\n 'image/png': 'png',\n 'image/jpeg': 'jpg',\n 'image/gif': 'gif',\n 'image/svg+xml': 'svg',\n 'image/webp': 'webp',\n 'image/bmp': 'bmp',\n 'image/tiff': 'tiff',\n 'application/pdf': 'pdf',\n 'text/plain': 'txt',\n 'text/html': 'html',\n 'application/json': 'json',\n 'application/octet-stream': 'bin'\n}\nconst extMap = Object.fromEntries(Object.entries(mimeMap).map(([k, v]) => [v, k]))\nconst mime = {\n extension: (contentType) => mimeMap[contentType] || false,\n lookup: (filename) => {\n const ext = filename.split('.').pop().toLowerCase()\n return extMap[ext] || false\n }\n}\n\nconst mugshotGallery_ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\nconst mugshotGallery_utils = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils\nconst mugshotGallery_kb = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store\n\n/* Mugshot Gallery\n*\n* A widget for managing a set of images.\n* Make this a form field?\n*/\nfunction renderMugshotGallery (dom, subject) {\n function complain (message) {\n console.log(message)\n galleryDiv.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n\n async function linkToPicture (subject, pic, remove) {\n const link = [\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(subject, mugshotGallery_ns.vcard('hasPhoto'), pic, subject.doc())\n ]\n try {\n if (remove) {\n await mugshotGallery_kb.updater.update(link, [])\n } else {\n await mugshotGallery_kb.updater.update([], link)\n }\n } catch (err) {\n const msg = ' Write back image link FAIL ' + pic + ', Error: ' + err\n console.log(msg)\n alert(msg)\n }\n }\n\n function handleDroppedThing (thing) {\n mugshotGallery_kb.fetcher.nowOrWhenFetched(thing.doc(), function (ok, mess) {\n if (!ok) {\n console.log('Error looking up dropped thing ' + thing + ': ' + mess)\n } else {\n const types = mugshotGallery_kb.findTypeURIs(thing)\n for (const ty in types) {\n console.log(' drop object type includes: ' + ty) // @@ Allow email addresses and phone numbers to be dropped?\n }\n console.log('Default: assume web page ' + thing) // icon was: UI.icons.iconBase + 'noun_25830.svg'\n mugshotGallery_kb.add(subject, mugshotGallery_ns.wf('attachment'), thing, subject.doc())\n // @@ refresh UI\n }\n })\n }\n\n function uploadFileToContact (filename, contentType, data) {\n // const fileExtension = filename.split('.').pop() // .toLowerCase()\n const extension = mime.extension(contentType)\n if (contentType !== mime.lookup(filename)) {\n filename += '_.' + extension\n console.log('MIME TYPE MISMATCH -- adding extension: ' + filename)\n }\n let prefix, predicate\n const isImage = contentType.startsWith('image')\n if (isImage) {\n prefix = 'image_'\n predicate = mugshotGallery_ns.vcard('hasPhoto')\n } else {\n prefix = 'attachment_'\n predicate = mugshotGallery_ns.wf('attachment')\n }\n\n let n, pic\n for (n = 0; ; n++) {\n // Check filename is not used or invent new one\n pic = mugshotGallery_kb.sym(subject.dir().uri + filename)\n if (!mugshotGallery_kb.holds(subject, mugshotGallery_ns.vcard('hasPhoto'), pic)) {\n break\n }\n filename = prefix + n + '.' + extension\n }\n console.log(\n 'Putting ' +\n data.byteLength +\n ' bytes of ' +\n contentType +\n ' to ' +\n pic\n )\n mugshotGallery_kb.fetcher\n .webOperation('PUT', pic.uri, {\n data,\n contentType\n })\n .then(function (response) {\n if (!response.ok) {\n complain('Error uploading ' + pic + ':' + response.status)\n return\n }\n console.log(' Upload: put OK: ' + pic)\n mugshotGallery_kb.add(subject, predicate, pic, subject.doc())\n mugshotGallery_kb.fetcher\n .putBack(subject.doc(), { contentType: 'text/turtle' })\n .then(\n function (_response) {\n if (isImage) {\n mugshotDiv.refresh()\n }\n },\n function (err) {\n console.log(\n ' Write back image link FAIL ' + pic + ', Error: ' + err\n )\n }\n )\n })\n }\n\n // When a set of URIs are dropped on\n async function handleURIsDroppedOnMugshot (uris) {\n for (const u of uris) {\n let thing = external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.sym(u) // Attachment needs text label to disinguish I think not icon.\n console.log('Dropped on mugshot thing ' + thing) // icon was: UI.icons.iconBase + 'noun_25830.svg'\n if (u.startsWith('http') && u.indexOf('#') < 0) {\n // Plain document\n // Take a copy of a photo on the web:\n if (u.startsWith('http:')) { // because of browser mixed content stuff can't read http:\n thing = external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.sym('https:' + u.slice(5))\n }\n const options = { withCredentials: false, credentials: 'omit' }\n let result\n try {\n result = await mugshotGallery_kb.fetcher.webOperation('GET', thing.uri, options)\n } catch (err) {\n complain(\n `Gallery: fetch error trying to read picture ${thing} data: ${err}`\n )\n handleDroppedThing(thing)\n return\n }\n const contentType = result.headers.get('Content-Type')\n let pathEnd = thing.uri.split('/').slice(-1)[0] // last segment as putative filename\n pathEnd = pathEnd.split('?')[0] // chop off any query params\n const data = await result.arrayBuffer()\n if (!result.ok) {\n alert('Cant download, so will link image. ' + thing + ':' + result.status)\n handleDroppedThing(thing)\n return\n }\n uploadFileToContact(pathEnd, contentType, data)\n return\n } else {\n alert(\n 'Not a web document URI, cannot copy as picture: ' + thing\n )\n }\n handleDroppedThing(thing)\n }\n }\n\n // Drop an image file to set up the mugshot\n function droppedFileHandler (files) {\n for (let i = 0; i < files.length; i++) {\n const f = files[i]\n console.log(\n ' contacts: Filename: ' +\n f.name +\n ', type: ' +\n (f.type || 'n/a') +\n ' size: ' +\n f.size +\n ' bytes, last modified: ' +\n (f.lastModifiedDate\n ? f.lastModifiedDate.toLocaleDateString()\n : 'n/a')\n ) // See e.g. https://www.html5rocks.com/en/tutorials/file/dndfiles/\n\n // @@ Add: progress bar(s)\n const reader = new FileReader()\n reader.onload = (function (theFile) {\n return function (e) {\n const data = e.target.result\n console.log(' File read byteLength : ' + data.byteLength)\n const filename = encodeURIComponent(theFile.name)\n const contentType = theFile.type\n uploadFileToContact(filename, contentType, data)\n }\n })(f)\n reader.readAsArrayBuffer(f)\n }\n }\n\n function elementForImage (image) {\n const img = dom.createElement('img')\n img.classList.add('mugshotImage')\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.makeDropTarget(\n img,\n handleURIsDroppedOnMugshot,\n droppedFileHandler\n )\n if (image) {\n // img.setAttribute('src', image.uri) use token and works with NSS but not with CSS\n // we need to get image with authenticated fetch\n external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store.fetcher._fetch(image.uri)\n .then(function (response) {\n return response.blob()\n })\n .then(function (myBlob) {\n const objectURL = URL.createObjectURL(myBlob)\n img.setAttribute('src', objectURL)\n })\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.makeDraggable(img, image)\n }\n return img\n }\n\n function syncMugshots () {\n let images = mugshotGallery_kb.each(subject, mugshotGallery_ns.vcard('hasPhoto')) // Priviledge vcard ones\n images.sort() // arbitrary consistency\n images = images.slice(0, 5) // max number for the space\n if (images.length === 0) {\n mugshotDiv.innerHTML = '' // strictly, don't remove it if already there\n if (editable) {\n mugshotDiv.appendChild(placeholder) // A head image to drop pictures on\n } // otherwise leave gallery empty .. nothing to see here folks\n } else {\n mugshotGallery_utils.syncTableToArray(mugshotDiv, images, elementForImage)\n }\n }\n\n // Good URI for a Camera picture\n function getImageDoc () {\n const imageDoc = mugshotGallery_kb.sym(\n subject.dir().uri + 'Image_' + Date.now() + '.png'\n )\n return imageDoc\n }\n // Store picture\n async function tookPicture (imageDoc) {\n if (imageDoc) {\n await linkToPicture(subject, imageDoc)\n syncMugshots()\n }\n }\n\n function trashCan () {\n const button = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.button(\n dom,\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.icons.iconBase + 'noun_925021.svg',\n 'Drag here to delete'\n )\n async function droppedURIHandler (uris) {\n const images = mugshotGallery_kb\n .each(subject, mugshotGallery_ns.vcard('hasPhoto'))\n .map(x => x.uri)\n for (const uri of uris) {\n if (!images.includes(uri)) {\n alert('Only drop images in this contact onto this trash can.')\n return\n }\n if (confirm(`Permanently DELETE image ${uri} completely?`)) {\n console.log('Unlinking image file ' + uri)\n await linkToPicture(subject, mugshotGallery_kb.sym(uri), true)\n try {\n console.log('Deleting image file ' + uri)\n await mugshotGallery_kb.fetcher.webOperation('DELETE', uri)\n } catch (err) {\n alert('Unable to delete picture! ' + err)\n }\n }\n }\n syncMugshots()\n }\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.makeDropTarget(button, droppedURIHandler, null)\n return button\n }\n\n function renderImageTools () {\n const imageToolTable = dom.createElement('table')\n const row = imageToolTable.appendChild(dom.createElement('tr'))\n const left = row.appendChild(dom.createElement('td'))\n const middle = row.appendChild(dom.createElement('td'))\n const right = row.appendChild(dom.createElement('td'))\n\n left.appendChild(\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.media.cameraButton(dom, mugshotGallery_kb, getImageDoc, tookPicture)\n ) // 20190812\n try {\n middle.appendChild(\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.fileUploadButtonDiv(dom, droppedFileHandler)\n )\n } catch (e) {\n console.log('ignore fileUploadButtonDiv error for now', e)\n }\n right.appendChild(trashCan())\n return imageToolTable\n }\n\n // Body of renderMugshotGallery\n\n const editable = mugshotGallery_kb.updater.editable(subject.doc().uri, mugshotGallery_kb)\n const galleryDiv = dom.createElement('div')\n const mugshotDiv = galleryDiv.appendChild(dom.createElement('div'))\n const placeholder = elementForImage()\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.setImage(placeholder, subject) // Fallback icon or get from web\n syncMugshots()\n mugshotDiv.refresh = syncMugshots\n if (editable) {\n galleryDiv.appendChild(renderImageTools())\n }\n return galleryDiv\n}\n\n;// ./src/groupMembershipControl.js\n// Render a control to record the group memberships we have for this agent\n\n\n\nconst groupMembershipControl_ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\nconst groupMembershipControl_utils = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils\nconst groupMembershipControl_kb = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store\n\n// Groups the person is a member of\nfunction groupMembership (person) {\n let groups = groupMembershipControl_kb.statementsMatching(null, groupMembershipControl_ns.owl('sameAs'), person).map(st => st.why)\n .concat(groupMembershipControl_kb.each(null, groupMembershipControl_ns.vcard('hasMember'), person))\n const strings = new Set(groups.map(group => group.uri)) // remove dups\n groups = [...strings].map(uri => groupMembershipControl_kb.sym(uri))\n return groups\n}\n\nasync function renderGroupMemberships (person, context) {\n // Remove a person from a group\n async function removeFromGroup (thing, group) {\n const pname = kb.any(thing, groupMembershipControl_ns.vcard('fn'))\n const gname = kb.any(group, groupMembershipControl_ns.vcard('fn'))\n // find all WebIDs of thing\n const thingwebids = kb.each(null, groupMembershipControl_ns.owl('sameAs'), thing, group.doc())\n // WebID can be deleted only if not used in another thing\n let webids = []\n thingwebids.forEach(webid => {\n if (kb.statementsMatching(webid, groupMembershipControl_ns.owl('sameAs'), thing, group.doc())) webids = webids.concat(webid)\n })\n let thingOrWebid = thing\n if (webids.length > 0) thingOrWebid = webids[0]\n const groups = kb.each(null, groupMembershipControl_ns.vcard('hasMember'), thingOrWebid) // in all groups a person has same structure\n if (groups.length < 2) {\n alert(\n 'Must be a member of at least one group. Add to another group first.'\n )\n return\n }\n const message = 'Remove ' + pname + ' from group ' + gname + '?'\n if (confirm(message)) {\n let del = kb\n .statementsMatching(person, undefined, undefined, group.doc())\n .concat(kb.statementsMatching(undefined, undefined, person, group.doc()))\n webids.forEach(webid => {\n if (kb.statementsMatching(webid, groupMembershipControl_ns.owl('sameAs'), undefined, group.doc()).length < 2) {\n del = del.concat(kb.statementsMatching(undefined, undefined, webid, group.doc()))\n }\n })\n kb.updater.update(del, [], function (uri, ok, err) {\n if (!ok) {\n const message = 'Error removing member from group ' + group + ': ' + err\n groupList.parentNode.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n })\n console.log('Removed ' + pname + ' from group ' + gname)\n // to allow refresh of card groupList\n kb.fetcher.unload(group.doc())\n await kb.fetcher.load(group.doc())\n syncGroupList()\n }\n }\n\n function newRowForGroup (group) {\n const options = {\n deleteFunction: function () {\n removeFromGroup(person, group)\n },\n noun: 'membership'\n }\n const tr = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.personTR(dom, null, group, options)\n return tr\n }\n\n // find all groups where person has membership\n function syncGroupList () {\n // person and/or WebIDs to be changed\n groupMembershipControl_utils.syncTableToArray(groupList, groupMembership(person), newRowForGroup)\n }\n\n async function loadGroupsFromBook (book = null) {\n if (!book) {\n book = kb.any(undefined, groupMembershipControl_ns.vcard('includesGroup'))\n if (!book) {\n // throw new Error('findBookFromGroups: Cant find address book which this group is part of')\n return // no book => no groups\n }\n }\n const groupIndex = kb.any(book, groupMembershipControl_ns.vcard('groupIndex'))\n const gs = book ? kb.each(book, groupMembershipControl_ns.vcard('includesGroup'), null, groupIndex) : []\n await kb.fetcher.load(gs)\n }\n\n const { dom } = context\n const kb = context.session.store\n const groupList = dom.createElement('table')\n\n // find book any group and load all groups\n await loadGroupsFromBook()\n\n groupList.refresh = syncGroupList\n syncGroupList()\n return groupList\n}\n\n;// ./src/ontology/individualAndOrganizationForm.ttl\nconst individualAndOrganizationForm_namespaceObject = \"# This turtle file defines the forms used in the contacts management\\n#\\n# Individuals and orgs are in one file as they both\\n# share some forms (address etc) and also interactions (roles)\\n\\n# Forms documentation: https://solidos.github.io/solid-ui/docs/forms-intro.html\\n\\n@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.\\n@prefix dct: <http://purl.org/dc/terms/>.\\n@prefix foaf: <http://xmlns.com/foaf/0.1/>.\\n@prefix owl: <http://www.w3.org/2002/07/owl#>.\\n@prefix prov: <http://www.w3.org/ns/prov#>.\\n@prefix ui: <http://www.w3.org/ns/ui#>.\\n@prefix schema: <http://schema.org/>.\\n@prefix solid: <http://www.w3.org/ns/solid/terms#>.\\n@prefix vcard: <http://www.w3.org/2006/vcard/ns#>.\\n@prefix : <#>.\\n\\n\\n############# For individual:\\n:individualForm a ui:Form ;\\n dct:title \\\"Contact details for a person\\\" ;\\n ui:parts (\\n :fullNameField\\n :roleField\\n :orgNameField\\n # :addressesComment\\n :addresses\\n # :emailComment\\n :eMails\\n # :telephoneComment\\n :telephones\\n :birthdayField\\n # :noteComment\\n :noteField \\n ) .\\n\\n :fullNameField\\n a ui:SingleLineTextField ;\\n ui:label \\\"Name\\\";\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:fn .\\n\\n :roleField\\n a ui:SingleLineTextField ;\\n ui:suppressEmptyUneditable true;\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:role .\\n\\n :orgNameField\\n a ui:SingleLineTextField ;\\n ui:suppressEmptyUneditable true;\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:organization-name .\\n\\n :addresses a ui:Multiple ;\\n dct:title \\\"Address details\\\" ;\\n ui:part :oneAddress ;\\n ui:property vcard:hasAddress .\\n\\n :oneAddress a ui:Group ;\\n ui:parts ( \\n :id1409437207443 :id1409437292400 \\n :id1409437421996 :id1409437467649 \\n :id1409437569420 ). \\n\\n :id1409437207443\\n a ui:SingleLineTextField ;\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:street-address .\\n\\n :id1409437292400\\n a ui:SingleLineTextField ;\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:locality .\\n\\n :id1409437421996\\n a ui:SingleLineTextField ;\\n ui:maxLength \\\"25\\\" ;\\n ui:property vcard:postal-code .\\n\\n :id1409437467649\\n a ui:SingleLineTextField ;\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:region .\\n\\n :id1409437569420\\n a ui:SingleLineTextField ;\\n ui:maxLength \\\"128\\\" ;\\n ui:property vcard:country-name .\\n\\n\\n :eMails a ui:Multiple ;\\n ui:part :oneEMail ;\\n ui:property vcard:hasEmail .\\n\\n :oneEMail a ui:Group ; # hint: side by side is good\\n ui:part :emailValue, :emailType ;\\n ui:parts ( :emailType :emailValue ).\\n\\n :emailValue\\n a ui:EmailField ; ui:label \\\"email\\\";\\n ui:property vcard:value .\\n\\n :emailType\\n a ui:Classifier ;\\n ui:canMintNew \\\"0\\\" ;\\n ui:category vcard:Type ;\\n ui:from vcard:Type ;\\n ui:property rdf:type .\\n\\n :telephones a ui:Multiple ;\\n ui:part :onetelephone ;\\n ui:property vcard:hasTelephone .\\n\\n :onetelephone\\n a ui:Group ;\\n ui:part :telephoneValue, :telephoneType ;\\n ui:parts ( :telephoneType :telephoneValue ).\\n\\n :telephoneValue\\n a ui:PhoneField ;\\n ui:property vcard:value .\\n\\n :telephoneType\\n a ui:Classifier ;\\n ui:canMintNew \\\"0\\\" ;\\n ui:category vcard:TelephoneType ;\\n ui:from vcard:Type ;\\n ui:property rdf:type .\\n\\n :birthdayField a ui:DateField;\\n ui:label \\\"Born\\\"@en;\\n ui:suppressEmptyUneditable true;\\n ui:property vcard:bday .\\n\\n :noteField\\n a ui:MultiLineTextField ;\\n ui:suppressEmptyUneditable true;\\n ui:property vcard:note .\\n\\n# Ontology additions or interpretations needed for the form to work well\\n\\n# The ontology file doesn't make them disjoint. This makes the selector be a choice.\\nvcard:TelephoneType owl:disjointUnionOf ( vcard:Cell vcard:Home vcard:Work) .\\nvcard:Type owl:disjointUnionOf (vcard:Home vcard:Work) . # for email\\n\\n# Better field labels\\nvcard:Cell ui:label \\\"mobile\\\"@en . # app will make initial caps if necessary\\nvcard:hasAddress ui:label \\\"address\\\"@en .\\nvcard:bday ui:label \\\"born\\\"@en.\\nvcard:hasEmail ui:label \\\"email\\\"@en .\\nvcard:hasTelephone ui:label \\\"phone\\\"@en .\\nvcard:note ui:label \\\"notes\\\"@en .\\n\\n\\n############ For organizations\\n\\n:organizationForm a ui:Form ; \\n dct:title \\\"Contact details for an organization\\\";\\n ui:parts (\\n :OrgClassifier\\n :fullNameField\\n :homePageURIField\\n :addresses\\n :eMails\\n :telephones\\n :noteField ) .\\n\\n :OrgClassifier a ui:Classifier; \\n ui:label \\\"What sort of organization?\\\"@en;\\n ui:category solid:InterestingOrganization .\\n\\n :homePageURIField a ui:NamedNodeURIField;\\n ui:label \\\"Homepage\\\"@en;\\n ui:property schema:url .\\n\\n# Ontology data to drive the :OrgClassifier classifier\\n solid:InterestingOrganization owl:disjointUnionOf (\\n # Airline - a Corporation\\n # Consortium - a Corporation or a NGO\\n schema:Corporation\\n schema:EducationalOrganization\\n schema:ResearchOrganization # Proposed. https://github.com/schemaorg/schemaorg/issues/2877\\n # FundingScheme - eh?\\n schema:GovernmentOrganization\\n # LibrarySystem\\n # LocalBusiness - Corporation\\n # MedicalOrganization - a Corporation or a NGO\\n schema:NGO\\n # NewsMediaOrganization - a Corporation or a NGO\\n schema:PerformingGroup # a band\\n schema:Project # like Solid\\n schema:SportsOrganization) .\\n\";\n;// ./src/ontology/vcard.ttl\nconst vcard_namespaceObject = \"@prefix : <http://www.w3.org/2006/vcard/ns#> .\\n@prefix owl: <http://www.w3.org/2002/07/owl#> .\\n@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\\n@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\\n@prefix xml: <http://www.w3.org/XML/1998/namespace> .\\n@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .\\n\\n:Acquaintance a owl:Class ;\\n rdfs:label \\\"Acquaintance\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Agent a owl:Class ;\\n rdfs:label \\\"Agent\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:BBS a owl:Class ;\\n rdfs:label \\\"BBS\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType ;\\n owl:deprecated true .\\n\\n:Car a owl:Class ;\\n rdfs:label \\\"Car\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType ;\\n owl:deprecated true .\\n\\n:Cell a owl:Class ;\\n rdfs:label \\\"Cell\\\"@en ;\\n rdfs:comment \\\"Also called mobile telephone\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:Child a owl:Class ;\\n rdfs:label \\\"Child\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Colleague a owl:Class ;\\n rdfs:label \\\"Colleague\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Contact a owl:Class ;\\n rdfs:label \\\"Contact\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Coresident a owl:Class ;\\n rdfs:label \\\"Coresident\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Coworker a owl:Class ;\\n rdfs:label \\\"Coworker\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Crush a owl:Class ;\\n rdfs:label \\\"Crush\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Date a owl:Class ;\\n rdfs:label \\\"Date\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Dom a owl:Class ;\\n rdfs:label \\\"Dom\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Emergency a owl:Class ;\\n rdfs:label \\\"Emergency\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Fax a owl:Class ;\\n rdfs:label \\\"Fax\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:Female a owl:Class ;\\n rdfs:label \\\"Female\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Gender .\\n\\n:Friend a owl:Class ;\\n rdfs:label \\\"Friend\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Home a owl:Class ;\\n rdfs:label \\\"Home\\\"@en ;\\n rdfs:comment \\\"This implies that the property is related to an individual's personal life\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type .\\n\\n:ISDN a owl:Class ;\\n rdfs:label \\\"ISDN\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Internet a owl:Class ;\\n rdfs:label \\\"Internet\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Intl a owl:Class ;\\n rdfs:label \\\"Intl\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Kin a owl:Class ;\\n rdfs:label \\\"Kin\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Label a owl:Class ;\\n rdfs:label \\\"Label\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Male a owl:Class ;\\n rdfs:label \\\"Male\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Gender .\\n\\n:Me a owl:Class ;\\n rdfs:label \\\"Me\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Met a owl:Class ;\\n rdfs:label \\\"Met\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Modem a owl:Class ;\\n rdfs:label \\\"Modem\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType ;\\n owl:deprecated true .\\n\\n:Msg a owl:Class ;\\n rdfs:label \\\"Msg\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType ;\\n owl:deprecated true .\\n\\n:Muse a owl:Class ;\\n rdfs:label \\\"Muse\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Neighbor a owl:Class ;\\n rdfs:label \\\"Neighbor\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:None a owl:Class ;\\n rdfs:label \\\"None\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Gender .\\n\\n:Other a owl:Class ;\\n rdfs:label \\\"Other\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Gender .\\n\\n:PCS a owl:Class ;\\n rdfs:label \\\"PCS\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType ;\\n owl:deprecated true .\\n\\n:Pager a owl:Class ;\\n rdfs:label \\\"Pager\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:Parcel a owl:Class ;\\n rdfs:label \\\"Parcel\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Parent a owl:Class ;\\n rdfs:label \\\"Parent\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Postal a owl:Class ;\\n rdfs:label \\\"Postal\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Pref a owl:Class ;\\n rdfs:label \\\"Pref\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:Sibling a owl:Class ;\\n rdfs:label \\\"Sibling\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Spouse a owl:Class ;\\n rdfs:label \\\"Spouse\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Sweetheart a owl:Class ;\\n rdfs:label \\\"Sweetheart\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :RelatedType .\\n\\n:Tel a owl:Class ;\\n rdfs:label \\\"Tel\\\"@en ;\\n rdfs:comment \\\"This class is deprecated. Use the hasTelephone object property.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:Text a owl:Class ;\\n rdfs:label \\\"Text\\\"@en ;\\n rdfs:comment \\\"Also called sms telephone\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:TextPhone a owl:Class ;\\n rdfs:label \\\"Text phone\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:Unknown a owl:Class ;\\n rdfs:label \\\"Unknown\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Gender .\\n\\n:Video a owl:Class ;\\n rdfs:label \\\"Video\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:Voice a owl:Class ;\\n rdfs:label \\\"Voice\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :TelephoneType .\\n\\n:Work a owl:Class ;\\n rdfs:label \\\"Work\\\"@en ;\\n rdfs:comment \\\"This implies that the property is related to an individual's work place\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type .\\n\\n:X400 a owl:Class ;\\n rdfs:label \\\"X400\\\"@en ;\\n rdfs:comment \\\"This class is deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Type ;\\n owl:deprecated true .\\n\\n:adr a owl:ObjectProperty ;\\n rdfs:label \\\"address\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasAddress .\\n\\n:agent a owl:ObjectProperty ;\\n rdfs:label \\\"agent\\\"@en ;\\n rdfs:comment \\\"This object property has been deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:anniversary a owl:DatatypeProperty ;\\n rdfs:label \\\"anniversary\\\"@en ;\\n rdfs:comment \\\"The date of marriage, or equivalent, of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range [ a rdfs:Datatype ;\\n owl:unionOf ( xsd:dateTime xsd:gYear ) ] .\\n\\n:bday a owl:DatatypeProperty ;\\n rdfs:label \\\"birth date\\\"@en ;\\n rdfs:comment \\\"To specify the birth date of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range [ a rdfs:Datatype ;\\n owl:unionOf ( xsd:dateTime xsd:dateTimeStamp xsd:gYear ) ] .\\n\\n:category a owl:DatatypeProperty ;\\n rdfs:label \\\"category\\\"@en ;\\n rdfs:comment \\\"The category information about the object, also known as tags\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:class a owl:DatatypeProperty ;\\n rdfs:label \\\"class\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:email a owl:ObjectProperty ;\\n rdfs:label \\\"email\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasEmail .\\n\\n:extended-address a owl:DatatypeProperty ;\\n rdfs:label \\\"extended address\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:geo a owl:ObjectProperty ;\\n rdfs:label \\\"geo\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasGeo .\\n\\n:hasAdditionalName a owl:ObjectProperty ;\\n rdfs:label \\\"has additional name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the additional name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasCalendarBusy a owl:ObjectProperty ;\\n rdfs:label \\\"has calendar busy\\\"@en ;\\n rdfs:comment \\\"To specify the busy time associated with the object. (Was called FBURL in RFC6350)\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasCalendarLink a owl:ObjectProperty ;\\n rdfs:label \\\"has calendar link\\\"@en ;\\n rdfs:comment \\\"To specify the calendar associated with the object. (Was called CALURI in RFC6350)\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasCalendarRequest a owl:ObjectProperty ;\\n rdfs:label \\\"has calendar request\\\"@en ;\\n rdfs:comment \\\"To specify the calendar user address to which a scheduling request be sent for the object. (Was called CALADRURI in RFC6350)\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasCategory a owl:ObjectProperty ;\\n rdfs:label \\\"has category\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the category data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasCountryName a owl:ObjectProperty ;\\n rdfs:label \\\"has country name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the country name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasFN a owl:ObjectProperty ;\\n rdfs:label \\\"has formatted name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the formatted name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasFamilyName a owl:ObjectProperty ;\\n rdfs:label \\\"has family name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the family name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasGender a owl:ObjectProperty ;\\n rdfs:label \\\"has gender\\\"@en ;\\n rdfs:comment \\\"To specify the sex or gender identity of the object. URIs are recommended to enable interoperable sex and gender codes to be used.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasGivenName a owl:ObjectProperty ;\\n rdfs:label \\\"has given name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the given name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasHonorificPrefix a owl:ObjectProperty ;\\n rdfs:label \\\"has honorific prefix\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the honorific prefix data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasHonorificSuffix a owl:ObjectProperty ;\\n rdfs:label \\\"has honorific suffix\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the honorific suffix data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasInstantMessage a owl:ObjectProperty ;\\n rdfs:label \\\"has messaging\\\"@en ;\\n rdfs:comment \\\"To specify the instant messaging and presence protocol communications with the object. (Was called IMPP in RFC6350)\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasLanguage a owl:ObjectProperty ;\\n rdfs:label \\\"has language\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the language data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasLocality a owl:ObjectProperty ;\\n rdfs:label \\\"has locality\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the locality data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasNickname a owl:ObjectProperty ;\\n rdfs:label \\\"has nickname\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the nickname data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:seeAlso :nickname .\\n\\n:hasNote a owl:ObjectProperty ;\\n rdfs:label \\\"has note\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the note data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasOrganizationName a owl:ObjectProperty ;\\n rdfs:label \\\"has organization name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the organization name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasOrganizationUnit a owl:ObjectProperty ;\\n rdfs:label \\\"has organization unit name\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the organization unit name data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasPostalCode a owl:ObjectProperty ;\\n rdfs:label \\\"has postal code\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the postal code data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasRegion a owl:ObjectProperty ;\\n rdfs:label \\\"has region\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the region data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasRelated a owl:ObjectProperty ;\\n rdfs:label \\\"has related\\\"@en ;\\n rdfs:comment \\\"To specify a relationship between another entity and the entity represented by this object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasRole a owl:ObjectProperty ;\\n rdfs:label \\\"has role\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the role data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasSource a owl:ObjectProperty ;\\n rdfs:label \\\"has source\\\"@en ;\\n rdfs:comment \\\"To identify the source of directory information of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasStreetAddress a owl:ObjectProperty ;\\n rdfs:label \\\"has street address\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the street address data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasTitle a owl:ObjectProperty ;\\n rdfs:label \\\"has title\\\"@en ;\\n rdfs:comment \\\"Used to support property parameters for the title data property\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasUID a owl:ObjectProperty ;\\n rdfs:label \\\"has uid\\\"@en ;\\n rdfs:comment \\\"To specify a value that represents a globally unique identifier corresponding to the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasValue a owl:ObjectProperty ;\\n rdfs:label \\\"has value\\\"@en ;\\n rdfs:comment \\\"Used to indicate the resource value of an object property that requires property parameters\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:label a owl:DatatypeProperty ;\\n rdfs:label \\\"label\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:language a owl:DatatypeProperty ;\\n rdfs:label \\\"language\\\"@en ;\\n rdfs:comment \\\"To specify the language that may be used for contacting the object. May also be used as a property parameter.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:latitude a owl:DatatypeProperty ;\\n rdfs:label \\\"latitude\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated. See hasGeo\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:longitude a owl:DatatypeProperty ;\\n rdfs:label \\\"longitude\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated. See hasGeo\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:mailer a owl:DatatypeProperty ;\\n rdfs:label \\\"mailer\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:note a owl:DatatypeProperty ;\\n rdfs:label \\\"note\\\"@en ;\\n rdfs:comment \\\"A note associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:org a owl:ObjectProperty ;\\n rdfs:label \\\"organization\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped. Use the organization-name data property.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :organization-name .\\n\\n:organization-unit a owl:DatatypeProperty ;\\n rdfs:label \\\"organizational unit name\\\"@en ;\\n rdfs:comment \\\"To specify the organizational unit name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string ;\\n rdfs:subPropertyOf :organization-name .\\n\\n:post-office-box a owl:DatatypeProperty ;\\n rdfs:label \\\"post office box\\\"@en ;\\n rdfs:comment \\\"This data property has been deprecated\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:prodid a owl:DatatypeProperty ;\\n rdfs:label \\\"product id\\\"@en ;\\n rdfs:comment \\\"To specify the identifier for the product that created the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:rev a owl:DatatypeProperty ;\\n rdfs:label \\\"revision\\\"@en ;\\n rdfs:comment \\\"To specify revision information about the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:dateTime .\\n\\n:role a owl:DatatypeProperty ;\\n rdfs:label \\\"role\\\"@en ;\\n rdfs:comment \\\"To specify the function or part played in a particular situation by the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:sort-string a owl:DatatypeProperty ;\\n rdfs:label \\\"sort as\\\"@en ;\\n rdfs:comment \\\"To specify the string to be used for national-language-specific sorting. Used as a property parameter only.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:title a owl:DatatypeProperty ;\\n rdfs:label \\\"title\\\"@en ;\\n rdfs:comment \\\"To specify the position or job of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:tz a owl:DatatypeProperty ;\\n rdfs:label \\\"time zone\\\"@en ;\\n rdfs:comment \\\"To indicate time zone information that is specific to the object. May also be used as a property parameter.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:value a owl:DatatypeProperty ;\\n rdfs:label \\\"value\\\"@en ;\\n rdfs:comment \\\"Used to indicate the literal value of a data property that requires property parameters\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:Address a owl:Class ;\\n rdfs:label \\\"Address\\\"@en ;\\n rdfs:comment \\\"To specify the components of the delivery address for the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentClass [ a owl:Class ;\\n owl:unionOf ( [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :country-name ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :country-name ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :locality ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :locality ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :postal-code ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :postal-code ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :region ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :region ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :street-address ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :street-address ] ) ] ) ] .\\n\\n:Email a owl:Class ;\\n rdfs:label \\\"Email\\\"@en ;\\n rdfs:comment \\\"To specify the electronic mail address for communication with the object the vCard represents. Use the hasEmail object property.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:deprecated true .\\n\\n:Group a owl:Class ;\\n rdfs:label \\\"Group\\\"@en ;\\n rdfs:comment \\\"Object representing a group of persons or entities. A group object will usually contain hasMember properties to specify the members of the group.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Kind ;\\n owl:disjointWith :Individual,\\n :Location,\\n :Organization ;\\n owl:equivalentClass [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :hasMember ;\\n owl:someValuesFrom :Kind ] [ a owl:Restriction ;\\n owl:minQualifiedCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onClass :Kind ;\\n owl:onProperty :hasMember ] ) ] .\\n\\n:Individual a owl:Class ;\\n rdfs:label \\\"Individual\\\"@en ;\\n rdfs:comment \\\"An object representing a single person or entity\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Kind ;\\n owl:disjointWith :Location,\\n :Organization .\\n\\n:Name a owl:Class ;\\n rdfs:label \\\"Name\\\"@en ;\\n rdfs:comment \\\"To specify the components of the name of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentClass [ a owl:Class ;\\n owl:unionOf ( [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :additional-name ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:minCardinality \\\"0\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :additional-name ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :family-name ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :family-name ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :given-name ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:maxCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :given-name ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :honorific-prefix ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:minCardinality \\\"0\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :honorific-prefix ] ) ] [ a owl:Class ;\\n owl:intersectionOf ( [ a owl:Restriction ;\\n owl:onProperty :honorific-suffix ;\\n owl:someValuesFrom xsd:string ] [ a owl:Restriction ;\\n owl:minCardinality \\\"0\\\"^^xsd:nonNegativeInteger ;\\n owl:onProperty :honorific-suffix ] ) ] ) ] .\\n\\n:VCard a owl:Class ;\\n rdfs:label \\\"VCard\\\"@en ;\\n rdfs:comment \\\"The vCard class is equivalent to the new Kind class, which is the parent for the four explicit types of vCards (Individual, Organization, Location, Group)\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentClass :Kind .\\n\\n:fn a owl:DatatypeProperty ;\\n rdfs:label \\\"formatted name\\\"@en ;\\n rdfs:comment \\\"The formatted text corresponding to the name of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:hasAddress a owl:ObjectProperty ;\\n rdfs:label \\\"has address\\\"@en ;\\n rdfs:comment \\\"To specify the components of the delivery address for the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range :Address .\\n\\n:hasEmail a owl:ObjectProperty ;\\n rdfs:label \\\"has email\\\"@en ;\\n rdfs:comment \\\"To specify the electronic mail address for communication with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range :Email .\\n\\n:hasGeo a owl:ObjectProperty ;\\n rdfs:label \\\"has geo\\\"@en ;\\n rdfs:comment \\\"To specify information related to the global positioning of the object. May also be used as a property parameter.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:hasKey a owl:ObjectProperty ;\\n rdfs:label \\\"has key\\\"@en ;\\n rdfs:comment \\\"To specify a public key or authentication certificate associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :key .\\n\\n:hasLogo a owl:ObjectProperty ;\\n rdfs:label \\\"has logo\\\"@en ;\\n rdfs:comment \\\"To specify a graphic image of a logo associated with the object \\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :logo .\\n\\n:hasName a owl:ObjectProperty ;\\n rdfs:label \\\"has name\\\"@en ;\\n rdfs:comment \\\"To specify the components of the name of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range :Name ;\\n owl:equivalentProperty :n .\\n\\n:hasPhoto a owl:ObjectProperty ;\\n rdfs:label \\\"has photo\\\"@en ;\\n rdfs:comment \\\"To specify an image or photograph information that annotates some aspect of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :photo .\\n\\n:hasSound a owl:ObjectProperty ;\\n rdfs:label \\\"has sound\\\"@en ;\\n rdfs:comment \\\"To specify a digital sound content information that annotates some aspect of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :sound .\\n\\n:hasTelephone a owl:ObjectProperty ;\\n rdfs:label \\\"has telephone\\\"@en ;\\n rdfs:comment \\\"To specify the telephone number for telephony communication with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :tel .\\n\\n:hasURL a owl:ObjectProperty ;\\n rdfs:label \\\"has url\\\"@en ;\\n rdfs:comment \\\"To specify a uniform resource locator associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :url .\\n\\n:key a owl:ObjectProperty ;\\n rdfs:label \\\"key\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasKey .\\n\\n:logo a owl:ObjectProperty ;\\n rdfs:label \\\"logo\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasLogo .\\n\\n:n a owl:ObjectProperty ;\\n rdfs:label \\\"name\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasName .\\n\\n:nickname a owl:DatatypeProperty ;\\n rdfs:label \\\"nickname\\\"@en ;\\n rdfs:comment \\\"The nick name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:photo a owl:ObjectProperty ;\\n rdfs:label \\\"photo\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasPhoto .\\n\\n:sound a owl:ObjectProperty ;\\n rdfs:label \\\"sound\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasSound .\\n\\n:tel a owl:ObjectProperty ;\\n rdfs:label \\\"telephone\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasTelephone .\\n\\n:url a owl:ObjectProperty ;\\n rdfs:label \\\"url\\\"@en ;\\n rdfs:comment \\\"This object property has been mapped\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentProperty :hasURL .\\n\\n:Location a owl:Class ;\\n rdfs:label \\\"Location\\\"@en ;\\n rdfs:comment \\\"An object representing a named geographical place\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Kind ;\\n owl:disjointWith :Organization .\\n\\n:additional-name a owl:DatatypeProperty ;\\n rdfs:label \\\"additional name\\\"@en ;\\n rdfs:comment \\\"The additional name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:country-name a owl:DatatypeProperty ;\\n rdfs:label \\\"country name\\\"@en ;\\n rdfs:comment \\\"The country name associated with the address of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:family-name a owl:DatatypeProperty ;\\n rdfs:label \\\"family name\\\"@en ;\\n rdfs:comment \\\"The family name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:given-name a owl:DatatypeProperty ;\\n rdfs:label \\\"given name\\\"@en ;\\n rdfs:comment \\\"The given name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:hasMember a owl:ObjectProperty ;\\n rdfs:label \\\"has member\\\"@en ;\\n rdfs:comment \\\"To include a member in the group this object represents. (This property can only be used by Group individuals)\\\"@en ;\\n rdfs:domain :Group ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range :Kind .\\n\\n:honorific-prefix a owl:DatatypeProperty ;\\n rdfs:label \\\"honorific prefix\\\"@en ;\\n rdfs:comment \\\"The honorific prefix of the name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:honorific-suffix a owl:DatatypeProperty ;\\n rdfs:label \\\"honorific suffix\\\"@en ;\\n rdfs:comment \\\"The honorific suffix of the name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:locality a owl:DatatypeProperty ;\\n rdfs:label \\\"locality\\\"@en ;\\n rdfs:comment \\\"The locality (e.g. city or town) associated with the address of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:organization-name a owl:DatatypeProperty ;\\n rdfs:label \\\"organization name\\\"@en ;\\n rdfs:comment \\\"To specify the organizational name associated with the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:postal-code a owl:DatatypeProperty ;\\n rdfs:label \\\"postal code\\\"@en ;\\n rdfs:comment \\\"The postal code associated with the address of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:region a owl:DatatypeProperty ;\\n rdfs:label \\\"region\\\"@en ;\\n rdfs:comment \\\"The region (e.g. state or province) associated with the address of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:street-address a owl:DatatypeProperty ;\\n rdfs:label \\\"street address\\\"@en ;\\n rdfs:comment \\\"The street address associated with the address of the object\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:range xsd:string .\\n\\n:Organization a owl:Class ;\\n rdfs:label \\\"Organization\\\"@en ;\\n rdfs:comment \\\"\\\"\\\"An object representing an organization. An organization is a single entity, and might represent a business or government, a department or division within a business or government, a club, an association, or the like.\\n\\\"\\\"\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n rdfs:subClassOf :Kind .\\n\\n:Gender a owl:Class ;\\n rdfs:label \\\"Gender\\\"@en ;\\n rdfs:comment \\\"Used for gender codes. The URI of the gender code must be used as the value for Gender.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:Kind a owl:Class ;\\n rdfs:label \\\"Kind\\\"@en ;\\n rdfs:comment \\\"The parent class for all objects\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> ;\\n owl:equivalentClass [ a owl:Restriction ;\\n owl:minQualifiedCardinality \\\"1\\\"^^xsd:nonNegativeInteger ;\\n owl:onDataRange xsd:string ;\\n owl:onProperty :fn ],\\n :VCard .\\n\\n:Type a owl:Class ;\\n rdfs:label \\\"Type\\\"@en ;\\n rdfs:comment \\\"Used for type codes. The URI of the type code must be used as the value for Type.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:TelephoneType a owl:Class ;\\n rdfs:label \\\"Phone\\\"@en ;\\n rdfs:comment \\\"Used for telephone type codes. The URI of the telephone type code must be used as the value for the Telephone Type.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n:RelatedType a owl:Class ;\\n rdfs:label \\\"Relation Type\\\"@en ;\\n rdfs:comment \\\"Used for relation type codes. The URI of the relation type code must be used as the value for the Relation Type.\\\"@en ;\\n rdfs:isDefinedBy <http://www.w3.org/2006/vcard/ns> .\\n\\n<http://www.w3.org/2006/vcard/ns> a owl:Ontology ;\\n rdfs:label \\\"Ontology for vCard\\\"@en ;\\n rdfs:comment \\\"Ontology for vCard based on RFC6350\\\"@en ;\\n owl:versionInfo \\\"Final\\\"@en .\\n\\n\\n\";\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/styles/individual.css\nvar individual = __webpack_require__(479);\n;// ./src/styles/individual.css\n\n \n \n \n \n \n \n \n \n \n\nvar individual_options = {};\n\nindividual_options.styleTagTransform = (styleTagTransform_default());\nindividual_options.setAttributes = (setAttributesWithoutAttributes_default());\nindividual_options.insert = insertBySelector_default().bind(null, \"head\");\nindividual_options.domAPI = (styleDomAPI_default());\nindividual_options.insertStyleElement = (insertStyleElement_default());\n\nvar individual_update = injectStylesIntoStyleTag_default()(individual/* default */.A, individual_options);\n\n\n\n\n /* harmony default export */ const styles_individual = (individual/* default */.A && individual/* default */.A.locals ? individual/* default */.A.locals : undefined);\n\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/styles/rdfFormsEnforced.css\nvar rdfFormsEnforced = __webpack_require__(434);\n;// ./src/styles/rdfFormsEnforced.css\n\n \n \n \n \n \n \n \n \n \n\nvar rdfFormsEnforced_options = {};\n\nrdfFormsEnforced_options.styleTagTransform = (styleTagTransform_default());\nrdfFormsEnforced_options.setAttributes = (setAttributesWithoutAttributes_default());\nrdfFormsEnforced_options.insert = insertBySelector_default().bind(null, \"head\");\nrdfFormsEnforced_options.domAPI = (styleDomAPI_default());\nrdfFormsEnforced_options.insertStyleElement = (insertStyleElement_default());\n\nvar rdfFormsEnforced_update = injectStylesIntoStyleTag_default()(rdfFormsEnforced/* default */.A, rdfFormsEnforced_options);\n\n\n\n\n /* harmony default export */ const styles_rdfFormsEnforced = (rdfFormsEnforced/* default */.A && rdfFormsEnforced/* default */.A.locals ? rdfFormsEnforced/* default */.A.locals : undefined);\n\n;// ./src/rdfFormsHelper.js\n\n\n\nconst baseUri = 'https://solidos.github.io/contacts-pane/src/ontology/'\n\nfunction renderForm (\n div,\n subject, // Represents the RDF that fills the form\n formSource, // The imported form Turtle source\n formName, // The name of the form file (e.g., 'socialMedia.ttl')\n store,\n dom,\n editableProfile,\n whichForm) {\n // --- Form resource setup ---\n const formUri = baseUri + formName // Full URI to the form file\n const exactForm = whichForm || 'this' // If there are more 'a ui:Form' elements in a form file\n const formThis = (0,external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.Namespace)(formUri + '#')(exactForm) // NamedNode for #this in the form\n\n loadDocument(store, formSource, formName, formUri)\n\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.appendForm(\n dom,\n div,\n {},\n subject,\n formThis,\n editableProfile,\n (ok, mes) => {\n if (!ok) external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, mes)\n }\n )\n} // renderForm\n\n// we need to load into the store some additional information about Social Media accounts\nfunction loadDocument (\n store,\n documentSource,\n documentName,\n documentURI\n) {\n const finalDocumentUri = documentURI || baseUri + documentName // Full URI to the file\n const document = (0,external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.sym)(finalDocumentUri) // rdflib NamedNode for the document\n\n if (!store.holds(undefined, undefined, undefined, document)) {\n // we are using the social media form because it contains the information we need\n // the form can be used for both use cases: create UI for edit and render UI for display\n (0,external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.parse)(documentSource, store, finalDocumentUri, 'text/turtle', () => null) // Load doc directly\n }\n}\n\n;// ./src/individual.js\n\n\n\n\n\n\n\n\n\n\n\nconst individual_ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\nconst individual_kb = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store\n\nconst formsName = 'individualAndOrganizationForm.ttl' // The name of the form file\nconst vcardName = 'vcard.ttl' // The name of the vcard file\n// Render Individual card\n\nasync function renderIndividual (dom, div, subject, dataBrowserContext) {\n // //////////////////// DRAG and Drop for mugshot image\n\n function complain (message) {\n console.log(message)\n div.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n\n /// ///////////////////////////\n const t = individual_kb.findTypeURIs(subject)\n const isOrganization = !!(t[individual_ns.vcard('Organization').uri] || t[individual_ns.schema('Organization').uri])\n const editable = individual_kb.updater.editable(subject.doc().uri, individual_kb)\n\n // We load the local form document\n loadDocument(individual_kb, individualAndOrganizationForm_namespaceObject, formsName)\n\n // We need to make sure VCARD ontology is loaded in the store\n const vcardOntUri = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns.vcard('Type').doc().uri // URI to VCARD\n loadDocument(individual_kb, vcard_namespaceObject, vcardName, vcardOntUri)\n\n try {\n await individual_kb.fetcher.load(subject.doc())\n } catch (err) {\n complain('Error: Failed to load profile card: ' + err)\n } // end of try catch on load\n\n div.classList.add('individualPane')\n\n external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.authn.checkUser() // kick off async operation @@@ use async version\n\n div.appendChild(renderMugshotGallery(dom, subject))\n\n const whichForm = isOrganization ? 'organizationForm' : 'individualForm'\n\n renderForm(div, subject, individualAndOrganizationForm_namespaceObject, formsName, external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store, dom, subject.doc(), whichForm)\n\n div.appendChild(await renderGroupMemberships(subject, dataBrowserContext))\n\n // Auto complete searches in a table\n // Prefer the fom below renderPublicIdControl\n /*\n if (isOrganization) {\n const publicDataTable = div.appendChild(dom.createElement('table'))\n async function publicDataSearchRow (name) {\n async function autoCompleteDone (object, _name) {\n right.innerHTML = ''\n right.appendchild(UI.widgets.personTR(dom, object))\n }\n const row = dom.createElement('tr')\n const left = row.appendChild(dom.createElement('td'))\n left.textContent = name\n const right = row.appendChild(dom.createElement('td'))\n right.appendChild(await renderAutoComplete(dom, subject, ns.owl('sameAs'), autoCompleteDone))\n return row\n }\n publicDataTable.appendChild(await publicDataSearchRow('dbpedia'))\n }\n*/\n // Allow to attach documents etc to the contact card\n\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.attachmentList(dom, subject, div, {\n modify: editable\n // promptIcon: UI.icons.iconBase + 'noun_681601.svg',\n // predicate: UI.ns.vcard('url') // @@@@@@@@@ ,--- no, the vcard ontology structure uses a bnode.\n })\n\n if (isOrganization) {\n div.appendChild(await renderPublicIdControl(subject, dataBrowserContext))\n } else {\n div.appendChild(await renderWebIdControl(subject, dataBrowserContext))\n }\n // div.appendChild(dom.createElement('hr'))\n} // renderIndividual\n\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/styles/toolsPane.css\nvar toolsPane = __webpack_require__(295);\n;// ./src/styles/toolsPane.css\n\n \n \n \n \n \n \n \n \n \n\nvar toolsPane_options = {};\n\ntoolsPane_options.styleTagTransform = (styleTagTransform_default());\ntoolsPane_options.setAttributes = (setAttributesWithoutAttributes_default());\ntoolsPane_options.insert = insertBySelector_default().bind(null, \"head\");\ntoolsPane_options.domAPI = (styleDomAPI_default());\ntoolsPane_options.insertStyleElement = (insertStyleElement_default());\n\nvar toolsPane_update = injectStylesIntoStyleTag_default()(toolsPane/* default */.A, toolsPane_options);\n\n\n\n\n /* harmony default export */ const styles_toolsPane = (toolsPane/* default */.A && toolsPane/* default */.A.locals ? toolsPane/* default */.A.locals : undefined);\n\n;// ./src/toolsPane.js\n// The tools pane is for managing and debugging and maintaining solid contacts databases\n//\n\n\n\n\n\n\n\nfunction toolsPane_toolsPane (\n selectAllGroups,\n selectedGroups,\n groupsMainTable,\n book,\n dataBrowserContext,\n me\n) {\n const dom = dataBrowserContext.dom\n const kb = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store\n const ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\n const VCARD = ns.vcard\n\n const pane = dom.createElement('div')\n const table = pane.appendChild(dom.createElement('table'))\n table.classList.add('toolsTable')\n const headerRow = table.appendChild(dom.createElement('tr'))\n headerRow.textContent = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(book) + ' - tools'\n headerRow.classList.add('toolsHeader')\n\n const statusRow = table.appendChild(dom.createElement('tr'))\n const statusBlock = statusRow.appendChild(dom.createElement('div'))\n statusBlock.classList.add('toolsStatusBlock')\n const MainRow = table.appendChild(dom.createElement('tr'))\n const box = MainRow.appendChild(dom.createElement('table'))\n table.appendChild(dom.createElement('tr')) // bottomRow\n\n const context = {\n target: book,\n me,\n noun: 'address book',\n div: pane,\n dom,\n statusRegion: statusBlock\n }\n\n function complain (message) {\n console.log(message)\n statusBlock.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n\n // Body of main pane function\n async function main () {\n box.appendChild(\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.aclControl.ACLControlBox5(\n book.dir(),\n dataBrowserContext,\n 'book',\n kb,\n function (ok, body) {\n if (!ok) box.innerHTML = 'ACL control box Failed: ' + body\n }\n )\n )\n\n //\n try {\n await external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.login.registrationControl(context, book, ns.vcard('AddressBook'))\n } catch (e) {\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.complain(context, 'registrationControl: ' + e)\n }\n console.log('Registration control finished.')\n\n // Output stats in line mode form\n const logSpace = MainRow.appendChild(dom.createElement('pre'))\n function log (message) {\n console.log(message)\n logSpace.textContent += message + '\\n'\n }\n\n function stats () {\n const totalCards = kb.each(undefined, VCARD('inAddressBook'), book).length\n log('' + totalCards + ' cards loaded. ')\n let groups = kb.each(book, VCARD('includesGroup'))\n const strings = new Set(groups.map(group => group.uri)) // remove dups\n groups = [...strings].map(uri => kb.sym(uri))\n log('' + groups.length + ' total groups. ')\n const gg = []\n for (const g in selectedGroups) {\n gg.push(g)\n }\n log('' + gg.length + ' selected groups. ')\n }\n\n async function loadIndexHandler (_event) {\n loadIndexButton.classList.add('toolsButton--loading')\n loadIndexButton.classList.remove('toolsButton--error', 'toolsButton--success')\n const nameEmailIndex = kb.any(book, ns.vcard('nameEmailIndex'))\n try {\n await kb.fetcher.load(nameEmailIndex)\n } catch (e) {\n loadIndexButton.classList.remove('toolsButton--loading')\n loadIndexButton.classList.add('toolsButton--error')\n log('Error: People index has NOT been loaded' + e + '\\n')\n }\n loadIndexButton.classList.remove('toolsButton--loading')\n loadIndexButton.classList.add('toolsButton--success')\n log(' People index has been loaded\\n')\n } // loadIndexHandler\n const loadIndexButton = pane.appendChild(dom.createElement('button'))\n loadIndexButton.textContent = 'Load main index'\n loadIndexButton.classList.add('toolsButton')\n loadIndexButton.addEventListener('click', loadIndexHandler)\n\n const statButton = pane.appendChild(dom.createElement('button'))\n statButton.textContent = 'Statistics'\n statButton.classList.add('toolsButton')\n statButton.addEventListener('click', stats)\n\n const checkAccessButton = pane.appendChild(dom.createElement('button'))\n checkAccessButton.textContent =\n 'Check individual card access of selected groups'\n checkAccessButton.classList.add('toolsButton')\n async function checkAcces (_event) {\n function doCard (card) {\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.acl.fixIndividualCardACL(card, log, function (ok, message) {\n if (ok) {\n log('Success for ' + external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(card))\n } else {\n log('Failure for ' + external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(card) + ': ' + message)\n }\n })\n }\n const gg = []\n for (const g in selectedGroups) {\n gg.push(g)\n }\n\n for (let i = 0; i < gg.length; i++) {\n const g = kb.sym(gg[i])\n const a = groupMembers(kb, g)\n log(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(g) + ': ' + a.length + ' members')\n for (let j = 0; j < a.length; j++) {\n const card = a[j]\n log(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(card))\n doCard(card)\n }\n }\n }\n checkAccessButton.addEventListener('click', checkAcces)\n\n // ///////////////////////////////////////////////////////////////////////////\n //\n // DUPLICATES CHECK\n const checkDuplicates = pane.appendChild(dom.createElement('button'))\n checkDuplicates.textContent = 'Find duplicate cards'\n checkDuplicates.classList.add('toolsButton')\n checkDuplicates.addEventListener('click', function (_event) {\n const stats = {} // global god context\n\n stats.book = book\n stats.nameEmailIndex = kb.any(book, ns.vcard('nameEmailIndex'))\n log('Loading name index...')\n\n external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.store.fetcher.nowOrWhenFetched(\n stats.nameEmailIndex,\n undefined,\n function (_ok, _message) {\n log('Loaded name index.')\n\n stats.cards = []\n stats.duplicates = []\n stats.definitive = []\n stats.nameless = []\n\n stats.exactDuplicates = []\n stats.nameOnlyDuplicates = []\n\n stats.uniquesSet = []\n stats.groupProblems = []\n\n // Erase one card and all its files -> (err)\n //\n /*\n function eraseOne (card) {\n return new Promise(function (resolve, reject) {\n function removeFromMainIndex () {\n var indexBit = kb.connectedStatements(card, stats.nameEmailIndex)\n log('Bits of the name index file:' + indexBit)\n log('Patching main index file...')\n kb.updater.update(indexBit, [], function (uri, ok, body) {\n if (ok) {\n log('Success')\n resolve(null)\n } else {\n log('Error patching index file! ' + body)\n reject('Error patching index file! ' + body)\n }\n })\n }\n var filesToDelete = [ card.doc() ]\n var photos = kb.each(card, ns.vcard('hasPhoto')) // could be > 1\n if (photos.length) {\n filesToDelete = filesToDelete.concat(photos)\n }\n filesToDelete.push(card.dir()) // the folder last\n log('Files to delete: ' + filesToDelete)\n if (!confirm('DELETE card ' + card.dir() + ' for \"' + kb.any(card, VCARD('fn')) + '\", with ' + kb.each(card).length + 'statements?')) {\n return resolve('Cancelled by user')\n }\n\n function deleteNextFile () {\n var resource = filesToDelete.shift()\n if (!resource) {\n log('All deleted')\n removeFromMainIndex()\n resolve()\n }\n log('Deleting ... ' + resource)\n kb.fetcher.delete(resource)\n .then(function () {\n log('Deleted ok: ' + resource)\n deleteNextFile()\n })\n .catch(function (e) {\n var err = '*** ERROR deleting ' + resource + ': ' + e\n log(err)\n if (confirm('Patch out index file for card ' + card.dir() + ' EVEN THOUGH card DELETE errors?')) {\n removeFromMainIndex()\n } else {\n reject(err)\n }\n })\n }\n deleteNextFile()\n }) // Promise\n } // erase one\n */\n // Check actual records to see which are exact matches - slow\n stats.nameDupLog = kb.sym(book.dir().uri + 'dedup-nameDupLog.ttl')\n stats.exactDupLog = kb.sym(book.dir().uri + 'dedup-exactDupLog.ttl')\n /*\n function checkOne (card) {\n return new Promise(function (resolve, reject) {\n var name = kb.anyValue(card, ns.vcard('fn'))\n var other = stats.definitive[name]\n kb.fetcher.load([card, other]).then(function (xhrs) {\n var exclude = {}\n exclude[ns.vcard('hasUID').uri] = true\n exclude[ns.dc('created').uri] = true\n exclude[ns.dc('modified').uri] = true\n function filtered (x) {\n return kb.statementsMatching(null, null, null, x.doc()).filter(function (st) {\n return !exclude[st.predicate.uri]\n })\n }\n var desc = filtered(card)\n var desc2 = filtered(other)\n // var desc = connectedStatements(card, card.doc(), exclude)\n // var desc2 = connectedStatements(other, other.doc(), exclude)\n if (desc.length !== desc2.length) {\n log('CARDS to NOT match lengths ')\n stats.nameOnlyDuplicates.push(card)\n return resolve(false)\n }\n if (!desc.length) {\n log('@@@@@@ Zero length ')\n stats.nameOnlyDuplicates.push(card)\n return resolve(false)\n }\n // //////// Compare the two\n // Cheat: serialize and compare\n // var cardText = $rdf.serialize(card.doc(), kb, card.doc().uri, 'text/turtle')\n // var otherText = $rdf.serialize(other.doc(), kb, other.doc().uri, 'text/turtle')\n var cardText = (new $rdf.Serializer(kb)).setBase(card.doc().uri).statementsToN3(desc)\n var otherText = (new $rdf.Serializer(kb)).setBase(other.doc().uri).statementsToN3(desc2)\n //\n // log('Name: ' + name + ', statements: ' + desc.length)\n // log('___________________________________________')\n // log('KEEPING: ' + other.doc() + '\\n' + cardText)\n // log('___________________________________________')\n // log('DELETING: '+ card.doc() + '\\n' + otherText)\n // log('___________________________________________')\n //\n if (cardText !== otherText) {\n log('Texts differ')\n stats.nameOnlyDuplicates.push(card)\n return resolve(false)\n }\n var cardGroups = kb.each(null, ns.vcard('hasMember'), card)\n var otherGroups = kb.each(null, ns.vcard('hasMember'), other)\n for (var j = 0; j < cardGroups.length; j++) {\n var found = false\n for (var k = 0; k < otherGroups.length; k++) {\n if (otherGroups[k].sameTerm(cardGroups[j])) { found = true }\n }\n if (!found) {\n log('This one groups: ' + cardGroups)\n log('Other one groups: ' + otherGroups)\n log('Cant delete this one because it has a group, ' + cardGroups[j] + ', which the other does not.')\n stats.nameOnlyDuplicates.push(card)\n return resolve(false)\n }\n }\n console.log('Group check done -- exact duplicate: ' + card)\n stats.exactDuplicates.push(card)\n resolve(true)\n }).catch(function (e) {\n log('Cant load a card! ' + [card, other] + ': ' + e)\n stats.nameOnlyDuplicates.push(card)\n resolve(false)\n // if (confirm('Patch out index file for card ' + card.dir() + ' EVEN THOUGH card READ errors?')){\n // removeFromMainIndex()\n // }\n })\n })\n } // checkOne\n */\n stats.nameOnlyErrors = []\n stats.nameLessZeroData = []\n stats.nameLessIndex = []\n stats.namelessUniques = []\n stats.nameOnlyDuplicatesGroupDiff = []\n\n function checkOneNameless (card) {\n return new Promise(function (resolve) {\n kb.fetcher\n .load(card)\n .then(function (_xhr) {\n log(' Nameless check ' + card)\n const exclude = {}\n exclude[ns.vcard('hasUID').uri] = true\n exclude[ns.dc('created').uri] = true\n exclude[ns.dc('modified').uri] = true\n function filtered (x) {\n return kb\n .statementsMatching(null, null, null, x.doc())\n .filter(function (st) {\n return !exclude[st.predicate.uri]\n })\n }\n\n const desc = filtered(card)\n // var desc = connectedStatements(card, card.doc(), exclude)\n // var desc2 = connectedStatements(other, other.doc(), exclude)\n if (!desc.length) {\n log(' Zero length ' + card)\n stats.nameLessZeroData.push(card)\n return resolve(false)\n }\n // Compare the two\n // Cheat: serialize and compare\n // var cardText = $rdf.serialize(card.doc(), kb, card.doc().uri, 'text/turtle')\n // var otherText = $rdf.serialize(other.doc(), kb, other.doc().uri, 'text/turtle')\n const cardText = new external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.Serializer(kb)\n .setBase(card.doc().uri)\n .statementsToN3(desc)\n const other = stats.nameLessIndex[cardText]\n if (other) {\n log(' Matches with ' + other)\n // alain not sure it works we may need to concat with 'sameAs' group.doc (.map(st => st.why))\n const cardGroups = kb.each(null, ns.vcard('hasMember'), card)\n const otherGroups = kb.each(null, ns.vcard('hasMember'), other)\n for (let j = 0; j < cardGroups.length; j++) {\n let found = false\n for (let k = 0; k < otherGroups.length; k++) {\n if (otherGroups[k].sameTerm(cardGroups[j])) found = true\n }\n if (!found) {\n log('This one groups: ' + cardGroups)\n log('Other one groups: ' + otherGroups)\n log(\n 'Cant skip this one because it has a group, ' +\n cardGroups[j] +\n ', which the other does not.'\n )\n stats.nameOnlyDuplicatesGroupDiff.push(card)\n return resolve(false)\n }\n }\n console.log('Group check done -- exact duplicate: ' + card)\n } else {\n log('First nameless like: ' + card.doc())\n log('___________________________________________')\n log(cardText)\n log('___________________________________________')\n stats.nameLessIndex[cardText] = card\n stats.namelessUniques.push(card)\n }\n resolve(true)\n })\n .catch(function (e) {\n log('Cant load a nameless card!: ' + e)\n stats.nameOnlyErrors.push(card)\n resolve(false)\n })\n })\n } // checkOneNameless\n\n function checkAllNameless () {\n stats.namelessToCheck =\n stats.namelessToCheck || stats.nameless.slice()\n log('Nameless check left: ' + stats.namelessToCheck.length)\n return new Promise(function (resolve) {\n const x = stats.namelessToCheck.shift()\n if (!x) {\n log('namelessUniques: ' + stats.namelessUniques.length)\n log('namelessUniques: ' + stats.namelessUniques)\n if (stats.namelessUniques.length > 0 &&\n confirm(\n 'Add all ' +\n stats.namelessUniques.length +\n ' nameless cards to the rescued set?'\n )\n ) {\n stats.uniques = stats.uniques.concat(stats.namelessUniques)\n for (let k = 0; k < stats.namelessUniques.length; k++) {\n stats.uniqueSet[stats.namelessUniques[k].uri] = true\n }\n }\n return resolve(true)\n }\n checkOneNameless(x).then(function (exact) {\n log(' Nameless check returns ' + exact)\n checkAllNameless() // loop\n })\n })\n }\n\n function checkGroupMembers () {\n return new Promise(function (resolve) {\n // var inUniques = 0\n log('Groups loaded')\n for (let i = 0; i < stats.uniques.length; i++) {\n stats.uniquesSet[stats.uniques[i].uri] = true\n }\n stats.groupMembers = []\n kb.each(null, ns.vcard('hasMember'))\n .forEach(group => { stats.groupMembers = stats.groupMembers.concat(groupMembers(kb, group)) })\n log(' Naive group members ' + stats.groupMembers.length)\n stats.groupMemberSet = []\n for (let j = 0; j < stats.groupMembers.length; j++) {\n stats.groupMemberSet[stats.groupMembers[j].uri] =\n stats.groupMembers[j]\n }\n stats.groupMembers2 = []\n for (const g in stats.groupMemberSet) {\n stats.groupMembers2.push(stats.groupMemberSet[g])\n }\n log(' Compact group members ' + stats.groupMembers2.length)\n\n if (\n external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.keepThisCodeForLaterButDisableFerossConstantConditionPolice\n ) {\n // Don't inspect as seems groups membership is complete\n for (let i = 0; i < stats.groupMembers.length; i++) {\n const card = stats.groupMembers[i]\n if (stats.uniquesSet[card.uri]) {\n // inUniques += 1\n } else {\n log(' Not in uniques: ' + card)\n stats.groupProblems.push(card)\n if (stats.duplicateSet[card.uri]) {\n log(' ** IN duplicates alas:' + card)\n } else {\n log(' **** WTF?')\n }\n }\n }\n log('Problem cards: ' + stats.groupProblems.length)\n } // if\n resolve(true)\n })\n } // checkGroupMembers\n\n function scanForDuplicates () {\n return new Promise(function (resolve) {\n stats.cards = kb.each(undefined, VCARD('inAddressBook'), stats.book)\n log('' + stats.cards.length + ' total cards')\n\n let c, card, name\n for (c = 0; c < stats.cards.length; c++) {\n card = stats.cards[c]\n name = kb.anyValue(card, ns.vcard('fn'))\n if (!name) {\n stats.nameless.push(card)\n continue\n }\n if (stats.definitive[name] === card) {\n // pass\n } else if (stats.definitive[name]) {\n const n = stats.duplicates.length\n if (n < 100 || (n < 1000 && n % 10 === 0) || n % 100 === 0) {\n // log('' + n + ') Possible duplicate ' + card + ' of: ' + definitive[name])\n }\n stats.duplicates.push(card)\n } else {\n stats.definitive[name] = card\n }\n }\n\n stats.duplicateSet = []\n for (let i = 0; i < stats.duplicates.length; i++) {\n stats.duplicateSet[stats.duplicates[i].uri] = stats.duplicates[i]\n }\n stats.namelessSet = []\n for (let i = 0; i < stats.nameless.length; i++) {\n stats.namelessSet[stats.nameless[i].uri] = stats.nameless[i]\n }\n stats.uniques = []\n stats.uniqueSet = []\n for (let i = 0; i < stats.cards.length; i++) {\n const uri = stats.cards[i].uri\n if (!stats.duplicateSet[uri] && !stats.namelessSet[uri]) {\n stats.uniques.push(stats.cards[i])\n stats.uniqueSet[uri] = stats.cards[i]\n }\n }\n log('Uniques: ' + stats.uniques.length)\n\n log('' + stats.nameless.length + ' nameless cards.')\n log(\n '' +\n stats.duplicates.length +\n ' name-duplicate cards, leaving ' +\n (stats.cards.length - stats.duplicates.length)\n )\n resolve(true)\n })\n }\n\n // Save a new clean version\n function saveCleanPeople () {\n let cleanPeople\n\n return Promise.resolve()\n .then(() => {\n cleanPeople = kb.sym(stats.book.dir().uri + 'clean-people.ttl')\n let sts = []\n for (let i = 0; i < stats.uniques.length; i++) {\n sts = sts.concat(\n kb.connectedStatements(stats.uniques[i], stats.nameEmailIndex)\n )\n }\n const sz = new external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.Serializer(kb).setBase(stats.nameEmailIndex.uri)\n log('Serializing index of uniques...')\n const data = sz.statementsToN3(sts)\n\n return kb.fetcher.webOperation('PUT', cleanPeople, {\n data,\n contentType: 'text/turtle'\n })\n })\n .then(function () {\n log('Done uniques log ' + cleanPeople)\n return true\n })\n .catch(function (e) {\n log('Error saving uniques: ' + e)\n })\n }\n\n function saveCleanGroup (g) {\n let cleanGroup\n\n return Promise.resolve()\n .then(() => {\n const s = g.uri.replace('/Group/', '/NewGroup/')\n cleanGroup = kb.sym(s)\n let sts = []\n for (let i = 0; i < stats.uniques.length; i++) {\n sts = sts.concat(\n kb.connectedStatements(stats.uniques[i], g.doc())\n )\n }\n const sz = new external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.Serializer(kb).setBase(g.uri)\n log(' Regenerating group of uniques...' + cleanGroup)\n const data = sz.statementsToN3(sts)\n\n return kb.fetcher.webOperation('PUT', cleanGroup, {\n data,\n contentType: 'text/turtle'\n })\n })\n .then(() => {\n log(' Done uniques group ' + cleanGroup)\n return true\n })\n .catch(e => {\n log('Error saving : ' + e)\n })\n }\n\n function saveAllGroups () {\n log('Saving ALL GROUPS')\n return Promise.all(stats.groupObjects.map(saveCleanGroup))\n }\n\n const getAndSortGroups = function () {\n let groups = []\n if (stats.book) {\n const books = [stats.book]\n books.forEach(function (book) {\n const gs = book ? kb.each(book, ns.vcard('includesGroup')) : []\n const gs2 = gs.map(function (g) {\n return [book, kb.any(g, ns.vcard('fn')), g]\n })\n groups = groups.concat(gs2)\n })\n groups.sort()\n }\n return groups\n }\n const groups = getAndSortGroups() // Needed?\n\n stats.groupObjects = groups.map(gstr => gstr[2])\n log('Loading ' + stats.groupObjects.length + ' groups... ')\n kb.fetcher\n .load(stats.groupObjects)\n .then(scanForDuplicates)\n .then(checkGroupMembers)\n .then(checkAllNameless)\n .then(() => {\n return new Promise(function (resolve, reject) {\n if (confirm('Write new clean versions?')) {\n resolve(true)\n } else {\n reject(new Error('User cancelled writing clean versions'))\n }\n })\n })\n .then(saveCleanPeople)\n .then(saveAllGroups)\n .then(function () {\n log('Done!')\n })\n }\n )\n })\n\n async function fixGroupless (book) {\n const groupless = await getGroupless(book)\n if (groupless.length === 0) {\n log('No groupless cards found.')\n return\n }\n const groupOfUngrouped = await saveNewGroup(book, 'ZSortThese')\n if (confirm(`Add the ${groupless.length} cards without groups to a ZSortThese group?`)) {\n for (const person of groupless) {\n log(' adding ' + person)\n await addPersonToGroup(person, groupOfUngrouped)\n }\n }\n log('People moved to group.')\n }\n\n async function getGroupless (book) {\n const groupIndex = kb.any(book, ns.vcard('groupIndex'))\n const nameEmailIndex = kb.any(book, ns.vcard('nameEmailIndex'))\n try {\n await kb.fetcher.load([nameEmailIndex, groupIndex])\n const groups = kb.each(book, ns.vcard('includesGroup'))\n await kb.fetcher.load(groups)\n } catch (e) {\n complain('Error loading stuff:' + e)\n }\n\n const reverseIndex = {}\n const groupless = []\n let groups = kb.each(book, VCARD('includesGroup'))\n const strings = new Set(groups.map(group => group.uri)) // remove dups\n groups = [...strings].map(uri => kb.sym(uri))\n log('' + groups.length + ' total groups. ')\n\n for (let i = 0; i < groups.length; i++) {\n const g = groups[i]\n const a = groupMembers(kb, g)\n\n log(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(g) + ': ' + a.length + ' members')\n for (let j = 0; j < a.length; j++) {\n kb.allAliases(a[j]).forEach(function (y) {\n reverseIndex[y.uri] = g\n })\n }\n }\n\n const cards = kb.each(undefined, VCARD('inAddressBook'), book)\n log('' + cards.length + ' total cards')\n for (let c = 0; c < cards.length; c++) {\n if (!reverseIndex[cards[c].uri]) {\n groupless.push(cards[c])\n log(' groupless ' + external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils.label(cards[c]))\n }\n }\n log('' + groupless.length + ' groupless cards.')\n return groupless\n }\n\n const checkGroupless = pane.appendChild(dom.createElement('button'))\n checkGroupless.classList.add('toolsButton')\n checkGroupless.textContent = 'Find individuals with no group'\n checkGroupless.addEventListener('click', function (_event) {\n log('Loading groups...')\n selectAllGroups(selectedGroups, groupsMainTable, async function (ok, message) {\n if (!ok) {\n log('Load all groups: failed: ' + message)\n return\n }\n\n const nameEmailIndex = kb.any(book, ns.vcard('nameEmailIndex'))\n try {\n await kb.fetcher.load(nameEmailIndex)\n } catch (e) {\n complain(e)\n }\n log('Loaded groups and name index.')\n getGroupless(book)\n log('Groupless list finished..')\n }) // select all groups then\n })\n\n const fixGrouplessButton = pane.appendChild(dom.createElement('button'))\n fixGrouplessButton.classList.add('toolsButton')\n fixGrouplessButton.textContent = 'Put all individuals with no group in a new group'\n fixGrouplessButton.addEventListener('click', _event => fixGroupless(book))\n\n async function fixToOldDataModel (book) {\n async function updateToOldDataModel (groups) {\n let ds = []\n let ins = []\n groups.forEach(group => {\n let vcardOrWebids = kb.statementsMatching(null, ns.owl('sameAs'), null, group.doc()).map(st => st.subject)\n const strings = new Set(vcardOrWebids.map(contact => contact.uri)) // remove dups\n vcardOrWebids = [...strings].map(uri => kb.sym(uri))\n vcardOrWebids.forEach(item => {\n if (!kb.each(item, ns.vcard('fn'), null, group.doc()).length) {\n // delete item this is a new data model, item is a webid not a card.\n ds = ds.concat(kb\n .statementsMatching(item, ns.owl('sameAs'), null, group.doc())\n .concat(kb.statementsMatching(undefined, undefined, item, group.doc())))\n // add webid card to group\n const cards = kb.each(item, ns.owl('sameAs'), null, group.doc())\n cards.forEach(card => {\n ins = ins.concat(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(card, ns.owl('sameAs'), item, group.doc()))\n .concat(external_commonjs_rdflib_commonjs2_rdflib_amd_rdflib_root_$rdf_.st(group, ns.vcard('hasMember'), card, group.doc()))\n })\n }\n })\n })\n if (ds.length && confirm('Groups can be updated to old data model ?')) {\n await kb.updater.updateMany(ds, ins)\n alert('Update done')\n } else { if (!ds.length) alert('Nothing to update.\\nAll Groups already use the old data model.') }\n }\n let groups = kb.each(book, VCARD('includesGroup'))\n const strings = new Set(groups.map(group => group.uri)) // remove dups\n groups = [...strings].map(uri => kb.sym(uri))\n updateToOldDataModel(groups)\n }\n\n const fixToOldDataModelButton = pane.appendChild(dom.createElement('button'))\n fixToOldDataModelButton.classList.add('toolsButton')\n fixToOldDataModelButton.textContent = 'Revert groups to old data model'\n fixToOldDataModelButton.addEventListener('click', _event => fixToOldDataModel(book))\n } // main\n main()\n return pane\n} // toolsPane\n\n// ends\n\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./src/styles/contactsPane.css\nvar contactsPane = __webpack_require__(903);\n;// ./src/styles/contactsPane.css\n\n \n \n \n \n \n \n \n \n \n\nvar contactsPane_options = {};\n\ncontactsPane_options.styleTagTransform = (styleTagTransform_default());\ncontactsPane_options.setAttributes = (setAttributesWithoutAttributes_default());\ncontactsPane_options.insert = insertBySelector_default().bind(null, \"head\");\ncontactsPane_options.domAPI = (styleDomAPI_default());\ncontactsPane_options.insertStyleElement = (insertStyleElement_default());\n\nvar contactsPane_update = injectStylesIntoStyleTag_default()(contactsPane/* default */.A, contactsPane_options);\n\n\n\n\n /* harmony default export */ const styles_contactsPane = (contactsPane/* default */.A && contactsPane/* default */.A.locals ? contactsPane/* default */.A.locals : undefined);\n\n;// ./src/contactsPane.js\n/* Contact AddressBook Pane\n**\n** This outline pane allows a user to interact with a contact,\nto change its state according to an ontology, comment on it, etc.\n**\n** See also things like\n** http://www.w3.org/TR/vcard-rdf/\n** http://tools.ietf.org/html/rfc6350\n** http://www.iana.org/assignments/vcard-elements/vcard-elements.xhtml\n**\n*/\n\n\n\n\n\n\n\n\n\n\nconst contactsPane_ns = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns\nconst contactsPane_utils = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.utils\n\n/* harmony default export */ const src_contactsPane = ({\n icon: external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.icons.iconBase + 'noun_99101.svg', // changed from embedded icon 2016-05-01\n\n name: 'contact',\n\n // Does the subject deserve a contact pane?\n label: function (subject, context) {\n const t = context.session.store.findTypeURIs(subject)\n if (t[contactsPane_ns.vcard('Individual').uri]) return 'Contact'\n if (t[contactsPane_ns.vcard('Organization').uri]) return 'Contact'\n if (t[contactsPane_ns.foaf('Person').uri]) return 'Person'\n if (t[contactsPane_ns.schema('Person').uri]) return 'Person'\n if (t[contactsPane_ns.vcard('Group').uri]) return 'Group'\n if (t[contactsPane_ns.vcard('AddressBook').uri]) return 'Address book'\n return null // No, under other circumstances\n },\n\n mintClass: external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns.vcard('AddressBook'),\n\n mintNew: mintNewAddressBook, // Make a new address book\n\n // Render the pane\n render: function (subject, dataBrowserContext, paneOptions = {}) {\n const thisPane = this\n\n // stick functions here\n function complain (message) {\n // console.log('contactsPane: ' + message)\n div.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n function complainIfBad (ok, body) {\n if (!ok) {\n complain('Error: ' + body)\n }\n }\n\n // Reproduction: Spawn a new instance of this app\n function newAddressBookButton (thisAddressBook) {\n return external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.login.newAppInstance(\n dom,\n { noun: 'address book', appPathSegment: 'contactorator.timbl.com' },\n function (ws, newBase) {\n thisPane.mintNew(thisAddressBook, newBase, {\n me,\n div,\n dom\n })\n }\n )\n } // newAddressBookButton\n\n const dom = dataBrowserContext.dom\n const kb = dataBrowserContext.session.store\n const div = dom.createElement('div')\n const me = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.authn.currentUser() // If already logged on\n\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.aclControl.preventBrowserDropEvents(dom) // protect drag and drop\n\n div.setAttribute('class', 'contactPane')\n\n asyncRender().then(\n () => console.log('contactsPane Rendered ' + subject),\n err => complain('' + err))\n return div\n\n // Async part of render. Maybe API will later allow render to be async\n async function asyncRender () {\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.aclControl.preventBrowserDropEvents(dom)\n\n const t = kb.findTypeURIs(subject)\n\n let me = external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.authn.currentUser()\n\n const context = {\n target: subject,\n me,\n noun: 'address book',\n div,\n dom\n } // missing: statusRegion\n\n // Render a 3-column browser for an address book or a group\n function renderThreeColumnBrowser (books, context, options) {\n kb.fetcher\n .load(books)\n .then(function (_xhr) {\n renderThreeColumnBrowser2(books, context, options)\n })\n .catch(function (err) {\n complain(err)\n })\n }\n function renderThreeColumnBrowser2 (books, context, options) {\n const classLabel = contactsPane_utils.label(contactsPane_ns.vcard('AddressBook'))\n // const IndividualClassLabel = utils.label(ns.vcard('Individual'))\n\n let book = books[0] // for now\n const groupIndex = kb.any(book, contactsPane_ns.vcard('groupIndex'))\n let selectedGroups = {}\n let selectedPeople = {} // Actually prob max 1\n\n const target = options.foreignGroup || book\n\n let title =\n kb.any(target, contactsPane_ns.dc('title')) || kb.any(target, contactsPane_ns.vcard('fn'))\n if (paneOptions.solo && title && typeof document !== 'undefined') {\n document.title = title.value // @@ only when the outermmost pane\n }\n title = title ? title.value : classLabel\n\n // The book could be the main subject, or linked from a group we are dealing with\n function findBookFromGroups (book) {\n if (book) {\n return book\n }\n let g\n for (const gu in selectedGroups) {\n g = kb.sym(gu)\n const b = kb.any(undefined, contactsPane_ns.vcard('includesGroup'), g)\n if (b) return b\n }\n throw new Error(\n 'findBookFromGroups: Cant find address book which this group is part of'\n )\n }\n\n // Write a new contact to the web\n\n // organization-name is a hack for Mac records with no FN which is mandatory.\n function nameFor (x) {\n const name =\n kb.any(x, contactsPane_ns.vcard('fn')) ||\n kb.any(x, contactsPane_ns.foaf('name')) ||\n kb.any(x, contactsPane_ns.vcard('organization-name'))\n return name ? name.value : '???'\n }\n\n function filterName (name) {\n const filter = searchInput.value.trim().toLowerCase()\n if (filter.length === 0) return true\n const parts = filter.split(' ') // Each name part must be somewhere\n for (let j = 0; j < parts.length; j++) {\n const word = parts[j]\n if (name.toLowerCase().indexOf(word) < 0) return false\n }\n return true\n }\n\n function selectPerson (person) {\n cardMain.innerHTML = 'loading...'\n selectedPeople = {}\n selectedPeople[person.uri] = true\n refreshFilteredPeople() // Color to remember which one you picked\n const local = book ? localNode(person) : person\n kb.fetcher.nowOrWhenFetched(local.doc(), undefined, function (\n ok,\n message\n ) {\n cardMain.innerHTML = ''\n if (!ok) {\n return complainIfBad(\n ok,\n 'Can\\'t load card: ' + local + ': ' + message\n )\n }\n // console.log(\"Loaded card \" + local + '\\n')\n cardMain.appendChild(renderPane(dom, local, 'contact'))\n cardMain.appendChild(dom.createElement('br'))\n\n cardMain.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.linkIcon(dom, local)) // hoverHide\n\n // Add in a delete button to delete from AB\n const deleteButton = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.deleteButtonWithCheck(\n dom,\n cardMain,\n 'contact',\n async function () {\n const container = person.dir() // ASSUMPTION THAT CARD IS IN ITS OWN DIRECTORY\n // alert('Container to delete is ' + container)\n const pname = kb.any(person, contactsPane_ns.vcard('fn'))\n if (\n confirm(\n 'Delete contact ' + pname + ' completely?? ' + container\n )\n ) {\n console.log('Deleting a contact ' + pname)\n await loadAllGroups() // need to wait for all groups to be loaded in case they have a link to this person\n // load people.ttl\n const nameEmailIndex = kb.any(book, contactsPane_ns.vcard('nameEmailIndex'))\n await kb.fetcher.load(nameEmailIndex)\n\n // - delete person's WebID's in each Group\n // - delete the references to it in group files and save them back\n // - delete the reference in people.ttl and save it back\n\n // find all Groups\n const groups = groupMembership(person)\n let removeFromGroups = []\n // find person WebID's\n groups.forEach(group => {\n const webids = contactsPane_getSameAs(kb, person, group.doc())\n // for each check in each Group that it is not used by an other person then delete\n webids.forEach(webid => {\n if (contactsPane_getSameAs(kb, webid, group.doc()).length === 1) {\n removeFromGroups = removeFromGroups.concat(kb.statementsMatching(group, contactsPane_ns.vcard('hasMember'), webid, group.doc()))\n }\n })\n })\n // console.log(removeFromGroups)\n await kb.updater.updateMany(removeFromGroups)\n await deleteThingAndDoc(person)\n await deleteRecursive(kb, container)\n refreshNames() // \"Doesn't work\" -- maybe does now with waiting for async\n cardMain.innerHTML = 'Contact Data Deleted.'\n }\n }\n )\n deleteButton.classList.add('deleteButton')\n })\n }\n\n function refreshFilteredPeople (active) {\n let count = 0\n let lastRow = null\n for (let i = 0; i < peopleMainTable.children.length; i++) {\n const row = peopleMainTable.children[i]\n const matches = filterName(nameFor(row.subject))\n if (matches) {\n count++\n lastRow = row\n }\n row.classList.toggle('selected', matches && !!selectedPeople[row.subject.uri])\n row.classList.toggle('hidden', !matches)\n }\n if (count === 1 && active) {\n const unique = lastRow.subject\n selectPerson(unique)\n }\n }\n\n function selectAllGroups (\n selectedGroups,\n groupsMainTable,\n callbackFunction\n ) {\n function fetchGroupAndSelct (group, groupRow) {\n groupRow.classList.add('group-loading')\n kb.fetcher.nowOrWhenFetched(group.doc(), undefined, function (\n ok,\n message\n ) {\n if (!ok) {\n const msg = 'Can\\'t load group file: ' + group + ': ' + message\n badness.push(msg)\n return complainIfBad(ok, msg)\n }\n groupRow.classList.remove('group-loading')\n groupRow.classList.add('selected')\n selectedGroups[group.uri] = true\n refreshGroupsSelected()\n refreshNames() // @@ every time??\n todo -= 1\n if (!todo) {\n if (callbackFunction) { callbackFunction(badness.length === 0, badness) }\n }\n })\n }\n let todo = groupsMainTable.children.length\n var badness = [] /* eslint-disable-line no-var */\n for (let k = 0; k < groupsMainTable.children.length; k++) {\n const groupRow = groupsMainTable.children[k]\n const group = groupRow.subject\n fetchGroupAndSelct(group, groupRow)\n } // for each row\n }\n\n async function loadAllGroups () {\n await kb.fetcher.load(groupIndex)\n const gs = book ? kb.each(book, contactsPane_ns.vcard('includesGroup'), null, groupIndex) : []\n await kb.fetcher.load(gs)\n return gs\n }\n\n function groupsInOrder () {\n let sortMe = []\n if (options.foreignGroup) {\n sortMe.push([\n '',\n kb.any(options.foreignGroup, contactsPane_ns.vcard('fn')),\n options.foreignGroup\n ])\n }\n if (book) {\n books.forEach(function (book) {\n const gs = book ? kb.each(book, contactsPane_ns.vcard('includesGroup'), null, groupIndex) : []\n const gs2 = gs.map(function (g) {\n return [book, kb.any(g, contactsPane_ns.vcard('fn')), g]\n })\n sortMe = sortMe.concat(gs2)\n })\n sortMe.sort()\n }\n return sortMe.map(tuple => tuple[2])\n }\n\n function renderPane (dom, subject, paneName) {\n const p = dataBrowserContext.session.paneRegistry.byName(paneName)\n const d = p.render(subject, dataBrowserContext)\n d.classList.add('renderPane')\n return d\n }\n\n function compareForSort (self, other) {\n let s = nameFor(self)\n let o = nameFor(other)\n if (s && o) {\n s = s.toLowerCase()\n o = o.toLowerCase()\n if (s > o) return 1\n if (s < o) return -1\n }\n if (self.uri > other.uri) return 1\n if (self.uri < other.uri) return -1\n return 0\n }\n\n // In a LDP work, deletes the whole document describing a thing\n // plus patch out ALL mentiosn of it! Use with care!\n // beware of other data picked up from other places being smushed\n // together and then deleted.\n\n async function deleteThingAndDoc (x) {\n console.log('deleteThingAndDoc: ' + x)\n const ds = kb\n .statementsMatching(x)\n .concat(kb.statementsMatching(undefined, undefined, x))\n try {\n await kb.updater.updateMany(ds)\n console.log('Deleting resoure ' + x.doc())\n await kb.fetcher.delete(x.doc())\n console.log('Delete thing ' + x + ': complete.')\n } catch (err) {\n complain('Error deleting thing ' + x + ': ' + err)\n }\n }\n\n // For deleting an addressbook sub-folder eg person - use with care!\n // @@ move to solid-logic\n function deleteRecursive (kb, folder) {\n return new Promise(function (resolve) {\n kb.fetcher.load(folder).then(function () {\n const promises = kb.each(folder, contactsPane_ns.ldp('contains')).map(file => {\n if (kb.holds(file, contactsPane_ns.rdf('type'), contactsPane_ns.ldp('BasicContainer'))) {\n return deleteRecursive(kb, file)\n } else {\n console.log('deleteRecirsive file: ' + file)\n if (!confirm(' Really DELETE File ' + file)) {\n throw new Error('User aborted delete file')\n }\n return kb.fetcher.webOperation('DELETE', file.uri)\n }\n })\n console.log('deleteRecirsive folder: ' + folder)\n if (!confirm(' Really DELETE folder ' + folder)) {\n throw new Error('User aborted delete file')\n }\n promises.push(kb.fetcher.webOperation('DELETE', folder.uri))\n Promise.all(promises).then(_res => {\n resolve()\n })\n })\n })\n }\n\n function localNode (person, _div) {\n const aliases = kb.allAliases(person)\n const prefix = book.dir().uri\n for (let i = 0; i < aliases.length; i++) {\n if (aliases[i].uri.slice(0, prefix.length) === prefix) {\n return aliases[i]\n }\n }\n throw new Error('No local URI for ' + person)\n }\n\n /** Refresh the list of names\n */\n function refreshNames () {\n function setPersonListener (personRow, person) {\n personRow.addEventListener('click', function (event) {\n event.preventDefault()\n selectPerson(person)\n })\n }\n\n let cards = []\n const groups = Object.keys(selectedGroups).map(groupURI => kb.sym(groupURI))\n groups.forEach(group => {\n if (selectedGroups[group.value]) {\n cards = cards.concat(groupMembers(kb, group))\n }\n })\n cards.sort(compareForSort) // @@ sort by name not UID later\n for (let k = 0; k < cards.length - 1;) {\n if (cards[k].uri === cards[k + 1].uri) {\n cards.splice(k, 1) // Eliminate duplicates from more than one group\n } else {\n k++\n }\n }\n\n peopleHeader.textContent = 'Contact name'\n\n function renderNameInGroupList (person) {\n const personRow = dom.createElement('tr')\n personRow.setAttribute('role', 'listitem')\n personRow.setAttribute('tabindex', '0')\n personRow.setAttribute('aria-label', nameFor(person))\n personRow.classList.add('personRow')\n personRow.subject = person\n const personLeft = personRow.appendChild(dom.createElement('td'))\n personLeft.classList.add('dataCell')\n // Visually hidden span for screen readers\n const srOnly = dom.createElement('span')\n srOnly.classList.add('visually-hidden')\n srOnly.textContent = 'Contact: '\n personLeft.appendChild(srOnly)\n personLeft.appendChild(dom.createTextNode(nameFor(person)))\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.makeDraggable(personRow, person)\n\n // Keyboard selection\n personRow.addEventListener('keydown', function (event) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n selectPerson(person)\n }\n })\n setPersonListener(personRow, person)\n return personRow\n }\n\n contactsPane_utils.syncTableToArrayReOrdered(peopleMainTable, cards, renderNameInGroupList)\n refreshFilteredPeople()\n } // refreshNames\n\n function refreshThingsSelected (table, selectionArray) {\n for (let i = 0; i < table.children.length; i++) {\n const row = table.children[i]\n if (row.subject) {\n row.classList.toggle('selected', !!selectionArray[row.subject.uri])\n }\n }\n }\n\n function refreshGroupsSelected () {\n return refreshThingsSelected(groupsMainTable, selectedGroups)\n }\n\n // Check every group is in the list and add it if not.\n\n function syncGroupTable () {\n function renderGroupRow (group) {\n async function handleURIsDroppedOnGroup (uris) {\n uris.forEach(function (u) {\n console.log('Dropped on group: ' + u)\n const thing = kb.sym(u)\n try {\n addPersonToGroup(thing, group)\n } catch (e) {\n complain(e)\n }\n refreshNames()\n })\n }\n function groupRowClickListener (event) {\n event.preventDefault()\n const groupList = kb.sym(group.uri.split('#')[0])\n if (!event.metaKey) {\n selectedGroups = {} // If Command key pressed, accumulate multiple\n }\n selectedGroups[group.uri] = !selectedGroups[group.uri]\n refreshGroupsSelected()\n peopleMainTable.innerHTML = '' // clear in case refreshNames doesn't work for unknown reason\n\n kb.fetcher.nowOrWhenFetched(\n groupList.uri,\n undefined,\n function (ok, message) {\n if (!ok) {\n return complainIfBad(\n ok,\n 'Can\\'t load group file: ' + groupList + ': ' + message\n )\n }\n refreshNames()\n\n if (!event.metaKey) {\n // If only one group has been selected, show ACL\n cardMain.innerHTML = ''\n let visible = false\n const aclControl = external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.aclControl.ACLControlBox5(\n group,\n dataBrowserContext,\n 'group',\n kb,\n function (ok, body, response) {\n if (!ok) {\n if (response && response.status && response.status === 403) {\n cardMain.innerHTML = 'No control access.'\n } else {\n cardMain.innerHTML = 'Failed to load access control: ' + body\n }\n }\n }\n )\n const sharingButton = cardMain.appendChild(\n dom.createElement('button')\n )\n sharingButton.classList.add('sharingButton')\n sharingButton.setAttribute('aria-label', 'Toggle group sharing settings')\n const img = sharingButton.appendChild(\n dom.createElement('img')\n )\n img.classList.add('sharingButtonIcon')\n img.setAttribute(\n 'src',\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.icons.iconBase + 'noun_123691.svg'\n )\n img.setAttribute('alt', 'Sharing icon')\n sharingButton.addEventListener('click', function () {\n visible = !visible\n if (visible) {\n cardMain.appendChild(aclControl)\n } else {\n cardMain.removeChild(aclControl)\n }\n })\n }\n }\n )\n }\n\n // Body of renderGroupRow\n const name = kb.any(group, contactsPane_ns.vcard('fn'))\n const groupRow = dom.createElement('tr')\n groupRow.setAttribute('role', 'listitem')\n groupRow.setAttribute('tabindex', '0')\n groupRow.setAttribute('aria-label', name ? name.value : 'Group')\n groupRow.subject = group\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.makeDraggable(groupRow, group)\n\n groupRow.classList.add('dataCell')\n // Visually hidden span for screen readers\n const srOnly = dom.createElement('span')\n srOnly.classList.add('visually-hidden')\n srOnly.textContent = 'Group: '\n groupRow.appendChild(srOnly)\n groupRow.appendChild(dom.createTextNode(name))\n\n // Keyboard selection\n groupRow.addEventListener('keydown', function (event) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n groupRowClickListener(event)\n }\n })\n\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.makeDropTarget(groupRow, handleURIsDroppedOnGroup)\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.deleteButtonWithCheck(\n dom,\n groupRow,\n 'group ' + name,\n async function () {\n await deleteThingAndDoc(group)\n syncGroupTable()\n }\n )\n groupRow.addEventListener('click', groupRowClickListener, true)\n return groupRow\n } // renderGroupRow\n\n const groups = groupsInOrder()\n contactsPane_utils.syncTableToArrayReOrdered(groupsMainTable, groups, renderGroupRow)\n refreshGroupsSelected()\n } // syncGroupTable\n\n async function checkDataModel () {\n // await kb.fetcher.load(groups) // asssume loaded already\n const groups = await loadAllGroups()\n\n const { del, ins } = await getDataModelIssues(groups)\n\n if (del.length && confirm(`Groups data model need to be updated? (${del.length})`)) {\n await kb.updater.updateMany(del, ins)\n alert('Update done')\n }\n } // checkDataModel\n\n // Click on New Group button\n async function newGroupClickHandler (_event) {\n cardMain.innerHTML = ''\n const groupIndex = kb.any(book, contactsPane_ns.vcard('groupIndex'))\n try {\n await kb.fetcher.load(groupIndex)\n } catch (e) {\n console.log('Error: Group index NOT loaded:' + e + '\\n')\n }\n console.log(' Group index has been loaded\\n')\n\n const name = await external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.askName(\n dom, kb, cardMain, external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns.foaf('name'), contactsPane_ns.vcard('Group'), 'group')\n if (!name) return // cancelled by user\n let group\n try {\n group = await saveNewGroup(book, name)\n } catch (err) {\n console.log('Error: can\\'t save new group:' + err)\n cardMain.innerHTML = 'Failed to save group' + err\n return\n }\n selectedGroups = {}\n selectedGroups[group.uri] = true\n syncGroupTable() // Refresh list of groups\n\n cardMain.innerHTML = ''\n cardMain.appendChild(external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.aclControl.ACLControlBox5(\n group.doc(), dataBrowserContext, 'group', kb,\n function (ok, body) {\n if (!ok) {\n cardMain.innerHTML =\n 'Group sharing setup failed: ' + body\n }\n }))\n } // newGroupClickHandler\n\n async function craeteNewCard (klass) {\n cardMain.innerHTML = ''\n const ourBook = findBookFromGroups(book)\n try {\n await kb.fetcher.load(ourBook)\n } catch (err) {\n throw new Error('Book won\\'t load:' + ourBook)\n }\n\n const nameEmailIndex = kb.any(ourBook, contactsPane_ns.vcard('nameEmailIndex'))\n if (!nameEmailIndex) throw new Error('Wot no nameEmailIndex?')\n await kb.fetcher.load(nameEmailIndex)\n // console.log('Name index loaded async' + nameEmailIndex)\n\n const name = await external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets\n .askName(dom, kb, cardMain, external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns.foaf('name'), klass) // @@ was, 'person'\n\n if (!name) return // cancelled by user\n cardMain.innerHTML = 'indexing...'\n book = findBookFromGroups(book)\n let person\n try {\n person = await saveNewContact(book, name, selectedGroups, klass)\n } catch (err) {\n const msg = 'Error: can\\'t save new contact: ' + err\n console.log(msg)\n alert(msg)\n }\n\n selectedPeople = {}\n selectedPeople[person.uri] = true\n refreshNames() // Add name to list of group\n cardMain.innerHTML = '' // Clear 'indexing'\n cardMain.appendChild(renderPane(dom, person, 'contact'))\n }\n\n // //////////////////////////// Three-column Contact Browser - Body\n // ////////////////// Body of 3-column browser\n\n // Main wrapper for accessibility and style\n const main = dom.createElement('main')\n main.id = 'main-content'\n main.classList.add('addressBook-grid')\n main.setAttribute('role', 'main')\n main.setAttribute('aria-label', 'Address Book')\n main.setAttribute('tabindex', '-1')\n div.appendChild(main)\n\n // Section wrapper for accessibility and style\n const section = dom.createElement('section')\n section.setAttribute('aria-labelledby', 'addressBook-section')\n section.classList.add('addressBookSection', 'section-bg')\n section.setAttribute('role', 'region')\n section.setAttribute('tabindex', '-1')\n main.appendChild(section)\n\n const header = dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n const h2 = dom.createElement('h2')\n h2.id = 'addressBook-heading'\n h2.setAttribute('tabindex', '-1')\n h2.textContent = title\n header.appendChild(h2)\n section.appendChild(header)\n\n // Accessible table structure\n const bookTable = dom.createElement('table')\n bookTable.classList.add('bookTable')\n bookTable.setAttribute('role', 'table')\n bookTable.setAttribute('aria-label', 'Contacts browser')\n section.appendChild(bookTable)\n\n // Table caption for screen readers\n const caption = dom.createElement('caption')\n caption.textContent = 'Contacts three-column browser'\n caption.classList.add('visually-hidden')\n bookTable.appendChild(caption)\n\n // Table head\n const thead = dom.createElement('thead')\n const bookHeader = dom.createElement('tr')\n thead.appendChild(bookHeader)\n bookTable.appendChild(thead)\n\n // Table body\n const tbody = dom.createElement('tbody')\n const bookMain = dom.createElement('tr')\n tbody.appendChild(bookMain)\n bookTable.appendChild(tbody)\n\n // Table footer\n const tfoot = dom.createElement('tfoot')\n const bookFooter = dom.createElement('tr')\n tfoot.appendChild(bookFooter)\n bookTable.appendChild(tfoot)\n\n // Headers\n const groupsHeader = dom.createElement('th')\n groupsHeader.setAttribute('scope', 'col')\n groupsHeader.setAttribute('id', 'groupsHeader')\n groupsHeader.textContent = 'Groups'\n groupsHeader.classList.add('groupsHeader')\n bookHeader.appendChild(groupsHeader)\n\n const peopleHeader = dom.createElement('th')\n peopleHeader.setAttribute('scope', 'col')\n peopleHeader.setAttribute('id', 'peopleHeader')\n peopleHeader.textContent = 'Name'\n peopleHeader.classList.add('peopleHeader')\n bookHeader.appendChild(peopleHeader)\n\n const cardHeader = dom.createElement('th')\n cardHeader.setAttribute('scope', 'col')\n cardHeader.setAttribute('id', 'cardHeader')\n cardHeader.textContent = 'Search for name'\n cardHeader.classList.add('cardHeader')\n bookHeader.appendChild(cardHeader)\n\n // Main columns\n const groupsMain = dom.createElement('td')\n groupsMain.classList.add('groupsMain')\n groupsMain.setAttribute('role', 'region')\n groupsMain.setAttribute('aria-labelledby', 'groupsHeader')\n const groupsMainTable = dom.createElement('table')\n groupsMainTable.setAttribute('role', 'list')\n groupsMainTable.setAttribute('aria-label', 'Groups list')\n groupsMain.appendChild(groupsMainTable)\n bookMain.appendChild(groupsMain)\n\n const peopleMain = dom.createElement('td')\n peopleMain.classList.add('peopleMain')\n peopleMain.setAttribute('role', 'region')\n peopleMain.setAttribute('aria-labelledby', 'peopleHeader')\n const peopleMainTable = dom.createElement('table')\n peopleMainTable.setAttribute('role', 'list')\n peopleMainTable.setAttribute('aria-label', 'People list')\n peopleMain.appendChild(peopleMainTable)\n bookMain.appendChild(peopleMain)\n\n const cardMain = dom.createElement('td')\n cardMain.classList.add('cardMain')\n cardMain.setAttribute('role', 'region')\n cardMain.setAttribute('aria-labelledby', 'cardHeader')\n bookMain.appendChild(cardMain)\n\n // Footer columns\n const groupsFooter = dom.createElement('td')\n groupsFooter.classList.add('groupsFooter')\n bookFooter.appendChild(groupsFooter)\n\n const peopleFooter = dom.createElement('td')\n bookFooter.appendChild(peopleFooter)\n\n const cardFooter = dom.createElement('td')\n bookFooter.appendChild(cardFooter)\n\n // Search input\n const searchDiv = dom.createElement('div')\n searchDiv.classList.add('searchDiv')\n cardHeader.appendChild(searchDiv)\n const searchInput = dom.createElement('input')\n searchInput.setAttribute('type', 'text')\n searchInput.setAttribute('aria-label', 'Search contacts')\n searchInput.classList.add('searchInput')\n searchDiv.appendChild(searchInput)\n searchInput.addEventListener('input', function (_event) {\n refreshFilteredPeople(true)\n })\n\n // Accessibility: keyboard navigation for peopleMainTable rows\n peopleMainTable.addEventListener('keydown', function (event) {\n const rows = Array.from(peopleMainTable.children)\n const current = document.activeElement\n const idx = rows.indexOf(current)\n if (event.key === 'ArrowDown' && idx < rows.length - 1) {\n rows[idx + 1].focus()\n event.preventDefault()\n } else if (event.key === 'ArrowUp' && idx > 0) {\n rows[idx - 1].focus()\n event.preventDefault()\n }\n })\n\n // ...existing code...\n function setGroupListVisibility (visible) {\n groupsHeader.classList.toggle('hidden', !visible)\n groupsMain.classList.toggle('hidden', !visible)\n groupsFooter.classList.toggle('hidden', !visible)\n }\n setGroupListVisibility(true)\n\n if (options.foreignGroup) {\n selectedGroups[options.foreignGroup.uri] = true\n }\n if (book) {\n const allGroups = groupsHeader.appendChild(dom.createElement('button'))\n allGroups.textContent = 'All'\n allGroups.classList.add('allGroupsButton', 'actionButton', 'btn-secondary', 'action-button-focus')\n allGroups.addEventListener('click', function (_event) {\n allGroups.state = allGroups.state ? 0 : 1\n peopleMainTable.innerHTML = '' // clear in case refreshNames doesn't work for unknown reason\n if (allGroups.state) {\n allGroups.classList.add('allGroupsButton--loading')\n selectAllGroups(selectedGroups, groupsMainTable, function (\n ok,\n message\n ) {\n if (!ok) return complain(message)\n allGroups.classList.remove('allGroupsButton--loading')\n allGroups.classList.add('allGroupsButton--active')\n refreshGroupsSelected()\n })\n } else {\n allGroups.classList.remove('allGroupsButton--loading', 'allGroupsButton--active')\n allGroups.classList.add('allGroupsButton--loaded') // pale green hint groups loaded\n selectedGroups = {}\n refreshGroupsSelected()\n }\n }) // on button click\n kb.fetcher.nowOrWhenFetched(groupIndex.uri, book, function (ok, body) {\n if (!ok) return console.log('Cannot load group index: ' + body)\n syncGroupTable()\n refreshNames()\n })\n } else {\n syncGroupTable()\n refreshNames()\n console.log('No book, only one group -> hide list of groups')\n setGroupListVisibility(false) // If no books involved, hide group list\n } // if not book\n\n peopleHeader.textContent = 'Contact name'\n peopleHeader.classList.add('peopleHeader')\n peopleMain.classList.add('peopleMain')\n\n // New Contact button\n const newContactButton = dom.createElement('button')\n const container = dom.createElement('div')\n newContactButton.setAttribute('type', 'button')\n if (!me) newContactButton.setAttribute('disabled', 'true')\n external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.authn.checkUser().then(webId => {\n if (webId) {\n me = webId\n newContactButton.removeAttribute('disabled')\n }\n })\n container.appendChild(newContactButton)\n newContactButton.innerHTML = 'New contact' // + IndividualClassLabel\n newContactButton.classList.add('actionButton', 'btn-secondary', 'action-button-focus')\n peopleFooter.appendChild(container)\n newContactButton.addEventListener('click', async _event => craeteNewCard(contactsPane_ns.vcard('Individual')), false)\n\n // New Organization button\n const newOrganizationButton = dom.createElement('button')\n const container2 = dom.createElement('div')\n newOrganizationButton.setAttribute('type', 'button')\n if (!me) newOrganizationButton.setAttribute('disabled', 'true')\n external_commonjs_solid_logic_commonjs2_solid_logic_amd_solid_logic_root_SolidLogic_.authn.checkUser().then(webId => {\n if (webId) {\n me = webId\n newOrganizationButton.removeAttribute('disabled')\n }\n })\n container2.appendChild(newOrganizationButton)\n newOrganizationButton.innerHTML = 'New organization' // + IndividualClassLabel\n newOrganizationButton.classList.add('actionButton', 'btn-secondary', 'action-button-focus')\n peopleFooter.appendChild(container2)\n newOrganizationButton.addEventListener('click', async _event => craeteNewCard(contactsPane_ns.vcard('Organization')), false)\n\n // New Group button\n if (book) {\n const newGroupButton = groupsFooter.appendChild(\n dom.createElement('button')\n )\n newGroupButton.setAttribute('type', 'button')\n newGroupButton.innerHTML = 'New group' // + IndividualClassLabel\n newGroupButton.classList.add('actionButton', 'btn-secondary', 'action-button-focus')\n newGroupButton.addEventListener(\n 'click', newGroupClickHandler,\n false\n )\n\n // Tools button\n const toolsButton = cardFooter.appendChild(dom.createElement('button'))\n toolsButton.setAttribute('type', 'button')\n toolsButton.innerHTML = 'Tools'\n toolsButton.classList.add('actionButton', 'btn-secondary', 'action-button-focus')\n toolsButton.addEventListener('click', function (_event) {\n cardMain.innerHTML = ''\n cardMain.appendChild(\n toolsPane_toolsPane(\n selectAllGroups,\n selectedGroups,\n groupsMainTable,\n book,\n dataBrowserContext,\n me\n )\n )\n })\n } // if book\n\n const newBookBtn = newAddressBookButton(book)\n if (newBookBtn && newBookBtn.classList) {\n newBookBtn.classList.add('actionButton', 'btn-secondary', 'action-button-focus')\n }\n cardFooter.appendChild(newBookBtn)\n\n // })\n\n div.appendChild(dom.createElement('hr'))\n\n // const groups = await loadAllGroups() @@@\n checkDataModel().then(() => { console.log('async checkDataModel done.') })\n\n // div.appendChild(newAddressBookButton(book)) // later\n // end of AddressBook instance\n } // renderThreeColumnBrowser\n\n // ///////////////////////////////////////////////////////////////////////////////////\n\n // Render a single contact Individual\n\n if (\n t[contactsPane_ns.vcard('Individual').uri] ||\n t[contactsPane_ns.foaf('Person').uri] ||\n t[contactsPane_ns.schema('Person').uri] ||\n t[contactsPane_ns.vcard('Organization').uri] ||\n t[contactsPane_ns.schema('Organization').uri]\n ) {\n renderIndividual(dom, div, subject, dataBrowserContext).then(() => console.log('(individual rendered)'))\n\n // Render a Group instance\n } else if (t[contactsPane_ns.vcard('Group').uri]) {\n // If we have a main address book, then render this group as a guest group within it\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.login\n .findAppInstances(context, contactsPane_ns.vcard('AddressBook'))\n .then(function (context) {\n const addressBooks = context.instances\n const options = { foreignGroup: subject }\n if (addressBooks.length > 0) {\n // const book = addressBooks[0]\n renderThreeColumnBrowser(addressBooks, context, options)\n } else {\n renderThreeColumnBrowser([], context, options)\n // @@ button to Make a new addressBook\n }\n })\n .catch(function (e) {\n external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.widgets.complain(context, e)\n })\n\n // Render a AddressBook instance\n } else if (t[contactsPane_ns.vcard('AddressBook').uri]) {\n renderThreeColumnBrowser([subject], context, {})\n } else {\n console.log(\n 'Error: Contact pane: No evidence that ' +\n subject +\n ' is anything to do with contacts.'\n )\n }\n\n // /////////////// Fix user when testing on a plane\n\n if (\n typeof document !== 'undefined' &&\n document.location &&\n ('' + document.location).slice(0, 16) === 'http://localhost'\n ) {\n me = kb.any(subject, external_commonjs_solid_ui_commonjs2_solid_ui_amd_solid_ui_root_UI_.ns.acl('owner')) // when testing on plane with no webid\n console.log('Assuming user is ' + me)\n }\n return div\n } // asyncRender\n } // render function\n}); // pane object\n// ends\n\nfunction contactsPane_getSameAs (kb, item, doc) {\n return kb.each(item, contactsPane_ns.owl('sameAs'), null, doc).concat(\n kb.each(null, contactsPane_ns.owl('sameAs'), item, doc))\n}\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=contactsPane.js.map","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* CVCard.css */\n/* Note: Uses utilities: .section-title for cvOrg styling */\n\n.cvSection {\n margin-bottom: 1.25em;\n}\n\n.cvRole {\n margin: var(--spacing-xs) 0;\n font-size: var(--font-size-base);\n line-height: var(--line-height-base);\n display: flex;\n flex-direction: column;\n gap: 0.2em;\n}\n\n.cvOrg {\n font-weight: 600;\n color: var(--color-primary);\n}\n\n.cvSkill, .cvLanguage {\n text-align: left;\n margin: var(--spacing-xs) 0;\n font-size: var(--font-size-base);\n line-height: var(--line-height-base);\n}\n\n.cvSection h3 {\n color: var(--color-text);\n font-size: var(--font-size-lg);\n font-weight: 600;\n line-height: var(--line-height-tight);\n margin-bottom: var(--spacing-xs);\n border-bottom: 1px solid var(--color-border-pale);\n padding-bottom: var(--spacing-xs);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/CVCard.css\"],\"names\":[],\"mappings\":\"AAAA,eAAe;AACf,2DAA2D;;AAE3D;EACE,qBAAqB;AACvB;;AAEA;EACE,2BAA2B;EAC3B,gCAAgC;EAChC,oCAAoC;EACpC,aAAa;EACb,sBAAsB;EACtB,UAAU;AACZ;;AAEA;EACE,gBAAgB;EAChB,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;EAChB,2BAA2B;EAC3B,gCAAgC;EAChC,oCAAoC;AACtC;;AAEA;EACE,wBAAwB;EACxB,8BAA8B;EAC9B,gBAAgB;EAChB,qCAAqC;EACrC,gCAAgC;EAChC,iDAAiD;EACjD,iCAAiC;AACnC\",\"sourcesContent\":[\"/* CVCard.css */\\n/* Note: Uses utilities: .section-title for cvOrg styling */\\n\\n.cvSection {\\n margin-bottom: 1.25em;\\n}\\n\\n.cvRole {\\n margin: var(--spacing-xs) 0;\\n font-size: var(--font-size-base);\\n line-height: var(--line-height-base);\\n display: flex;\\n flex-direction: column;\\n gap: 0.2em;\\n}\\n\\n.cvOrg {\\n font-weight: 600;\\n color: var(--color-primary);\\n}\\n\\n.cvSkill, .cvLanguage {\\n text-align: left;\\n margin: var(--spacing-xs) 0;\\n font-size: var(--font-size-base);\\n line-height: var(--line-height-base);\\n}\\n\\n.cvSection h3 {\\n color: var(--color-text);\\n font-size: var(--font-size-lg);\\n font-weight: 600;\\n line-height: var(--line-height-tight);\\n margin-bottom: var(--spacing-xs);\\n border-bottom: 1px solid var(--color-border-pale);\\n padding-bottom: var(--spacing-xs);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* ChatWithMe.css */\n/* Uses utilities: .section-centered, .loading-text, .btn-primary, .btn-transparent */\n\n.chatSection {\n overflow-x: auto;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/ChatWithMe.css\"],\"names\":[],\"mappings\":\"AAAA,mBAAmB;AACnB,qFAAqF;;AAErF;EACE,gBAAgB;AAClB\",\"sourcesContent\":[\"/* ChatWithMe.css */\\n/* Uses utilities: .section-centered, .loading-text, .btn-primary, .btn-transparent */\\n\\n.chatSection {\\n overflow-x: auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `#add-to-contacts-button-container {\n position: relative;\n overflow: visible;\n}\n\n.contactsAddressBookSelector {\n width: fit-content;\n max-width: min(94vw, 48rem);\n min-width: 0;\n max-height: 80vh;\n overflow-y: auto;\n overflow-x: hidden;\n border-radius: var(--border-radius-base);\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\n background: #F0F0F0;\n color: var(--color-primary);\n padding-top: 4em;\n align-items: stretch;\n box-sizing: border-box;\n gap: 7px;\n display: flex;\n flex-direction: column;\n font-weight: 600;\n position: absolute;\n top: 54%;\n bottom: auto;\n left: 50%;\n transform: translate(-50%, -50%);\n margin-top: 0;\n margin: 0;\n z-index: 200;\n opacity: 1;\n}\n\n@media (max-width: 900px) {\n .contactsAddressBookSelector {\n top: 54%;\n bottom: auto;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n .contactsAddressBookDetails {\n flex-direction: column !important; /* Stacks items vertically on small screens */\n align-items: center !important;\n width: 100% !important;\n max-height: 60vh;\n overflow-y: auto;\n overflow-x: hidden; \n }\n\n .contactsAddressBookCreationDiv .contactsNewContactCreationButton {\n width: fit-content !important;\n min-width: 10em;\n margin-left: auto !important;\n margin-right: auto !important;\n align-self: center !important;\n display: inline-flex !important;\n justify-content: center !important;\n align-items: center !important;\n text-align: center;\n }\n}\n\n@media (max-width: 333px) {\n .contactsAddressBookSelector {\n width: 96vw;\n max-width: 96vw;\n min-width: 0;\n top: 50%;\n bottom: auto;\n left: 50%;\n transform: translate(-50%, -50%);\n padding-top: 3rem;\n position: fixed;\n overflow-x: hidden;\n }\n\n .contactsAddressBookDetails {\n width: 100% !important;\n min-width: 0;\n padding: 0.5rem;\n }\n .contactsAddressBookList,\n .contactsGroupList {\n min-width: 0;\n max-width: 100% !important;\n width: 100%;\n }\n}\n\n.contactsAddressBookCreationDiv {\n width: 100%;\n border-radius: var(--border-radius-base);\n background: #F0F0F0;\n box-sizing: border-box;\n padding: 5px;\n gap: 5px;\n display: flex;\n flex-direction: column;\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n}\n\n.contactsHelpersButtonDiv {\n display: flex;\n flex-direction: row;\n gap: var(--spacing-md);\n justify-content: center;\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n padding: var(--spacing-md);\n border-radius: var(--border-radius-base);\n}\n\n.contactsAddressBookCreationButton {\n flex-shrink: 0;\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \n color: var(--color-primary) !important;\n border-radius: 8px;\n text-align: left;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.contactsAddressBookUriEntryButton {\n flex-shrink: 0;\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \n color: var(--color-primary) !important;\n border-radius: 8px;\n text-align: left;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.contactsActionButton {\n background: var(--color-primary);\n color: white;\n border-radius: var(--border-radius-base);\n transition: all 0.3s ease-in-out;\n cursor: pointer;\n}\n\n.contactsActionButton:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n}\n\n.contactsActionButton:active {\n box-shadow: 0 1px 2px white;\n}\n\n.contactsActionButton:focus,\n.contactsActionButton:focus-visible {\n outline: 3px solid var(--color-primary) !important;\n outline-offset: 2px !important;\n box-shadow: 0 0 0 2px white, 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\n z-index: 1; \n}\n\n.contactsAddressBookDetails {\n width: 100%;\n min-width: 0;\n min-height: 0;\n border-radius: var(--border-radius-base);\n justify-content: flex-start;\n box-sizing: border-box;\n gap: 15px;\n display: flex;\n flex-direction: row;\n padding: var(--spacing-md);\n overflow-x: auto;\n overflow-y: auto;\n}\n\n.contactsAddressBookUriEntry {\n width: calc(100% - 1rem) !important;\n max-width: calc(100% - 1rem) !important;\n min-width: 0;\n box-sizing: border-box;\n padding-top: 3em !important;\n gap: 5px;\n display: flex;\n align-self: stretch;\n flex-direction: column;\n\n}\n\n.contactsAddressBookUriEntryForm {\n width: 100%;\n max-width: 100%;\n min-width: 0;\n background: #F0F0F0;\n box-sizing: border-box;\n gap: 5px;\n display: flex;\n flex-wrap: wrap;\n flex-direction: column;\n align-items: stretch;\n}\n\n.contactsAddressBookUriInput {\n width: clamp(14rem, 60vw, 22rem);\n max-width: 100%;\n min-width: 0;\n flex: 0 0 auto;\n align-self: flex-start;\n padding: 5px;\n gap: 15px;\n border-radius: var(--border-radius-base);\n border: 1px solid #ccc;\n}\n\n.contactsAddressBookUriEntryAddButton {\n width: 10%;\n min-width: 0;\n max-width: 4em;\n align-self: flex-end !important;\n margin-left: auto;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n line-height: 1;\n}\n\n.contactsNewGroupForm {\n box-sizing: border-box;\n padding-top: 2.5rem !important;\n gap: 5px;\n display: flex;\n flex-direction: column;\n}\n\n.contactsCreateNewAddressBook {\n border-radius: var(--border-radius);\n color: white;\n padding: var(--spacing-md);\n justify-content: center;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n}\n\n.contactsAddressBookList {\n width: 100%;\n max-width: fit-content !important;\n box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);\n min-width: 200px;\n box-sizing: border-box;\n gap: 4px;\n display: flex;\n flex-direction: column;\n}\n\n.contactsGroupList {\n width: auto;\n max-width: fit-content !important;\n min-width: 200px;\n box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);\n box-sizing: border-box;\n gap: 4px;\n display: flex;\n flex-direction: column;\n}\n\n.contactsErrorDisplay {\n width: 90%;\n align-self: flex-end;\n padding: 5px;\n position: absolute;\n background: pink;\n display: none;\n color: #787878;\n border-radius: var(--border-radius-base);\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px; \n z-index: 3;\n}\n\n.contactsShowErrors {\n display: flex !important;\n flex-direction: row;\n justify-content: center;\n}\n.contactsCloseErrorDisplayButton {\n position: absolute;\n top: 0.2rem;\n right: 0.2rem;\n background: transparent;\n color: #787878;\n border: none;\n font-size: var(--font-size-sm);\n cursor: pointer;\n z-index: 4;\n}\n\n.contactsCloseButton {\n box-shadow: var(--box-shadow);\n border-radius: var(--border-radius-base);\n color: #787878 !important;\n padding: 1em;\n font-size: var(--font-size-sm);\n position: absolute;\n top: 0; \n right: 0;\n display: inline-block;\n width: auto !important;\n height: auto !important;\n cursor: pointer;\n line-height: 1;\n left: auto;\n margin: 0;\n align-self: auto !important;\n background: transparent;\n color: #787878;\n border: none;\n z-index: 100 !important;\n}\n\n.contactsCloseButton:hover {\n box-shadow: 0 2px 4px var(--color-primary) !important;\n}\n\n.contactsCloseButton:focus,\n.contactsCloseButton:focus-visible {\n outline: 3px solid var(--color-primary) !important;\n outline-offset: 2px !important;\n box-shadow: 0 0 0 2px white, 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\n z-index: 1;\n}\n\n.contactsNewAddressForm {\n padding-top: 3em !important;\n gap: 5px;\n display: flex;\n flex-direction: column;\n}\n\n.contactsButton {\n flex-shrink: 0;\n background: #F0F0F0;\n color: #787878;\n border-radius: 8px;\n text-align: left;\n padding: var(--spacing-md);\n cursor: pointer;\n white-space: nowrap;\n}\n\n.contactsButton:hover {\n color: var(--color-primary);\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \n} \n\n.contactsSelectedButton {\n background: color-mix(in srgb, var(--color-primary), white 60%) !important; \n color: var(--color-primary);\n}\n\n.contactsContactExistsAlert {\n background: #F0F0F0 !important;\n color: #787878;\n padding: 10px;\n border-radius: var(--border-radius-base);\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\n z-index: 10;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 300px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 15px; \n text-wrap: pretty;\n}\n\n.contactsContactExistsActions {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n gap: 10px;\n width: auto;\n}\n\n.contactsContactExistsActions .contactsConfirmButton,\n.contactsContactExistsActions .contactsCancelButton {\n display: inline-flex !important;\n width: auto !important;\n min-width: fit-content;\n flex: 0 0 auto;\n margin: 0;\n white-space: nowrap;\n}\n\n.contactsAddressBookSelector [role=\"alert\"] {\n border: none !important; /* Remove borders from alerts within the contacts dialog */\n}\n\n.contactsPopupOverlay {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.2);\n z-index: 8;\n}\n\n.contactsAddressBookSelector.contactsOverlayActive > *:not(.contactsPopupOverlay):not(.contactsPopupDialog):not(.contactsContactExistsAlert) {\n pointer-events: none;\n user-select: none;\n}\n\n.contactsAddressBookSelector.contactsOverlayActive .contactsPopupDialog,\n.contactsAddressBookSelector.contactsOverlayActive .contactsContactExistsAlert,\n.contactsAddressBookSelector.contactsOverlayActive .contactsPopupDialog *,\n.contactsAddressBookSelector.contactsOverlayActive .contactsContactExistsAlert * {\n pointer-events: auto;\n}\n\n.contactsPopupDialog {\n background: #F5F5F5 !important;\n color: var(--color-primary);\n padding: 2em;\n border-radius: var(--border-radius-base);\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\n z-index: 50;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: auto;\n max-width: min(92vw, 34rem);\n max-height: calc(100vh - 6rem);\n overflow: auto;\n box-sizing: border-box;\n}\n\n@media (max-width: 600px) {\n .contactsAddressBookUriEntry {\n padding-top: 3rem !important;\n }\n\n .contactsPopupDialog {\n max-width: 92vw;\n max-height: 78vh;\n padding: 1.25rem;\n }\n}\n\n.contactsConfirmButton {\n background: var(--color-primary);\n color: white;\n border-radius: var(--border-radius-base);\n padding: var(--spacing-md);\n transition: all 0.3s ease-in-out;\n cursor: pointer;\n}\n\n.contactsConfirmButton:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n}\n\n.contactsCancelButton {\n background: transparent;\n color: #787878;\n border-radius: var(--border-radius-base);\n padding: var(--spacing-md);\n border: 1px solid #ccc;\n transition: all 0.3s ease-in-out;\n cursor: pointer;\n}\n.contactsCancelButton:hover {\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \n color: var(--color-primary);\n} \n\n.contactsNewContactCreationButton {\n width: 10em !important;\n align-self: flex-end;\n line-height: 1;\n}\n\n.contactsCreateGroupCreationButton {\n flex-shrink: 0;\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \n color: var(--color-primary) !important;\n border-radius: 8px;\n text-align: left;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.contactsCloseButton {\n position: absolute !important;\n top: 0 !important;\n right: 0 !important;\n left: auto;\n margin: 0;\n align-self: auto !important;\n background: transparent;\n color: #787878;\n font-size: var(--font-size-xs);\n border: none;\n font-size: var(--font-size-sm);\n cursor: pointer;\n z-index: 100 !important;\n padding: 0.35rem 0.5rem;\n line-height: 1;\n}\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/ContactsCard.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"#add-to-contacts-button-container {\\n position: relative;\\n overflow: visible;\\n}\\n\\n.contactsAddressBookSelector {\\n width: fit-content;\\n max-width: min(94vw, 48rem);\\n min-width: 0;\\n max-height: 80vh;\\n overflow-y: auto;\\n overflow-x: hidden;\\n border-radius: var(--border-radius-base);\\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\\n background: #F0F0F0;\\n color: var(--color-primary);\\n padding-top: 4em;\\n align-items: stretch;\\n box-sizing: border-box;\\n gap: 7px;\\n display: flex;\\n flex-direction: column;\\n font-weight: 600;\\n position: absolute;\\n top: 54%;\\n bottom: auto;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n margin-top: 0;\\n margin: 0;\\n z-index: 200;\\n opacity: 1;\\n}\\n\\n@media (max-width: 900px) {\\n .contactsAddressBookSelector {\\n top: 54%;\\n bottom: auto;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n }\\n\\n .contactsAddressBookDetails {\\n flex-direction: column !important; /* Stacks items vertically on small screens */\\n align-items: center !important;\\n width: 100% !important;\\n max-height: 60vh;\\n overflow-y: auto;\\n overflow-x: hidden; \\n }\\n\\n .contactsAddressBookCreationDiv .contactsNewContactCreationButton {\\n width: fit-content !important;\\n min-width: 10em;\\n margin-left: auto !important;\\n margin-right: auto !important;\\n align-self: center !important;\\n display: inline-flex !important;\\n justify-content: center !important;\\n align-items: center !important;\\n text-align: center;\\n }\\n}\\n\\n@media (max-width: 333px) {\\n .contactsAddressBookSelector {\\n width: 96vw;\\n max-width: 96vw;\\n min-width: 0;\\n top: 50%;\\n bottom: auto;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n padding-top: 3rem;\\n position: fixed;\\n overflow-x: hidden;\\n }\\n\\n .contactsAddressBookDetails {\\n width: 100% !important;\\n min-width: 0;\\n padding: 0.5rem;\\n }\\n .contactsAddressBookList,\\n .contactsGroupList {\\n min-width: 0;\\n max-width: 100% !important;\\n width: 100%;\\n }\\n}\\n\\n.contactsAddressBookCreationDiv {\\n width: 100%;\\n border-radius: var(--border-radius-base);\\n background: #F0F0F0;\\n box-sizing: border-box;\\n padding: 5px;\\n gap: 5px;\\n display: flex;\\n flex-direction: column;\\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\\n}\\n\\n.contactsHelpersButtonDiv {\\n display: flex;\\n flex-direction: row;\\n gap: var(--spacing-md);\\n justify-content: center;\\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\\n padding: var(--spacing-md);\\n border-radius: var(--border-radius-base);\\n}\\n\\n.contactsAddressBookCreationButton {\\n flex-shrink: 0;\\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \\n color: var(--color-primary) !important;\\n border-radius: 8px;\\n text-align: left;\\n cursor: pointer;\\n white-space: nowrap;\\n}\\n\\n.contactsAddressBookUriEntryButton {\\n flex-shrink: 0;\\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \\n color: var(--color-primary) !important;\\n border-radius: 8px;\\n text-align: left;\\n cursor: pointer;\\n white-space: nowrap;\\n}\\n\\n.contactsActionButton {\\n background: var(--color-primary);\\n color: white;\\n border-radius: var(--border-radius-base);\\n transition: all 0.3s ease-in-out;\\n cursor: pointer;\\n}\\n\\n.contactsActionButton:hover {\\n transform: translateY(-2px);\\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\\n}\\n\\n.contactsActionButton:active {\\n box-shadow: 0 1px 2px white;\\n}\\n\\n.contactsActionButton:focus,\\n.contactsActionButton:focus-visible {\\n outline: 3px solid var(--color-primary) !important;\\n outline-offset: 2px !important;\\n box-shadow: 0 0 0 2px white, 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\\n z-index: 1; \\n}\\n\\n.contactsAddressBookDetails {\\n width: 100%;\\n min-width: 0;\\n min-height: 0;\\n border-radius: var(--border-radius-base);\\n justify-content: flex-start;\\n box-sizing: border-box;\\n gap: 15px;\\n display: flex;\\n flex-direction: row;\\n padding: var(--spacing-md);\\n overflow-x: auto;\\n overflow-y: auto;\\n}\\n\\n.contactsAddressBookUriEntry {\\n width: calc(100% - 1rem) !important;\\n max-width: calc(100% - 1rem) !important;\\n min-width: 0;\\n box-sizing: border-box;\\n padding-top: 3em !important;\\n gap: 5px;\\n display: flex;\\n align-self: stretch;\\n flex-direction: column;\\n\\n}\\n\\n.contactsAddressBookUriEntryForm {\\n width: 100%;\\n max-width: 100%;\\n min-width: 0;\\n background: #F0F0F0;\\n box-sizing: border-box;\\n gap: 5px;\\n display: flex;\\n flex-wrap: wrap;\\n flex-direction: column;\\n align-items: stretch;\\n}\\n\\n.contactsAddressBookUriInput {\\n width: clamp(14rem, 60vw, 22rem);\\n max-width: 100%;\\n min-width: 0;\\n flex: 0 0 auto;\\n align-self: flex-start;\\n padding: 5px;\\n gap: 15px;\\n border-radius: var(--border-radius-base);\\n border: 1px solid #ccc;\\n}\\n\\n.contactsAddressBookUriEntryAddButton {\\n width: 10%;\\n min-width: 0;\\n max-width: 4em;\\n align-self: flex-end !important;\\n margin-left: auto;\\n display: inline-flex;\\n justify-content: center;\\n align-items: center;\\n line-height: 1;\\n}\\n\\n.contactsNewGroupForm {\\n box-sizing: border-box;\\n padding-top: 2.5rem !important;\\n gap: 5px;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.contactsCreateNewAddressBook {\\n border-radius: var(--border-radius);\\n color: white;\\n padding: var(--spacing-md);\\n justify-content: center;\\n box-sizing: border-box;\\n display: flex;\\n flex-direction: column;\\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\\n}\\n\\n.contactsAddressBookList {\\n width: 100%;\\n max-width: fit-content !important;\\n box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);\\n min-width: 200px;\\n box-sizing: border-box;\\n gap: 4px;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.contactsGroupList {\\n width: auto;\\n max-width: fit-content !important;\\n min-width: 200px;\\n box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);\\n box-sizing: border-box;\\n gap: 4px;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.contactsErrorDisplay {\\n width: 90%;\\n align-self: flex-end;\\n padding: 5px;\\n position: absolute;\\n background: pink;\\n display: none;\\n color: #787878;\\n border-radius: var(--border-radius-base);\\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px; \\n z-index: 3;\\n}\\n\\n.contactsShowErrors {\\n display: flex !important;\\n flex-direction: row;\\n justify-content: center;\\n}\\n.contactsCloseErrorDisplayButton {\\n position: absolute;\\n top: 0.2rem;\\n right: 0.2rem;\\n background: transparent;\\n color: #787878;\\n border: none;\\n font-size: var(--font-size-sm);\\n cursor: pointer;\\n z-index: 4;\\n}\\n\\n.contactsCloseButton {\\n box-shadow: var(--box-shadow);\\n border-radius: var(--border-radius-base);\\n color: #787878 !important;\\n padding: 1em;\\n font-size: var(--font-size-sm);\\n position: absolute;\\n top: 0; \\n right: 0;\\n display: inline-block;\\n width: auto !important;\\n height: auto !important;\\n cursor: pointer;\\n line-height: 1;\\n left: auto;\\n margin: 0;\\n align-self: auto !important;\\n background: transparent;\\n color: #787878;\\n border: none;\\n z-index: 100 !important;\\n}\\n\\n.contactsCloseButton:hover {\\n box-shadow: 0 2px 4px var(--color-primary) !important;\\n}\\n\\n.contactsCloseButton:focus,\\n.contactsCloseButton:focus-visible {\\n outline: 3px solid var(--color-primary) !important;\\n outline-offset: 2px !important;\\n box-shadow: 0 0 0 2px white, 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\\n z-index: 1;\\n}\\n\\n.contactsNewAddressForm {\\n padding-top: 3em !important;\\n gap: 5px;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.contactsButton {\\n flex-shrink: 0;\\n background: #F0F0F0;\\n color: #787878;\\n border-radius: 8px;\\n text-align: left;\\n padding: var(--spacing-md);\\n cursor: pointer;\\n white-space: nowrap;\\n}\\n\\n.contactsButton:hover {\\n color: var(--color-primary);\\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \\n} \\n\\n.contactsSelectedButton {\\n background: color-mix(in srgb, var(--color-primary), white 60%) !important; \\n color: var(--color-primary);\\n}\\n\\n.contactsContactExistsAlert {\\n background: #F0F0F0 !important;\\n color: #787878;\\n padding: 10px;\\n border-radius: var(--border-radius-base);\\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\\n z-index: 10;\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n width: 300px;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n gap: 15px; \\n text-wrap: pretty;\\n}\\n\\n.contactsContactExistsActions {\\n display: flex;\\n flex-direction: row;\\n flex-wrap: nowrap;\\n justify-content: center;\\n align-items: center;\\n gap: 10px;\\n width: auto;\\n}\\n\\n.contactsContactExistsActions .contactsConfirmButton,\\n.contactsContactExistsActions .contactsCancelButton {\\n display: inline-flex !important;\\n width: auto !important;\\n min-width: fit-content;\\n flex: 0 0 auto;\\n margin: 0;\\n white-space: nowrap;\\n}\\n\\n.contactsAddressBookSelector [role=\\\"alert\\\"] {\\n border: none !important; /* Remove borders from alerts within the contacts dialog */\\n}\\n\\n.contactsPopupOverlay {\\n position: absolute;\\n inset: 0;\\n background: rgba(0, 0, 0, 0.2);\\n z-index: 8;\\n}\\n\\n.contactsAddressBookSelector.contactsOverlayActive > *:not(.contactsPopupOverlay):not(.contactsPopupDialog):not(.contactsContactExistsAlert) {\\n pointer-events: none;\\n user-select: none;\\n}\\n\\n.contactsAddressBookSelector.contactsOverlayActive .contactsPopupDialog,\\n.contactsAddressBookSelector.contactsOverlayActive .contactsContactExistsAlert,\\n.contactsAddressBookSelector.contactsOverlayActive .contactsPopupDialog *,\\n.contactsAddressBookSelector.contactsOverlayActive .contactsContactExistsAlert * {\\n pointer-events: auto;\\n}\\n\\n.contactsPopupDialog {\\n background: #F5F5F5 !important;\\n color: var(--color-primary);\\n padding: 2em;\\n border-radius: var(--border-radius-base);\\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\\n z-index: 50;\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n width: auto;\\n max-width: min(92vw, 34rem);\\n max-height: calc(100vh - 6rem);\\n overflow: auto;\\n box-sizing: border-box;\\n}\\n\\n@media (max-width: 600px) {\\n .contactsAddressBookUriEntry {\\n padding-top: 3rem !important;\\n }\\n\\n .contactsPopupDialog {\\n max-width: 92vw;\\n max-height: 78vh;\\n padding: 1.25rem;\\n }\\n}\\n\\n.contactsConfirmButton {\\n background: var(--color-primary);\\n color: white;\\n border-radius: var(--border-radius-base);\\n padding: var(--spacing-md);\\n transition: all 0.3s ease-in-out;\\n cursor: pointer;\\n}\\n\\n.contactsConfirmButton:hover {\\n transform: translateY(-2px);\\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\\n}\\n\\n.contactsCancelButton {\\n background: transparent;\\n color: #787878;\\n border-radius: var(--border-radius-base);\\n padding: var(--spacing-md);\\n border: 1px solid #ccc;\\n transition: all 0.3s ease-in-out;\\n cursor: pointer;\\n}\\n.contactsCancelButton:hover {\\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \\n color: var(--color-primary);\\n} \\n\\n.contactsNewContactCreationButton {\\n width: 10em !important;\\n align-self: flex-end;\\n line-height: 1;\\n}\\n\\n.contactsCreateGroupCreationButton {\\n flex-shrink: 0;\\n background: color-mix(in srgb, var(--color-primary), white 85%) !important; \\n color: var(--color-primary) !important;\\n border-radius: 8px;\\n text-align: left;\\n cursor: pointer;\\n white-space: nowrap;\\n}\\n\\n.contactsCloseButton {\\n position: absolute !important;\\n top: 0 !important;\\n right: 0 !important;\\n left: auto;\\n margin: 0;\\n align-self: auto !important;\\n background: transparent;\\n color: #787878;\\n font-size: var(--font-size-xs);\\n border: none;\\n font-size: var(--font-size-sm);\\n cursor: pointer;\\n z-index: 100 !important;\\n padding: 0.35rem 0.5rem;\\n line-height: 1;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* FriendList.css */\n/* Uses utilities: .list-reset, .section-title, .zebra-stripe, .flex, .gap-xs, .mb-md */\n\n.friendItem {\n padding: var(--spacing-xs) 0;\n font-size: 1em;\n color: var(--color-text-muted);\n}\n\n.friendItem:last-child {\n border-bottom: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/FriendList.css\"],\"names\":[],\"mappings\":\"AAAA,mBAAmB;AACnB,uFAAuF;;AAEvF;EACE,4BAA4B;EAC5B,cAAc;EACd,8BAA8B;AAChC;;AAEA;EACE,mBAAmB;AACrB\",\"sourcesContent\":[\"/* FriendList.css */\\n/* Uses utilities: .list-reset, .section-title, .zebra-stripe, .flex, .gap-xs, .mb-md */\\n\\n.friendItem {\\n padding: var(--spacing-xs) 0;\\n font-size: 1em;\\n color: var(--color-text-muted);\\n}\\n\\n.friendItem:last-child {\\n border-bottom: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* ProfileCard.css */\n/* Uses utilities: .action-button-focus, .btn-primary, .flex-column-center, .text-truncate, .text-center, .text-wrap-anywhere, .section-centered, .btn-transparent */\n\n.profileCard {\n /* Component container */\n}\n\n.image {\n width: 160px;\n height: 160px;\n border-radius: 50%;\n object-fit: cover;\n margin-bottom: var(--spacing-sm);\n box-shadow: var(--box-shadow-sm);\n border: 3px solid var(--color-primary);\n background: var(--color-card-bg);\n box-sizing: border-box;\n}\n\n.image-alt {\n width: 160px;\n height: 160px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n margin-bottom: var(--spacing-sm);\n box-shadow: var(--box-shadow-sm);\n border: 3px solid var(--color-primary);\n background: var(--color-card-bg);\n box-sizing: border-box;\n color: var(--color-text-secondary);\n}\n\n.name {\n font-size: var(--font-size-xl);\n font-weight: 700;\n line-height: var(--line-height-tight);\n text-decoration: underline;\n text-underline-offset: 0.2em;\n margin: 0;\n letter-spacing: var(--letter-spacing-wide);\n}\n\n.intro {\n color: var(--color-text-secondary);\n font-size: var(--font-size-base);\n line-height: var(--line-height-base);\n margin-bottom: var(--spacing-xs);\n max-width: 40ch;\n margin-left: auto;\n margin-right: auto;\n}\n\n.buttonSection {\n color: var(--color-text-secondary);\n font-size: 1em;\n margin-bottom: var(--spacing-xs);\n}\n\n.buttonSubSection {\n width: 100%;\n min-width: 0;\n display: grid;\n}\n\n.buttonSubSection button {\n width: 100%;\n min-width: 0;\n}\n\n.qrCodeSection {\n color: var(--color-text-secondary);\n font-size: 1em;\n margin-bottom: var(--spacing-xs);\n}\n\n.details {\n color: var(--color-text-muted);\n font-size: var(--font-size-base);\n line-height: var(--line-height-base);\n max-width: 45ch;\n margin-left: auto;\n margin-right: auto;\n}\n\n/* ProfileCard styles as regular CSS */\n.profile-card {\n border: 1px solid #ccc;\n padding: 16px;\n background: white;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/ProfileCard.css\"],\"names\":[],\"mappings\":\"AAAA,oBAAoB;AACpB,oKAAoK;;AAEpK;EACE,wBAAwB;AAC1B;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,iBAAiB;EACjB,gCAAgC;EAChC,gCAAgC;EAChC,sCAAsC;EACtC,gCAAgC;EAChC,sBAAsB;AACxB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,kBAAkB;EAClB,gCAAgC;EAChC,gCAAgC;EAChC,sCAAsC;EACtC,gCAAgC;EAChC,sBAAsB;EACtB,kCAAkC;AACpC;;AAEA;EACE,8BAA8B;EAC9B,gBAAgB;EAChB,qCAAqC;EACrC,0BAA0B;EAC1B,4BAA4B;EAC5B,SAAS;EACT,0CAA0C;AAC5C;;AAEA;EACE,kCAAkC;EAClC,gCAAgC;EAChC,oCAAoC;EACpC,gCAAgC;EAChC,eAAe;EACf,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,kCAAkC;EAClC,cAAc;EACd,gCAAgC;AAClC;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,kCAAkC;EAClC,cAAc;EACd,gCAAgC;AAClC;;AAEA;EACE,8BAA8B;EAC9B,gCAAgC;EAChC,oCAAoC;EACpC,eAAe;EACf,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA,sCAAsC;AACtC;EACE,sBAAsB;EACtB,aAAa;EACb,iBAAiB;AACnB\",\"sourcesContent\":[\"/* ProfileCard.css */\\n/* Uses utilities: .action-button-focus, .btn-primary, .flex-column-center, .text-truncate, .text-center, .text-wrap-anywhere, .section-centered, .btn-transparent */\\n\\n.profileCard {\\n /* Component container */\\n}\\n\\n.image {\\n width: 160px;\\n height: 160px;\\n border-radius: 50%;\\n object-fit: cover;\\n margin-bottom: var(--spacing-sm);\\n box-shadow: var(--box-shadow-sm);\\n border: 3px solid var(--color-primary);\\n background: var(--color-card-bg);\\n box-sizing: border-box;\\n}\\n\\n.image-alt {\\n width: 160px;\\n height: 160px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: 50%;\\n margin-bottom: var(--spacing-sm);\\n box-shadow: var(--box-shadow-sm);\\n border: 3px solid var(--color-primary);\\n background: var(--color-card-bg);\\n box-sizing: border-box;\\n color: var(--color-text-secondary);\\n}\\n\\n.name {\\n font-size: var(--font-size-xl);\\n font-weight: 700;\\n line-height: var(--line-height-tight);\\n text-decoration: underline;\\n text-underline-offset: 0.2em;\\n margin: 0;\\n letter-spacing: var(--letter-spacing-wide);\\n}\\n\\n.intro {\\n color: var(--color-text-secondary);\\n font-size: var(--font-size-base);\\n line-height: var(--line-height-base);\\n margin-bottom: var(--spacing-xs);\\n max-width: 40ch;\\n margin-left: auto;\\n margin-right: auto;\\n}\\n\\n.buttonSection {\\n color: var(--color-text-secondary);\\n font-size: 1em;\\n margin-bottom: var(--spacing-xs);\\n}\\n\\n.buttonSubSection {\\n width: 100%;\\n min-width: 0;\\n display: grid;\\n}\\n\\n.buttonSubSection button {\\n width: 100%;\\n min-width: 0;\\n}\\n\\n.qrCodeSection {\\n color: var(--color-text-secondary);\\n font-size: 1em;\\n margin-bottom: var(--spacing-xs);\\n}\\n\\n.details {\\n color: var(--color-text-muted);\\n font-size: var(--font-size-base);\\n line-height: var(--line-height-base);\\n max-width: 45ch;\\n margin-left: auto;\\n margin-right: auto;\\n}\\n\\n/* ProfileCard styles as regular CSS */\\n.profile-card {\\n border: 1px solid #ccc;\\n padding: 16px;\\n background: white;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* ProfileView.css */\n/* Uses utilities: .section-bg, .text-center */\n\n.profileSection {\n \n}\n\n/* Horizontal layout for cards */\n.profile-grid .profileSection {\n width: 100%;\n max-width: 100%;\n box-sizing: border-box;\n margin-bottom: var(--spacing-md);\n box-sizing: border-box;\n margin-bottom: var(--spacing-md);\n}\n\n@media (min-width: 900px) {\n .profileSection {\n margin-bottom: 0;\n }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/ProfileView.css\"],\"names\":[],\"mappings\":\"AAAA,oBAAoB;AACpB,8CAA8C;;AAE9C;;AAEA;;AAEA,gCAAgC;AAChC;EACE,WAAW;EACX,eAAe;EACf,sBAAsB;EACtB,gCAAgC;EAChC,sBAAsB;EACtB,gCAAgC;AAClC;;AAEA;EACE;IACE,gBAAgB;EAClB;AACF\",\"sourcesContent\":[\"/* ProfileView.css */\\n/* Uses utilities: .section-bg, .text-center */\\n\\n.profileSection {\\n \\n}\\n\\n/* Horizontal layout for cards */\\n.profile-grid .profileSection {\\n width: 100%;\\n max-width: 100%;\\n box-sizing: border-box;\\n margin-bottom: var(--spacing-md);\\n box-sizing: border-box;\\n margin-bottom: var(--spacing-md);\\n}\\n\\n@media (min-width: 900px) {\\n .profileSection {\\n margin-bottom: 0;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* QRCodeCard.css */\n/* Note: Uses utilities: .text-center */\n\n/* Caption under the QR code */\n.qrCaption {\n text-align: center;\n margin-top: 0;\n font-size: 0.95em;\n color: var(--color-text-secondary);\n}\n\n.QRCode {\n width: 100%;\n max-width: 320px;\n min-width: 180px;\n margin: 0 auto;\n display: block;\n}\n\n.QRCode [role=\"img\"]:focus {\n outline: 2px solid var(--color-primary, #7C4DFF);\n outline-offset: 2px;\n box-shadow: 0 0 0 2px rgba(124,77,255,0.2);\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/QRCodeCard.css\"],\"names\":[],\"mappings\":\"AAAA,mBAAmB;AACnB,uCAAuC;;AAEvC,8BAA8B;AAC9B;EACE,kBAAkB;EAClB,aAAa;EACb,iBAAiB;EACjB,kCAAkC;AACpC;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,gBAAgB;EAChB,cAAc;EACd,cAAc;AAChB;;AAEA;EACE,gDAAgD;EAChD,mBAAmB;EACnB,0CAA0C;AAC5C\",\"sourcesContent\":[\"/* QRCodeCard.css */\\n/* Note: Uses utilities: .text-center */\\n\\n/* Caption under the QR code */\\n.qrCaption {\\n text-align: center;\\n margin-top: 0;\\n font-size: 0.95em;\\n color: var(--color-text-secondary);\\n}\\n\\n.QRCode {\\n width: 100%;\\n max-width: 320px;\\n min-width: 180px;\\n margin: 0 auto;\\n display: block;\\n}\\n\\n.QRCode [role=\\\"img\\\"]:focus {\\n outline: 2px solid var(--color-primary, #7C4DFF);\\n outline-offset: 2px;\\n box-shadow: 0 0 0 2px rgba(124,77,255,0.2);\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* SocialCard.css */\n/* Uses utilities: .list-reset, .text-wrap-anywhere, .flex, .gap-sm, .gap-lg, .rounded-sm */\n\n.socialList {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: var(--spacing-lg);\n justify-content: center;\n}\n\n.socialItem {\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n font-size: 1.1em;\n}\n\n.socialItem span {\n min-width: 0;\n display: block;\n}\n\n.socialItem a {\n color: var(--color-primary);\n text-decoration: none;\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n min-height: var(--min-touch-target);\n padding: var(--spacing-xs);\n border-radius: var(--border-radius-base);\n transition: background-color var(--animation-duration) ease;\n position: relative;\n flex: 1;\n min-width: 0;\n}\n\n.socialItem a:hover,\n.socialItem a:focus {\n text-decoration: underline;\n background-color: rgba(124, 77, 255, 0.1);\n}\n\n/* Screen reader only external link indication */\n.socialItem a[href^=\"http\"]:after {\n content: \" (external link)\";\n position: absolute;\n left: -10000px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n}\n\n.socialIcon {\n width: 2.5em;\n height: 2.5em;\n border-radius: var(--border-radius-base);\n background: var(--color-card-bg);\n flex-shrink: 0;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/SocialCard.css\"],\"names\":[],\"mappings\":\"AAAA,mBAAmB;AACnB,2FAA2F;;AAE3F;EACE,aAAa;EACb,mBAAmB;EACnB,eAAe;EACf,sBAAsB;EACtB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,2BAA2B;EAC3B,qBAAqB;EACrB,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,mCAAmC;EACnC,0BAA0B;EAC1B,wCAAwC;EACxC,2DAA2D;EAC3D,kBAAkB;EAClB,OAAO;EACP,YAAY;AACd;;AAEA;;EAEE,0BAA0B;EAC1B,yCAAyC;AAC3C;;AAEA,gDAAgD;AAChD;EACE,2BAA2B;EAC3B,kBAAkB;EAClB,cAAc;EACd,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,wCAAwC;EACxC,gCAAgC;EAChC,cAAc;AAChB\",\"sourcesContent\":[\"/* SocialCard.css */\\n/* Uses utilities: .list-reset, .text-wrap-anywhere, .flex, .gap-sm, .gap-lg, .rounded-sm */\\n\\n.socialList {\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap;\\n gap: var(--spacing-lg);\\n justify-content: center;\\n}\\n\\n.socialItem {\\n display: flex;\\n align-items: center;\\n gap: var(--spacing-sm);\\n font-size: 1.1em;\\n}\\n\\n.socialItem span {\\n min-width: 0;\\n display: block;\\n}\\n\\n.socialItem a {\\n color: var(--color-primary);\\n text-decoration: none;\\n display: flex;\\n align-items: center;\\n gap: var(--spacing-sm);\\n min-height: var(--min-touch-target);\\n padding: var(--spacing-xs);\\n border-radius: var(--border-radius-base);\\n transition: background-color var(--animation-duration) ease;\\n position: relative;\\n flex: 1;\\n min-width: 0;\\n}\\n\\n.socialItem a:hover,\\n.socialItem a:focus {\\n text-decoration: underline;\\n background-color: rgba(124, 77, 255, 0.1);\\n}\\n\\n/* Screen reader only external link indication */\\n.socialItem a[href^=\\\"http\\\"]:after {\\n content: \\\" (external link)\\\";\\n position: absolute;\\n left: -10000px;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.socialIcon {\\n width: 2.5em;\\n height: 2.5em;\\n border-radius: var(--border-radius-base);\\n background: var(--color-card-bg);\\n flex-shrink: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* StuffCard.css */\n/* Uses utilities: .zebra-stripe */\n\n.stuffTable {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: var(--spacing-md);\n caption-side: top;\n}\n\n.stuffTable caption {\n font-weight: 600;\n padding: var(--spacing-sm);\n text-align: left;\n color: var(--color-text);\n}\n\n.stuffTable th,\n.stuffTable td {\n padding: var(--spacing-sm) var(--spacing-md);\n text-align: left;\n line-height: 1.4;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/StuffCard.css\"],\"names\":[],\"mappings\":\"AAAA,kBAAkB;AAClB,kCAAkC;;AAElC;EACE,WAAW;EACX,yBAAyB;EACzB,gCAAgC;EAChC,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,0BAA0B;EAC1B,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;;EAEE,4CAA4C;EAC5C,gBAAgB;EAChB,gBAAgB;AAClB\",\"sourcesContent\":[\"/* StuffCard.css */\\n/* Uses utilities: .zebra-stripe */\\n\\n.stuffTable {\\n width: 100%;\\n border-collapse: collapse;\\n margin-bottom: var(--spacing-md);\\n caption-side: top;\\n}\\n\\n.stuffTable caption {\\n font-weight: 600;\\n padding: var(--spacing-sm);\\n text-align: left;\\n color: var(--color-text);\\n}\\n\\n.stuffTable th,\\n.stuffTable td {\\n padding: var(--spacing-sm) var(--spacing-md);\\n text-align: left;\\n line-height: 1.4;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* Solid-UI form sizing fixes scoped to Edit CV section */\n.profile-form .hoverControl:not(:has(> img:first-child)) {\n border: 0.1em solid rgb(136, 136, 136) !important;\n}\n\n.profile-form .hoverControl:has(> img:first-child) {\n background-color: transparent !important;\n border: none !important;\n margin: 0 !important;\n border-radius: 0 !important;\n padding: 0.7em !important;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.profile-form .hoverControlHide {\n width: 1.5em !important;\n height: 1.5em !important;\n display: block;\n margin-top: 0 !important;\n margin-left: 0 !important;\n margin-right: 0 !important;\n margin-bottom: 0.3em !important;\n}\n\n.profile-form .hoverControl:has(> img:first-child) > span {\n display: inline-flex;\n align-items: center;\n margin-left: 0.3em;\n}\n\n.profile-form div[style*=\"padding: 0.5em\"]:has(> img) {\n display: inline-flex;\n align-items: center;\n}\n\n.profile-form div[style*=\"padding: 0.5em\"]:has(> img) > span {\n margin-left: 0.3em;\n}\n\n.profile-form .hoverControl:has(> img:first-child):hover {\n background-color: transparent !important;\n}\n\n.profile-form button:has(> img[src\\$=\".svg\"]) {\n background-color: transparent !important;\n border: none !important;\n margin: 0 !important;\n border-radius: 0 !important;\n}\n\n.profile-form button {\n\n}\n\n.profile-form input:not([type=\"color\"]),\n.profile-form textarea,\n.profile-form select {\n max-width: 100%;\n min-width: 0;\n box-sizing: border-box ;\n background-color: #eef !important;\n border: .05em solid #88c\n}\n\n.profile-form input[type=\"url\"] {\n width: 100%;\n}\n\n.profile-form .formFieldValue {\n min-width: 0;\n margin-bottom: var(--spacing-sm);\n}\n\n.profile-form .formFieldValue table {\n margin: 0 !important;\n padding: 0 !important;\n}\n\n.profile-form .formFieldValue td {\n padding: 0 !important;\n}\n\n.profile-form .formFieldValue input:not([type=\"color\"]),\n.profile-form .formFieldValue textarea,\n.profile-form .formFieldValue select {\n width: 100%;\n max-width: 100%;\n}\n\n.profile-form select#formSelect {\n width: 100%;\n max-width: 97%;\n box-sizing: border-box;\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.profile-form span select {\n max-width: 96% !important;\n box-sizing: border-box;\n}\n\n/* Remove border/padding from the first wrapper div (and its first child wrapper). */\n.profile-form > div:first-of-type,\n.profile-form > div:first-of-type > div:first-of-type {\n border: none !important;\n padding: 0 !important;\n}\n\n/* Remove border/padding from the inner div of the first wrapper in the contact section. */\nsection[aria-labelledby=\"edit-profile-contact-heading\"] .profile-form > div:first-of-type > div:first-of-type {\n border: none !important;\n padding: 0 !important;\n}\n\n/* In contactPane, remove border/padding from all direct child divs. */\n.contactPane > div {\n border: none !important;\n padding: 0 !important;\n}\n\n/* Align schema.org, solid terms, FOAF, vCard, and org field labels with their input values. */\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://schema.org/\"]),\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/solid/terms#\"]),\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://xmlns.com/foaf/0.1/\"]),\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/2006/vcard/ns\"]),\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/org#\"]) {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n}\n\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://schema.org/\"]) + .formFieldValue,\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/solid/terms#\"]) + .formFieldValue,\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://xmlns.com/foaf/0.1/\"]) + .formFieldValue,\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/2006/vcard/ns\"]) + .formFieldValue,\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\"http://www.w3.org/ns/org#\"]) + .formFieldValue {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n}\n\n.profile-form textarea {\n width: 100%;\n box-sizing: border-box;\n margin-top: var(--spacing-xs);\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n/* Add horizontal gap between label and textarea for all label+textarea pairs. */\n.profile-form div:has(> a) + div:has(textarea) {\n margin-left: var(--spacing-sm);\n}\n\n/* Center textarea label vertically in flex rows. */\n.profile-form div[style*=\"display: flex\"][style*=\"flex-direction: row\"]:has(textarea) {\n align-items: flex-start;\n}\n\n.profile-form div[style*=\"display: flex\"][style*=\"flex-direction: row\"]:has(textarea) > div:has(> a) {\n padding-top: var(--spacing-xs);\n}\n\n.profile-form input:not([type=\"color\"]) {\n width: 100%;\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n/* Remove padding from table cells within webidControl */\n.webidControl table td {\n padding: 0 !important;\n}\n\n/* Remove padding from contactPane divs inside webidControl table cells */\n.webidControl table td div.contactPane.namedPane.fullWidth.individualPane {\n padding: 0 !important;\n}\n\n.webidControl table td div.contactPane.namedPane {\n border: none !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/rdfFormsEnforced.css\"],\"names\":[],\"mappings\":\"AAAA,yDAAyD;AACzD;EACE,iDAAiD;AACnD;;AAEA;EACE,wCAAwC;EACxC,uBAAuB;EACvB,oBAAoB;EACpB,2BAA2B;EAC3B,yBAAyB;EACzB,eAAe;EACf,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,uBAAuB;EACvB,wBAAwB;EACxB,cAAc;EACd,wBAAwB;EACxB,yBAAyB;EACzB,0BAA0B;EAC1B,+BAA+B;AACjC;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,wCAAwC;EACxC,uBAAuB;EACvB,oBAAoB;EACpB,2BAA2B;AAC7B;;AAEA;;AAEA;;AAEA;;;EAGE,eAAe;EACf,YAAY;EACZ,uBAAuB;EACvB,iCAAiC;EACjC;AACF;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,YAAY;EACZ,gCAAgC;AAClC;;AAEA;EACE,oBAAoB;EACpB,qBAAqB;AACvB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;;;EAGE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,cAAc;EACd,sBAAsB;EACtB,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA;EACE,yBAAyB;EACzB,sBAAsB;AACxB;;AAEA,oFAAoF;AACpF;;EAEE,uBAAuB;EACvB,qBAAqB;AACvB;;AAEA,0FAA0F;AAC1F;EACE,uBAAuB;EACvB,qBAAqB;AACvB;;AAEA,sEAAsE;AACtE;EACE,uBAAuB;EACvB,qBAAqB;AACvB;;AAEA,8FAA8F;AAC9F;;;;;EAKE,oBAAoB;EACpB,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA;;;;;EAKE,oBAAoB;EACpB,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA;EACE,WAAW;EACX,sBAAsB;EACtB,6BAA6B;EAC7B,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA,gFAAgF;AAChF;EACE,8BAA8B;AAChC;;AAEA,mDAAmD;AACnD;EACE,uBAAuB;AACzB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,WAAW;EACX,yBAAyB;EACzB,0BAA0B;AAC5B;;AAEA,wDAAwD;AACxD;EACE,qBAAqB;AACvB;;AAEA,yEAAyE;AACzE;EACE,qBAAqB;AACvB;;AAEA;EACE,uBAAuB;AACzB\",\"sourcesContent\":[\"/* Solid-UI form sizing fixes scoped to Edit CV section */\\n.profile-form .hoverControl:not(:has(> img:first-child)) {\\n border: 0.1em solid rgb(136, 136, 136) !important;\\n}\\n\\n.profile-form .hoverControl:has(> img:first-child) {\\n background-color: transparent !important;\\n border: none !important;\\n margin: 0 !important;\\n border-radius: 0 !important;\\n padding: 0.7em !important;\\n cursor: pointer;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.profile-form .hoverControlHide {\\n width: 1.5em !important;\\n height: 1.5em !important;\\n display: block;\\n margin-top: 0 !important;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n margin-bottom: 0.3em !important;\\n}\\n\\n.profile-form .hoverControl:has(> img:first-child) > span {\\n display: inline-flex;\\n align-items: center;\\n margin-left: 0.3em;\\n}\\n\\n.profile-form div[style*=\\\"padding: 0.5em\\\"]:has(> img) {\\n display: inline-flex;\\n align-items: center;\\n}\\n\\n.profile-form div[style*=\\\"padding: 0.5em\\\"]:has(> img) > span {\\n margin-left: 0.3em;\\n}\\n\\n.profile-form .hoverControl:has(> img:first-child):hover {\\n background-color: transparent !important;\\n}\\n\\n.profile-form button:has(> img[src$=\\\".svg\\\"]) {\\n background-color: transparent !important;\\n border: none !important;\\n margin: 0 !important;\\n border-radius: 0 !important;\\n}\\n\\n.profile-form button {\\n\\n}\\n\\n.profile-form input:not([type=\\\"color\\\"]),\\n.profile-form textarea,\\n.profile-form select {\\n max-width: 100%;\\n min-width: 0;\\n box-sizing: border-box ;\\n background-color: #eef !important;\\n border: .05em solid #88c\\n}\\n\\n.profile-form input[type=\\\"url\\\"] {\\n width: 100%;\\n}\\n\\n.profile-form .formFieldValue {\\n min-width: 0;\\n margin-bottom: var(--spacing-sm);\\n}\\n\\n.profile-form .formFieldValue table {\\n margin: 0 !important;\\n padding: 0 !important;\\n}\\n\\n.profile-form .formFieldValue td {\\n padding: 0 !important;\\n}\\n\\n.profile-form .formFieldValue input:not([type=\\\"color\\\"]),\\n.profile-form .formFieldValue textarea,\\n.profile-form .formFieldValue select {\\n width: 100%;\\n max-width: 100%;\\n}\\n\\n.profile-form select#formSelect {\\n width: 100%;\\n max-width: 97%;\\n box-sizing: border-box;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n.profile-form span select {\\n max-width: 96% !important;\\n box-sizing: border-box;\\n}\\n\\n/* Remove border/padding from the first wrapper div (and its first child wrapper). */\\n.profile-form > div:first-of-type,\\n.profile-form > div:first-of-type > div:first-of-type {\\n border: none !important;\\n padding: 0 !important;\\n}\\n\\n/* Remove border/padding from the inner div of the first wrapper in the contact section. */\\nsection[aria-labelledby=\\\"edit-profile-contact-heading\\\"] .profile-form > div:first-of-type > div:first-of-type {\\n border: none !important;\\n padding: 0 !important;\\n}\\n\\n/* In contactPane, remove border/padding from all direct child divs. */\\n.contactPane > div {\\n border: none !important;\\n padding: 0 !important;\\n}\\n\\n/* Align schema.org, solid terms, FOAF, vCard, and org field labels with their input values. */\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://schema.org/\\\"]),\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/solid/terms#\\\"]),\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://xmlns.com/foaf/0.1/\\\"]),\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/2006/vcard/ns\\\"]),\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/org#\\\"]) {\\n display: inline-flex;\\n align-items: center;\\n vertical-align: middle;\\n}\\n\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://schema.org/\\\"]) + .formFieldValue,\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/solid/terms#\\\"]) + .formFieldValue,\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://xmlns.com/foaf/0.1/\\\"]) + .formFieldValue,\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/2006/vcard/ns\\\"]) + .formFieldValue,\\n.profile-form :not(.choiceBox) > .formFieldName:has(a[href*=\\\"http://www.w3.org/ns/org#\\\"]) + .formFieldValue {\\n display: inline-flex;\\n align-items: center;\\n vertical-align: middle;\\n}\\n\\n.profile-form textarea {\\n width: 100%;\\n box-sizing: border-box;\\n margin-top: var(--spacing-xs);\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n/* Add horizontal gap between label and textarea for all label+textarea pairs. */\\n.profile-form div:has(> a) + div:has(textarea) {\\n margin-left: var(--spacing-sm);\\n}\\n\\n/* Center textarea label vertically in flex rows. */\\n.profile-form div[style*=\\\"display: flex\\\"][style*=\\\"flex-direction: row\\\"]:has(textarea) {\\n align-items: flex-start;\\n}\\n\\n.profile-form div[style*=\\\"display: flex\\\"][style*=\\\"flex-direction: row\\\"]:has(textarea) > div:has(> a) {\\n padding-top: var(--spacing-xs);\\n}\\n\\n.profile-form input:not([type=\\\"color\\\"]) {\\n width: 100%;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n}\\n\\n/* Remove padding from table cells within webidControl */\\n.webidControl table td {\\n padding: 0 !important;\\n}\\n\\n/* Remove padding from contactPane divs inside webidControl table cells */\\n.webidControl table td div.contactPane.namedPane.fullWidth.individualPane {\\n padding: 0 !important;\\n}\\n\\n.webidControl table td div.contactPane.namedPane {\\n border: none !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* Utility-first CSS classes for layout, spacing, and responsiveness */\n\n.actionButton {\n width: 100%;\n min-width: 180px;\n max-width: 320px;\n box-sizing: border-box;\n display: inline-block;\n}\n\n.selectedButton {\n background-color: var(--color-primary) !important;\n color: white !important;\n border: 1px solid white !important;\n}\n/* ===========================================\n PROFILE GRID LAYOUT\n =========================================== */\n\n.profile-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(30em, 1fr));\n gap: var(--spacing-lg);\n background: var(--color-background);\n}\n\n.profile-header,\n.profile-footer {\n grid-column: 1 / -1;\n}\n\n.center {\n justify-content: center;\n align-items: center;\n}\n\n.flex {\n display: flex;\n}\n.grid {\n display: grid;\n}\n\n/* Spacing utilities using CSS variables */\n.gap-xs { gap: var(--spacing-xs); }\n.gap-sm { gap: var(--spacing-sm); }\n.gap-md { gap: var(--spacing-md); }\n.gap-lg { gap: var(--spacing-lg); }\n.gap-xl { gap: var(--spacing-xl); }\n\n.mt-xs { margin-top: var(--spacing-xs); }\n.mt-sm { margin-top: var(--spacing-sm); }\n.mt-md { margin-top: var(--spacing-md); }\n.mt-lg { margin-top: var(--spacing-lg); }\n\n.mb-xs { margin-bottom: var(--spacing-xs); }\n.mb-sm { margin-bottom: var(--spacing-sm); }\n.mb-md { margin-bottom: var(--spacing-md); }\n.mb-lg { margin-bottom: var(--spacing-lg); }\n\n.p-xs { padding: var(--spacing-xs); }\n.p-sm { padding: var(--spacing-sm); }\n.p-md { padding: var(--spacing-md); }\n.p-lg { padding: var(--spacing-lg); }\n\n.rounded { border-radius: var(--border-radius-full); }\n.rounded-sm { border-radius: var(--border-radius-base); }\n\n.shadow { box-shadow: var(--box-shadow); }\n.shadow-sm { box-shadow: var(--box-shadow-sm); }\n\n.bg-primary {\n background: var(--color-primary);\n color: #fff;\n}\n.bg-card {\n background: var(--color-card-bg);\n}\n\n/* Accessibility utilities */\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.min-touch-target {\n min-height: var(--min-touch-target);\n min-width: var(--min-touch-target);\n}\n\n/* Enhanced accessibility utilities */\n.visually-hidden {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.visually-hidden.focusable:focus,\n.visually-hidden.focusable:active {\n position: static !important;\n width: auto !important;\n height: auto !important;\n padding: inherit !important;\n margin: inherit !important;\n overflow: visible !important;\n clip: auto !important;\n white-space: inherit !important;\n}\n\n/* Skip links utility */\n.skip-links {\n position: absolute;\n top: -100px;\n left: 0;\n z-index: 1000;\n}\n\n.skip-links a {\n position: absolute;\n left: 6px;\n top: 6px;\n padding: var(--spacing-sm);\n background: var(--color-primary);\n color: white;\n text-decoration: none;\n border-radius: var(--border-radius-base);\n}\n\n.skip-links a:focus {\n top: 6px;\n}\n\n.reduced-motion {\n animation: none !important;\n transition: none !important;\n}\n\n/* Focus management */\n.focus-ring {\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n}\n\n.no-focus-ring {\n outline: none;\n}\n\n.no-focus-ring:focus-visible {\n outline: none;\n box-shadow: none;\n}\n\n/* ARIA live regions */\n.live-region {\n position: absolute;\n left: -10000px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n}\n\n/* Note: Use aria-live=\"polite\" or aria-live=\"assertive\" HTML attributes with .live-region */\n\n/* Text scaling utilities */\n.text-scale-friendly {\n line-height: 1.5;\n max-width: 70ch; /* Optimal reading length */\n}\n\n/* Text accessibility utilities */\n.text-readable {\n line-height: var(--line-height-base);\n max-width: 65ch;\n}\n\n.text-lg {\n font-size: var(--font-size-lg);\n line-height: var(--line-height-base);\n}\n\n.text-small {\n font-size: max(var(--font-size-sm), var(--min-font-size));\n line-height: var(--min-line-height);\n}\n\n.text-contrast-high {\n color: var(--color-text);\n font-weight: 600;\n}\n\n:focus-visible {\n outline: var(--focus-ring-width) solid var(--color-primary);\n outline-offset: 2px;\n box-shadow: 0 0 0 1px var(--color-background);\n}\n\n:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n}\n\n/* Better focus for text elements */\n.focusable-text:focus {\n background-color: rgba(124, 77, 255, 0.1);\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n border-radius: 2px;\n}\n\n/* High contrast text */\n.high-contrast {\n color: var(--color-text);\n background: var(--color-background);\n border: 1px solid var(--color-border-pale);\n}\n\n/* ===========================================\n CONSOLIDATED COMPONENT PATTERNS\n =========================================== */\n\n/* Primary Button - used by ChatWithMe, ProfileCard */\n.btn-primary {\n min-height: var(--min-touch-target);\n padding: var(--spacing-sm) var(--spacing-md);\n border: 1px solid var(--color-primary);\n border-radius: var(--border-radius-base);\n background: var(--color-primary);\n color: white;\n font-weight: 600;\n cursor: pointer;\n transition: all var(--animation-duration) ease;\n}\n\n.btn-primary:hover {\n background: color-mix(in srgb, var(--color-primary) 90%, black);\n box-shadow: 0 2px 4px rgba(124, 77, 255, 0.2);\n}\n\n.btn-primary:active {\n box-shadow: 0 1px 2px rgba(124, 77, 255, 0.2);\n}\n\n.btn-primary:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n transform: none;\n}\n\n/* Action Button Focus - used by ChatWithMe, ProfileCard */\n.action-button-focus:focus,\n.action-button-focus:focus-visible {\n outline: 3px solid var(--color-primary) !important;\n outline-offset: 2px !important;\n box-shadow: 0 0 0 2px var(--color-background), 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\n z-index: 1;\n}\n\n/* List Reset - used by FriendList, SocialCard, nav */\n.list-reset {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n\n/* Zebra Striping - used by FriendList, StuffCard tables */\n.zebra-stripe tr:nth-child(even),\n.zebra-stripe > *:nth-child(even) {\n background-color: rgba(0, 0, 0, 0.02);\n}\n\n/* Section Title - primary colored heading */\n.section-title {\n font-size: 1.25em;\n font-weight: 600;\n color: var(--color-primary);\n margin: 0;\n}\n\n/* Text Overflow - used by ProfileCard, SocialCard */\n.text-truncate {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.text-wrap-anywhere {\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n\n/* Loading Text - primary colored centered loading indicator */\n.loading-text {\n color: var(--color-primary);\n text-align: center;\n margin: var(--spacing-md) 0;\n}\n\n/* Centered Section - flex column with center alignment */\n.section-centered {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n/* Card Section Background */\n.section-bg {\n background: var(--color-section-bg);\n border-radius: var(--border-radius-full);\n box-shadow: var(--box-shadow);\n padding: var(--spacing-md);\n}\n\n\n/* Transparent button override (for solid-ui integration) */\n.btn-transparent {\n background-color: transparent;\n}\n\n.btn-transparent:hover {\n background-color: transparent;\n}\n\n/* input */\n.input {\n padding: 5px;\n min-height: var(--min-touch-target);\n height: 35px;\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n border: none;\n border-radius: var(--border-radius-base);\n background: white;\n font-weight: 600;\n font-size: var(--font-size-sm);\n transition: box-shadow 0.3s ease;\n}\n\n.input:focus,\n.input:focus-visible {\n border-radius: var(--border-radius-base);\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px !important;\n z-index: 1;\n}\n\ninput[type=\"radio\"] {\n accent-color: var(--color-secondary); /* Change to your desired color */\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/utilities.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"/* Utility-first CSS classes for layout, spacing, and responsiveness */\\n\\n.actionButton {\\n width: 100%;\\n min-width: 180px;\\n max-width: 320px;\\n box-sizing: border-box;\\n display: inline-block;\\n}\\n\\n.selectedButton {\\n background-color: var(--color-primary) !important;\\n color: white !important;\\n border: 1px solid white !important;\\n}\\n/* ===========================================\\n PROFILE GRID LAYOUT\\n =========================================== */\\n\\n.profile-grid {\\n display: grid;\\n grid-template-columns: repeat(auto-fit, minmax(30em, 1fr));\\n gap: var(--spacing-lg);\\n background: var(--color-background);\\n}\\n\\n.profile-header,\\n.profile-footer {\\n grid-column: 1 / -1;\\n}\\n\\n.center {\\n justify-content: center;\\n align-items: center;\\n}\\n\\n.flex {\\n display: flex;\\n}\\n.grid {\\n display: grid;\\n}\\n\\n/* Spacing utilities using CSS variables */\\n.gap-xs { gap: var(--spacing-xs); }\\n.gap-sm { gap: var(--spacing-sm); }\\n.gap-md { gap: var(--spacing-md); }\\n.gap-lg { gap: var(--spacing-lg); }\\n.gap-xl { gap: var(--spacing-xl); }\\n\\n.mt-xs { margin-top: var(--spacing-xs); }\\n.mt-sm { margin-top: var(--spacing-sm); }\\n.mt-md { margin-top: var(--spacing-md); }\\n.mt-lg { margin-top: var(--spacing-lg); }\\n\\n.mb-xs { margin-bottom: var(--spacing-xs); }\\n.mb-sm { margin-bottom: var(--spacing-sm); }\\n.mb-md { margin-bottom: var(--spacing-md); }\\n.mb-lg { margin-bottom: var(--spacing-lg); }\\n\\n.p-xs { padding: var(--spacing-xs); }\\n.p-sm { padding: var(--spacing-sm); }\\n.p-md { padding: var(--spacing-md); }\\n.p-lg { padding: var(--spacing-lg); }\\n\\n.rounded { border-radius: var(--border-radius-full); }\\n.rounded-sm { border-radius: var(--border-radius-base); }\\n\\n.shadow { box-shadow: var(--box-shadow); }\\n.shadow-sm { box-shadow: var(--box-shadow-sm); }\\n\\n.bg-primary {\\n background: var(--color-primary);\\n color: #fff;\\n}\\n.bg-card {\\n background: var(--color-card-bg);\\n}\\n\\n/* Accessibility utilities */\\n.sr-only {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n white-space: nowrap;\\n border: 0;\\n}\\n\\n.min-touch-target {\\n min-height: var(--min-touch-target);\\n min-width: var(--min-touch-target);\\n}\\n\\n/* Enhanced accessibility utilities */\\n.visually-hidden {\\n position: absolute !important;\\n width: 1px !important;\\n height: 1px !important;\\n padding: 0 !important;\\n margin: -1px !important;\\n overflow: hidden !important;\\n clip: rect(0, 0, 0, 0) !important;\\n white-space: nowrap !important;\\n border: 0 !important;\\n}\\n\\n.visually-hidden.focusable:focus,\\n.visually-hidden.focusable:active {\\n position: static !important;\\n width: auto !important;\\n height: auto !important;\\n padding: inherit !important;\\n margin: inherit !important;\\n overflow: visible !important;\\n clip: auto !important;\\n white-space: inherit !important;\\n}\\n\\n/* Skip links utility */\\n.skip-links {\\n position: absolute;\\n top: -100px;\\n left: 0;\\n z-index: 1000;\\n}\\n\\n.skip-links a {\\n position: absolute;\\n left: 6px;\\n top: 6px;\\n padding: var(--spacing-sm);\\n background: var(--color-primary);\\n color: white;\\n text-decoration: none;\\n border-radius: var(--border-radius-base);\\n}\\n\\n.skip-links a:focus {\\n top: 6px;\\n}\\n\\n.reduced-motion {\\n animation: none !important;\\n transition: none !important;\\n}\\n\\n/* Focus management */\\n.focus-ring {\\n outline: 2px solid var(--color-primary);\\n outline-offset: 2px;\\n}\\n\\n.no-focus-ring {\\n outline: none;\\n}\\n\\n.no-focus-ring:focus-visible {\\n outline: none;\\n box-shadow: none;\\n}\\n\\n/* ARIA live regions */\\n.live-region {\\n position: absolute;\\n left: -10000px;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n/* Note: Use aria-live=\\\"polite\\\" or aria-live=\\\"assertive\\\" HTML attributes with .live-region */\\n\\n/* Text scaling utilities */\\n.text-scale-friendly {\\n line-height: 1.5;\\n max-width: 70ch; /* Optimal reading length */\\n}\\n\\n/* Text accessibility utilities */\\n.text-readable {\\n line-height: var(--line-height-base);\\n max-width: 65ch;\\n}\\n\\n.text-lg {\\n font-size: var(--font-size-lg);\\n line-height: var(--line-height-base);\\n}\\n\\n.text-small {\\n font-size: max(var(--font-size-sm), var(--min-font-size));\\n line-height: var(--min-line-height);\\n}\\n\\n.text-contrast-high {\\n color: var(--color-text);\\n font-weight: 600;\\n}\\n\\n:focus-visible {\\n outline: var(--focus-ring-width) solid var(--color-primary);\\n outline-offset: 2px;\\n box-shadow: 0 0 0 1px var(--color-background);\\n}\\n\\n:focus:not(:focus-visible) {\\n outline: none;\\n box-shadow: none;\\n}\\n\\n/* Better focus for text elements */\\n.focusable-text:focus {\\n background-color: rgba(124, 77, 255, 0.1);\\n outline: 2px solid var(--color-primary);\\n outline-offset: 2px;\\n border-radius: 2px;\\n}\\n\\n/* High contrast text */\\n.high-contrast {\\n color: var(--color-text);\\n background: var(--color-background);\\n border: 1px solid var(--color-border-pale);\\n}\\n\\n/* ===========================================\\n CONSOLIDATED COMPONENT PATTERNS\\n =========================================== */\\n\\n/* Primary Button - used by ChatWithMe, ProfileCard */\\n.btn-primary {\\n min-height: var(--min-touch-target);\\n padding: var(--spacing-sm) var(--spacing-md);\\n border: 1px solid var(--color-primary);\\n border-radius: var(--border-radius-base);\\n background: var(--color-primary);\\n color: white;\\n font-weight: 600;\\n cursor: pointer;\\n transition: all var(--animation-duration) ease;\\n}\\n\\n.btn-primary:hover {\\n background: color-mix(in srgb, var(--color-primary) 90%, black);\\n box-shadow: 0 2px 4px rgba(124, 77, 255, 0.2);\\n}\\n\\n.btn-primary:active {\\n box-shadow: 0 1px 2px rgba(124, 77, 255, 0.2);\\n}\\n\\n.btn-primary:disabled {\\n opacity: 0.6;\\n cursor: not-allowed;\\n transform: none;\\n}\\n\\n/* Action Button Focus - used by ChatWithMe, ProfileCard */\\n.action-button-focus:focus,\\n.action-button-focus:focus-visible {\\n outline: 3px solid var(--color-primary) !important;\\n outline-offset: 2px !important;\\n box-shadow: 0 0 0 2px var(--color-background), 0 0 0 5px rgba(124, 77, 255, 0.25) !important;\\n z-index: 1;\\n}\\n\\n/* List Reset - used by FriendList, SocialCard, nav */\\n.list-reset {\\n list-style: none;\\n padding: 0;\\n margin: 0;\\n}\\n\\n/* Zebra Striping - used by FriendList, StuffCard tables */\\n.zebra-stripe tr:nth-child(even),\\n.zebra-stripe > *:nth-child(even) {\\n background-color: rgba(0, 0, 0, 0.02);\\n}\\n\\n/* Section Title - primary colored heading */\\n.section-title {\\n font-size: 1.25em;\\n font-weight: 600;\\n color: var(--color-primary);\\n margin: 0;\\n}\\n\\n/* Text Overflow - used by ProfileCard, SocialCard */\\n.text-truncate {\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n overflow: hidden;\\n}\\n\\n.text-wrap-anywhere {\\n overflow-wrap: anywhere;\\n word-break: break-word;\\n}\\n\\n/* Loading Text - primary colored centered loading indicator */\\n.loading-text {\\n color: var(--color-primary);\\n text-align: center;\\n margin: var(--spacing-md) 0;\\n}\\n\\n/* Centered Section - flex column with center alignment */\\n.section-centered {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n}\\n\\n/* Card Section Background */\\n.section-bg {\\n background: var(--color-section-bg);\\n border-radius: var(--border-radius-full);\\n box-shadow: var(--box-shadow);\\n padding: var(--spacing-md);\\n}\\n\\n\\n/* Transparent button override (for solid-ui integration) */\\n.btn-transparent {\\n background-color: transparent;\\n}\\n\\n.btn-transparent:hover {\\n background-color: transparent;\\n}\\n\\n/* input */\\n.input {\\n padding: 5px;\\n min-height: var(--min-touch-target);\\n height: 35px;\\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\\n border: none;\\n border-radius: var(--border-radius-base);\\n background: white;\\n font-weight: 600;\\n font-size: var(--font-size-sm);\\n transition: box-shadow 0.3s ease;\\n}\\n\\n.input:focus,\\n.input:focus-visible {\\n border-radius: var(--border-radius-base);\\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px !important;\\n z-index: 1;\\n}\\n\\ninput[type=\\\"radio\\\"] {\\n accent-color: var(--color-secondary); /* Change to your desired color */\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n * Wyatt Baldwin <self@wyattbaldwin.com>\n * All rights reserved\n *\n * Licensed under the MIT license.\n *\n * http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n single_source_shortest_paths: function(graph, s, d) {\n // Predecessor map for each node that has been encountered.\n // node ID => predecessor node ID\n var predecessors = {};\n\n // Costs of shortest paths from s to all nodes encountered.\n // node ID => cost\n var costs = {};\n costs[s] = 0;\n\n // Costs of shortest paths from s to all nodes encountered; differs from\n // `costs` in that it provides easy access to the node that currently has\n // the known shortest path from s.\n // XXX: Do we actually need both `costs` and `open`?\n var open = dijkstra.PriorityQueue.make();\n open.push(s, 0);\n\n var closest,\n u, v,\n cost_of_s_to_u,\n adjacent_nodes,\n cost_of_e,\n cost_of_s_to_u_plus_cost_of_e,\n cost_of_s_to_v,\n first_visit;\n while (!open.empty()) {\n // In the nodes remaining in graph that have a known cost from s,\n // find the node, u, that currently has the shortest path from s.\n closest = open.pop();\n u = closest.value;\n cost_of_s_to_u = closest.cost;\n\n // Get nodes adjacent to u...\n adjacent_nodes = graph[u] || {};\n\n // ...and explore the edges that connect u to those nodes, updating\n // the cost of the shortest paths to any or all of those nodes as\n // necessary. v is the node across the current edge from u.\n for (v in adjacent_nodes) {\n if (adjacent_nodes.hasOwnProperty(v)) {\n // Get the cost of the edge running from u to v.\n cost_of_e = adjacent_nodes[v];\n\n // Cost of s to u plus the cost of u to v across e--this is *a*\n // cost from s to v that may or may not be less than the current\n // known cost to v.\n cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n // If we haven't visited v yet OR if the current known cost from s to\n // v is greater than the new cost we just found (cost of s to u plus\n // cost of u to v across e), update v's cost in the cost list and\n // update v's predecessor in the predecessor list (it's now u).\n cost_of_s_to_v = costs[v];\n first_visit = (typeof costs[v] === 'undefined');\n if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n costs[v] = cost_of_s_to_u_plus_cost_of_e;\n open.push(v, cost_of_s_to_u_plus_cost_of_e);\n predecessors[v] = u;\n }\n }\n }\n }\n\n if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n throw new Error(msg);\n }\n\n return predecessors;\n },\n\n extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n var nodes = [];\n var u = d;\n var predecessor;\n while (u) {\n nodes.push(u);\n predecessor = predecessors[u];\n u = predecessors[u];\n }\n nodes.reverse();\n return nodes;\n },\n\n find_path: function(graph, s, d) {\n var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n return dijkstra.extract_shortest_path_from_predecessor_list(\n predecessors, d);\n },\n\n /**\n * A very naive priority queue implementation.\n */\n PriorityQueue: {\n make: function (opts) {\n var T = dijkstra.PriorityQueue,\n t = {},\n key;\n opts = opts || {};\n for (key in T) {\n if (T.hasOwnProperty(key)) {\n t[key] = T[key];\n }\n }\n t.queue = [];\n t.sorter = opts.sorter || T.default_sorter;\n return t;\n },\n\n default_sorter: function (a, b) {\n return a.cost - b.cost;\n },\n\n /**\n * Add a new item to the queue and ensure the highest priority element\n * is at the front of the queue.\n */\n push: function (value, cost) {\n var item = {value: value, cost: cost};\n this.queue.push(item);\n this.queue.sort(this.sorter);\n },\n\n /**\n * Return the highest priority element in the queue.\n */\n pop: function () {\n return this.queue.shift();\n },\n\n empty: function () {\n return this.queue.length === 0;\n }\n }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n module.exports = dijkstra;\n}\n","\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n const args = [].slice.call(arguments, 1)\n const argsNum = args.length\n const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n if (!isLastArgCb && !canPromise()) {\n throw new Error('Callback required as last argument')\n }\n\n if (isLastArgCb) {\n if (argsNum < 2) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 2) {\n cb = text\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 3) {\n if (canvas.getContext && typeof cb === 'undefined') {\n cb = opts\n opts = undefined\n } else {\n cb = opts\n opts = text\n text = canvas\n canvas = undefined\n }\n }\n } else {\n if (argsNum < 1) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 1) {\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 2 && !canvas.getContext) {\n opts = text\n text = canvas\n canvas = undefined\n }\n\n return new Promise(function (resolve, reject) {\n try {\n const data = QRCode.create(text, opts)\n resolve(renderFunc(data, canvas, opts))\n } catch (e) {\n reject(e)\n }\n })\n }\n\n try {\n const data = QRCode.create(text, opts)\n cb(null, renderFunc(data, canvas, opts))\n } catch (e) {\n cb(e)\n }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n return SvgRenderer.render(data, opts)\n})\n","// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n","/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n if (version === 1) return []\n\n const posCount = Math.floor(version / 7) + 2\n const size = getSymbolSize(version)\n const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n const positions = [size - 7] // Last coord is always (size - 7)\n\n for (let i = 1; i < posCount - 1; i++) {\n positions[i] = positions[i - 1] - intervals\n }\n\n positions.push(6) // First coord is always 6\n\n return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const coords = []\n const pos = exports.getRowColCoords(version)\n const posLength = pos.length\n\n for (let i = 0; i < posLength; i++) {\n for (let j = 0; j < posLength; j++) {\n // Skip if position is occupied by finder patterns\n if ((i === 0 && j === 0) || // top-left\n (i === 0 && j === posLength - 1) || // bottom-left\n (i === posLength - 1 && j === 0)) { // top-right\n continue\n }\n\n coords.push([pos[i], pos[j]])\n }\n }\n\n return coords\n}\n","const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n this.mode = Mode.ALPHANUMERIC\n this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n let i\n\n // Input data characters are divided into groups of two characters\n // and encoded as 11-bit binary codes.\n for (i = 0; i + 2 <= this.data.length; i += 2) {\n // The character value of the first character is multiplied by 45\n let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n // The character value of the second digit is added to the product\n value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n // The sum is then stored as 11-bit binary number\n bitBuffer.put(value, 11)\n }\n\n // If the number of input data characters is not a multiple of two,\n // the character value of the final character is encoded as a 6-bit binary number.\n if (this.data.length % 2) {\n bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n }\n}\n\nmodule.exports = AlphanumericData\n","function BitBuffer () {\n this.buffer = []\n this.length = 0\n}\n\nBitBuffer.prototype = {\n\n get: function (index) {\n const bufIndex = Math.floor(index / 8)\n return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n },\n\n put: function (num, length) {\n for (let i = 0; i < length; i++) {\n this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n }\n },\n\n getLengthInBits: function () {\n return this.length\n },\n\n putBit: function (bit) {\n const bufIndex = Math.floor(this.length / 8)\n if (this.buffer.length <= bufIndex) {\n this.buffer.push(0)\n }\n\n if (bit) {\n this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n }\n\n this.length++\n }\n}\n\nmodule.exports = BitBuffer\n","/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n if (!size || size < 1) {\n throw new Error('BitMatrix size must be defined and greater than 0')\n }\n\n this.size = size\n this.data = new Uint8Array(size * size)\n this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n const index = row * this.size + col\n this.data[index] = value\n if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n","const Mode = require('./mode')\n\nfunction ByteData (data) {\n this.mode = Mode.BYTE\n if (typeof (data) === 'string') {\n this.data = new TextEncoder().encode(data)\n } else {\n this.data = new Uint8Array(data)\n }\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n for (let i = 0, l = this.data.length; i < l; i++) {\n bitBuffer.put(this.data[i], 8)\n }\n}\n\nmodule.exports = ByteData\n","const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L M Q H\r\n 1, 1, 1, 1,\r\n 1, 1, 1, 1,\r\n 1, 1, 2, 2,\r\n 1, 2, 2, 4,\r\n 1, 2, 4, 4,\r\n 2, 4, 4, 4,\r\n 2, 4, 6, 5,\r\n 2, 4, 6, 6,\r\n 2, 5, 8, 8,\r\n 4, 5, 8, 8,\r\n 4, 5, 8, 11,\r\n 4, 8, 10, 11,\r\n 4, 9, 12, 16,\r\n 4, 9, 16, 16,\r\n 6, 10, 12, 18,\r\n 6, 10, 17, 16,\r\n 6, 11, 16, 19,\r\n 6, 13, 18, 21,\r\n 7, 14, 21, 25,\r\n 8, 16, 20, 25,\r\n 8, 17, 23, 25,\r\n 9, 17, 23, 34,\r\n 9, 18, 25, 30,\r\n 10, 20, 27, 32,\r\n 12, 21, 29, 35,\r\n 12, 23, 34, 37,\r\n 12, 25, 34, 40,\r\n 13, 26, 35, 42,\r\n 14, 28, 38, 45,\r\n 15, 29, 40, 48,\r\n 16, 31, 43, 51,\r\n 17, 33, 45, 54,\r\n 18, 35, 48, 57,\r\n 19, 37, 51, 60,\r\n 19, 38, 53, 63,\r\n 20, 40, 56, 66,\r\n 21, 43, 59, 70,\r\n 22, 45, 62, 74,\r\n 24, 47, 65, 77,\r\n 25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L M Q H\r\n 7, 10, 13, 17,\r\n 10, 16, 22, 28,\r\n 15, 26, 36, 44,\r\n 20, 36, 52, 64,\r\n 26, 48, 72, 88,\r\n 36, 64, 96, 112,\r\n 40, 72, 108, 130,\r\n 48, 88, 132, 156,\r\n 60, 110, 160, 192,\r\n 72, 130, 192, 224,\r\n 80, 150, 224, 264,\r\n 96, 176, 260, 308,\r\n 104, 198, 288, 352,\r\n 120, 216, 320, 384,\r\n 132, 240, 360, 432,\r\n 144, 280, 408, 480,\r\n 168, 308, 448, 532,\r\n 180, 338, 504, 588,\r\n 196, 364, 546, 650,\r\n 224, 416, 600, 700,\r\n 224, 442, 644, 750,\r\n 252, 476, 690, 816,\r\n 270, 504, 750, 900,\r\n 300, 560, 810, 960,\r\n 312, 588, 870, 1050,\r\n 336, 644, 952, 1110,\r\n 360, 700, 1020, 1200,\r\n 390, 728, 1050, 1260,\r\n 420, 784, 1140, 1350,\r\n 450, 812, 1200, 1440,\r\n 480, 868, 1290, 1530,\r\n 510, 924, 1350, 1620,\r\n 540, 980, 1440, 1710,\r\n 570, 1036, 1530, 1800,\r\n 570, 1064, 1590, 1890,\r\n 600, 1120, 1680, 1980,\r\n 630, 1204, 1770, 2100,\r\n 660, 1260, 1860, 2220,\r\n 720, 1316, 1950, 2310,\r\n 750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'l':\n case 'low':\n return exports.L\n\n case 'm':\n case 'medium':\n return exports.M\n\n case 'q':\n case 'quartile':\n return exports.Q\n\n case 'h':\n case 'high':\n return exports.H\n\n default:\n throw new Error('Unknown EC Level: ' + string)\n }\n}\n\nexports.isValid = function isValid (level) {\n return level && typeof level.bit !== 'undefined' &&\n level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const size = getSymbolSize(version)\n\n return [\n // top-left\n [0, 0],\n // top-right\n [size - FINDER_PATTERN_SIZE, 0],\n // bottom-left\n [0, size - FINDER_PATTERN_SIZE]\n ]\n}\n","const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Number} mask Mask pattern\n * @return {Number} Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n const data = ((errorCorrectionLevel.bit << 3) | mask)\n let d = data << 10\n\n while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n }\n\n // xor final data with mask pattern in order to ensure that\n // no combination of Error Correction Level and data mask pattern\n // will result in an all-zero data string\n return ((data << 10) | d) ^ G15_MASK\n}\n","const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n let x = 1\n for (let i = 0; i < 255; i++) {\n EXP_TABLE[i] = x\n LOG_TABLE[x] = i\n\n x <<= 1 // multiply by 2\n\n // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n x ^= 0x11D\n }\n }\n\n // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n // stay inside the bounds (because we will mainly use this table for the multiplication of\n // two GF numbers, no more).\n // @see {@link mul}\n for (let i = 255; i < 512; i++) {\n EXP_TABLE[i] = EXP_TABLE[i - 255]\n }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n if (n < 1) throw new Error('log(' + n + ')')\n return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param {Number} x\n * @param {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n if (x === 0 || y === 0) return 0\n\n // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n // @see {@link initTables}\n return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n","const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n this.mode = Mode.KANJI\n this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n let i\n\n // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n // These byte values are shifted from the JIS X 0208 values.\n // JIS X 0208 gives details of the shift coded representation.\n for (i = 0; i < this.data.length; i++) {\n let value = Utils.toSJIS(this.data[i])\n\n // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n if (value >= 0x8140 && value <= 0x9FFC) {\n // Subtract 0x8140 from Shift JIS value\n value -= 0x8140\n\n // For characters with Shift JIS values from 0xE040 to 0xEBBF\n } else if (value >= 0xE040 && value <= 0xEBBF) {\n // Subtract 0xC140 from Shift JIS value\n value -= 0xC140\n } else {\n throw new Error(\n 'Invalid SJIS character: ' + this.data[i] + '\\n' +\n 'Make sure your charset is UTF-8')\n }\n\n // Multiply most significant byte of result by 0xC0\n // and add least significant byte to product\n value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n // Convert result to a 13-bit binary string\n bitBuffer.put(value, 13)\n }\n}\n\nmodule.exports = KanjiData\n","/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n PATTERN000: 0,\n PATTERN001: 1,\n PATTERN010: 2,\n PATTERN011: 3,\n PATTERN100: 4,\n PATTERN101: 5,\n PATTERN110: 6,\n PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n N1: 3,\n N2: 3,\n N3: 40,\n N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param {Number} mask Mask pattern\n * @return {Boolean} true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param {Number|String} value Mask pattern value\n * @return {Number} Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n const size = data.size\n let points = 0\n let sameCountCol = 0\n let sameCountRow = 0\n let lastCol = null\n let lastRow = null\n\n for (let row = 0; row < size; row++) {\n sameCountCol = sameCountRow = 0\n lastCol = lastRow = null\n\n for (let col = 0; col < size; col++) {\n let module = data.get(row, col)\n if (module === lastCol) {\n sameCountCol++\n } else {\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n lastCol = module\n sameCountCol = 1\n }\n\n module = data.get(col, row)\n if (module === lastRow) {\n sameCountRow++\n } else {\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n lastRow = module\n sameCountRow = 1\n }\n }\n\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n }\n\n return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n const size = data.size\n let points = 0\n\n for (let row = 0; row < size - 1; row++) {\n for (let col = 0; col < size - 1; col++) {\n const last = data.get(row, col) +\n data.get(row, col + 1) +\n data.get(row + 1, col) +\n data.get(row + 1, col + 1)\n\n if (last === 4 || last === 0) points++\n }\n }\n\n return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n const size = data.size\n let points = 0\n let bitsCol = 0\n let bitsRow = 0\n\n for (let row = 0; row < size; row++) {\n bitsCol = bitsRow = 0\n for (let col = 0; col < size; col++) {\n bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n }\n }\n\n return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n let darkCount = 0\n const modulesCount = data.data.length\n\n for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param {Number} maskPattern Pattern reference value\n * @param {Number} i Row\n * @param {Number} j Column\n * @return {Boolean} Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n switch (maskPattern) {\n case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n case exports.Patterns.PATTERN001: return i % 2 === 0\n case exports.Patterns.PATTERN010: return j % 3 === 0\n case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n default: throw new Error('bad maskPattern:' + maskPattern)\n }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param {Number} pattern Pattern reference number\n * @param {BitMatrix} data BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n const size = data.size\n\n for (let col = 0; col < size; col++) {\n for (let row = 0; row < size; row++) {\n if (data.isReserved(row, col)) continue\n data.xor(row, col, getMaskAt(pattern, row, col))\n }\n }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n const numPatterns = Object.keys(exports.Patterns).length\n let bestPattern = 0\n let lowerPenalty = Infinity\n\n for (let p = 0; p < numPatterns; p++) {\n setupFormatFunc(p)\n exports.applyMask(p, data)\n\n // Calculate penalty\n const penalty =\n exports.getPenaltyN1(data) +\n exports.getPenaltyN2(data) +\n exports.getPenaltyN3(data) +\n exports.getPenaltyN4(data)\n\n // Undo previously applied mask\n exports.applyMask(p, data)\n\n if (penalty < lowerPenalty) {\n lowerPenalty = penalty\n bestPattern = p\n }\n }\n\n return bestPattern\n}\n","const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n id: 'Numeric',\n bit: 1 << 0,\n ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n * 26 alphabetic characters (A - Z),\n * and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n id: 'Alphanumeric',\n bit: 1 << 1,\n ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n id: 'Byte',\n bit: 1 << 2,\n ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n id: 'Kanji',\n bit: 1 << 3,\n ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param {Mode} mode Data mode\n * @param {Number} version QR Code version\n * @return {Number} Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid version: ' + version)\n }\n\n if (version >= 1 && version < 10) return mode.ccBits[0]\n else if (version < 27) return mode.ccBits[1]\n return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param {String} dataStr Input data string\n * @return {Mode} Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n else if (Regex.testKanji(dataStr)) return exports.KANJI\n else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String} Mode name\n */\nexports.toString = function toString (mode) {\n if (mode && mode.id) return mode.id\n throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param {Mode} mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param {String} string Mode name\n * @returns {Mode} Mode object\n */\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'numeric':\n return exports.NUMERIC\n case 'alphanumeric':\n return exports.ALPHANUMERIC\n case 'kanji':\n return exports.KANJI\n case 'byte':\n return exports.BYTE\n default:\n throw new Error('Unknown mode: ' + string)\n }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param {Mode|String} value Encoding mode\n * @param {Mode} defaultValue Fallback value\n * @return {Mode} Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","const Mode = require('./mode')\n\nfunction NumericData (data) {\n this.mode = Mode.NUMERIC\n this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n let i, group, value\n\n // The input data string is divided into groups of three digits,\n // and each group is converted to its 10-bit binary equivalent.\n for (i = 0; i + 3 <= this.data.length; i += 3) {\n group = this.data.substr(i, 3)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, 10)\n }\n\n // If the number of input digits is not an exact multiple of three,\n // the final one or two digits are converted to 4 or 7 bits respectively.\n const remainingNum = this.data.length - i\n if (remainingNum > 0) {\n group = this.data.substr(i)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, remainingNum * 3 + 1)\n }\n}\n\nmodule.exports = NumericData\n","const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param {Uint8Array} p1 Polynomial\n * @param {Uint8Array} p2 Polynomial\n * @return {Uint8Array} Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n for (let i = 0; i < p1.length; i++) {\n for (let j = 0; j < p2.length; j++) {\n coeff[i + j] ^= GF.mul(p1[i], p2[j])\n }\n }\n\n return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param {Uint8Array} divident Polynomial\n * @param {Uint8Array} divisor Polynomial\n * @return {Uint8Array} Remainder\n */\nexports.mod = function mod (divident, divisor) {\n let result = new Uint8Array(divident)\n\n while ((result.length - divisor.length) >= 0) {\n const coeff = result[0]\n\n for (let i = 0; i < divisor.length; i++) {\n result[i] ^= GF.mul(divisor[i], coeff)\n }\n\n // remove all zeros from buffer head\n let offset = 0\n while (offset < result.length && result[offset] === 0) offset++\n result = result.slice(offset)\n }\n\n return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param {Number} degree Degree of the generator polynomial\n * @return {Uint8Array} Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n let poly = new Uint8Array([1])\n for (let i = 0; i < degree; i++) {\n poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n }\n\n return poly\n}\n","const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n const size = matrix.size\n const pos = FinderPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -1; r <= 7; r++) {\n if (row + r <= -1 || size <= row + r) continue\n\n for (let c = -1; c <= 7; c++) {\n if (col + c <= -1 || size <= col + c) continue\n\n if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n const size = matrix.size\n\n for (let r = 8; r < size - 8; r++) {\n const value = r % 2 === 0\n matrix.set(r, 6, value, true)\n matrix.set(6, r, value, true)\n }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n const pos = AlignmentPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n if (r === -2 || r === 2 || c === -2 || c === 2 ||\n (r === 0 && c === 0)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n const size = matrix.size\n const bits = Version.getEncodedBits(version)\n let row, col, mod\n\n for (let i = 0; i < 18; i++) {\n row = Math.floor(i / 3)\n col = i % 3 + size - 8 - 3\n mod = ((bits >> i) & 1) === 1\n\n matrix.set(row, col, mod, true)\n matrix.set(col, row, mod, true)\n }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {Number} maskPattern Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n const size = matrix.size\n const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n let i, mod\n\n for (i = 0; i < 15; i++) {\n mod = ((bits >> i) & 1) === 1\n\n // vertical\n if (i < 6) {\n matrix.set(i, 8, mod, true)\n } else if (i < 8) {\n matrix.set(i + 1, 8, mod, true)\n } else {\n matrix.set(size - 15 + i, 8, mod, true)\n }\n\n // horizontal\n if (i < 8) {\n matrix.set(8, size - i - 1, mod, true)\n } else if (i < 9) {\n matrix.set(8, 15 - i - 1 + 1, mod, true)\n } else {\n matrix.set(8, 15 - i - 1, mod, true)\n }\n }\n\n // fixed module\n matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Uint8Array} data Data codewords\n */\nfunction setupData (matrix, data) {\n const size = matrix.size\n let inc = -1\n let row = size - 1\n let bitIndex = 7\n let byteIndex = 0\n\n for (let col = size - 1; col > 0; col -= 2) {\n if (col === 6) col--\n\n while (true) {\n for (let c = 0; c < 2; c++) {\n if (!matrix.isReserved(row, col - c)) {\n let dark = false\n\n if (byteIndex < data.length) {\n dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n }\n\n matrix.set(row, col - c, dark)\n bitIndex--\n\n if (bitIndex === -1) {\n byteIndex++\n bitIndex = 7\n }\n }\n }\n\n row += inc\n\n if (row < 0 || size <= row) {\n row -= inc\n inc = -inc\n break\n }\n }\n }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {ByteData} data Data input\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n // Prepare data buffer\n const buffer = new BitBuffer()\n\n segments.forEach(function (data) {\n // prefix data with mode indicator (4 bits)\n buffer.put(data.mode.bit, 4)\n\n // Prefix data with character count indicator.\n // The character count indicator is a string of bits that represents the\n // number of characters that are being encoded.\n // The character count indicator must be placed after the mode indicator\n // and must be a certain number of bits long, depending on the QR version\n // and data mode\n // @see {@link Mode.getCharCountIndicator}.\n buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n // add binary data sequence to buffer\n data.write(buffer)\n })\n\n // Calculate required number of bits\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n // Add a terminator.\n // If the bit string is shorter than the total number of required bits,\n // a terminator of up to four 0s must be added to the right side of the string.\n // If the bit string is more than four bits shorter than the required number of bits,\n // add four 0s to the end.\n if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n buffer.put(0, 4)\n }\n\n // If the bit string is fewer than four bits shorter, add only the number of 0s that\n // are needed to reach the required number of bits.\n\n // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n // pad the string on the right with 0s to make the string's length a multiple of 8.\n while (buffer.getLengthInBits() % 8 !== 0) {\n buffer.putBit(0)\n }\n\n // Add pad bytes if the string is still shorter than the total number of required bits.\n // Extend the buffer to fill the data capacity of the symbol corresponding to\n // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n // and 00010001 (0x11) alternately.\n const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n for (let i = 0; i < remainingByte; i++) {\n buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n }\n\n return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param {BitBuffer} bitBuffer Data to encode\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n // Total number of blocks\n const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n // Calculate how many blocks each group should contain\n const blocksInGroup2 = totalCodewords % ecTotalBlocks\n const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n // Number of EC codewords is the same for both groups\n const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n const rs = new ReedSolomonEncoder(ecCount)\n\n let offset = 0\n const dcData = new Array(ecTotalBlocks)\n const ecData = new Array(ecTotalBlocks)\n let maxDataSize = 0\n const buffer = new Uint8Array(bitBuffer.buffer)\n\n // Divide the buffer into the required number of blocks\n for (let b = 0; b < ecTotalBlocks; b++) {\n const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n // extract a block of data from buffer\n dcData[b] = buffer.slice(offset, offset + dataSize)\n\n // Calculate EC codewords for this data block\n ecData[b] = rs.encode(dcData[b])\n\n offset += dataSize\n maxDataSize = Math.max(maxDataSize, dataSize)\n }\n\n // Create final data\n // Interleave the data and error correction codewords from each block\n const data = new Uint8Array(totalCodewords)\n let index = 0\n let i, r\n\n // Add data codewords\n for (i = 0; i < maxDataSize; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n if (i < dcData[r].length) {\n data[index++] = dcData[r][i]\n }\n }\n }\n\n // Apped EC codewords\n for (i = 0; i < ecCount; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n data[index++] = ecData[r][i]\n }\n }\n\n return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @param {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param {MaskPattern} maskPattern Mask pattern\n * @return {Object} Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n let segments\n\n if (Array.isArray(data)) {\n segments = Segments.fromArray(data)\n } else if (typeof data === 'string') {\n let estimatedVersion = version\n\n if (!estimatedVersion) {\n const rawSegments = Segments.rawSplit(data)\n\n // Estimate best version that can contain raw splitted segments\n estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n }\n\n // Build optimized segments\n // If estimated version is undefined, try with the highest version\n segments = Segments.fromString(data, estimatedVersion || 40)\n } else {\n throw new Error('Invalid data')\n }\n\n // Get the min version that can contain data\n const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n // If no version is found, data cannot be stored\n if (!bestVersion) {\n throw new Error('The amount of data is too big to be stored in a QR Code')\n }\n\n // If not specified, use min version as default\n if (!version) {\n version = bestVersion\n\n // Check if the specified version can contain the data\n } else if (version < bestVersion) {\n throw new Error('\\n' +\n 'The chosen QR Code version cannot contain this amount of data.\\n' +\n 'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n )\n }\n\n const dataBits = createData(version, errorCorrectionLevel, segments)\n\n // Allocate matrix buffer\n const moduleCount = Utils.getSymbolSize(version)\n const modules = new BitMatrix(moduleCount)\n\n // Add function modules\n setupFinderPattern(modules, version)\n setupTimingPattern(modules)\n setupAlignmentPattern(modules, version)\n\n // Add temporary dummy bits for format info just to set them as reserved.\n // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n // since the masking operation must be performed only on the encoding region.\n // These blocks will be replaced with correct values later in code.\n setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n if (version >= 7) {\n setupVersionInfo(modules, version)\n }\n\n // Add data codewords\n setupData(modules, dataBits)\n\n if (isNaN(maskPattern)) {\n // Find best mask pattern\n maskPattern = MaskPattern.getBestMask(modules,\n setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n }\n\n // Apply mask pattern\n MaskPattern.applyMask(maskPattern, modules)\n\n // Replace format info bits with correct values\n setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n return {\n modules: modules,\n version: version,\n errorCorrectionLevel: errorCorrectionLevel,\n maskPattern: maskPattern,\n segments: segments\n }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data Input data\n * @param {Object} options Optional configurations\n * @param {Number} options.version QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n if (typeof data === 'undefined' || data === '') {\n throw new Error('No input text')\n }\n\n let errorCorrectionLevel = ECLevel.M\n let version\n let mask\n\n if (typeof options !== 'undefined') {\n // Use higher error correction level as default\n errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n version = Version.from(options.version)\n mask = MaskPattern.from(options.maskPattern)\n\n if (options.toSJISFunc) {\n Utils.setToSJISFunction(options.toSJISFunc)\n }\n }\n\n return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n","const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n this.genPoly = undefined\n this.degree = degree\n\n if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n // create an irreducible generator polynomial\n this.degree = degree\n this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param {Uint8Array} data Buffer containing input data\n * @return {Uint8Array} Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n if (!this.genPoly) {\n throw new Error('Encoder not initialized')\n }\n\n // Calculate EC for this data block\n // extends data size to data+genPoly size\n const paddedData = new Uint8Array(data.length + this.degree)\n paddedData.set(data)\n\n // The error correction codewords are the remainder after dividing the data codewords\n // by a generator polynomial\n const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n // return EC data blocks (last n byte, where n is the degree of genPoly)\n // If coefficients number in remainder are less than genPoly degree,\n // pad with 0s to the left to reach the needed number of coefficients\n const start = this.degree - remainder.length\n if (start > 0) {\n const buff = new Uint8Array(this.degree)\n buff.set(remainder, start)\n\n return buff\n }\n\n return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n","const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n return TEST_ALPHANUMERIC.test(str)\n}\n","const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param {String} str Input string\n * @return {Number} Number of byte\n */\nfunction getStringByteLength (str) {\n return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param {Mode} mode Segment mode\n * @param {String} str String to process\n * @return {Array} Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n const segments = []\n let result\n\n while ((result = regex.exec(str)) !== null) {\n segments.push({\n data: result[0],\n index: result.index,\n mode: mode,\n length: result[0].length\n })\n }\n\n return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param {String} dataStr Input string\n * @return {Array} Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n let byteSegs\n let kanjiSegs\n\n if (Utils.isKanjiModeEnabled()) {\n byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n } else {\n byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n kanjiSegs = []\n }\n\n const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n return segs\n .sort(function (s1, s2) {\n return s1.index - s2.index\n })\n .map(function (obj) {\n return {\n data: obj.data,\n mode: obj.mode,\n length: obj.length\n }\n })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param {Number} length String length\n * @param {Mode} mode Segment mode\n * @return {Number} Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n switch (mode) {\n case Mode.NUMERIC:\n return NumericData.getBitsLength(length)\n case Mode.ALPHANUMERIC:\n return AlphanumericData.getBitsLength(length)\n case Mode.KANJI:\n return KanjiData.getBitsLength(length)\n case Mode.BYTE:\n return ByteData.getBitsLength(length)\n }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction mergeSegments (segs) {\n return segs.reduce(function (acc, curr) {\n const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n if (prevSeg && prevSeg.mode === curr.mode) {\n acc[acc.length - 1].data += curr.data\n return acc\n }\n\n acc.push(curr)\n return acc\n }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction buildNodes (segs) {\n const nodes = []\n for (let i = 0; i < segs.length; i++) {\n const seg = segs[i]\n\n switch (seg.mode) {\n case Mode.NUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.ALPHANUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.KANJI:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n break\n case Mode.BYTE:\n nodes.push([\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n }\n }\n\n return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param {Array} nodes Array of object with segments data\n * @param {Number} version QR Code version\n * @return {Object} Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n const table = {}\n const graph = { start: {} }\n let prevNodeIds = ['start']\n\n for (let i = 0; i < nodes.length; i++) {\n const nodeGroup = nodes[i]\n const currentNodeIds = []\n\n for (let j = 0; j < nodeGroup.length; j++) {\n const node = nodeGroup[j]\n const key = '' + i + j\n\n currentNodeIds.push(key)\n table[key] = { node: node, lastCount: 0 }\n graph[key] = {}\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n const prevNodeId = prevNodeIds[n]\n\n if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n graph[prevNodeId][key] =\n getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n table[prevNodeId].lastCount += node.length\n } else {\n if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n 4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n }\n }\n }\n\n prevNodeIds = currentNodeIds\n }\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n graph[prevNodeIds[n]].end = 0\n }\n\n return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param {String} data Input data\n * @param {Mode | String} modesHint Data mode\n * @return {Segment} Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n let mode\n const bestMode = Mode.getBestModeForData(data)\n\n mode = Mode.from(modesHint, bestMode)\n\n // Make sure data can be encoded\n if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n throw new Error('\"' + data + '\"' +\n ' cannot be encoded with mode ' + Mode.toString(mode) +\n '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n }\n\n // Use Mode.BYTE if Kanji support is disabled\n if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n mode = Mode.BYTE\n }\n\n switch (mode) {\n case Mode.NUMERIC:\n return new NumericData(data)\n\n case Mode.ALPHANUMERIC:\n return new AlphanumericData(data)\n\n case Mode.KANJI:\n return new KanjiData(data)\n\n case Mode.BYTE:\n return new ByteData(data)\n }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param {Array} array Array of objects with segments data\n * @return {Array} Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n return array.reduce(function (acc, seg) {\n if (typeof seg === 'string') {\n acc.push(buildSingleSegment(seg, null))\n } else if (seg.data) {\n acc.push(buildSingleSegment(seg.data, seg.mode))\n }\n\n return acc\n }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @return {Array} Array of segments\n */\nexports.fromString = function fromString (data, version) {\n const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n const nodes = buildNodes(segs)\n const graph = buildGraph(nodes, version)\n const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n const optimizedSegs = []\n for (let i = 1; i < path.length - 1; i++) {\n optimizedSegs.push(graph.table[path[i]].node)\n }\n\n return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param {string} data Input string\n * @return {Array} Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n return exports.fromArray(\n getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n )\n}\n","let toSJISFunction\nconst CODEWORDS_COUNT = [\n 0, // Not used\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param {Number} version QR Code version\n * @return {Number} size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n if (!version) throw new Error('\"version\" cannot be null or undefined')\n if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param {Number} version QR Code version\n * @return {Number} Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param {Number} data Value to encode\n * @return {Number} Encoded value\n */\nexports.getBCHDigit = function (data) {\n let digit = 0\n\n while (data !== 0) {\n digit++\n data >>>= 1\n }\n\n return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n if (typeof f !== 'function') {\n throw new Error('\"toSJISFunc\" is not a valid function.')\n }\n\n toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n return toSJISFunction(kanji)\n}\n","/**\n * Check if QR Code version is valid\n *\n * @param {Number} version QR Code version\n * @return {Boolean} true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n return !isNaN(version) && version >= 1 && version <= 40\n}\n","const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n // Character count indicator + mode indicator bits\n return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n let totalBits = 0\n\n segments.forEach(function (data) {\n const reservedBits = getReservedBitsCount(data.mode, version)\n totalBits += reservedBits + data.getBitsLength()\n })\n\n return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n const length = getTotalBitsFromDataArray(segments, currentVersion)\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param {Number|String} value QR Code version\n * @param {Number} defaultValue Fallback value\n * @return {Number} QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n if (VersionCheck.isValid(value)) {\n return parseInt(value, 10)\n }\n\n return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param {Number} version QR Code version (1-40)\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid QR Code version')\n }\n\n // Use Byte mode as default\n if (typeof mode === 'undefined') mode = Mode.BYTE\n\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n // Return max number of storable codewords\n switch (mode) {\n case Mode.NUMERIC:\n return Math.floor((usableBits / 10) * 3)\n\n case Mode.ALPHANUMERIC:\n return Math.floor((usableBits / 11) * 2)\n\n case Mode.KANJI:\n return Math.floor(usableBits / 13)\n\n case Mode.BYTE:\n default:\n return Math.floor(usableBits / 8)\n }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param {Segment} data Segment of data\n * @param {Number} [errorCorrectionLevel=H] Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n let seg\n\n const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n if (Array.isArray(data)) {\n if (data.length > 1) {\n return getBestVersionForMixedData(data, ecl)\n }\n\n if (data.length === 0) {\n return 1\n }\n\n seg = data[0]\n } else {\n seg = data\n }\n\n return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param {Number} version QR Code version\n * @return {Number} Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n if (!VersionCheck.isValid(version) || version < 7) {\n throw new Error('Invalid QR Code version')\n }\n\n let d = version << 12\n\n while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n }\n\n return (version << 12) | d\n}\n","const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n if (!canvas.style) canvas.style = {}\n canvas.height = size\n canvas.width = size\n canvas.style.height = size + 'px'\n canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n try {\n return document.createElement('canvas')\n } catch (e) {\n throw new Error('You need to specify a canvas element')\n }\n}\n\nexports.render = function render (qrData, canvas, options) {\n let opts = options\n let canvasEl = canvas\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!canvas) {\n canvasEl = getCanvasElement()\n }\n\n opts = Utils.getOptions(opts)\n const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n const ctx = canvasEl.getContext('2d')\n const image = ctx.createImageData(size, size)\n Utils.qrToImageData(image.data, qrData, opts)\n\n clearCanvas(ctx, canvasEl, size)\n ctx.putImageData(image, 0, 0)\n\n return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n let opts = options\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!opts) opts = {}\n\n const canvasEl = exports.render(qrData, canvas, opts)\n\n const type = opts.type || 'image/png'\n const rendererOpts = opts.rendererOpts || {}\n\n return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n","const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n const alpha = color.a / 255\n const str = attrib + '=\"' + color.hex + '\"'\n\n return alpha < 1\n ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n : str\n}\n\nfunction svgCmd (cmd, x, y) {\n let str = cmd + x\n if (typeof y !== 'undefined') str += ' ' + y\n\n return str\n}\n\nfunction qrToPath (data, size, margin) {\n let path = ''\n let moveBy = 0\n let newRow = false\n let lineLength = 0\n\n for (let i = 0; i < data.length; i++) {\n const col = Math.floor(i % size)\n const row = Math.floor(i / size)\n\n if (!col && !newRow) newRow = true\n\n if (data[i]) {\n lineLength++\n\n if (!(i > 0 && col > 0 && data[i - 1])) {\n path += newRow\n ? svgCmd('M', col + margin, 0.5 + row + margin)\n : svgCmd('m', moveBy, 0)\n\n moveBy = 0\n newRow = false\n }\n\n if (!(col + 1 < size && data[i + 1])) {\n path += svgCmd('h', lineLength)\n lineLength = 0\n }\n } else {\n moveBy++\n }\n }\n\n return path\n}\n\nexports.render = function render (qrData, options, cb) {\n const opts = Utils.getOptions(options)\n const size = qrData.modules.size\n const data = qrData.modules.data\n const qrcodesize = size + opts.margin * 2\n\n const bg = !opts.color.light.a\n ? ''\n : '<path ' + getColorAttrib(opts.color.light, 'fill') +\n ' d=\"M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z\"/>'\n\n const path =\n '<path ' + getColorAttrib(opts.color.dark, 'stroke') +\n ' d=\"' + qrToPath(data, size, opts.margin) + '\"/>'\n\n const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n const svgTag = '<svg xmlns=\"http://www.w3.org/2000/svg\" ' + width + viewBox + ' shape-rendering=\"crispEdges\">' + bg + path + '</svg>\\n'\n\n if (typeof cb === 'function') {\n cb(null, svgTag)\n }\n\n return svgTag\n}\n","function hex2rgba (hex) {\n if (typeof hex === 'number') {\n hex = hex.toString()\n }\n\n if (typeof hex !== 'string') {\n throw new Error('Color should be defined as hex string')\n }\n\n let hexCode = hex.slice().replace('#', '').split('')\n if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n throw new Error('Invalid hex color: ' + hex)\n }\n\n // Convert from short to long form (fff -> ffffff)\n if (hexCode.length === 3 || hexCode.length === 4) {\n hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n return [c, c]\n }))\n }\n\n // Add default alpha value\n if (hexCode.length === 6) hexCode.push('F', 'F')\n\n const hexValue = parseInt(hexCode.join(''), 16)\n\n return {\n r: (hexValue >> 24) & 255,\n g: (hexValue >> 16) & 255,\n b: (hexValue >> 8) & 255,\n a: hexValue & 255,\n hex: '#' + hexCode.slice(0, 6).join('')\n }\n}\n\nexports.getOptions = function getOptions (options) {\n if (!options) options = {}\n if (!options.color) options.color = {}\n\n const margin = typeof options.margin === 'undefined' ||\n options.margin === null ||\n options.margin < 0\n ? 4\n : options.margin\n\n const width = options.width && options.width >= 21 ? options.width : undefined\n const scale = options.scale || 4\n\n return {\n width: width,\n scale: width ? 4 : scale,\n margin: margin,\n color: {\n dark: hex2rgba(options.color.dark || '#000000ff'),\n light: hex2rgba(options.color.light || '#ffffffff')\n },\n type: options.type,\n rendererOpts: options.rendererOpts || {}\n }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n return opts.width && opts.width >= qrSize + opts.margin * 2\n ? opts.width / (qrSize + opts.margin * 2)\n : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n const scale = exports.getScale(qrSize, opts)\n return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n const size = qr.modules.size\n const data = qr.modules.data\n const scale = exports.getScale(size, opts)\n const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n const scaledMargin = opts.margin * scale\n const palette = [opts.color.light, opts.color.dark]\n\n for (let i = 0; i < symbolSize; i++) {\n for (let j = 0; j < symbolSize; j++) {\n let posDst = (i * symbolSize + j) * 4\n let pxColor = opts.color.light\n\n if (i >= scaledMargin && j >= scaledMargin &&\n i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n const iSrc = Math.floor((i - scaledMargin) / scale)\n const jSrc = Math.floor((j - scaledMargin) / scale)\n pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n }\n\n imgData[posDst++] = pxColor.r\n imgData[posDst++] = pxColor.g\n imgData[posDst++] = pxColor.b\n imgData[posDst] = pxColor.a\n }\n }\n}\n","\"use strict\";\nvar ShortUniqueId = (() => {\n var __defProp = Object.defineProperty;\n var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n var __getOwnPropNames = Object.getOwnPropertyNames;\n var __getOwnPropSymbols = Object.getOwnPropertySymbols;\n var __hasOwnProp = Object.prototype.hasOwnProperty;\n var __propIsEnum = Object.prototype.propertyIsEnumerable;\n var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n var __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n };\n var __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n };\n var __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n };\n var __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n\n // src/index.ts\n var index_exports = {};\n __export(index_exports, {\n DEFAULT_OPTIONS: () => DEFAULT_OPTIONS,\n DEFAULT_UUID_LENGTH: () => DEFAULT_UUID_LENGTH,\n default: () => ShortUniqueId\n });\n\n // package.json\n var version = \"5.3.2\";\n\n // src/index.ts\n var DEFAULT_UUID_LENGTH = 6;\n var DEFAULT_OPTIONS = {\n dictionary: \"alphanum\",\n shuffle: true,\n debug: false,\n length: DEFAULT_UUID_LENGTH,\n counter: 0\n };\n var _ShortUniqueId = class _ShortUniqueId {\n constructor(argOptions = {}) {\n __publicField(this, \"counter\");\n __publicField(this, \"debug\");\n __publicField(this, \"dict\");\n __publicField(this, \"version\");\n __publicField(this, \"dictIndex\", 0);\n __publicField(this, \"dictRange\", []);\n __publicField(this, \"lowerBound\", 0);\n __publicField(this, \"upperBound\", 0);\n __publicField(this, \"dictLength\", 0);\n __publicField(this, \"uuidLength\");\n __publicField(this, \"_digit_first_ascii\", 48);\n __publicField(this, \"_digit_last_ascii\", 58);\n __publicField(this, \"_alpha_lower_first_ascii\", 97);\n __publicField(this, \"_alpha_lower_last_ascii\", 123);\n __publicField(this, \"_hex_last_ascii\", 103);\n __publicField(this, \"_alpha_upper_first_ascii\", 65);\n __publicField(this, \"_alpha_upper_last_ascii\", 91);\n __publicField(this, \"_number_dict_ranges\", {\n digits: [this._digit_first_ascii, this._digit_last_ascii]\n });\n __publicField(this, \"_alpha_dict_ranges\", {\n lowerCase: [this._alpha_lower_first_ascii, this._alpha_lower_last_ascii],\n upperCase: [this._alpha_upper_first_ascii, this._alpha_upper_last_ascii]\n });\n __publicField(this, \"_alpha_lower_dict_ranges\", {\n lowerCase: [this._alpha_lower_first_ascii, this._alpha_lower_last_ascii]\n });\n __publicField(this, \"_alpha_upper_dict_ranges\", {\n upperCase: [this._alpha_upper_first_ascii, this._alpha_upper_last_ascii]\n });\n __publicField(this, \"_alphanum_dict_ranges\", {\n digits: [this._digit_first_ascii, this._digit_last_ascii],\n lowerCase: [this._alpha_lower_first_ascii, this._alpha_lower_last_ascii],\n upperCase: [this._alpha_upper_first_ascii, this._alpha_upper_last_ascii]\n });\n __publicField(this, \"_alphanum_lower_dict_ranges\", {\n digits: [this._digit_first_ascii, this._digit_last_ascii],\n lowerCase: [this._alpha_lower_first_ascii, this._alpha_lower_last_ascii]\n });\n __publicField(this, \"_alphanum_upper_dict_ranges\", {\n digits: [this._digit_first_ascii, this._digit_last_ascii],\n upperCase: [this._alpha_upper_first_ascii, this._alpha_upper_last_ascii]\n });\n __publicField(this, \"_hex_dict_ranges\", {\n decDigits: [this._digit_first_ascii, this._digit_last_ascii],\n alphaDigits: [this._alpha_lower_first_ascii, this._hex_last_ascii]\n });\n __publicField(this, \"_dict_ranges\", {\n _number_dict_ranges: this._number_dict_ranges,\n _alpha_dict_ranges: this._alpha_dict_ranges,\n _alpha_lower_dict_ranges: this._alpha_lower_dict_ranges,\n _alpha_upper_dict_ranges: this._alpha_upper_dict_ranges,\n _alphanum_dict_ranges: this._alphanum_dict_ranges,\n _alphanum_lower_dict_ranges: this._alphanum_lower_dict_ranges,\n _alphanum_upper_dict_ranges: this._alphanum_upper_dict_ranges,\n _hex_dict_ranges: this._hex_dict_ranges\n });\n /* tslint:disable consistent-return */\n __publicField(this, \"log\", (...args) => {\n const finalArgs = [...args];\n finalArgs[0] = \"[short-unique-id] \".concat(args[0]);\n if (this.debug === true) {\n if (typeof console !== \"undefined\" && console !== null) {\n console.log(...finalArgs);\n return;\n }\n }\n });\n /* tslint:enable consistent-return */\n __publicField(this, \"_normalizeDictionary\", (dictionary, shuffle) => {\n let finalDict;\n if (dictionary && Array.isArray(dictionary) && dictionary.length > 1) {\n finalDict = dictionary;\n } else {\n finalDict = [];\n this.dictIndex = 0;\n const rangesName = \"_\".concat(dictionary, \"_dict_ranges\");\n const ranges = this._dict_ranges[rangesName];\n let capacity = 0;\n for (const [, rangeValue] of Object.entries(ranges)) {\n const [lower, upper] = rangeValue;\n capacity += Math.abs(upper - lower);\n }\n finalDict = new Array(capacity);\n let dictIdx = 0;\n for (const [, rangeTypeValue] of Object.entries(ranges)) {\n this.dictRange = rangeTypeValue;\n this.lowerBound = this.dictRange[0];\n this.upperBound = this.dictRange[1];\n const isAscending = this.lowerBound <= this.upperBound;\n const start = this.lowerBound;\n const end = this.upperBound;\n if (isAscending) {\n for (let i = start; i < end; i++) {\n finalDict[dictIdx++] = String.fromCharCode(i);\n this.dictIndex = i;\n }\n } else {\n for (let i = start; i > end; i--) {\n finalDict[dictIdx++] = String.fromCharCode(i);\n this.dictIndex = i;\n }\n }\n }\n finalDict.length = dictIdx;\n }\n if (shuffle) {\n const len = finalDict.length;\n for (let i = len - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [finalDict[i], finalDict[j]] = [finalDict[j], finalDict[i]];\n }\n }\n return finalDict;\n });\n /** Change the dictionary after initialization. */\n __publicField(this, \"setDictionary\", (dictionary, shuffle) => {\n this.dict = this._normalizeDictionary(dictionary, shuffle);\n this.dictLength = this.dict.length;\n this.setCounter(0);\n });\n __publicField(this, \"seq\", () => {\n return this.sequentialUUID();\n });\n /**\n * Generates UUID based on internal counter that's incremented after each ID generation.\n * @alias `const uid = new ShortUniqueId(); uid.seq();`\n */\n __publicField(this, \"sequentialUUID\", () => {\n const dictLen = this.dictLength;\n const dict = this.dict;\n let counterDiv = this.counter;\n const idParts = [];\n do {\n const counterRem = counterDiv % dictLen;\n counterDiv = Math.trunc(counterDiv / dictLen);\n idParts.push(dict[counterRem]);\n } while (counterDiv !== 0);\n const id = idParts.join(\"\");\n this.counter += 1;\n return id;\n });\n __publicField(this, \"rnd\", (uuidLength = this.uuidLength || DEFAULT_UUID_LENGTH) => {\n return this.randomUUID(uuidLength);\n });\n /**\n * Generates UUID by creating each part randomly.\n * @alias `const uid = new ShortUniqueId(); uid.rnd(uuidLength: number);`\n */\n __publicField(this, \"randomUUID\", (uuidLength = this.uuidLength || DEFAULT_UUID_LENGTH) => {\n if (uuidLength === null || typeof uuidLength === \"undefined\" || uuidLength < 1) {\n throw new Error(\"Invalid UUID Length Provided\");\n }\n const result = new Array(uuidLength);\n const dictLen = this.dictLength;\n const dict = this.dict;\n for (let j = 0; j < uuidLength; j++) {\n const randomPartIdx = Math.floor(Math.random() * dictLen);\n result[j] = dict[randomPartIdx];\n }\n return result.join(\"\");\n });\n __publicField(this, \"fmt\", (format, date) => {\n return this.formattedUUID(format, date);\n });\n /**\n * Generates custom UUID with the provided format string.\n * @alias `const uid = new ShortUniqueId(); uid.fmt(format: string);`\n */\n __publicField(this, \"formattedUUID\", (format, date) => {\n const fnMap = {\n $r: this.randomUUID,\n $s: this.sequentialUUID,\n $t: this.stamp\n };\n const result = format.replace(/\\$[rs]\\d{0,}|\\$t0|\\$t[1-9]\\d{1,}/g, (m) => {\n const fn = m.slice(0, 2);\n const len = Number.parseInt(m.slice(2), 10);\n if (fn === \"$s\") {\n return fnMap[fn]().padStart(len, \"0\");\n }\n if (fn === \"$t\" && date) {\n return fnMap[fn](len, date);\n }\n return fnMap[fn](len);\n });\n return result;\n });\n /**\n * Calculates total number of possible UUIDs.\n *\n * Given that:\n *\n * - `H` is the total number of possible UUIDs\n * - `n` is the number of unique characters in the dictionary\n * - `l` is the UUID length\n *\n * Then `H` is defined as `n` to the power of `l`:\n *\n * <div style=\"background: white; padding: 5px; border-radius: 5px; overflow: hidden;\">\n * <img src=\"data:image/png;base64,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\" />\n * </div>\n *\n * This function returns `H`.\n */\n __publicField(this, \"availableUUIDs\", (uuidLength = this.uuidLength) => {\n return Number.parseFloat(([...new Set(this.dict)].length ** uuidLength).toFixed(0));\n });\n /**\n * Calculates approximate number of hashes before first collision.\n *\n * Given that:\n *\n * - `H` is the total number of possible UUIDs, or in terms of this library,\n * the result of running `availableUUIDs()`\n * - the expected number of values we have to choose before finding the\n * first collision can be expressed as the quantity `Q(H)`\n *\n * Then `Q(H)` can be approximated as the square root of the product of half\n * of pi times `H`:\n *\n * <div style=\"background: white; padding: 5px; border-radius: 5px; overflow: hidden;\">\n * <img src=\"data:image/png;base64,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\" />\n * </div>\n *\n * This function returns `Q(H)`.\n *\n * (see [Poisson distribution](https://en.wikipedia.org/wiki/Poisson_distribution))\n */\n // Cache for memoization\n __publicField(this, \"_collisionCache\", /* @__PURE__ */ new Map());\n __publicField(this, \"approxMaxBeforeCollision\", (rounds = this.availableUUIDs(this.uuidLength)) => {\n const cacheKey = rounds;\n const cached = this._collisionCache.get(cacheKey);\n if (cached !== void 0) {\n return cached;\n }\n const result = Number.parseFloat(Math.sqrt(Math.PI / 2 * rounds).toFixed(20));\n this._collisionCache.set(cacheKey, result);\n return result;\n });\n /**\n * Calculates probability of generating duplicate UUIDs (a collision) in a\n * given number of UUID generation rounds.\n *\n * Given that:\n *\n * - `r` is the maximum number of times that `randomUUID()` will be called,\n * or better said the number of _rounds_\n * - `H` is the total number of possible UUIDs, or in terms of this library,\n * the result of running `availableUUIDs()`\n *\n * Then the probability of collision `p(r; H)` can be approximated as the result\n * of dividing the square root of the product of half of pi times `r` by `H`:\n *\n * <div style=\"background: white; padding: 5px; border-radius: 5px; overflow: hidden;\">\n * <img src=\"data:image/png;base64,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\" />\n * </div>\n *\n * This function returns `p(r; H)`.\n *\n * (see [Poisson distribution](https://en.wikipedia.org/wiki/Poisson_distribution))\n *\n * (Useful if you are wondering _\"If I use this lib and expect to perform at most\n * `r` rounds of UUID generations, what is the probability that I will hit a duplicate UUID?\"_.)\n */\n __publicField(this, \"collisionProbability\", (rounds = this.availableUUIDs(this.uuidLength), uuidLength = this.uuidLength) => {\n return Number.parseFloat(\n (this.approxMaxBeforeCollision(rounds) / this.availableUUIDs(uuidLength)).toFixed(20)\n );\n });\n /**\n * Calculate a \"uniqueness\" score (from 0 to 1) of UUIDs based on size of\n * dictionary and chosen UUID length.\n *\n * Given that:\n *\n * - `H` is the total number of possible UUIDs, or in terms of this library,\n * the result of running `availableUUIDs()`\n * - `Q(H)` is the approximate number of hashes before first collision,\n * or in terms of this library, the result of running `approxMaxBeforeCollision()`\n *\n * Then `uniqueness` can be expressed as the additive inverse of the probability of\n * generating a \"word\" I had previously generated (a duplicate) at any given iteration\n * up to the the total number of possible UUIDs expressed as the quotiend of `Q(H)` and `H`:\n *\n * <div style=\"background: white; padding: 5px; border-radius: 5px; overflow: hidden;\">\n * <img src=\"data:image/png;base64,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\" />\n * </div>\n *\n * (Useful if you need a value to rate the \"quality\" of the combination of given dictionary\n * and UUID length. The closer to 1, higher the uniqueness and thus better the quality.)\n */\n __publicField(this, \"uniqueness\", (rounds = this.availableUUIDs(this.uuidLength)) => {\n const score = Number.parseFloat(\n (1 - this.approxMaxBeforeCollision(rounds) / rounds).toFixed(20)\n );\n return score > 1 ? 1 : score < 0 ? 0 : score;\n });\n /**\n * Return the version of this module.\n */\n __publicField(this, \"getVersion\", () => {\n return this.version;\n });\n /**\n * Generates a UUID with a timestamp that can be extracted using `uid.parseStamp(stampString);`.\n *\n * ```js\n * const uidWithTimestamp = uid.stamp(32);\n * console.log(uidWithTimestamp);\n * // GDa608f973aRCHLXQYPTbKDbjDeVsSb3\n *\n * console.log(uid.parseStamp(uidWithTimestamp));\n * // 2021-05-03T06:24:58.000Z\n * ```\n */\n __publicField(this, \"stamp\", (finalLength, date) => {\n const hexStamp = Math.floor(+(date || /* @__PURE__ */ new Date()) / 1e3).toString(16);\n if (typeof finalLength === \"number\" && finalLength === 0) {\n return hexStamp;\n }\n if (typeof finalLength !== \"number\" || finalLength < 10) {\n throw new Error(\n [\n \"Param finalLength must be a number greater than or equal to 10,\",\n \"or 0 if you want the raw hexadecimal timestamp\"\n ].join(\"\\n\")\n );\n }\n const idLength = finalLength - 9;\n const rndIdx = Math.round(Math.random() * (idLength > 15 ? 15 : idLength));\n const id = this.randomUUID(idLength);\n return \"\".concat(id.substring(0, rndIdx)).concat(hexStamp).concat(id.substring(rndIdx)).concat(rndIdx.toString(16));\n });\n /**\n * Extracts the date embeded in a UUID generated using the `uid.stamp(finalLength);` method.\n *\n * ```js\n * const uidWithTimestamp = uid.stamp(32);\n * console.log(uidWithTimestamp);\n * // GDa608f973aRCHLXQYPTbKDbjDeVsSb3\n *\n * console.log(uid.parseStamp(uidWithTimestamp));\n * // 2021-05-03T06:24:58.000Z\n * ```\n */\n __publicField(this, \"parseStamp\", (suid, format) => {\n if (format && !/t0|t[1-9]\\d{1,}/.test(format)) {\n throw new Error(\"Cannot extract date from a formated UUID with no timestamp in the format\");\n }\n const stamp = format ? format.replace(/\\$[rs]\\d{0,}|\\$t0|\\$t[1-9]\\d{1,}/g, (m) => {\n const fnMap = {\n $r: (len2) => [...Array(len2)].map(() => \"r\").join(\"\"),\n $s: (len2) => [...Array(len2)].map(() => \"s\").join(\"\"),\n $t: (len2) => [...Array(len2)].map(() => \"t\").join(\"\")\n };\n const fn = m.slice(0, 2);\n const len = Number.parseInt(m.slice(2), 10);\n return fnMap[fn](len);\n }).replace(/^(.*?)(t{8,})(.*)$/g, (_m, p1, p2) => {\n return suid.substring(p1.length, p1.length + p2.length);\n }) : suid;\n if (stamp.length === 8) {\n return new Date(Number.parseInt(stamp, 16) * 1e3);\n }\n if (stamp.length < 10) {\n throw new Error(\"Stamp length invalid\");\n }\n const rndIdx = Number.parseInt(stamp.substring(stamp.length - 1), 16);\n return new Date(Number.parseInt(stamp.substring(rndIdx, rndIdx + 8), 16) * 1e3);\n });\n /**\n * Set the counter to a specific value.\n */\n __publicField(this, \"setCounter\", (counter) => {\n this.counter = counter;\n });\n /**\n * Validate given UID contains only characters from the instanced dictionary or optionally provided dictionary.\n */\n __publicField(this, \"validate\", (uid, dictionary) => {\n const finalDictionary = dictionary ? this._normalizeDictionary(dictionary) : this.dict;\n return uid.split(\"\").every((c) => finalDictionary.includes(c));\n });\n const options = __spreadValues(__spreadValues({}, DEFAULT_OPTIONS), argOptions);\n this.counter = 0;\n this.debug = false;\n this.dict = [];\n this.version = version;\n const { dictionary, shuffle, length, counter } = options;\n this.uuidLength = length;\n this.setDictionary(dictionary, shuffle);\n this.setCounter(counter);\n this.debug = options.debug;\n this.log(this.dict);\n this.log(\n \"Generator instantiated with Dictionary Size \".concat(this.dictLength, \" and counter set to \").concat(this.counter)\n );\n this.log = this.log.bind(this);\n this.setDictionary = this.setDictionary.bind(this);\n this.setCounter = this.setCounter.bind(this);\n this.seq = this.seq.bind(this);\n this.sequentialUUID = this.sequentialUUID.bind(this);\n this.rnd = this.rnd.bind(this);\n this.randomUUID = this.randomUUID.bind(this);\n this.fmt = this.fmt.bind(this);\n this.formattedUUID = this.formattedUUID.bind(this);\n this.availableUUIDs = this.availableUUIDs.bind(this);\n this.approxMaxBeforeCollision = this.approxMaxBeforeCollision.bind(this);\n this.collisionProbability = this.collisionProbability.bind(this);\n this.uniqueness = this.uniqueness.bind(this);\n this.getVersion = this.getVersion.bind(this);\n this.stamp = this.stamp.bind(this);\n this.parseStamp = this.parseStamp.bind(this);\n }\n };\n /** @hidden */\n __publicField(_ShortUniqueId, \"default\", _ShortUniqueId);\n var ShortUniqueId = _ShortUniqueId;\n return __toCommonJS(index_exports);\n})();\n//# sourceMappingURL=short-unique-id.js.map\n'undefined'!=typeof module&&(module.exports=ShortUniqueId.default),'undefined'!=typeof window&&(ShortUniqueId=ShortUniqueId.default);","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","module.exports=function(e){var r={};function t(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&r&&\"string\"!=typeof e)for(var a in e)t.d(n,a,function(r){return e[r]}.bind(null,a));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,\"a\",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p=\"\",t(t.s=0)}([function(e,r,t){\"use strict\";t.r(r),t.d(r,\"validateHTMLColorName\",(function(){return l})),t.d(r,\"validateHTMLColorSpecialName\",(function(){return i})),t.d(r,\"validateHTMLColorHex\",(function(){return u})),t.d(r,\"validateHTMLColorRgb\",(function(){return g})),t.d(r,\"validateHTMLColorHsl\",(function(){return y})),t.d(r,\"validateHTMLColorHwb\",(function(){return L})),t.d(r,\"validateHTMLColorLab\",(function(){return S})),t.d(r,\"validateHTMLColorLch\",(function(){return m})),t.d(r,\"validateHTMLColor\",(function(){return G}));const n=e=>e&&\"string\"==typeof e,a=[\"AliceBlue\",\"AntiqueWhite\",\"Aqua\",\"Aquamarine\",\"Azure\",\"Beige\",\"Bisque\",\"Black\",\"BlanchedAlmond\",\"Blue\",\"BlueViolet\",\"Brown\",\"BurlyWood\",\"CadetBlue\",\"Chartreuse\",\"Chocolate\",\"Coral\",\"CornflowerBlue\",\"Cornsilk\",\"Crimson\",\"Cyan\",\"DarkBlue\",\"DarkCyan\",\"DarkGoldenrod\",\"DarkGray\",\"DarkGrey\",\"DarkGreen\",\"DarkKhaki\",\"DarkMagenta\",\"DarkOliveGreen\",\"DarkOrange\",\"DarkOrchid\",\"DarkRed\",\"DarkSalmon\",\"DarkSeaGreen\",\"DarkSlateBlue\",\"DarkSlateGray\",\"DarkSlateGrey\",\"DarkTurquoise\",\"DarkViolet\",\"DeepPink\",\"DeepSkyBlue\",\"DimGray\",\"DimGrey\",\"DodgerBlue\",\"FireBrick\",\"FloralWhite\",\"ForestGreen\",\"Fuchsia\",\"Gainsboro\",\"GhostWhite\",\"Gold\",\"Goldenrod\",\"Gray\",\"Grey\",\"Green\",\"GreenYellow\",\"HoneyDew\",\"HotPink\",\"IndianRed\",\"Indigo\",\"Ivory\",\"Khaki\",\"Lavender\",\"LavenderBlush\",\"LawnGreen\",\"LemonChiffon\",\"LightBlue\",\"LightCoral\",\"LightCyan\",\"LightGoldenrodYellow\",\"LightGray\",\"LightGrey\",\"LightGreen\",\"LightPink\",\"LightSalmon\",\"LightSalmon\",\"LightSeaGreen\",\"LightSkyBlue\",\"LightSlateGray\",\"LightSlateGrey\",\"LightSteelBlue\",\"LightYellow\",\"Lime\",\"LimeGreen\",\"Linen\",\"Magenta\",\"Maroon\",\"MediumAquamarine\",\"MediumBlue\",\"MediumOrchid\",\"MediumPurple\",\"MediumSeaGreen\",\"MediumSlateBlue\",\"MediumSlateBlue\",\"MediumSpringGreen\",\"MediumTurquoise\",\"MediumVioletRed\",\"MidnightBlue\",\"MintCream\",\"MistyRose\",\"Moccasin\",\"NavajoWhite\",\"Navy\",\"OldLace\",\"Olive\",\"OliveDrab\",\"Orange\",\"OrangeRed\",\"Orchid\",\"PaleGoldenrod\",\"PaleGreen\",\"PaleTurquoise\",\"PaleVioletRed\",\"PapayaWhip\",\"PeachPuff\",\"Peru\",\"Pink\",\"Plum\",\"PowderBlue\",\"Purple\",\"RebeccaPurple\",\"Red\",\"RosyBrown\",\"RoyalBlue\",\"SaddleBrown\",\"Salmon\",\"SandyBrown\",\"SeaGreen\",\"SeaShell\",\"Sienna\",\"Silver\",\"SkyBlue\",\"SlateBlue\",\"SlateGray\",\"SlateGrey\",\"Snow\",\"SpringGreen\",\"SteelBlue\",\"Tan\",\"Teal\",\"Thistle\",\"Tomato\",\"Turquoise\",\"Violet\",\"Wheat\",\"White\",\"WhiteSmoke\",\"Yellow\",\"YellowGreen\"],o=[\"currentColor\",\"inherit\",\"transparent\"],l=e=>{let r=!1;return n(e)&&a.map(t=>(e.toLowerCase()===t.toLowerCase()&&(r=!0),null)),r},i=e=>{let r=!1;return n(e)&&o.map(t=>(e.toLowerCase()===t.toLowerCase()&&(r=!0),null)),r},u=e=>{if(n(e)){const r=/^#([\\da-f]{3}){1,2}$|^#([\\da-f]{4}){1,2}$/i;return e&&r.test(e)}return!1},d=\"(([\\\\d]{0,5})((\\\\.([\\\\d]{1,5}))?))\",s=`(${d}%)`,c=\"(([0-9]|[1-9][0-9]|100)%)\",f=`(${c}|(0?((\\\\.([\\\\d]{1,5}))?))|1)`,h=`([\\\\s]{0,5})\\\\)?)(([\\\\s]{0,5})(\\\\/?)([\\\\s]{1,5})${`(((${c}))|(0?((\\\\.([\\\\d]{1,5}))?))|1))?`}([\\\\s]{0,5})\\\\)`,$=\"(-?(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]|3[0-5][0-9])((\\\\.([\\\\d]{1,5}))?)|360)(deg)?)\",g=e=>{if(n(e)){const r=\"([\\\\s]{0,5})([\\\\d]{1,5})%?([\\\\s]{0,5}),?\",t=\"((([\\\\s]{0,5}),?([\\\\s]{0,5}))|(([\\\\s]{1,5})))\",n=new RegExp(`^(rgb)a?\\\\(${`${r}${t}`}${`${r}${t}`}${`${r}${t}`}(${\"(\\\\/?([\\\\s]{0,5})(0?\\\\.?([\\\\d]{1,5})%?([\\\\s]{0,5}))?|1|0)\"})?\\\\)$`);return e&&n.test(e)}return!1},y=e=>{if(n(e)){const r=new RegExp(`^(hsl)a?\\\\((([\\\\s]{0,5})(${$}|${\"(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]|3[0-9][0-9]|400)grad)\"}|${\"((([0-5])?\\\\.([\\\\d]{1,5})|6\\\\.([0-9]|1[0-9]|2[0-8])|[0-6])rad)\"}|${\"((0?((\\\\.([\\\\d]{1,5}))?)|1)turn)\"})((([\\\\s]{0,5}),([\\\\s]{0,5}))|(([\\\\s]{1,5}))))(([\\\\s]{0,5})(0|${c})((([\\\\s]{0,5}),([\\\\s]{0,5}))|(([\\\\s]{1,5}))))(([\\\\s]{0,5})(0|${c})([\\\\s]{0,5})\\\\)?)(([\\\\s]{0,5})(\\\\/?|,?)([\\\\s]{0,5})(((${c}))|(0?((\\\\.([\\\\d]{1,5}))?))|1))?\\\\)$`);return e&&r.test(e)}return!1},L=e=>{if(n(e)){const r=new RegExp(`^(hwb\\\\(([\\\\s]{0,5})${$}([\\\\s]{1,5}))((0|${c})([\\\\s]{1,5}))((0|${c})${h}$`);return e&&r.test(e)}return!1},S=e=>{if(n(e)){const r=\"(-?(([0-9]|[1-9][0-9]|1[0-5][0-9])((\\\\.([\\\\d]{1,5}))?)?|160))\",t=new RegExp(`^(lab\\\\(([\\\\s]{0,5})${s}([\\\\s]{1,5})${r}([\\\\s]{1,5})${r}${h}$`);return e&&t.test(e)}return!1},m=e=>{if(n(e)){const r=\"((([0-9]|[1-9][0-9])?((\\\\.([\\\\d]{1,5}))?)|100)(%)?)\",t=\"\"+d,n=`((${$})|(0|${f})|(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]|3[0-5][0-9])((\\\\.([\\\\d]{1,5}))?)|360))`,a=`(\\\\/([\\\\s]{0,5})${f})`,o=new RegExp(`^lch\\\\(${`(([\\\\s]{0,5})${r}([\\\\s]{1,5})${t}([\\\\s]{1,5})${n}([\\\\s]{0,5})(${a})?)`}\\\\)$`);return e&&o.test(e)}return!1},G=e=>!!(e&&u(e)||g(e)||y(e)||L(e)||S(e)||m(e));r.default=e=>!!(e&&u(e)||l(e)||i(e)||g(e)||y(e)||L(e)||S(e)||m(e))}]);","module.exports = __WEBPACK_EXTERNAL_MODULE__5663__;","module.exports = __WEBPACK_EXTERNAL_MODULE__9426__;","module.exports = __WEBPACK_EXTERNAL_MODULE__5491__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","__webpack_require__.nc = undefined;","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./CVCard.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./CVCard.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./ChatWithMe.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./ChatWithMe.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./FriendList.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./FriendList.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./ProfileCard.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./ProfileCard.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./ProfileView.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./ProfileView.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./QRCodeCard.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./QRCodeCard.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./SocialCard.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./SocialCard.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./StuffCard.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./StuffCard.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./utilities.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./utilities.css\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>o,n=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,e={HTML:1,SVG:2,MATHML:3},l=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,d=o=>null!=o?._$litType$?.h,c=o=>void 0!==o?._$litDirective$,f=o=>o?._$litDirective$,r=o=>void 0===o.strings,s=()=>document.createComment(\"\"),v=(o,n,e)=>{const l=o._$AA.parentNode,d=void 0===n?o._$AB:n._$AA;if(void 0===e){const i=l.insertBefore(s(),d),n=l.insertBefore(s(),d);e=new t(i,n,o,o.options)}else{const t=e._$AB.nextSibling,n=e._$AM,c=n!==o;if(c){let t;e._$AQ?.(o),e._$AM=o,void 0!==e._$AP&&(t=o._$AU)!==n._$AU&&e._$AP(t)}if(t!==d||c){let o=e._$AA;for(;o!==t;){const t=i(o).nextSibling;i(l).insertBefore(o,d),o=t}}}return e},u=(o,t,i=o)=>(o._$AI(t,i),o),m={},p=(o,t=m)=>o._$AH=t,M=o=>o._$AH,h=o=>{o._$AR(),o._$AA.remove()},j=o=>{o._$AR()};export{e as TemplateResultType,j as clearPart,M as getCommittedValue,f as getDirectiveClass,v as insertPart,d as isCompiledTemplateResult,c as isDirectiveResult,n as isPrimitive,r as isSingleExpression,l as isTemplateResult,h as removePart,u as setChildPartValue,p as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{isSingleExpression as i}from\"./directive-helpers.js\";import{Directive as t,PartType as e}from\"./directive.js\";export{directive}from\"./directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=(i,t)=>{const e=i._$AN;if(void 0===e)return!1;for(const i of e)i._$AO?.(t,!1),s(i,t);return!0},o=i=>{let t,e;do{if(void 0===(t=i._$AM))break;e=t._$AN,e.delete(i),i=t}while(0===e?.size)},r=i=>{for(let t;t=i._$AM;i=t){let e=t._$AN;if(void 0===e)t._$AN=e=new Set;else if(e.has(i))break;e.add(i),c(t)}};function h(i){void 0!==this._$AN?(o(this),this._$AM=i,r(this)):this._$AM=i}function n(i,t=!1,e=0){const r=this._$AH,h=this._$AN;if(void 0!==h&&0!==h.size)if(t)if(Array.isArray(r))for(let i=e;i<r.length;i++)s(r[i],!1),o(r[i]);else null!=r&&(s(r,!1),o(r));else s(this,i)}const c=i=>{i.type==e.CHILD&&(i._$AP??=n,i._$AQ??=h)};class f extends t{constructor(){super(...arguments),this._$AN=void 0}_$AT(i,t,e){super._$AT(i,t,e),r(this),this.isConnected=i._$AU}_$AO(i,t=!0){i!==this.isConnected&&(this.isConnected=i,i?this.reconnected?.():this.disconnected?.()),t&&(s(this,i),o(this))}setValue(t){if(i(this._$Ct))this._$Ct._$AI(t,this);else{const i=[...this._$Ct._$AH];i[this._$Ci]=t,this._$Ct._$AI(i,this,0)}}disconnected(){}reconnected(){}}export{f as AsyncDirective,t as Directive,e as PartType};\n//# sourceMappingURL=async-directive.js.map\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=async(t,s)=>{for await(const i of t)if(!1===await s(i))return};class s{constructor(t){this.G=t}disconnect(){this.G=void 0}reconnect(t){this.G=t}deref(){return this.G}}class i{constructor(){this.Y=void 0,this.Z=void 0}get(){return this.Y}pause(){this.Y??=new Promise(t=>this.Z=t)}resume(){this.Z?.(),this.Y=this.Z=void 0}}export{i as Pauser,s as PseudoWeakRef,t as forAwaitOf};\n//# sourceMappingURL=private-async-helpers.js.map\n","import{noChange as t}from\"../lit-html.js\";import{AsyncDirective as i}from\"../async-directive.js\";import{PseudoWeakRef as s,Pauser as r,forAwaitOf as e}from\"./private-async-helpers.js\";import{directive as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class o extends i{constructor(){super(...arguments),this._$CK=new s(this),this._$CX=new r}render(i,s){return t}update(i,[s,r]){if(this.isConnected||this.disconnected(),s===this._$CJ)return t;this._$CJ=s;let n=0;const{_$CK:o,_$CX:h}=this;return e(s,async t=>{for(;h.get();)await h.get();const i=o.deref();if(void 0!==i){if(i._$CJ!==s)return!1;void 0!==r&&(t=r(t,n)),i.commitValue(t,n),n++}return!0}),t}commitValue(t,i){this.setValue(t)}disconnected(){this._$CK.disconnect(),this._$CX.pause()}reconnected(){this._$CK.reconnect(this),this._$CX.resume()}}const h=n(o);export{o as AsyncReplaceDirective,h as asyncReplace};\n//# sourceMappingURL=async-replace.js.map\n","// QR CODE\nexport const scanQrToConnectText = 'Scan the QR code to connect with me'\n//ERRORS & SUCCESS\n//Same 'not logged in' error message like on 'Chat with me' button\nexport const userNotLoggedInErrorMessage = 'Current user not found! Not logged in?'\nexport const internalErrorMessage = 'An internal error occured!'\nexport const friendWasAddedSuccesMessage = 'Friend was added!'\nexport const contactWasAddedSuccesMessage = 'Contact was added!'\nexport const addressBookNotExists = 'Your address book was not found.'\nexport const groupIsRequired = 'You need to either pick a group or enter one.'\nexport const errorGroupCreation = 'There was an error creating group.'\nexport const errorContactCreation = 'There was an error creating contact.'\nexport const errorAddressBookCreation = 'There was an error creating the address book.'\nexport const errorReadingAddressBook = 'There was an error reading your address book.'\nexport const errorLoadingContact = 'There was an error loading the contact: '\nexport const errorGettingAddressBooks = 'There was an error getting your address books.'\nexport const errorNotExistsAddressBookUri = 'Please enter an address book URI.'\nexport const errorProcessingUriAddressBook = 'There was an error processing your address book.'\nexport const errorUnableToDetermineUserWorkspace = 'Unable to determine user workspace for new address book.'\n\n//OTHER\nexport const friendExistsMessage = 'Friend already exists'\nexport const contactExistsMessage = 'Contact already exists'\nexport const loadingMessage = 'Loading...'\n\n//BUTTONS\nexport const addMeToYourFriendsButtonText = 'Add me to your friends'\nexport const logInAddMeToYourFriendsButtonText = 'Login to add me to your friends'\nexport const addMeToYourContactsButtonText = 'Add me to your contacts'\nexport const logInAddMeToYourContactsButtonText = 'Login to add me to your contacts'\nexport const logInToChatWithMeButtonText = 'Login to chat with me'\nexport const friendExistsAlreadyButtonText = 'Already part of friends'\nexport const contactExistsAlreadyButtonText = 'Already part of contacts'\nexport const contactExistsAlreadyByNameButtonText = 'Add webID to contact'\nexport const chatWithMeButtonText = 'Chat with me'\n\n// Profile & Edit profile texts \nexport const yourContactInformationHeading = 'Contact Information'\nexport const otherPreferencesHeadingText = 'Other Preferences'\nexport const communitiesHeadingText = 'Communities You Participate In'\nexport const resumeHeadingText = 'Resume'\nexport const socialAccountsHeadingText = 'Social Accounts'\nexport const sharedItemsHeadingText = 'Shared Items'\nexport const friendsHeadingText = 'Friends'\nexport const contactHeadingText = 'Contact'\n\n\n","import { DataBrowserContext } from 'pane-registry'\nimport { widgets } from 'solid-ui'\nimport { NamedNode } from 'rdflib'\n\nfunction complain(\n buttonContainer: HTMLDivElement,\n context: DataBrowserContext,\n error: string\n): void {\n const errorBlock = widgets.errorMessageBlock(context.dom, error)\n errorBlock.setAttribute('role', 'alert')\n errorBlock.setAttribute('aria-live', 'assertive')\n errorBlock.setAttribute('tabindex', '0')\n\n // Focus the error message for screen readers\n setTimeout(() => {\n errorBlock.focus()\n }, 100)\n\n buttonContainer.appendChild(errorBlock)\n}\n\nfunction mention(buttonContainer: HTMLDivElement, message: string): void {\n const positiveFrontendMessageDiv = <HTMLDivElement>document.createElement('div')\n positiveFrontendMessageDiv.setAttribute('role', 'status')\n positiveFrontendMessageDiv.setAttribute('aria-live', 'polite')\n positiveFrontendMessageDiv.setAttribute('tabindex', '0')\n positiveFrontendMessageDiv.classList.add('actionButton', 'licOkay')\n positiveFrontendMessageDiv.innerHTML = message\n\n // Focus the success message for screen readers\n setTimeout(() => {\n positiveFrontendMessageDiv.focus()\n }, 100)\n\n buttonContainer.appendChild(positiveFrontendMessageDiv)\n}\n\nfunction clearPreviousMessage(buttonContainer: HTMLDivElement): void {\n while (buttonContainer.childNodes.length > 2) {\n buttonContainer.removeChild(buttonContainer.lastChild)\n }\n}\n\nfunction checkIfAnyUserLoggedIn(me: NamedNode): boolean {\n if (me) return true\n else return false\n}\n\nexport { complain, mention, clearPreviousMessage, checkIfAnyUserLoggedIn }\n","import { html, TemplateResult } from 'lit-html'\nimport { DataBrowserContext } from 'pane-registry'\nimport { NamedNode } from 'rdflib'\nimport { widgets } from 'solid-ui'\nimport { authn } from 'solid-logic'\nimport { asyncReplace } from 'lit-html/directives/async-replace.js'\nimport { chatWithMeButtonText, logInToChatWithMeButtonText, loadingMessage } from './texts'\nimport { checkIfAnyUserLoggedIn, complain } from './buttonsHelper'\nimport './styles/ChatWithMe.css'\n\nexport const ChatWithMe = (\n subject: NamedNode,\n context: DataBrowserContext\n): TemplateResult => {\n const logic = context.session.logic\n const longChatPane = context.session.paneRegistry.byName('long chat')\n\n async function* chatContainer() {\n const chatContainer = context.dom.createElement('section') as HTMLDivElement\n chatContainer.setAttribute('class', 'chatSection section-centered')\n chatContainer.setAttribute('aria-labelledby', 'chat-section-title')\n chatContainer.setAttribute('role', 'region')\n chatContainer.setAttribute('data-testid', 'chat')\n\n // Add hidden title for screen readers\n const title = context.dom.createElement('h3')\n title.id = 'chat-section-title'\n title.className = 'sr-only'\n title.textContent = 'Communication'\n chatContainer.appendChild(title)\n\n let exists\n try {\n yield html`\n <div class=\"buttonSubSection\">\n <div class=\"actionButton loading-text center\" role=\"status\" aria-live=\"polite\">\n ${loadingMessage.toUpperCase()}\n </div>\n </div>\n `\n exists = await logic.chat.getChat(subject, false)\n } catch (e) {\n exists = false\n }\n \n if (exists) {\n const chatArea = context.dom.createElement('div')\n chatArea.setAttribute('role', 'log')\n chatArea.setAttribute('aria-label', 'Chat conversation')\n chatArea.appendChild(longChatPane.render(exists, context, {}))\n chatContainer.appendChild(chatArea)\n yield chatContainer\n } else {\n const me = authn.currentUser()\n let label = checkIfAnyUserLoggedIn(me) ? chatWithMeButtonText.toUpperCase() : logInToChatWithMeButtonText.toUpperCase()\n const button = widgets.button(\n context.dom,\n undefined,\n label,\n setButtonHandler,\n { needsBorder: true }\n )\n\n async function setButtonHandler(event) {\n event.preventDefault()\n try {\n const chat: NamedNode = await logic.chat.getChat(subject, true)\n chatContainer.innerHTML = ''\n chatContainer.appendChild(longChatPane.render(chat, context, {}))\n } catch (error) {\n complain(chatContainer, context, error)\n }\n }\n\n button.refresh = refreshButton()\n\n function refreshButton() {\n const me = authn.currentUser()\n \n if (checkIfAnyUserLoggedIn(me)) {\n button.innerHTML = chatWithMeButtonText.toUpperCase()\n } else {\n //not logged in\n button.innerHTML = logInToChatWithMeButtonText.toUpperCase()\n }\n }\n\n button.setAttribute('type', 'button')\n button.setAttribute('aria-describedby', 'chat-button-description')\n \n const description = context.dom.createElement('span')\n description.id = 'chat-button-description'\n description.className = 'sr-only'\n description.textContent = 'Start a new conversation or sign in to continue existing chat'\n \n button.classList.add('actionButton', 'btn-primary', 'action-button-focus')\n chatContainer.appendChild(button)\n chatContainer.appendChild(description)\n yield chatContainer\n }\n }\n\n return html` ${asyncReplace(chatContainer())} `\n}","import { ns, widgets } from 'solid-ui'\nimport { DataBrowserContext } from 'pane-registry'\nimport { NamedNode } from 'rdflib'\nimport { html, TemplateResult } from 'lit-html'\nimport './styles/FriendList.css'\n\n\nexport const FriendList = (\n subject: NamedNode,\n context: DataBrowserContext\n): TemplateResult | null => {\n const friends = extractFriends(subject, context)\n if (!friends || !friends.textContent?.trim()) return null\n\n return html`\n <section\n class=\"friendListSection\"\n role=\"region\"\n aria-labelledby=\"friends-section-title\"\n data-testid=\"friend-list\"\n >\n <nav aria-label=\"Friend profiles\">\n <ul class=\"list-reset zebra-stripe\" role=\"list\">\n ${friends}\n </ul>\n </nav>\n </section>\n `\n}\n\nexport const extractFriends = (subject: NamedNode, { dom }: DataBrowserContext) => {\n const target = dom.createElement('div')\n widgets.attachmentList(dom, subject, target, {\n doc: subject.doc(),\n modify: false,\n predicate: ns.foaf('knows'),\n noun: 'friend',\n })\n if (target.textContent === '')\n return null\n // Add 'friendItem' class and unique aria-label to each <li> for accessibility\n target.querySelectorAll('li').forEach((li, idx) => {\n li.classList.add('friendItem')\n // Try to find a link or text to use as a label\n const link = li.querySelector('a')\n if (link && link.textContent) {\n li.setAttribute('aria-label', `Friend: ${link.textContent.trim()}`)\n } else if (li.textContent) {\n li.setAttribute('aria-label', `Friend: ${li.textContent.trim()}`)\n } else {\n li.setAttribute('aria-label', `Friend ${idx + 1}`)\n }\n })\n return target\n}\n","import { NamedNode, LiveStore } from 'rdflib'\nimport { ns, utils, widgets } from 'solid-ui'\nimport { store } from 'solid-logic'\nimport { Node } from 'rdflib'\nimport { validateHTMLColorHex } from 'validate-color'\n\nexport interface ProfilePresentation {\n name: string;\n imageSrc?: string;\n introduction?: string;\n languages?: string;\n location?: string;\n pronouns?: string;\n backgroundColor: string;\n highlightColor: string;\n}\n\nexport function pronounsAsText (subject:NamedNode): string {\n let pronouns = store.anyJS(subject, ns.solid('preferredSubjectPronoun')) || ''\n if (pronouns) {\n const them = store.anyJS(subject, ns.solid('preferredObjectPronoun'))\n if (them) {\n pronouns += '/' + them\n const their = store.anyJS(subject, ns.solid('preferredRelativePronoun'))\n if (their) {\n pronouns += '/' + their\n }\n }\n pronouns = ' (' + pronouns + ') '\n }\n return pronouns || ''\n}\n\nexport const presentProfile = (\n subject: NamedNode,\n store: LiveStore\n): ProfilePresentation => {\n const name = utils.label(subject)\n const imageSrc = widgets.findImage(subject)\n const role = store.anyValue(subject, ns.vcard('role'))\n const orgName = store.anyValue(subject, ns.vcard('organization-name')) // @@ Search whole store\n\n const address: Node | null = store.any(subject, ns.vcard('hasAddress'))\n const countryName =\n address != null\n ? store.anyValue(address as NamedNode, ns.vcard('country-name'))\n : null\n const locality =\n address != null\n ? store.anyValue(address as NamedNode, ns.vcard('locality'))\n : null\n const { backgroundColor, highlightColor } = getColors(subject, store)\n const pronouns = pronounsAsText(subject)\n return {\n name,\n imageSrc,\n introduction: formatIntroduction(role, orgName),\n location: formatLocation(countryName, locality),\n backgroundColor,\n pronouns,\n highlightColor,\n }\n}\n\nfunction formatLocation(countryName: string | void, locality: string | void) {\n return countryName && locality\n ? `${locality}, ${countryName}`\n : countryName || locality || null\n}\n\nfunction formatIntroduction(role: string | void, orgName: string | void) {\n return role && orgName ? `${role} at ${orgName}` : orgName || role || null\n}\n\nfunction getColors(subject: NamedNode, store: LiveStore) {\n const backgroundColor = store.anyValue(\n subject,\n ns.solid('profileBackgroundColor'),\n null,\n subject.doc()\n )\n\n const highlightColor = store.anyValue(\n subject,\n ns.solid('profileHighlightColor'),\n null,\n subject.doc()\n )\n return {\n // default colors are coming from the SolidOS theme, so we only want to set them here if they're valid colors\n backgroundColor: validColorOrDefault(backgroundColor, ''),\n highlightColor: validColorOrDefault(highlightColor, ''),\n }\n}\n\nfunction validColorOrDefault(color: string | void, fallback: string) {\n return color && validateHTMLColorHex(color) ? color : fallback\n}","import { LiveStore, NamedNode, Literal, Namespace, Node, Store } from 'rdflib'\nimport { ns, utils } from 'solid-ui'\n\nexport interface Role {\n startDate?: Literal,\n endDate: Literal,\n dates: string,\n orgName: string,\n roleText: string,\n orgHomePage?: string\n}\nexport interface CVPresentation { \n rolesByType: RolesByType;\n skills: string[];\n languages: string[];\n}\n\nexport interface RolesByType {\n PastRole: Role[];\n CurrentRole: Role[];\n FutureRole: Role[];\n}\n\nconst ORG = Namespace('http://www.w3.org/ns/org#')\n\nexport const typesOfRole = ['PastRole', 'CurrentRole', 'FutureRole']\n\nexport function skillAsText (store: Store, sk: Node):string {\n if (sk.termType === 'Literal') return sk.value // Not normal but allow this\n const publicId = store.anyJS(sk as NamedNode, ns.solid('publicId'))\n if (publicId) {\n const name = store.anyJS(publicId, ns.schema('name'))\n if (name) return name // @@ check language and get name in diff language if necessary\n }\n\n const manual = store.anyJS(sk as NamedNode, ns.vcard('role'))\n if (manual && manual[0] > '') return manual\n return ''\n}\n\nexport function languageAsText (store: Store, lan: Node):string {\n if (lan.termType === 'Literal') return lan.value // Not normal but allow this\n const publicId = store.anyJS(lan as NamedNode, ns.solid('publicId'))\n if (publicId)\n return utils.label(publicId, true) // @@ check language and get name in diff language if necessary\n return '' \n}\n\nexport function datesAsText (startDate?:Literal, endDate?:Literal):string {\n return startDate ? '(' + startDate.value.slice(0,10) + ' to ' +\n ( endDate ? endDate.value.slice(0,10) : '') +')'\n : '' \n}\n\nfunction expandRdfList(store: Store, node: Node): Node[] {\n const collectionElements = (node as { termType?: string; elements?: Node[] }).elements\n if (Array.isArray(collectionElements)) {\n return collectionElements.flatMap(element => expandRdfList(store, element))\n }\n\n const first = store.any(node as NamedNode, ns.rdf('first'))\n if (!first) return [node]\n\n const items: Node[] = []\n let current: Node | null = node\n while (current) {\n const value = store.any(current as NamedNode, ns.rdf('first')) as Node | null\n if (value) items.push(...expandRdfList(store, value))\n const rest = store.any(current as NamedNode, ns.rdf('rest')) as Node | null\n if (!rest || (rest.termType === 'NamedNode' && rest.value === ns.rdf('nil').value)) break\n current = rest\n }\n return items\n}\n\nfunction getRolesByType(\n store: LiveStore,\n subject: NamedNode\n): RolesByType {\n\n const memberships = store.each(null, ORG('member'), subject, null)\n\n const rolesByType = { PastRole: [], CurrentRole: [], FutureRole: [] }\n for (const membership of memberships) {\n let orgHomePage, orgNameGiven, publicIdName, roleName, publicId\n // Things should have start dates but we will be very lenient in this view\n const startDate = store.any(membership as NamedNode, ns.schema('startDate')) as Literal | null\n const endDate = store.any(membership as NamedNode, ns.schema('endDate')) as Literal | null\n const dates = datesAsText(startDate, endDate)\n\n const organization = store.any(membership as NamedNode, ORG('organization'))\n if (organization) {\n orgNameGiven = store.anyJS(organization as NamedNode, ns.schema('name'))\n orgHomePage = store.any(organization as NamedNode, ns.schema('uri'))\n publicId = store.any(organization as NamedNode, ns.solid('publicId'))\n }\n if (publicId) {\n publicIdName = store.anyJS(publicId as NamedNode, ns.schema('name'))\n }\n const orgName = publicIdName || orgNameGiven\n\n const escoRole = store.any(membership as NamedNode, ORG('role'))\n if (escoRole) {\n roleName = store.anyJS(escoRole as NamedNode, ns.schema('name')) as string | null\n }\n const roleText0 = store.anyJS(membership as NamedNode, ns.vcard('role'))\n const roleText = (roleText0 && roleName) ? roleName + ' - ' + roleText0\n : roleText0 || roleName\n\n const item: Role = {\n startDate: startDate as Literal, endDate, orgName, roleText, dates, orgHomePage\n }\n\n for (const t of typesOfRole) {\n if (store.holds(membership, ns.rdf('type'), ns.solid(t))) {\n rolesByType[t].push(item)\n }\n }\n }\n return rolesByType\n}\n\nexport function presentCV(\n subject: NamedNode,\n store: LiveStore\n): CVPresentation {\n \n const rolesByType = getRolesByType(store, subject)\n // Most recent thing most relevant -> sort by end date\n for (const t of typesOfRole) {\n rolesByType[t].sort(function (x, y) {\n if (x.endDate && y.endDate) {\n return x.endDate > y.endDate ? -1 : 1\n }\n return x.startDate > y.startDate ? -1 : 1\n })\n }\n\n const skills = store\n .each(subject, ns.schema('skills'))\n .map((sk) => skillAsText(store, sk))\n .filter((skill) => skill !== '')\n\n const languageNodes = store.each(subject, ns.schema('knowsLanguage'))\n const languages = languageNodes\n .flatMap(node => expandRdfList(store, node))\n .map(lan => languageAsText(store, lan))\n // Deduplicate languages\n const uniqueLanguages = Array.from(new Set(languages))\n\n return { rolesByType, skills, languages: uniqueLanguages }\n}\n","import { NamedNode, Store, Namespace, sym, parse } from 'rdflib'\nimport { widgets } from 'solid-ui'\n\nconst baseUri = 'https://solidos.github.io/profile-pane/src/ontology/'\n\nexport default function renderForm(\n div: HTMLElement,\n subject: NamedNode, // Represents the RDF that fills the form\n formSource: string, // The imported form Turtle source\n formName: string, // The name of the form file (e.g., 'socialMedia.ttl')\n store: Store,\n dom: Document,\n editableProfile: NamedNode | null,\n whichForm?: string ) {// Optional: specify which form to use if multiple 'a ui:Form' are present in the file{\n // --- Form resource setup ---\n const formUri = baseUri + formName // Full URI to the form file\n const exactForm = whichForm || 'this' // If there are more 'a ui:Form' elements in a form file\n const formThis = Namespace(formUri + '#')(exactForm) // NamedNode for #this in the form\n\n loadDocument(store, formSource, formName, formUri)\n\n widgets.appendForm(\n dom,\n div,\n {},\n subject,\n formThis,\n editableProfile,\n (ok, mes) => {\n if (!ok) widgets.errorMessageBlock(dom, mes)\n }\n )\n } // renderForm\n\n// we need to load into the store some additional information about Social Media accounts\nexport function loadDocument(\n store: Store,\n documentSource: string,\n documentName: string,\n documentURI?: string\n ) {\n const finalDocumentUri = documentURI || baseUri + documentName // Full URI to the file\n const document = sym(finalDocumentUri) // rdflib NamedNode for the document \n \n if (!store.holds(undefined, undefined, undefined, document)) {\n // we are using the social media form because it contains the information we need\n // the form can be used for both use cases: create UI for edit and render UI for display\n parse(documentSource, store, finalDocumentUri, 'text/turtle', () => null) // Load doc directly\n }\n}","import { LiveStore, NamedNode, Node } from 'rdflib'\nimport { ns, utils, icons } from 'solid-ui'\nimport socialMediaForm from './ontology/socialMedia.ttl'\nimport { loadDocument } from './rdfFormsHelper'\n\nconst socialMediaFormName = 'socialMedia.ttl' // The name of the file to upload\n\nconst DEFAULT_ICON_URI = icons.iconBase + 'noun_10636_grey.svg' // grey disc\nexport interface Account {\n name: string,\n icon: string,\n homepage: string,\n}\nexport interface SocialPresentation { \n accounts: Account[];\n}\n\nfunction expandRdfList(store: LiveStore, node: Node): Node[] {\n const visited = new Set<string>()\n function inner(node: Node): Node[] {\n const termType = (node as any).termType || typeof node\n const value = (node as any).value || String(node)\n const key = `${termType}:${value}`\n if (visited.has(key)) return []\n visited.add(key)\n\n const collectionElements = (node as { termType?: string; elements?: Node[] }).elements\n if (Array.isArray(collectionElements)) {\n return collectionElements.flatMap(element => inner(element))\n }\n\n const first = store.any(node as NamedNode, ns.rdf('first'))\n if (!first) return [node]\n\n const items: Node[] = []\n let current: Node | null = node\n while (current) {\n const value = store.any(current as NamedNode, ns.rdf('first')) as Node | null\n if (value) items.push(...inner(value))\n const rest = store.any(current as NamedNode, ns.rdf('rest')) as Node | null\n if (!rest || (rest.termType === 'NamedNode' && rest.value === ns.rdf('nil').value)) break\n current = rest\n }\n return items\n }\n return inner(node)\n}\n\nexport function presentSocial(\n subject: NamedNode,\n store: LiveStore\n): SocialPresentation {\n \n function nameForAccount (subject):string {\n const acName = store.any(subject, ns.foaf('name')) ||\n store.any(subject, ns.rdfs('label')) // on the account itself?\n if (acName) return acName.value\n const classes = store.each(subject, ns.rdf('type')) as NamedNode[]\n for (const k of classes) {\n const classIcon: Node = store.any(k as NamedNode, ns.rdfs('label'))\n if (classIcon) {\n return classIcon.value\n }\n return utils.label(k)\n }\n return 'Unknown Account'\n }\n\n function iconForAccount (subject):string {\n const acIcon = store.any(subject, ns.foaf('icon')) // on the account itself?\n if (acIcon) return acIcon.value\n const classes = store.each(subject, ns.rdf('type'))\n if (classes.length > 0) {\n \n for (const k of (classes as Node[])) {\n const classIcon: Node | null = store.any(k as any, ns.foaf('icon'))\n if (classIcon !== null) {\n return classIcon.value\n }\n }\n }\n return DEFAULT_ICON_URI\n }\n\n function homepageForAccount (subject):string {\n const acHomepage = store.any(subject, ns.foaf('homepage')) // on the account itself?\n if (acHomepage) return acHomepage.value\n const id = store.anyJS(subject, ns.foaf('accountName'), null, subject.doc()) || 'No_account_Name'\n const classes = store.each(subject, ns.rdf('type'))\n for (const k of classes) {\n // Fix: ensure k is a NamedNode for store.any\n if (k.termType === 'NamedNode') {\n const userProfilePrefix: Node | null = store.any(k as NamedNode, ns.foaf('userProfilePrefix'))\n if (userProfilePrefix) {\n return userProfilePrefix.value + id.trim()\n }\n }\n }\n return store.anyJS(subject, ns.foaf('homepage'), null, subject.doc()) || ''\n }\n\n function accountAsObject (ac) {\n return {\n name: nameForAccount(ac),\n icon: iconForAccount(ac),\n homepage: homepageForAccount(ac)\n }\n\n }\n \n // we need to load the social media accounts ontology to be able to query all data needed\n loadDocument(store, socialMediaForm, socialMediaFormName)\n\n const accountNodes = store.each(subject, ns.foaf('account'))\n let accountThings = accountNodes.flatMap(node => expandRdfList(store, node))\n // Deduplicate by foaf:accountName value\n const accountNameSet = new Set<string>()\n const accounts: Account[] = []\n for (const ac of accountThings) {\n if (ac.termType === 'NamedNode') {\n const accountNameNode = store.any(ac as NamedNode, ns.foaf('accountName'))\n const accountName = accountNameNode ? accountNameNode.value : ''\n if (!accountNameSet.has(accountName)) {\n accountNameSet.add(accountName)\n accounts.push(accountAsObject(ac))\n }\n }\n }\n if (!accounts.length) return { accounts: [] }\n return { accounts }\n}\n","import { NamedNode, uri } from 'rdflib'\nimport { ns, utils, widgets, icons } from 'solid-ui'\nimport { solidLogicSingleton } from 'solid-logic'\n\nconst { iconForClass } = widgets\nconst { typeIndex } = solidLogicSingleton\nconst { getScopedAppInstances } = typeIndex\n\n\nexport interface Item {\n href: string,\n name: string,\n icon: string,\n instance: NamedNode\n}\n\nexport interface StuffPresentation {\n stuff: Item[];\n}\n\nexport const iconForClassMap = {} // @@ move to buttons in solid-ui\nfor (const k in iconForClass) {\n const pref = k.split(':')[0]\n const id = k.split(':')[1]\n const theClass = ns[pref](id)\n iconForClassMap[theClass.uri] = uri.join(iconForClass[k], icons.iconBase)\n}\n\nexport function getIconForClass (klass:NamedNode) {\n const icon0 = iconForClassMap[klass.uri]\n return icon0 || icons.iconBase + 'noun_10636.svg' // fall back to black disk\n}\n\nexport async function presentStuff(\n subject: NamedNode\n): Promise<StuffPresentation> {\n\n const scopedItems = await getScopedAppInstances(null, subject)\n // console.log('scopedItems', scopedItems)\n\n const stuff = scopedItems.map(item => { // work with old or new solid-logic\n const icon = getIconForClass((item as any).type || ns.rdf('Resource')) \n const href = item.instance.uri\n const name = utils.label(item.instance)\n const instance = item.instance\n // console.log(` href=${href} name=${name} icon=${icon}`)\n return { href, name, icon, instance }\n })\n\n return { stuff }\n}\n","import { html, TemplateResult } from 'lit-html'\nimport { DataBrowserContext } from 'pane-registry'\nimport { authn } from 'solid-logic'\nimport { LiveStore, NamedNode, st } from 'rdflib'\nimport { ns, widgets } from 'solid-ui'\nimport {\n clearPreviousMessage, complain,\n mention\n} from './buttonsHelper'\nimport {\n addMeToYourFriendsButtonText, friendExistsAlreadyButtonText, friendExistsMessage, friendWasAddedSuccesMessage, logInAddMeToYourFriendsButtonText, userNotLoggedInErrorMessage\n} from './texts'\nimport './styles/ProfileCard.css'\n\nlet buttonContainer = <HTMLDivElement>document.createElement('section')\n\nconst addMeToYourFriendsDiv = (\n subject: NamedNode,\n context: DataBrowserContext\n): TemplateResult => {\n\n buttonContainer = context.dom.createElement('section') as HTMLDivElement\n buttonContainer.setAttribute('class', 'buttonSubSection text-truncate text-center section-centered')\n buttonContainer.setAttribute('aria-labelledby', 'add-me-to-your-friends-button-section')\n buttonContainer.setAttribute('data-testid', 'button')\n\n // Add a visually hidden heading for accessibility\n const heading = context.dom.createElement('h3')\n heading.setAttribute('id', 'add-me-to-your-friends-button-section')\n heading.setAttribute('class', 'sr-only')\n heading.textContent = 'Add me to your friends actions'\n buttonContainer.appendChild(heading)\n\n const button = createAddMeToYourFriendsButton(subject, context)\n button.classList.add('actionButton', 'btn-primary', 'action-button-focus')\n buttonContainer.appendChild(button)\n return html`${buttonContainer}`\n}\n\nconst createAddMeToYourFriendsButton = (\n subject: NamedNode,\n context: DataBrowserContext\n): HTMLButtonElement => {\n const me = authn.currentUser()\n let label = checkIfAnyUserLoggedIn(me) ? addMeToYourFriendsButtonText.toUpperCase() : logInAddMeToYourFriendsButtonText.toUpperCase()\n const button = widgets.button(\n context.dom,\n undefined,\n label,\n setButtonHandler, //sets an onclick event listener\n {\n needsBorder: true,\n }\n )\n\n function setButtonHandler(event) {\n event.preventDefault()\n saveNewFriend(subject, context)\n .then(() => {\n clearPreviousMessage(buttonContainer)\n mention(buttonContainer, friendWasAddedSuccesMessage)\n refreshButton()\n })\n .catch((error) => {\n clearPreviousMessage(buttonContainer)\n //else UI.widgets.complain(buttonContainer, message); //displays an error message at the top of the window\n complain(buttonContainer, context, error)\n })\n }\n\n button.refresh = refreshButton()\n\n function refreshButton() {\n const me = authn.currentUser()\n const store: LiveStore = context.session.store\n\n if (checkIfAnyUserLoggedIn(me)) {\n checkIfFriendExists(store, me, subject).then((friendExists) => {\n if (friendExists) {\n //logged in and friend exists or friend was just added\n button.innerHTML = friendExistsAlreadyButtonText.toUpperCase()\n } else {\n //logged in and friend does not exist yet\n button.innerHTML = addMeToYourFriendsButtonText.toUpperCase()\n }\n })\n } else {\n //not logged in\n button.innerHTML = logInAddMeToYourFriendsButtonText.toUpperCase()\n }\n }\n\n return button\n}\n\nasync function saveNewFriend(\n subject: NamedNode,\n context: DataBrowserContext\n): Promise<void> {\n const me = authn.currentUser()\n const store: LiveStore = context.session.store\n\n if (checkIfAnyUserLoggedIn(me)) {\n if (!(await checkIfFriendExists(store , me, subject))) {\n //if friend does not exist, we add her/him\n await store.fetcher.load(me)\n const updater = store.updater\n const toBeInserted = [st(me, ns.foaf('knows'), subject, me.doc())]\n try {\n await updater.update([], toBeInserted)\n } catch (error) {\n let errorMessage = error\n if (errorMessage.toString().includes('Unauthenticated'))\n errorMessage = userNotLoggedInErrorMessage\n throw new Error(errorMessage)\n }\n } else throw new Error(friendExistsMessage)\n } else throw new Error(userNotLoggedInErrorMessage)\n}\n\nfunction checkIfAnyUserLoggedIn(me: NamedNode): boolean {\n if (me) return true\n else return false\n}\n\nasync function checkIfFriendExists(\n store: LiveStore,\n me: NamedNode,\n subject: NamedNode\n): Promise<boolean> {\n await store.fetcher.load(me)\n if (store.whether(me, ns.foaf('knows'), subject, me.doc()) === 0)\n return false\n else return true\n}\n\nexport {\n addMeToYourFriendsDiv,\n createAddMeToYourFriendsButton,\n saveNewFriend,\n checkIfFriendExists,\n}\n","import { DataBrowserContext } from 'pane-registry'\nimport { complain } from './buttonsHelper'\n\nexport const addErrorToErrorDisplay = (\n context: DataBrowserContext,\n message: string\n) => {\n const errorDisplaySection = context.dom.getElementById('error-display-section')\n if (errorDisplaySection) {\n errorDisplaySection.classList.add('contactsShowErrors')\n errorDisplaySection.textContent = message\n } else {\n const buttonContainer = context.dom.getElementById('add-to-contacts-button-container')\n complain(buttonContainer as HTMLDivElement , context, message)\n }\n}\n\nexport const checkAndAddErrorDisplay = (\n context: DataBrowserContext,\n message: string\n) => {\n \n const selectedGroupElements = context.dom.querySelectorAll('.selectedGroup')\n\n const groupNameField = context.dom.querySelector('#groupNameInput')\n // @ts-ignore\n const enteredGroupName = groupNameField.value\n if (selectedGroupElements.length === 0 && !enteredGroupName) {\n addErrorToErrorDisplay(context, message)\n }\n}\n\n","import { DataBrowserContext } from 'pane-registry'\nimport { addANewAddressBookUriToAddressBooks, addGroupToAddressBookData, addWebIDToExistingContact, checkIfContactExistsByName, checkIfContactExistsByWebID, createContactInAddressBook, handleAddressBookCreation, refreshButton } from './contactsHelpers'\nimport { AddressBookDetails, AddressBooksData, ContactData, GroupData } from './contactsTypes'\nimport ContactsModuleRdfLib from '@solid-data-modules/contacts-rdflib'\nimport { clearPreviousMessage, complain, mention } from './buttonsHelper'\nimport { contactExistsMessage, contactWasAddedSuccesMessage, errorContactCreation, errorGroupCreation, errorNotExistsAddressBookUri, groupIsRequired } from './texts'\nimport { addErrorToErrorDisplay, checkAndAddErrorDisplay } from './contactsErrors'\n\nconst CONTACTS_POPUP_OVERLAY_ID = 'contacts-popup-overlay'\nconst CONTACTS_OVERLAY_ACTIVE_CLASS = 'contactsOverlayActive'\n\nexport const createAddressBookUriSelectorDialog = (context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n contactData: ContactData,\n addressBooksData: AddressBooksData\n): HTMLDialogElement => {\n const addressBookUriSelectorDialog = context.dom.createElement('dialog')\n addressBookUriSelectorDialog.setAttribute('role', 'dialog')\n addressBookUriSelectorDialog.setAttribute('aria-live', 'polite')\n addressBookUriSelectorDialog.setAttribute('aria-label', 'Contact address book selection dialog')\n addressBookUriSelectorDialog.setAttribute('aria-describedby', 'addressbook-contacts-selection')\n addressBookUriSelectorDialog.classList.add('contactsAddressBookSelector')\n addressBookUriSelectorDialog.setAttribute('id', 'contacts-selector-dialog')\n\n const button = context.dom.getElementById('add-to-contacts-button')\n button.setAttribute('disabled', '')\n\n const closeButton = createCloseButton(context, addressBookUriSelectorDialog, 'contactsCloseButton')\n\n const addressBookCreationDiv = context.dom.createElement('div')\n addressBookCreationDiv.setAttribute('id', 'addressbook-creation-div')\n addressBookCreationDiv.setAttribute('role', 'addressBookCreation')\n addressBookCreationDiv.setAttribute('aria-live', 'polite')\n addressBookCreationDiv.setAttribute('tabindex', '0')\n addressBookCreationDiv.setAttribute('aria-label', 'Address book creation section')\n addressBookCreationDiv.setAttribute('aria-describedby', 'addressbook-details-section')\n addressBookCreationDiv.classList.add('contactsAddressBookCreationDiv')\n\n const addressBookContactSubmitButton = createNewContactCreationButton(context, contactsModule, addressBooksData, contactData)\n\n const addressBookDetailsSection = createAddressBookDetailsSection(context)\n const errorDisplaySection = createErrorDisplaySection(context) \n const addressBookListDiv = createAddressBookListDiv(context, contactsModule, contactData, addressBooksData, addressBookDetailsSection)\n addressBookDetailsSection.appendChild(addressBookListDiv)\n\n addressBookCreationDiv.appendChild(addressBookDetailsSection)\n addressBookCreationDiv.appendChild(addressBookContactSubmitButton)\n \n addressBookUriSelectorDialog.appendChild(closeButton)\n addressBookUriSelectorDialog.appendChild(addressBookCreationDiv)\n\n addressBookUriSelectorDialog.appendChild(errorDisplaySection)\n \n return addressBookUriSelectorDialog\n}\n\nconst createAddressBookDetailsSection = (\n context: DataBrowserContext\n): HTMLElement => {\n const addressBookDetailsSection = context.dom.createElement('section')\n addressBookDetailsSection.setAttribute('id', 'addressbook-details-section')\n addressBookDetailsSection.setAttribute('role', 'addressBookDetails')\n addressBookDetailsSection.setAttribute('aria-live', 'polite')\n addressBookDetailsSection.setAttribute('tabindex', '0')\n addressBookDetailsSection.classList.add('contactsAddressBookDetails')\n\n return addressBookDetailsSection\n}\n\nconst createAddressBookCreationButton = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n): HTMLButtonElement => {\n const setButtonOnClickHandler = async (event) => { \n event.preventDefault()\n const newAddressBookForm = createNewAddressBookForm(context, addressBooksData, contactsModule, contactData)\n const addressBookDialog = context.dom.getElementById('contacts-selector-dialog')\n showPopupOverlay(context)\n addressBookDialog.appendChild(newAddressBookForm)\n }\n\n const addressBookCreationButton = context.dom.createElement('button')\n addressBookCreationButton.setAttribute('id', 'contacts-create-addressbook-button')\n addressBookCreationButton.setAttribute('type', 'button')\n addressBookCreationButton.setAttribute('role', 'button')\n addressBookCreationButton.setAttribute('aria-label', 'Create a new address book')\n addressBookCreationButton.setAttribute('tabindex', '0')\n addressBookCreationButton.textContent = 'Create Address Book'\n addressBookCreationButton.classList.add('contactsActionButton', 'contactsAddressBookCreationButton')\n addressBookCreationButton.addEventListener('click', setButtonOnClickHandler)\n return addressBookCreationButton\n}\n\nconst createAddressBookUriEntryButton = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n): HTMLButtonElement => {\n const setButtonOnClickHandler = async (event) => { \n event.preventDefault()\n const addressBookUriSelectorDialog = context.dom.getElementById('contacts-selector-dialog')\n const addressBookUriEntryDiv = createAddressBookUriEntryDiv(context, contactsModule, addressBooksData, contactData)\n showPopupOverlay(context)\n addressBookUriSelectorDialog.appendChild(addressBookUriEntryDiv)\n }\n const addressBookCreationButton = context.dom.createElement('button')\n addressBookCreationButton.setAttribute('id', 'contacts-addressbook-uri-entry-button')\n addressBookCreationButton.setAttribute('type', 'button')\n addressBookCreationButton.setAttribute('role', 'button')\n addressBookCreationButton.setAttribute('aria-label', 'Enter an address book URI to add the contact to a specific address book')\n addressBookCreationButton.setAttribute('tabindex', '0')\n addressBookCreationButton.textContent = 'Enter Address Book URI'\n addressBookCreationButton.classList.add('contactsActionButton', 'contactsAddressBookUriEntryButton')\n addressBookCreationButton.addEventListener('click', setButtonOnClickHandler)\n return addressBookCreationButton\n}\n\nconst createAddressBookUriEntryDiv = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n): HTMLDivElement => {\n const addressBookUriEntryDiv = context.dom.createElement('div')\n addressBookUriEntryDiv.setAttribute('role', 'addressBookUriEntry')\n addressBookUriEntryDiv.setAttribute('aria-live', 'polite')\n addressBookUriEntryDiv.setAttribute('tabindex', '0')\n addressBookUriEntryDiv.setAttribute('aria-label', 'Address book URI entry div')\n addressBookUriEntryDiv.setAttribute('aria-describedby', 'addressbook-uri-entry-div')\n addressBookUriEntryDiv.setAttribute('id', 'contacts-addressbook-uri-entry')\n addressBookUriEntryDiv.classList.add('contactsPopupDialog', 'contactsAddressBookUriEntry')\n\n const closeButton = createCloseButton(context, addressBookUriEntryDiv, 'contactsAddressBookUriEntryCloseButton')\n addressBookUriEntryDiv.appendChild(closeButton)\n \n addressBookUriEntryDiv.appendChild(createAddressBookUriEntryForm(context, contactsModule, addressBooksData, contactData)) \n return addressBookUriEntryDiv\n}\n\nconst createAddressBookUriEntryForm = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n): HTMLFormElement => {\n\n const setButtonOnSubmitHandler = async (event) => {\n event.preventDefault()\n const addressBookUriField = context.dom.querySelector('#addressBookUriInput')\n\n // @ts-ignore\n const enteredAddressBookUri = addressBookUriField.value\n\n if (!enteredAddressBookUri) {\n addErrorToErrorDisplay(context, errorNotExistsAddressBookUri)\n return\n } else {\n const uriCheck = enteredAddressBookUri.substring(enteredAddressBookUri.length - 5, enteredAddressBookUri.length)\n const normalizedUri = (uriCheck === '#this') ? enteredAddressBookUri : enteredAddressBookUri + '#this'\n const books = await addANewAddressBookUriToAddressBooks(context, contactsModule, addressBooksData, normalizedUri)\n \n const addressBookListDiv = context.dom.querySelector('#addressbook-list')\n if (addressBookListDiv) {\n const addressBookUriEntry = context.dom.getElementById('contacts-addressbook-uri-entry')\n addressBookUriEntry.remove()\n removePopupOverlayIfNoPopup(context)\n const addressBookCreationButton = context.dom.getElementById('contacts-create-addressbook-button')\n const addressBookUriEntryButton = context.dom.getElementById('contacts-addressbook-uri-entry-button') \n addressBookCreationButton.remove()\n addressBookUriEntryButton.remove()\n addressBookListDiv.appendChild(createAddressBookButton(context, contactsModule, books.addressBooksData, books.addressBook, enteredAddressBookUri, contactData))\n addressBookListDiv.appendChild(createAddressBookCreationButton(context, contactsModule, books.addressBooksData, contactData)) \n addressBookListDiv.appendChild(createAddressBookUriEntryButton(context, contactsModule, books.addressBooksData, contactData))\n }}\n }\n\n const inputAddressUriEventListener = () => { \n checkAndRemoveErrorDisplay(context)\n }\n const addressBookUriEntryForm = context.dom.createElement('form')\n addressBookUriEntryForm.setAttribute('id', 'contacts-address-uri-entry-form')\n addressBookUriEntryForm.classList.add('contactsAddressBookUriEntryForm')\n addressBookUriEntryForm.method = 'post'\n addressBookUriEntryForm.addEventListener('submit', setButtonOnSubmitHandler)\n\n const addressBookUriEntryLabel = context.dom.createElement('label')\n addressBookUriEntryLabel.classList.add('label')\n addressBookUriEntryLabel.setAttribute('for', 'addressBookUriInput')\n\n const addressBookNameInputBox = context.dom.createElement('input')\n addressBookNameInputBox.type = 'text'\n addressBookNameInputBox.name = 'addressBookUri'\n addressBookNameInputBox.id = 'addressBookUriInput' \n addressBookNameInputBox.placeholder = 'Enter address book URI to find your address book' \n addressBookNameInputBox.classList.add('input', 'contactsAddressBookUriInput')\n addressBookNameInputBox.addEventListener('click', inputAddressUriEventListener)\n \n addressBookUriEntryForm.appendChild(addressBookUriEntryLabel)\n addressBookUriEntryForm.appendChild(addressBookNameInputBox)\n addressBookUriEntryForm.appendChild(createAddressBookUriEntryAddButton(context))\n \n return addressBookUriEntryForm\n}\n\nconst createAddressBookUriEntryAddButton = (\n context: DataBrowserContext\n): HTMLButtonElement => {\n\n const setButtonOnClickHandler = async (event) => {\n event.preventDefault()\n const addressBookUriEntryForm = context.dom.querySelector('#contacts-address-uri-entry-form') \n // @ts-ignore\n if (addressBookUriEntryForm) addressBookUriEntryForm.requestSubmit()\n }\n\n const entryButton = context.dom.createElement('button')\n entryButton.setAttribute('id', 'contacts-addressbook-entry-button')\n entryButton.setAttribute('role', 'button')\n entryButton.setAttribute('aria-label', 'Create Address Book from entered URI')\n entryButton.setAttribute('tabindex', '0')\n entryButton.classList.add('contactsActionButton', 'contactsAddressBookUriEntryAddButton')\n entryButton.setAttribute('type', 'submit')\n entryButton.addEventListener('click', setButtonOnClickHandler)\n entryButton.innerHTML = 'Add'\n return entryButton\n}\n\nconst createAddressBookListDiv = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n contactData: ContactData,\n addressBooksData: AddressBooksData,\n addressBookDetailsSection: HTMLElement\n): HTMLDivElement => {\n\n const addressBookListDiv = context.dom.createElement('div')\n addressBookListDiv.setAttribute('class', 'contactsAddressBookList')\n addressBookListDiv.setAttribute('role', 'addressBooksList')\n addressBookListDiv.setAttribute('aria-live', 'polite')\n addressBookListDiv.setAttribute('tabindex', '0')\n addressBookListDiv.setAttribute('aria-label', 'Address book list to select which address book to add the contact to')\n addressBookListDiv.setAttribute('aria-describedby', 'addressbook-list')\n addressBookListDiv.setAttribute('id', 'addressbook-list')\n\n addressBookListDiv.innerHTML = 'Address Books'\n addressBooksData.public.forEach((addressBook, addressBookUri) => {\n addressBookListDiv.appendChild(createAddressBookButton(context, contactsModule, addressBooksData, addressBook, addressBookUri, contactData))\n })\n\n addressBooksData.private.forEach((addressBook, addressBookUri) => {\n addressBookListDiv.appendChild(createAddressBookButton(context, contactsModule, addressBooksData, addressBook, addressBookUri, contactData))\n })\n const addressBookCreationButton = createAddressBookCreationButton(context, contactsModule, addressBooksData, contactData)\n const addressBookUriEntryButton = createAddressBookUriEntryButton(context, contactsModule, addressBooksData, contactData)\n\n addressBookListDiv.appendChild(addressBookCreationButton)\n addressBookListDiv.appendChild(addressBookUriEntryButton)\n return addressBookListDiv\n}\n\nconst createAddressBookGroupCreationButton = (\n context: DataBrowserContext, \n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n): HTMLButtonElement => {\n const setButtonOnClickHandler = async (event) => { \n event.preventDefault()\n const addressBookDialog = context.dom.getElementById('contacts-selector-dialog')\n const groupNameForm = context.dom.getElementById('new-group-form')\n if (!groupNameForm) {\n showPopupOverlay(context)\n addressBookDialog.appendChild(createGroupNameForm(context, contactsModule, addressBooksData, contactData))\n }\n }\n const groupCreationButton = context.dom.createElement('button')\n groupCreationButton.setAttribute('id', 'contacts-create-group-button')\n groupCreationButton.setAttribute('type', 'button')\n groupCreationButton.setAttribute('role', 'button')\n groupCreationButton.setAttribute('aria-label', 'Create a new group in the selected address book')\n groupCreationButton.setAttribute('tabindex', '0')\n groupCreationButton.textContent = 'Create Group'\n groupCreationButton.classList.add('contactsActionButton', 'contactsCreateGroupCreationButton')\n groupCreationButton.addEventListener('click', setButtonOnClickHandler)\n return groupCreationButton\n}\n\nconst createGroupListDiv = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n addressBook: AddressBookDetails,\n contactData: ContactData\n): HTMLDivElement => {\n\n const groupListDiv = context.dom.createElement('div')\n groupListDiv.setAttribute('class', 'contactsGroupList')\n groupListDiv.setAttribute('role', 'groupList')\n groupListDiv.setAttribute('aria-live', 'polite')\n groupListDiv.setAttribute('tabindex', '0')\n groupListDiv.setAttribute('aria-label', 'Group list to select which groups in the address book to add the contact to')\n groupListDiv.setAttribute('aria-describedby', 'group-list')\n groupListDiv.setAttribute('id', 'group-list')\n\n groupListDiv.innerHTML = 'Groups'\n if (addressBook) {\n addressBook.groups.map((group) => {\n groupListDiv.appendChild(createGroupButton(context, group))\n })\n } \n groupListDiv.appendChild(createAddressBookGroupCreationButton(context, contactsModule, addressBooksData, contactData))\n return groupListDiv\n}\n\nconst createErrorDisplaySection = (\n context: DataBrowserContext\n): HTMLElement => {\n const setButtonOnClickHandler = (event) => {\n event.preventDefault()\n errorDisplaySection.classList.remove('contactsShowErrors')\n }\n\n const errorDisplaySection = context.dom.createElement('section')\n errorDisplaySection.setAttribute('role', 'errorDisplay')\n errorDisplaySection.setAttribute('aria-live', 'assertive')\n errorDisplaySection.setAttribute('tabindex', '0')\n errorDisplaySection.setAttribute('aria-label', 'Section to display error messages related to contact creation')\n errorDisplaySection.setAttribute('id', 'error-display-section')\n errorDisplaySection.classList.add('contactsErrorDisplay')\n\n const closeButton = context.dom.createElement('button')\n closeButton.setAttribute('type', 'button')\n closeButton.setAttribute('aria-label', 'Close error message display')\n closeButton.setAttribute('tabindex', '0')\n closeButton.setAttribute('role', 'button')\n closeButton.classList.add('contactsCloseErrorDisplayButton')\n closeButton.textContent = 'x'\n closeButton.addEventListener('click', setButtonOnClickHandler)\n errorDisplaySection.appendChild(closeButton)\n return errorDisplaySection\n}\n\nconst checkAndRemoveErrorDisplay = (\n context: DataBrowserContext\n) => {\n const errorDisplaySection = context.dom.getElementById('error-display-section')\n if (errorDisplaySection.classList.contains('contactsShowErrors')) {\n errorDisplaySection.classList.remove('contactsShowErrors')\n errorDisplaySection.innerHTML = ''\n }\n}\n\nconst createNewContactCreationButton = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n): HTMLButtonElement => {\n const setButtonOnClickHandler = async (event) => {\n event.preventDefault()\n\n const contactExistsByWebID = checkIfContactExistsByWebID(addressBooksData, contactData.webID)\n const contactExistsByName = checkIfContactExistsByName(addressBooksData, contactData.name)\n const contactExistsHandled = handleContactExists(\n context,\n contactsModule,\n addressBooksData,\n contactData,\n contactExistsByWebID,\n contactExistsByName\n )\n if (contactExistsHandled) return\n \n let selectedAddressBookUri = null \n let selectedGroupUris = []\n\n const selectedAddressBookElement = context.dom.querySelectorAll('.selectedAddressBook')\n selectedAddressBookElement.forEach((addressBookButton) => {\n selectedAddressBookUri = addressBookButton.getAttribute('id')\n })\n\n const selectedGroupElements = context.dom.querySelectorAll('.selectedGroup')\n selectedGroupElements.forEach((groupButtons) => {\n selectedGroupUris.push(groupButtons.getAttribute('id'))\n })\n \n if (selectedGroupUris.length) {\n \n const selectedAddressBookUris = { \n addressBookUri: selectedAddressBookUri,\n groupUris: selectedGroupUris \n }\n\n try {\n const contactUri = await createContactInAddressBook(context, contactsModule, addressBooksData, contactData, selectedAddressBookUris)\n finalizeContactEntry(context, addressBooksData, contactData, contactUri)\n } catch(error) {\n addErrorToErrorDisplay(context, `${errorContactCreation}\\n${error}`)\n }\n } else {\n addErrorToErrorDisplay(context, groupIsRequired)\n }\n }\n\n const button = context.dom.createElement('button')\n button.setAttribute('type', 'submit')\n button.setAttribute('id', 'add-contact')\n button.setAttribute('role', 'button')\n button.setAttribute('aria-label', 'Add contact to selected address book')\n button.setAttribute('tabindex', '0')\n button.classList.add('contactsActionButton', 'contactsNewContactCreationButton')\n button.addEventListener('click', setButtonOnClickHandler)\n button.textContent = 'Add Contact'\n return button\n}\n\nconst createAddressBookButton = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n addressBook: AddressBookDetails,\n addressBookUri: string,\n contactData: ContactData\n): HTMLButtonElement => {\n \n const setButtonOnClickHandler = (event) => {\n event.preventDefault()\n const selectedAddressBookButton = event.target\n const previouslySelected = selectedAddressBookButton.classList.contains('contactsSelectedButton') \n const addressBookDetailsSection = context.dom.getElementById('addressbook-details-section')\n \n let addressBook = null\n // remove the previous groups\n const groupDivToRemove = context.dom.getElementById('group-list')\n if (groupDivToRemove) groupDivToRemove.remove()\n \n // remove presious address book selection bc you can only have one\n const selectedAddressBookElements = context.dom.querySelectorAll('.selectedAddressBook')\n selectedAddressBookElements.forEach((addressBookButton) => {\n addressBookButton.classList.remove('contactsSelectedButton', 'selectedAddressBook')\n })\n \n if (previouslySelected) {\n selectedAddressBookButton.classList.remove('contactsSelectedButton', 'selectedAddressBook') \n const groupForm = context.dom.getElementById('new-group-form')\n if (groupForm) {\n groupForm.remove()\n removePopupOverlayIfNoPopup(context)\n }\n } else {\n const addressForm = context.dom.getElementById('new-addressbook-form')\n if (addressForm) {\n addressForm.remove()\n removePopupOverlayIfNoPopup(context)\n }\n\n selectedAddressBookButton.classList.add('contactsSelectedButton', 'selectedAddressBook') \n // selected address book code\n const selectedAddressBookUri = event.target.id\n // can check for the class on private\n addressBook = addressBooksData.public.get(selectedAddressBookUri) \n if (!addressBook) addressBook = addressBooksData.private.get(selectedAddressBookUri) \n \n // remove the previous groups\n const groupDivToRemove = context.dom.getElementById('group-list')\n if (groupDivToRemove) groupDivToRemove.remove()\n // add groups for addressbook \n const groupListDiv = createGroupListDiv(context, contactsModule, addressBooksData, addressBook, contactData) \n addressBookDetailsSection.appendChild(groupListDiv)\n }\n }\n\n const button = context.dom.createElement('button')\n button.setAttribute('value', addressBook.name)\n button.setAttribute('id', addressBookUri)\n button.setAttribute('role', 'button') \n button.setAttribute('type', 'submit')\n button.setAttribute('aria-label', 'Select address book ' + addressBook.name)\n button.setAttribute('tabindex', '0')\n button.classList.add('contactsButton')\n button.addEventListener('click', setButtonOnClickHandler)\n button.innerHTML = addressBook.name\n return button\n}\n\nconst createNewAddressBookForm = (\n context: DataBrowserContext,\n addressBooksData: AddressBooksData,\n contactsModule: ContactsModuleRdfLib,\n contactData: ContactData\n): HTMLFormElement => {\n const newAddressBookEventListener = async (event) => {\n event.preventDefault() \n let enteredAddressBookUri = null \n let newGroupUri = null\n\n const addressNameField = context.dom.querySelector('#addressBookNameInput')\n\n // @ts-ignore\n const enteredAddressName = addressNameField.value\n\n const addressContainerField = context.dom.querySelector('#addressBookContainerInput')\n\n // @ts-ignore\n const enteredAddressContainer = addressContainerField.value\n\n const groupNameField = context.dom.querySelector('#groupNameInput')\n // @ts-ignore\n const enteredGroupName = groupNameField.value\n\n if (enteredAddressName) {\n // add addressbook first \n try {\n enteredAddressBookUri = await handleAddressBookCreation(context, enteredAddressContainer, enteredAddressName)\n const books = await addANewAddressBookUriToAddressBooks(context, contactsModule, addressBooksData, enteredAddressBookUri)\n \n if (enteredGroupName) {\n newGroupUri = await contactsModule.createNewGroup({addressBookUri: enteredAddressBookUri, groupName: enteredGroupName })\n const groupAdded = await addGroupToAddressBookData(addressBooksData, enteredAddressBookUri, { name: enteredGroupName, uri: newGroupUri })\n if (!groupAdded) {\n addErrorToErrorDisplay(context, errorGroupCreation)\n return\n }\n }\n \n const addressBookListDiv = context.dom.querySelector('#addressbook-list')\n const groupListDiv = context.dom.querySelector('#group-list')\n \n if (addressBookListDiv) {\n newAddressBookForm.remove()\n removePopupOverlayIfNoPopup(context)\n const addressBookCreationButton = context.dom.getElementById('contacts-create-addressbook-button')\n const addressBookUriEntryButton = context.dom.getElementById('contacts-addressbook-uri-entry-button') \n addressBookCreationButton.remove()\n addressBookUriEntryButton.remove()\n addressBookListDiv.appendChild(createAddressBookButton(context, contactsModule, addressBooksData, books.addressBook, enteredAddressBookUri, contactData)) \n addressBookListDiv.appendChild(addressBookCreationButton)\n addressBookListDiv.appendChild(addressBookUriEntryButton)\n }\n if (groupListDiv) {\n const groupCreationButton = context.dom.getElementById('contacts-create-group-button')\n groupCreationButton.remove()\n groupListDiv.appendChild(createGroupButton(context, {uri: newGroupUri, name: enteredGroupName}))\n groupListDiv.appendChild(groupCreationButton)\n }\n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n \n } \n } \n\n const submitFormEventListener = (event) => {\n event.preventDefault()\n newAddressBookForm.requestSubmit()\n }\n\n const newAddressBookForm = context.dom.createElement('form')\n newAddressBookForm.method = 'post'\n newAddressBookForm.innerHTML = 'Create a new address book'\n newAddressBookForm.setAttribute('id', 'new-addressbook-form')\n newAddressBookForm.classList.add('contactsPopupDialog', 'contactsNewAddressForm')\n \n const addressBookNameLabel = context.dom.createElement('label')\n addressBookNameLabel.classList.add('label')\n addressBookNameLabel.setAttribute('for', 'addressBookNameInput')\n\n const addressBookNameInputBox = context.dom.createElement('input')\n addressBookNameInputBox.type = 'text'\n addressBookNameInputBox.name = 'addressBookName'\n addressBookNameInputBox.id = 'addressBookNameInput' \n addressBookNameInputBox.placeholder = 'New address book name' \n addressBookNameInputBox.classList.add('input', 'contactsAddressBookInput')\n addressBookNameInputBox.required = true\n\n const addressBookContainerLabel = context.dom.createElement('label')\n addressBookContainerLabel.classList.add('label')\n addressBookContainerLabel.setAttribute('for', 'addressBookContainerInput')\n\n const addressBookContainerInputBox = context.dom.createElement('input')\n addressBookContainerInputBox.type = 'text'\n addressBookContainerInputBox.name = 'addressBookContainer'\n addressBookContainerInputBox.id = 'addressBookContainerInput' \n addressBookContainerInputBox.placeholder = 'Address book container' \n addressBookContainerInputBox.classList.add('input', 'contactsAddressBookInput')\n addressBookContainerInputBox.required = true\n\n const groupNameLabel = context.dom.createElement('label')\n groupNameLabel.classList.add('label')\n groupNameLabel.setAttribute('for', 'groupNameInput')\n\n const groupNameInputBox = context.dom.createElement('input')\n groupNameInputBox.type = 'text' \n groupNameInputBox.name = 'groupName' \n groupNameInputBox.id = 'groupNameInput' \n groupNameInputBox.placeholder = 'New group name' \n groupNameInputBox.classList.add('input', 'contactsGroupInput')\n groupNameInputBox.required = true\n\n const submitButton = context.dom.createElement('button')\n submitButton.setAttribute('id', 'submit-addressbook')\n submitButton.setAttribute('role', 'button') \n submitButton.setAttribute('type', 'submit')\n submitButton.setAttribute('aria-label', 'Create a new address book with the entered name, container, type and group')\n submitButton.setAttribute('tabindex', '0')\n submitButton.classList.add('contactsActionButton', 'contactsAddressBookCreationSubmitButton')\n submitButton.addEventListener('click', submitFormEventListener)\n submitButton.innerHTML = 'Create Address Book' \n \n const closeButton = createCloseButton(context, newAddressBookForm, 'contactsAddressBookCreationCloseButton')\n\n newAddressBookForm.appendChild(closeButton)\n\n newAddressBookForm.appendChild(addressBookNameLabel)\n newAddressBookForm.appendChild(addressBookNameInputBox)\n\n newAddressBookForm.appendChild(addressBookContainerLabel)\n newAddressBookForm.appendChild(addressBookContainerInputBox)\n\n newAddressBookForm.appendChild(groupNameLabel)\n newAddressBookForm.appendChild(groupNameInputBox)\n newAddressBookForm.appendChild(submitButton)\n newAddressBookForm.addEventListener('submit', newAddressBookEventListener)\n \n return newAddressBookForm\n}\n\nconst createCloseButton = (\n context: DataBrowserContext,\n element: HTMLElement,\n specialClass: string\n): HTMLButtonElement => {\n\n const setButtonOnClickHandler = (event) => {\n event.preventDefault()\n if (element) {\n element.remove()\n removePopupOverlayIfNoPopup(context)\n }\n if (specialClass === 'contactsCloseButton') {\n const button = context.dom.getElementById('add-to-contacts-button')\n if (button) button.removeAttribute('disabled')\n }\n }\n\n const closeButton = context.dom.createElement('button')\n closeButton.setAttribute('id', 'close-addressbook')\n closeButton.setAttribute('role', 'button')\n closeButton.setAttribute('type', 'button')\n const ariaLabel = specialClass === 'contactsCloseButton'\n ? 'Close contacts dialog'\n : 'Close dialog'\n closeButton.setAttribute('aria-label', ariaLabel)\n closeButton.setAttribute('tabindex', '0')\n closeButton.classList.add('contactsCloseButton', specialClass)\n closeButton.addEventListener('click', setButtonOnClickHandler)\n closeButton.innerHTML = 'x' \n return closeButton\n} \n\nconst createGroupNameForm = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData, \n contactData: ContactData\n): HTMLFormElement => {\n\n const addGroupEventListener = async (event) => {\n event.preventDefault()\n let selectedAddressBookUri = null \n\n const selectedAddressBookElement = context.dom.querySelectorAll('.selectedAddressBook')\n selectedAddressBookElement.forEach((addressBookButton) => {\n selectedAddressBookUri = addressBookButton.getAttribute('id')\n })\n \n const groupNameField = context.dom.querySelector('#groupNameInput')\n // @ts-ignore\n const enteredGroupName = groupNameField.value\n\n if (!selectedAddressBookUri) {\n addErrorToErrorDisplay(context, errorNotExistsAddressBookUri)\n return\n }\n\n if (enteredGroupName) {\n // add group first \n try {\n const newGroupUri = await contactsModule.createNewGroup({addressBookUri: selectedAddressBookUri, groupName: enteredGroupName })\n const newGroup = { name: enteredGroupName, uri: newGroupUri }\n const wasUpdated = addGroupToAddressBookData(addressBooksData, selectedAddressBookUri, newGroup)\n if (!wasUpdated) {\n addErrorToErrorDisplay(context, errorNotExistsAddressBookUri)\n return\n }\n \n const removeGroupAddButton = context.dom.getElementById('contacts-create-group-button')\n if (removeGroupAddButton) removeGroupAddButton.remove()\n\n const groupListDiv = context.dom.querySelector('#group-list')\n if (groupListDiv) {\n groupListDiv.appendChild(createGroupButton(context, newGroup))\n groupListDiv.appendChild(createAddressBookGroupCreationButton(context, contactsModule, addressBooksData, contactData))\n } \n newGroupForm.remove()\n removePopupOverlayIfNoPopup(context)\n } catch (error) {\n addErrorToErrorDisplay(context, `${errorGroupCreation}\\n${error}`)\n } \n }\n } \n \n const newGroupForm = context.dom.createElement('form')\n newGroupForm.addEventListener('submit', addGroupEventListener) \n newGroupForm.innerHTML = 'Create a new group'\n newGroupForm.setAttribute('id', 'new-group-form')\n newGroupForm.classList.add('contactsPopupDialog', 'contactsNewGroupForm')\n \n const groupNameLabel = context.dom.createElement('label')\n groupNameLabel.classList.add('label')\n groupNameLabel.setAttribute('for', 'groupNameInput')\n\n const groupNameInputBox = context.dom.createElement('input')\n groupNameInputBox.type = 'text' \n groupNameInputBox.name = 'groupName' \n groupNameInputBox.id = 'groupNameInput' \n groupNameInputBox.placeholder = 'New group name' \n groupNameInputBox.classList.add('input', 'contactsGroupInput')\n \n const submitButton = createAddGroupButton(context, newGroupForm)\n const closeButton = createCloseButton(context, newGroupForm, 'contactsGroupCreationCloseButton')\n\n newGroupForm.appendChild(groupNameLabel)\n newGroupForm.appendChild(groupNameInputBox)\n newGroupForm.appendChild(submitButton)\n newGroupForm.appendChild(closeButton)\n \n return newGroupForm\n}\n\nconst createAddGroupButton = (\n context: DataBrowserContext,\n form: HTMLFormElement\n): HTMLButtonElement => {\n const setButtonOnClickHandler = async (event) => {\n event.preventDefault()\n form.requestSubmit()\n }\n\n const button = context.dom.createElement('button')\n button.setAttribute('id', 'contacts-create-group-button')\n button.setAttribute('type', 'button')\n button.setAttribute('role', 'button')\n button.setAttribute('aria-label', 'Create a new group in the selected address book')\n button.setAttribute('tabindex', '0')\n button.textContent = 'Create Group'\n button.classList.add('contactsActionButton', 'contactsCreateGroupCreationButton')\n button.addEventListener('click', setButtonOnClickHandler)\n return button\n} \n\nconst handleContactExists = (\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData,\n contactExistsByWebID: boolean,\n contactExistsByName: string,\n): boolean => {\n\n if (contactExistsByWebID) {\n addErrorToErrorDisplay(context, contactExistsMessage )\n return true\n } else if (contactExistsByName) {\n // need to disable and possibly grey out the dialog\n const selectorDialog = context.dom.getElementById('contacts-selector-dialog')\n \n const contactExistsDiv = context.dom.createElement('div')\n contactExistsDiv.setAttribute('role', 'alert')\n contactExistsDiv.setAttribute('aria-live', 'assertive')\n contactExistsDiv.setAttribute('tabindex', '0')\n contactExistsDiv.setAttribute('aria-label', 'Alert message indicating that the contact already exists')\n contactExistsDiv.setAttribute('id', 'contacts-contact-exists')\n contactExistsDiv.classList.add('contactsContactExistsAlert')\n contactExistsDiv.innerHTML = `${contactData.name} already exists. \\n Do you want to add their WebID?`\n \n const confirmButton = context.dom.createElement('button')\n confirmButton.setAttribute('id', 'contacts-confirm-add-webid-button')\n confirmButton.setAttribute('role', 'button')\n confirmButton.setAttribute('type', 'button')\n confirmButton.setAttribute('aria-label', 'Confirm adding the contact webID to the existing contact')\n confirmButton.setAttribute('tabindex', '0') \n confirmButton.classList.add('contactsConfirmButton')\n confirmButton.innerHTML = 'Yes'\n confirmButton.addEventListener('click', async (event) => {\n event.preventDefault()\n await addWebIDToExistingContact(context, contactsModule, addressBooksData, contactData.webID, contactExistsByName)\n finalizeContactEntry(context, addressBooksData, contactData, addressBooksData.contactWebIDs.get(contactData.webID))\n refreshButton(context, addressBooksData, contactData) \n })\n\n const cancelButton = context.dom.createElement('button')\n cancelButton.setAttribute('id', 'contacts-cancel-add-webid-button')\n cancelButton.setAttribute('role', 'button')\n cancelButton.setAttribute('type', 'button')\n cancelButton.setAttribute('aria-label', 'Cancel adding the contact webID to the existing contact')\n cancelButton.setAttribute('tabindex', '0')\n cancelButton.classList.add('contactsCancelButton')\n cancelButton.innerHTML = 'No'\n cancelButton.addEventListener('click', (event) => {\n event.preventDefault()\n selectorDialog.remove()\n \n complain(getButtonContainer(context), context, 'Contact was not added')\n setTimeout(() => {\n clearPreviousMessage(getButtonContainer(context))\n }, 2000) \n refreshButton(context, addressBooksData, contactData) \n })\n\n const actionsDiv = context.dom.createElement('div')\n actionsDiv.setAttribute('id', 'contacts-contact-exists-actions')\n actionsDiv.setAttribute('role', 'group')\n actionsDiv.setAttribute('aria-label', 'Actions for existing contact alert') \n actionsDiv.setAttribute('tabindex', '0')\n actionsDiv.classList.add('contactsContactExistsActions')\n actionsDiv.appendChild(confirmButton)\n actionsDiv.appendChild(cancelButton)\n\n contactExistsDiv.appendChild(actionsDiv)\n showPopupOverlay(context)\n selectorDialog.appendChild(contactExistsDiv)\n return true\n }\n\n return false\n}\n\nconst finalizeContactEntry = (\n context: DataBrowserContext,\n addressBooksData: AddressBooksData,\n contactData: ContactData,\n contactUri: string,\n) => {\n addressBooksData.contactWebIDs.set(contactData.webID, contactUri)\n const selectorDialog = context.dom.getElementById('contacts-selector-dialog')\n selectorDialog.remove()\n \n const buttonContainer = getButtonContainer(context)\n mention(buttonContainer, contactWasAddedSuccesMessage)\n const button = context.dom.getElementById('add-to-contacts-button')\n button.removeAttribute('disabled') \n setTimeout(() => {\n clearPreviousMessage(buttonContainer)\n }, 2000) \n refreshButton(context, addressBooksData, contactData) \n}\n\nconst createGroupButton = (\n context: DataBrowserContext,\n group: GroupData\n): HTMLButtonElement => {\n const setButtonOnClickHandler = async (event) => {\n event.preventDefault()\n \n const selectedGroupButton = event.target\n const previouslySelected = selectedGroupButton.classList.contains('contactsSelectedButton') \n \n if (previouslySelected) {\n selectedGroupButton.classList.remove('contactsSelectedButton', 'selectedGroup')\n checkAndAddErrorDisplay(context, groupIsRequired)\n } else {\n selectedGroupButton.classList.add('contactsSelectedButton', 'selectedGroup') \n checkAndRemoveErrorDisplay(context)\n }\n } \n\n const button = context.dom.createElement('button')\n button.setAttribute('value', group.name)\n button.setAttribute('id', group.uri)\n button.setAttribute('type', 'button')\n button.setAttribute('role', 'button')\n button.setAttribute('aria-label', 'Select group ' + group.name)\n button.setAttribute('tabindex', '0')\n button.classList.add('contactsButton')\n button.addEventListener('click', setButtonOnClickHandler)\n button.innerHTML = group.name\n\n return button\n}\n\nexport function getButtonContainer(\n context: DataBrowserContext\n): HTMLDivElement {\n\n const buttonContainer = context.dom.getElementById('add-to-contacts-button-container')\n return buttonContainer as HTMLDivElement\n}\n\nconst showPopupOverlay = (\n context: DataBrowserContext\n): void => {\n const selectorDialog = context.dom.getElementById('contacts-selector-dialog')\n if (!selectorDialog) return\n\n selectorDialog.classList.add(CONTACTS_OVERLAY_ACTIVE_CLASS)\n\n const existingOverlay = selectorDialog.querySelector(`#${CONTACTS_POPUP_OVERLAY_ID}`)\n if (existingOverlay) return\n\n const overlay = context.dom.createElement('div')\n overlay.setAttribute('role', 'popupOverlay')\n overlay.setAttribute('aria-label', 'Overlay to focus on the active popup message and disable interaction with the rest of the dialog') \n overlay.setAttribute('tabindex', '0')\n overlay.setAttribute('id', CONTACTS_POPUP_OVERLAY_ID)\n overlay.classList.add('contactsPopupOverlay')\n selectorDialog.appendChild(overlay)\n}\n\nconst removePopupOverlayIfNoPopup = (\n context: DataBrowserContext\n): void => {\n const selectorDialog = context.dom.getElementById('contacts-selector-dialog')\n if (!selectorDialog) return\n\n const activePopup = selectorDialog.querySelector('.contactsPopupDialog, .contactsContactExistsAlert')\n if (activePopup) return\n\n const overlay = selectorDialog.querySelector(`#${CONTACTS_POPUP_OVERLAY_ID}`)\n if (overlay) overlay.remove()\n selectorDialog.classList.remove(CONTACTS_OVERLAY_ACTIVE_CLASS)\n}\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./ContactsCard.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./ContactsCard.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { LiveStore, NamedNode, sym, st, literal } from 'rdflib'\nimport { login, ns, utils } from 'solid-ui'\nimport ContactsModuleRdfLib from '@solid-data-modules/contacts-rdflib'\nimport type { NewContact, AddressBook } from '@solid-data-modules/contacts-rdflib'\nimport { DataBrowserContext } from 'pane-registry' \nimport { createAddressBookUriSelectorDialog } from './ContactsCard' \nimport './styles/ContactsCard.css'\nimport { authn, solidLogicSingleton } from 'solid-logic' \nimport { AddressBookDetails, AddressBooksData, ContactData, EmailDetails, GroupData, PhoneDetails, SelectedAddressBookUris } from './contactsTypes' \nimport { addMeToYourContactsButtonText, contactExistsAlreadyButtonText, contactExistsAlreadyByNameButtonText, errorAddressBookCreation, errorGettingAddressBooks, errorLoadingContact, errorProcessingUriAddressBook, errorReadingAddressBook, errorUnableToDetermineUserWorkspace, groupIsRequired, logInAddMeToYourContactsButtonText } from './texts' \nimport { checkIfAnyUserLoggedIn } from './buttonsHelper' \nimport { addErrorToErrorDisplay } from './contactsErrors' \nimport contacts from 'contacts-pane'\n\nasync function addContactToAddressBook(\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n contactData: ContactData,\n addressBooksData: AddressBooksData,\n container: HTMLDivElement\n) {\n\n const addressBookUriSelectorDialog = createAddressBookUriSelectorDialog(context, contactsModule, contactData, addressBooksData)\n container.appendChild(addressBookUriSelectorDialog) \n addressBookUriSelectorDialog.setAttribute('open', '') \n}\n\nasync function getAddressData(\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBookUri: string\n): Promise<AddressBook | null> {\n let result = null\n try {\n result = await contactsModule.readAddressBook(addressBookUri)\n \n } catch (error) {\n addErrorToErrorDisplay(context, `${errorReadingAddressBook}\\n${error}`)\n }\n return result\n}\n\nasync function getWebID(\n context: DataBrowserContext, \n contact\n): Promise<{webID: string, uri: string} | null> {\n let webID = null\n let node = null\n let webIDNode = null\n\n try {\n await context.session.store.fetcher.load(contact.uri.substring(0, contact.uri.length - 5))\n node = new NamedNode(contact.uri)\n webIDNode = context.session.store.any(node, ns.vcard('url'), undefined, node.doc())\n if (webIDNode) {\n webID = context.session.store.anyValue(webIDNode, ns.vcard('value'), undefined, node.doc())\n return { webID, uri: contact.uri }\n }\n return null\n } catch (error) {\n addErrorToErrorDisplay(context, `${errorLoadingContact}${contact.uri}\\n${error}`)\n } \n}\n\nasync function getAddressBooks(\n context: DataBrowserContext, \n contactsModule: ContactsModuleRdfLib\n): Promise<AddressBooksData> {\n\n const allContacts = []\n const me = authn.currentUser()\n const dom = context.dom\n const div = dom.getElementById('add-to-contacts-button-container') as HTMLDivElement\n\n const contextForFindAppInstances = {\n target: me,\n me,\n noun: 'address book',\n div,\n dom\n }\n\n let addressBooksData = { \n public: new Map(),\n private: new Map(),\n contactWebIDs: new Map(),\n contactNames: new Map()\n }\n \ntry {\n \n await context.session.store.fetcher.load(me)\n \n const addressBookContext = await login.findAppInstances(contextForFindAppInstances, ns.vcard('AddressBook'))\n const addressBookNodes = addressBookContext.instances\n let addressBookUris = {\n publicUris: (addressBookNodes || []).map((node) => node.value),\n privateUris: []\n }\n // let addressBookUris = await contactsModule.listAddressBooks(me.value) \n\n const publicAddressBookPromises = addressBookUris.publicUris.map(addressBook => getAddressData(context, contactsModule, addressBook))\n const publicAddressBooksData = await Promise.all(publicAddressBookPromises)\n publicAddressBooksData.map((addressBook) => {\n if (!addressBook) return\n addressBooksData.public.set(addressBook.uri, {\n name: addressBook.title,\n groups: addressBook.groups,\n contacts: addressBook.contacts\n })\n addressBook.contacts.map((contact) => {\n addressBooksData.contactNames.set(contact.name, contact.uri)\n allContacts.push(contact)\n })\n })\n const privateAddressBookPromises = addressBookUris.privateUris.map(addressBook => getAddressData(context, contactsModule, addressBook))\n const privateAddressBooksData = await Promise.all(privateAddressBookPromises)\n privateAddressBooksData.map((addressBook) => {\n if (!addressBook) return\n addressBooksData.private.set(addressBook.uri, {\n name: addressBook.title,\n groups: addressBook.groups,\n contacts: addressBook.contacts\n })\n addressBook.contacts.map((contact) => {\n addressBooksData.contactNames.set(contact.name, contact.uri)\n allContacts.push(contact)\n })\n })\n \n addressBooksData = await processContactWebIDs(context, addressBooksData, allContacts)\n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n return addressBooksData\n}\n\nasync function getAddressBooksData(\n context: DataBrowserContext,\n contactModule: ContactsModuleRdfLib\n): Promise<AddressBooksData> {\n\n const me = authn.currentUser()\n if (!me) return null\n let addressBooksData = null\n\n try {\n addressBooksData = await getAddressBooks(context, contactModule)\n } catch (error) {\n addErrorToErrorDisplay(context, `${errorGettingAddressBooks}\\n${error}`)\n }\n return addressBooksData\n}\n\nasync function processContactWebIDs(\n context: DataBrowserContext,\n addressBooksData: AddressBooksData,\n allContacts: Array<{ name: string, uri: string }>\n): Promise<AddressBooksData> {\n\n const contactPromises = allContacts.map(getWebID.bind(null, context))\n const results = await Promise.all(contactPromises)\n \n results.map((contact) => {\n if (contact?.webID) addressBooksData.contactWebIDs.set(contact.webID.trim(), contact.uri)\n })\n\n return addressBooksData\n}\n\nasync function getContactData(\n store: LiveStore,\n subject: NamedNode\n): Promise<ContactData> {\n let emails: EmailDetails[] = []\n let phoneNumbers: PhoneDetails[] = []\n let type = null\n let email = null\n let phoneNumber = null\n\n const name = utils.label(subject)\n\n const emailNodes = store.each(subject, ns.vcard('hasEmail'), null, subject.doc()) || null\n const phoneNodes = store.each(subject, ns.vcard('hasTelephone'), null, subject.doc()) || null\n \n emailNodes.map((node) => {\n email = store.any(node as NamedNode, ns.vcard('value'), null, subject.doc())\n type = store.any(node as NamedNode, ns.rdf('type'), null, subject.doc())\n emails.push({ type, email})\n })\n phoneNodes.map((node) => {\n phoneNumber = store.any(node as NamedNode, ns.vcard('value'), null, subject.doc())\n type = store.any(node as NamedNode, ns.rdf('type'), null, subject.doc())\n phoneNumbers.push({type, phoneNumber}) \n })\n\n const webID = subject.value\n return {\n name,\n emails,\n phoneNumbers,\n webID \n }\n}\n\nasync function addANewAddressBookUriToAddressBooks(\n context:DataBrowserContext, \n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n enteredAddressBookUri: string\n): Promise<{ addressBooksData: AddressBooksData, addressBook: AddressBookDetails }> {\n let allContacts = []\n let contactsAddressBook = null\n\n try {\n const addressBook = await getAddressData(context, contactsModule, enteredAddressBookUri)\n if (!addressBook) {\n return { addressBooksData, addressBook: null }\n }\n contactsAddressBook = {\n name: addressBook.title,\n groups: addressBook.groups,\n contacts: addressBook.contacts\n }\n addressBooksData.private.set(enteredAddressBookUri, contactsAddressBook)\n \n addressBook.contacts.map((contact) => {\n addressBooksData.contactNames.set(contact.name, contact.uri)\n allContacts.push(contact)\n })\n \n addressBooksData = await processContactWebIDs(context, addressBooksData, allContacts)\n } catch (error) {\n addErrorToErrorDisplay(context, errorProcessingUriAddressBook + '\\n' + error)\n } \n\n return { addressBooksData, addressBook: contactsAddressBook }\n}\n\nasync function createContactInAddressBook(\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactData: ContactData,\n selectedAddressBookUris: SelectedAddressBookUris\n): Promise<string>{\n let contactUri = null\n const newContact: NewContact = {\n name: contactData.name\n }\n\n try { \n \n const groupUris = (selectedAddressBookUris.groupUris.length) ? selectedAddressBookUris.groupUris : undefined\n if (groupUris) {\n contactUri = await contactsModule.createNewContact({addressBookUri: selectedAddressBookUris.addressBookUri, contact: newContact, groupUris}) \n } else {\n addErrorToErrorDisplay(context, groupIsRequired) \n return\n }\n await context.session.store.fetcher.load(contactUri)\n await addWebIDToContact(context, groupUris, contactUri, contactData.webID)\n if (contactData.emails.length || contactData.phoneNumbers.length) {\n await addContactDetails(context, contactUri, contactData)\n }\n return contactUri\n } catch (error) {\n addErrorToErrorDisplay(context, error)\n } \n}\n\nasync function addContactDetails(\n context: DataBrowserContext, \n contactUri: string, \n contactData: ContactData\n) {\n const store = context.session.store\n const contactNode = new NamedNode(contactUri)\n const detailDoc = contactNode.doc()\n // needs to be a 13 digit random number.\n const max = 9999999999999\n const min = 1000000000000\n\n const createDetailNode = (): NamedNode => {\n const randomId = Math.floor(Math.random() * (max - min + 1)) + min\n return sym(`${detailDoc.uri}#id${randomId}`) as NamedNode\n }\n\n let insertions = []\n\n try {\n \n contactData.emails.map((emailInfo) => {\n const node = createDetailNode()\n insertions.push(st(contactNode, ns.vcard('hasEmail'), node , detailDoc))\n insertions.push(st(node, ns.rdf('type'), emailInfo.type, detailDoc))\n insertions.push(st(node, ns.vcard('value'), emailInfo.email, detailDoc))\n }) \n contactData.phoneNumbers.map((phoneInfo) => {\n const node = createDetailNode()\n insertions.push(st(contactNode, ns.vcard('hasTelephone'), node , detailDoc))\n insertions.push(st(node, ns.rdf('type'), phoneInfo.type, detailDoc))\n insertions.push(st(node, ns.vcard('value'), phoneInfo.phoneNumber, detailDoc))\n })\n\n await store.updater.update([],insertions) \n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n}\n\nasync function addWebIDToContact(\n context: DataBrowserContext,\n groupUris: string[],\n contactUri: string,\n webID: string\n) {\n const store = context.session.store\n const contactNode = new NamedNode(contactUri)\n const webIDNode = sym(webID)\n const vcardURLNode = store.bnode()\n let groupUriNode = null\n\n try {\n if (groupUris?.length) {\n for (const groupUri of groupUris) {\n await context.session.store.fetcher.load(groupUri)\n groupUriNode = new NamedNode(groupUri)\n const groupDoc = groupUriNode.doc()\n const deletions = context.session.store.statementsMatching(\n groupUriNode,\n ns.vcard('hasMember'),\n contactNode,\n groupDoc\n )\n const insertions = [\n st(groupUriNode, ns.vcard('hasMember'), webIDNode, groupDoc),\n st(webIDNode, ns.owl('sameAs'), contactNode, groupDoc)\n ]\n await store.updater.update(deletions, insertions)\n }\n }\n\n const personInsertions = [\n st(contactNode, ns.vcard('url'), vcardURLNode, contactNode.doc()),\n st(vcardURLNode, ns.rdf('type'), ns.vcard('WebID'), contactNode.doc()),\n st(vcardURLNode, ns.vcard('value'), literal(webID), contactNode.doc())\n ]\n await store.updater.update([], personInsertions)\n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n}\n\nasync function addAddressToTypeIndex(\n context: DataBrowserContext,\n typeOfIndex: string,\n addressBookUri: string\n): Promise<boolean> {\n const store = context.session.store\n const me = authn.currentUser()\n let typeIndexNode = null\n \n try {\n await store.fetcher.load(me)\n const typeIndexes = await solidLogicSingleton.typeIndex.loadTypeIndexesFor(me)\n if (!typeIndexes.length) {\n throw new Error('No type index found for the current user')\n return\n }\n typeIndexes.map((typeIndex) => {\n if (typeIndex.label === typeOfIndex) typeIndexNode = typeIndex.index\n })\n if (typeIndexNode) {\n const registration = await solidLogicSingleton.typeIndex.registerInTypeIndex(sym(addressBookUri), typeIndexNode, ns.vcard('AddressBook'))\n if (registration) return true\n }\n } catch(error) {\n addErrorToErrorDisplay(context, error)\n } \n return false\n}\n\nasync function updateAddressBookName(\n context: DataBrowserContext,\n addressBookUri: string,\n newName: string\n) {\n const store = context.session.store\n const addressBookNode = sym(addressBookUri)\n const addressBookDoc = addressBookNode.doc()\n const trimmedName = newName?.trim()\n\n if (!trimmedName) return\n\n try {\n await store.fetcher.load(addressBookDoc)\n\n const deletions = [\n ...store.statementsMatching(addressBookNode, ns.dc('title'), null, addressBookDoc),\n ...store.statementsMatching(addressBookNode, ns.vcard('fn'), null, addressBookDoc)\n ]\n\n const insertions = [\n st(addressBookNode, ns.dc('title'), literal(trimmedName), addressBookDoc),\n st(addressBookNode, ns.vcard('fn'), literal(trimmedName), addressBookDoc)\n ]\n\n await store.updater.update(deletions, insertions)\n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n}\n\nfunction refreshButton(\n context: DataBrowserContext,\n addressBooksData: AddressBooksData,\n contactData: ContactData\n) {\n const me = authn.currentUser()\n const button = context.dom.getElementById('add-to-contacts-button')\n if (checkIfAnyUserLoggedIn(me)) {\n const contactExistsByWebID = checkIfContactExistsByWebID(addressBooksData, contactData.webID)\n const contactExistsByName = checkIfContactExistsByName(addressBooksData, contactData.name)\n if (contactExistsByWebID) {\n //logged in and friend exists or friend was just added\n button.innerHTML = contactExistsAlreadyButtonText.toUpperCase()\n button.onclick = null \n } else if (contactExistsByName) {\n button.innerHTML = contactExistsAlreadyByNameButtonText.toUpperCase()\n button.removeAttribute('disabled') \n }\n else {\n //logged in and friend does not exist yet\n button.innerHTML = addMeToYourContactsButtonText.toUpperCase()\n }\n } else {\n //not logged in\n button.innerHTML = logInAddMeToYourContactsButtonText.toUpperCase()\n }\n }\n\nfunction checkIfContactExistsByWebID(\n addressBooksData: AddressBooksData,\n subjectUri: string,\n): boolean {\n if (!subjectUri?.trim()) return false\n return addressBooksData.contactWebIDs.has(subjectUri.trim())\n}\n\nfunction checkIfContactExistsByName(\n addressBooksData: AddressBooksData,\n name: string\n): string | null {\n let normalizedContactName = null\n let contactUri = null\n\n const normalizedSubjectName = name.replace(/\\s/g, '').toLowerCase().trim()\n \n addressBooksData.contactNames.forEach((uri, contactName) => {\n normalizedContactName = contactName.replace(/\\s/g, '').toLowerCase().trim()\n if (normalizedSubjectName === normalizedContactName) return contactUri = uri\n })\n \n return contactUri\n}\n\nasync function addWebIDToExistingContact(\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n webID: string,\n contactUri: string\n) {\n\n try {\n const groupUris = await getGroupUrisForContact(contactsModule, addressBooksData, contactUri)\n await addWebIDToContact(context, groupUris, contactUri, webID)\n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n}\n\nasync function getGroupUrisForContact(\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData,\n contactUri: string\n): Promise<Array<string>> {\n let groupUrisForContact = []\n let addressBookForContact = null\n let allGroupUrisForAddressBook = []\n \n addressBooksData.public.forEach((book, uri) => {\n book.contacts.map((contact) => {\n if (contact.uri === contactUri) {\n addressBookForContact = book\n }\n })\n })\n addressBooksData.private.forEach((book, uri) => {\n book.contacts.map((contact) => {\n if (contact.uri === contactUri) {\n addressBookForContact = book\n }\n })\n })\n allGroupUrisForAddressBook = addressBookForContact.groups\n const groupPromises = allGroupUrisForAddressBook.map(async (group) => {\n group = await contactsModule.readGroup(group.uri)\n return { groupUri: group.uri, group }\n }) \n const groups = await Promise.all(groupPromises)\n\n groups.map((groupInfo) => {\n groupInfo.group.members.map((contact) => {\n if (contact.uri === contactUri) {\n if (!groupUrisForContact.includes(groupInfo.groupUri)) {\n groupUrisForContact.push(groupInfo.groupUri)\n } \n }\n })\n })\n \n return groupUrisForContact\n}\n\nfunction addGroupToAddressBookData(\n addressBooksData: AddressBooksData,\n addressBookUri: string,\n group: GroupData\n): boolean {\n const publicAddressBook = addressBooksData.public.get(addressBookUri)\n if (publicAddressBook) {\n const groupExists = publicAddressBook.groups.some((existingGroup) => existingGroup.uri === group.uri)\n if (!groupExists) {\n addressBooksData.public.set(addressBookUri, {\n ...publicAddressBook,\n groups: [...publicAddressBook.groups, group]\n })\n }\n return true\n }\n\n const privateAddressBook = addressBooksData.private.get(addressBookUri)\n if (privateAddressBook) {\n const groupExists = privateAddressBook.groups.some((existingGroup) => existingGroup.uri === group.uri)\n if (!groupExists) {\n addressBooksData.private.set(addressBookUri, {\n ...privateAddressBook,\n groups: [...privateAddressBook.groups, group]\n })\n }\n return true\n }\n\n return false\n}\n\nasync function handleAddressBookCreation(\n dataBrowserContext: DataBrowserContext,\n containerName: string,\n enteredAddressName: string\n): Promise<string> {\n const me = authn.currentUser()\n const newAddressContainer = me?.site()?.value\n let addressBookUri = null\n\n const div = dataBrowserContext.dom.getElementById('new-addressbook-form') as HTMLDivElement\n try {\n if (!me || !newAddressContainer) {\n throw new Error(errorUnableToDetermineUserWorkspace)\n }\n\n const normalizedContainer = newAddressContainer.endsWith('/')\n ? newAddressContainer\n : `${newAddressContainer}/`\n\n const addressBookSlug = (containerName || 'address-book')\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '') || 'address-book'\n\n const newBase = `${normalizedContainer}${addressBookSlug}/`\n const mintResult = await contacts.mintNew(dataBrowserContext, {\n me,\n dom: dataBrowserContext.dom,\n div,\n newBase,\n instanceClass: ns.vcard('AddressBook'),\n instanceName: enteredAddressName\n })\n\n addressBookUri = mintResult?.newInstance?.uri || `${newBase}index.ttl#this`\n await updateAddressBookName(dataBrowserContext, addressBookUri, enteredAddressName)\n\n } catch (error) {\n addErrorToErrorDisplay(dataBrowserContext, errorAddressBookCreation + '\\n' + error)\n }\n return addressBookUri\n}\n\nexport {\n getAddressBooksData,\n getContactData,\n addContactToAddressBook,\n createContactInAddressBook,\n addAddressToTypeIndex,\n refreshButton,\n checkIfContactExistsByWebID,\n checkIfContactExistsByName,\n addWebIDToExistingContact,\n addANewAddressBookUriToAddressBooks,\n addGroupToAddressBookData,\n updateAddressBookName,\n handleAddressBookCreation\n}","import { Namespace } from \"rdflib\";\nexport const vcard = Namespace(\"http://www.w3.org/2006/vcard/ns#\");\nexport const dc = Namespace(\"http://purl.org/dc/elements/1.1/\");\n//# sourceMappingURL=namespaces.js.map","import ShortUniqueId from \"short-unique-id\";\nconst uid = new ShortUniqueId({ length: 10 });\n/**\n * Generates a short ID that can be used for URI fragments, document or container names.\n */\nexport function generateId() {\n return uid.rnd(6);\n}\n//# sourceMappingURL=generate-id.js.map","export * from \"./generate-id.js\";\n//# sourceMappingURL=index.js.map","import { isNamedNode, sym } from \"rdflib\";\nimport { dc, vcard } from \"../namespaces.js\";\nimport { generateId } from \"@solid-data-modules/rdflib-utils/identifier\";\nexport class AddressBookQuery {\n constructor(store, addressBookNode) {\n this.store = store;\n this.addressBookNode = addressBookNode;\n this.addressBookDoc = addressBookNode.doc();\n }\n proposeNewContactNode() {\n return this.proposeNewNode(\"Person\");\n }\n proposeNewGroupNode() {\n return this.proposeNewNode(\"Group\");\n }\n proposeNewNode(containerPath) {\n const id = generateId();\n const baseUri = this.addressBookNode.dir()?.uri;\n return sym(`${baseUri}${containerPath}/${id}/index.ttl#this`);\n }\n queryTitle() {\n return (this.store.anyValue(this.addressBookNode, dc(\"title\"), undefined, this.addressBookDoc) ?? \"\");\n }\n queryNameEmailIndex() {\n const index = this.store.any(this.addressBookNode, vcard(\"nameEmailIndex\"), undefined, this.addressBookDoc);\n if (isNamedNode(index)) {\n return index;\n }\n else {\n return null;\n }\n }\n queryContacts() {\n const nameEmailIndex = this.queryNameEmailIndex();\n return nameEmailIndex && isNamedNode(nameEmailIndex)\n ? this.store\n .each(null, vcard(\"inAddressBook\"), this.addressBookNode, nameEmailIndex)\n .filter((it) => isNamedNode(it))\n .map((node) => ({\n name: this.store.anyValue(node, vcard(\"fn\"), null, nameEmailIndex) ??\n \"\",\n uri: node.value,\n }))\n : [];\n }\n queryGroupIndex() {\n const index = this.store.any(this.addressBookNode, vcard(\"groupIndex\"), undefined, this.addressBookDoc);\n if (isNamedNode(index)) {\n return index;\n }\n else {\n return null;\n }\n }\n queryGroups() {\n const groupIndex = this.queryGroupIndex(); //?\n return groupIndex && isNamedNode(groupIndex)\n ? this.store\n .each(this.addressBookNode, vcard(\"includesGroup\"), null, groupIndex)\n .filter((it) => isNamedNode(it))\n .map((node) => ({\n name: this.store.anyValue(node, vcard(\"fn\"), null, groupIndex) ?? \"\",\n uri: node.value,\n }))\n : [];\n }\n}\n//# sourceMappingURL=AddressBookQuery.js.map","import { isNamedNode, sym } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nconst MAILTO_URI_SCHEME = \"mailto:\";\nconst TEl_URI_SCHEME = \"tel:\";\nexport class ContactQuery {\n constructor(store, contactNode) {\n this.store = store;\n this.contactNode = contactNode;\n this.contactDoc = contactNode.doc();\n }\n queryName() {\n return (this.store.anyValue(this.contactNode, vcard(\"fn\"), undefined, this.contactDoc) ?? \"\");\n }\n queryEmails() {\n const uris = this.getValuesOf(vcard(\"hasEmail\"));\n if (uris.length === 0) {\n return [];\n }\n return uris\n .map((uri) => {\n const valueNode = this.getValueNode(uri);\n if (isMailtoNode(valueNode)) {\n return {\n uri,\n value: valueNode.value.split(MAILTO_URI_SCHEME)[1],\n };\n }\n })\n .filter((value) => !!value);\n }\n queryPhoneNumbers() {\n const uris = this.getValuesOf(vcard(\"hasTelephone\"));\n if (uris.length === 0) {\n return [];\n }\n return uris\n .map((uri) => {\n const valueNode = this.getValueNode(uri);\n if (isTelNode(valueNode)) {\n return {\n uri,\n value: valueNode.value.split(TEl_URI_SCHEME)[1],\n };\n }\n })\n .filter((value) => !!value);\n }\n getValuesOf(predicate) {\n return this.store\n .statementsMatching(this.contactNode, predicate, undefined, this.contactDoc)\n .map((it) => it.object.value);\n }\n getValueNode(uri) {\n return this.store.any(sym(uri), vcard(\"value\"), undefined, this.contactDoc);\n }\n}\nfunction isMailtoNode(valueNode) {\n return (isNamedNode(valueNode) && valueNode.value.startsWith(MAILTO_URI_SCHEME));\n}\nfunction isTelNode(valueNode) {\n return isNamedNode(valueNode) && valueNode.value.startsWith(TEl_URI_SCHEME);\n}\n//# sourceMappingURL=ContactQuery.js.map","import { isNamedNode } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport class GroupQuery {\n constructor(store, groupNode) {\n this.store = store;\n this.groupNode = groupNode;\n this.groupDoc = groupNode.doc();\n }\n queryName() {\n return (this.store.anyValue(this.groupNode, vcard(\"fn\"), undefined, this.groupDoc) ?? \"\");\n }\n queryMembers() {\n return this.store\n .each(this.groupNode, vcard(\"hasMember\"), null, this.groupDoc)\n .filter((it) => isNamedNode(it))\n .map((node) => ({\n uri: node.value,\n name: this.store.anyValue(node, vcard(\"fn\"), null, this.groupDoc) ?? \"\",\n }));\n }\n}\n//# sourceMappingURL=GroupQuery.js.map","export { AddressBookQuery } from \"./AddressBookQuery.js\";\nexport { ContactQuery } from \"./ContactQuery.js\";\nexport { GroupQuery } from \"./GroupQuery.js\";\n//# sourceMappingURL=index.js.map","import { lit, st, sym } from \"rdflib\";\nimport { dc, vcard } from \"../namespaces.js\";\nimport { generateId } from \"@solid-data-modules/rdflib-utils/identifier\";\nexport function createAddressBook(container, name) {\n const id = generateId();\n const uri = `${container}${id}/index.ttl#this`;\n const nameEmailIndexUri = `${container}${id}/people.ttl`;\n const groupIndexUri = `${container}${id}/groups.ttl`;\n const insertions = [\n st(sym(uri), sym(\"http://www.w3.org/1999/02/22-rdf-syntax-ns#type\"), vcard(\"AddressBook\"), sym(uri).doc()),\n st(sym(uri), dc(\"title\"), lit(name), sym(uri).doc()),\n st(sym(uri), vcard(\"nameEmailIndex\"), sym(nameEmailIndexUri), sym(uri).doc()),\n st(sym(uri), vcard(\"groupIndex\"), sym(groupIndexUri), sym(uri).doc()),\n ];\n return {\n uri,\n deletions: [],\n insertions,\n filesToCreate: [{ url: nameEmailIndexUri }, { url: groupIndexUri }],\n };\n}\n//# sourceMappingURL=createAddressBook.js.map","/**\n * Applies the described updates to a Pod\n * @param fetcher - The fetcher to use for the update\n * @param updater - The updater to use for the update\n * @param operation - The operations to perform\n */\nexport async function executeUpdate(fetcher, updater, operation) {\n await updater.updateMany(operation.deletions, operation.insertions);\n operation.filesToCreate.map((file) => {\n createEmptyTurtleFile(fetcher, file.url);\n });\n}\nfunction createEmptyTurtleFile(fetcher, url) {\n return fetcher.webOperation(\"PUT\", url, {\n contentType: \"text/turtle\",\n });\n}\n//# sourceMappingURL=executeUpdate.js.map","/**\n * Nullsafe fetching of a node\n * @param fetcher - The fetcher to use\n * @param node - A node to fetch, or null to do nothing at all\n */\nexport async function fetchNode(fetcher, node) {\n if (node) {\n await fetcher.load(node.value);\n }\n}\n//# sourceMappingURL=fetchNode.js.map","export * from \"./executeUpdate.js\";\nexport * from \"./fetchNode.js\";\n//# sourceMappingURL=index.js.map","import { Namespace } from \"rdflib\";\nexport const rdf = Namespace(\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\");\nexport const solid = Namespace(\"http://www.w3.org/ns/solid/terms#\");\nexport const pim = Namespace(\"http://www.w3.org/ns/pim/space#\");\nexport const ldp = Namespace(\"http://www.w3.org/ns/ldp#\");\n//# sourceMappingURL=index.js.map","import { isNamedNode } from \"rdflib\";\nimport { solid } from \"../namespaces/index.js\";\n/**\n * Used query data from a user's preferences file\n */\nexport class PreferencesQuery {\n constructor(store, \n /**\n * The WebID of the user\n */\n webIdNode, \n /**\n * The preferences file\n */\n preferencesDoc) {\n this.store = store;\n this.webIdNode = webIdNode;\n this.preferencesDoc = preferencesDoc;\n }\n /**\n * Look up the private type index. Returns null if none is found or if the predicated does not link to a proper named node\n */\n queryPrivateTypeIndex() {\n const node = this.store.any(this.webIdNode, solid(\"privateTypeIndex\"), null, this.preferencesDoc);\n if (isNamedNode(node)) {\n return node;\n }\n return null;\n }\n}\n//# sourceMappingURL=PreferencesQuery.js.map","import { isNamedNode } from \"rdflib\";\nimport { pim, solid } from \"../namespaces/index.js\";\n/**\n * Used query data from a user's profile document\n */\nexport class ProfileQuery {\n constructor(\n /**\n * The WebID of the user\n */\n webIdNode, store) {\n this.webIdNode = webIdNode;\n this.store = store;\n }\n /**\n * Look up the public type index. Returns null if none is found or if the predicated does not link to a proper named node\n */\n queryPublicTypeIndex() {\n const predicate = solid(\"publicTypeIndex\");\n return this.queryNamedNode(predicate);\n }\n /**\n * Look up the preferences file. Returns null if none is found or if the predicated does not link to a proper named node\n */\n queryPreferencesFile() {\n const predicate = pim(\"preferencesFile\");\n return this.queryNamedNode(predicate);\n }\n queryNamedNode(predicate) {\n const node = this.store.any(this.webIdNode, predicate, null, this.webIdNode.doc());\n if (isNamedNode(node)) {\n return node;\n }\n return null;\n }\n}\n//# sourceMappingURL=ProfileQuery.js.map","import { isNamedNode } from \"rdflib\";\nimport { solid } from \"../namespaces/index.js\";\n/**\n * Used query data from a type index document\n */\nexport class TypeIndexQuery {\n constructor(store, typeIndexDoc) {\n this.store = store;\n this.typeIndexDoc = typeIndexDoc;\n }\n /**\n * Look up the instances in the type registration for the given RDF class\n * @param type - The RDF class to look up\n * @returns A list of the URIs of the found instances\n */\n queryInstancesForClass(type) {\n const registrations = this.store.each(null, solid(\"forClass\"), type, this.typeIndexDoc);\n return registrations.flatMap((registration) => {\n if (!isNamedNode(registration))\n return [];\n return this.getInstanceValues(registration);\n });\n }\n getInstanceValues(registration) {\n return this.store\n .each(registration, solid(\"instance\"), null, this.typeIndexDoc)\n .map((it) => it.value);\n }\n}\n//# sourceMappingURL=TypeIndexQuery.js.map","export { PreferencesQuery } from \"./PreferencesQuery.js\";\nexport { ProfileQuery } from \"./ProfileQuery.js\";\nexport { TypeIndexQuery } from \"./TypeIndexQuery.js\";\n//# sourceMappingURL=index.js.map","import { sym } from \"rdflib\";\nimport { fetchNode } from \"../index.js\";\nimport { ldp, rdf } from \"../namespaces/index.js\";\n/**\n * Provides common functionality useful for many rdflib-based data modules\n */\nexport class ModuleSupport {\n constructor(config) {\n this.store = config.store;\n this.fetcher = config.fetcher;\n this.updater = config.updater;\n }\n /**\n * Nullsafe fetching of a node\n * @param node - A node to fetch, or null to do nothing at all\n */\n async fetchNode(node) {\n return fetchNode(this.fetcher, node);\n }\n /**\n * Fetch all the given nodes in parallel\n * @param nodes\n */\n async fetchAll(nodes) {\n return Promise.all(nodes.map((it) => this.fetchNode(it)));\n }\n /**\n * Checks whether the resource identified by the given URL is a LDP container\n * @param storageUrl - The URL to check\n * @returns true if it is a container, false otherwise\n */\n async isContainer(storageUrl) {\n const storageNode = sym(storageUrl);\n await this.fetcher.load(storageNode.value);\n return this.store.holds(storageNode, rdf(\"type\"), ldp(\"Container\"), storageNode.doc());\n }\n}\n//# sourceMappingURL=ModuleSupport.js.map","export { ModuleSupport } from \"./ModuleSupport.js\";\n//# sourceMappingURL=index.js.map","import { st, sym } from \"rdflib\";\nimport { generateId } from \"../identifier/index.js\";\nimport { rdf, solid } from \"../namespaces/index.js\";\n/**\n * Create a new type registration for the given type that links to the given resource instance\n * @param typeIndexDoc - The type index document (private or public)\n * @param instanceUri - The URI of the instance to add\n * @param type - The RDF class to register the instance for\n */\nexport function addInstanceToTypeIndex(typeIndexDoc, instanceUri, type) {\n const registrationNode = sym(`${typeIndexDoc.value}#${generateId()}`);\n return {\n deletions: [],\n filesToCreate: [],\n insertions: [\n st(registrationNode, rdf(\"type\"), solid(\"TypeRegistration\"), typeIndexDoc),\n st(registrationNode, solid(\"forClass\"), type, typeIndexDoc),\n st(registrationNode, solid(\"instance\"), sym(instanceUri), typeIndexDoc),\n ],\n };\n}\n//# sourceMappingURL=addInstanceToTypeIndex.js.map","export { addInstanceToTypeIndex } from \"./addInstanceToTypeIndex.js\";\n//# sourceMappingURL=index.js.map","export * from \"./web-operations/index.js\";\nexport * from \"./queries/index.js\";\nexport * from \"./module/index.js\";\nexport * from \"./update-operations/index.js\";\nexport * from \"./namespaces/index.js\";\n//# sourceMappingURL=index.js.map","import { lit, st, sym } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nimport { rdf } from \"@solid-data-modules/rdflib-utils\";\nexport function createNewContact(addressBook, newContact) {\n const contactNode = addressBook.proposeNewContactNode();\n const nameEmailIndex = addressBook.queryNameEmailIndex();\n if (!nameEmailIndex) {\n throw new Error(\"name-email index is missing or invalid\");\n }\n const insertions = [\n st(contactNode, vcard(\"inAddressBook\"), addressBook.addressBookNode, nameEmailIndex),\n st(contactNode, vcard(\"fn\"), lit(newContact.name), nameEmailIndex),\n st(contactNode, vcard(\"fn\"), lit(newContact.name), contactNode.doc()),\n st(contactNode, rdf(\"type\"), vcard(\"Individual\"), contactNode.doc()),\n ];\n if (newContact.email) {\n const emailNode = sym(contactNode.doc().uri + \"#email\");\n insertions.push(st(contactNode, vcard(\"hasEmail\"), emailNode, contactNode.doc()), st(emailNode, vcard(\"value\"), sym(\"mailto:\" + newContact.email), contactNode.doc()));\n }\n if (newContact.phoneNumber) {\n const phoneNode = sym(contactNode.doc().uri + \"#phone\");\n insertions.push(st(contactNode, vcard(\"hasTelephone\"), phoneNode, contactNode.doc()), st(phoneNode, vcard(\"value\"), sym(\"tel:\" + newContact.phoneNumber), contactNode.doc()));\n }\n return {\n uri: contactNode.uri,\n deletions: [],\n insertions: insertions,\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=createNewContact.js.map","import { lit, st } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nimport { rdf } from \"@solid-data-modules/rdflib-utils\";\nexport function createNewGroup(addressBook, groupName) {\n const groupIndex = addressBook.queryGroupIndex();\n if (!groupIndex) {\n throw new Error(\"group index is missing or invalid\");\n }\n const groupNode = addressBook.proposeNewGroupNode();\n const groupDoc = groupNode.doc();\n return {\n uri: groupNode.uri,\n insertions: [\n st(groupNode, vcard(\"fn\"), lit(groupName), groupIndex),\n st(groupNode, vcard(\"fn\"), lit(groupName), groupDoc),\n st(groupNode, rdf(\"type\"), vcard(\"Group\"), groupDoc),\n st(addressBook.addressBookNode, vcard(\"includesGroup\"), groupNode, groupIndex),\n ],\n deletions: [],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=createNewGroup.js.map","import { lit, st } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function addContactToGroup(contactQuery, groupQuery) {\n const name = contactQuery.queryName();\n return {\n insertions: [\n st(groupQuery.groupNode, vcard(\"hasMember\"), contactQuery.contactNode, groupQuery.groupNode.doc()),\n st(contactQuery.contactNode, vcard(\"fn\"), lit(name), groupQuery.groupNode.doc()),\n ],\n deletions: [],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=addContactToGroup.js.map","import { st, sym } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nimport { generateId } from \"@solid-data-modules/rdflib-utils/identifier\";\nexport function addNewEmailAddress(contactNode, emailAddress) {\n const id = generateId();\n const uri = `${contactNode.doc().uri}#${id}`;\n return {\n uri,\n insertions: [\n st(contactNode, vcard(\"hasEmail\"), sym(uri), contactNode.doc()),\n st(sym(uri), vcard(\"value\"), sym(\"mailto:\" + emailAddress), contactNode.doc()),\n ],\n deletions: [],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=addNewEmailAddress.js.map","import { st, sym } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nimport { generateId } from \"@solid-data-modules/rdflib-utils/identifier\";\nexport function addNewPhoneNumber(contactNode, phoneNumber) {\n const id = generateId();\n const uri = `${contactNode.doc().uri}#${id}`;\n return {\n uri,\n insertions: [\n st(contactNode, vcard(\"hasTelephone\"), sym(uri), contactNode.doc()),\n st(sym(uri), vcard(\"value\"), sym(\"tel:\" + phoneNumber), contactNode.doc()),\n ],\n deletions: [],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=addNewPhoneNumber.js.map","import { lit, st } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function removeContactFromGroup(contactQuery, groupQuery) {\n const contactUri = contactQuery.contactNode.uri;\n const member = groupQuery.queryMembers().find((it) => it.uri === contactUri);\n if (!member) {\n throw new Error(\"member not found in group\");\n }\n return {\n insertions: [],\n deletions: [\n st(groupQuery.groupNode, vcard(\"hasMember\"), contactQuery.contactNode, groupQuery.groupNode.doc()),\n st(contactQuery.contactNode, vcard(\"fn\"), lit(member.name), groupQuery.groupNode.doc()),\n ],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=removeContactFromGroup.js.map","import { st } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function removeEmailAddress(contactNode, emailNode, store) {\n const emailStatements = store.statementsMatching(emailNode, null, null, emailNode.doc());\n return {\n insertions: [],\n deletions: [\n ...emailStatements,\n st(contactNode, vcard(\"hasEmail\"), emailNode, contactNode.doc()),\n ],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=removeEmailAddress.js.map","import { st } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function removePhoneNumber(contactNode, phoneNode, store) {\n const phoneStatements = store.statementsMatching(phoneNode, null, null, phoneNode.doc());\n return {\n insertions: [],\n deletions: [\n ...phoneStatements,\n st(contactNode, vcard(\"hasTelephone\"), phoneNode, contactNode.doc()),\n ],\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=removePhoneNumber.js.map","import { lit, st } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function renameContact(store, contactNode, newName) {\n const deletions = store.statementsMatching(contactNode, vcard(\"fn\"), null, null);\n const insertions = deletions.map((it) => st(it.subject, it.predicate, lit(newName), it.graph));\n return {\n insertions,\n deletions,\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=renameContact.js.map","import { st, sym } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function updateEmailAddress(emailAddressNode, newEmailAddress, store) {\n const oldValue = store.any(emailAddressNode, vcard(\"value\"));\n const deletions = oldValue\n ? [st(emailAddressNode, vcard(\"value\"), oldValue, emailAddressNode.doc())]\n : [];\n const insertions = [\n st(emailAddressNode, vcard(\"value\"), sym(\"mailto:\" + newEmailAddress), emailAddressNode.doc()),\n ];\n return {\n insertions,\n deletions,\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=updateEmailAddress.js.map","import { st, sym } from \"rdflib\";\nimport { vcard } from \"../namespaces.js\";\nexport function updatePhoneNumber(phoneNumberNode, newPhoneNumber, store) {\n const oldValue = store.any(phoneNumberNode, vcard(\"value\"));\n const deletions = oldValue\n ? [st(phoneNumberNode, vcard(\"value\"), oldValue, phoneNumberNode.doc())]\n : [];\n const insertions = [\n st(phoneNumberNode, vcard(\"value\"), sym(\"tel:\" + newPhoneNumber), phoneNumberNode.doc()),\n ];\n return {\n insertions,\n deletions,\n filesToCreate: [],\n };\n}\n//# sourceMappingURL=updatePhoneNumber.js.map","export { createAddressBook } from \"./createAddressBook.js\";\nexport { createNewContact } from \"./createNewContact.js\";\nexport { createNewGroup } from \"./createNewGroup.js\";\nexport { addContactToGroup } from \"./addContactToGroup.js\";\nexport { addNewEmailAddress } from \"./addNewEmailAddress.js\";\nexport { addNewPhoneNumber } from \"./addNewPhoneNumber.js\";\nexport { removeContactFromGroup } from \"./removeContactFromGroup.js\";\nexport { removeEmailAddress } from \"./removeEmailAddress.js\";\nexport { removePhoneNumber } from \"./removePhoneNumber.js\";\nexport { renameContact } from \"./renameContact.js\";\nexport { updateEmailAddress } from \"./updateEmailAddress.js\";\nexport { updatePhoneNumber } from \"./updatePhoneNumber.js\";\n//# sourceMappingURL=index.js.map","import { sym } from \"rdflib\";\nimport { AddressBookQuery, ContactQuery, GroupQuery } from \"./queries/index.js\";\nimport { createAddressBook, createNewContact, createNewGroup, renameContact, updatePhoneNumber, updateEmailAddress, addContactToGroup, removePhoneNumber, addNewPhoneNumber, removeEmailAddress, addNewEmailAddress, removeContactFromGroup, } from \"./update-operations/index.js\";\nimport { executeUpdate, ModuleSupport, PreferencesQuery, ProfileQuery, TypeIndexQuery, addInstanceToTypeIndex, } from \"@solid-data-modules/rdflib-utils\";\nimport { vcard } from \"./namespaces.js\";\nconst VCARD_ADDRESS_BOOK = vcard(\"AddressBook\");\nexport class ContactsModuleRdfLib {\n constructor(config) {\n this.support = new ModuleSupport(config);\n this.store = config.store;\n this.fetcher = config.fetcher;\n this.updater = config.updater;\n }\n async readAddressBook(uri) {\n const addressBookNode = sym(uri);\n await this.support.fetchNode(addressBookNode);\n const query = new AddressBookQuery(this.store, addressBookNode);\n const title = query.queryTitle();\n const nameEmailIndex = query.queryNameEmailIndex();\n const groupIndex = query.queryGroupIndex();\n await this.support.fetchAll([nameEmailIndex, groupIndex]);\n const contacts = query.queryContacts();\n const groups = query.queryGroups();\n return {\n uri,\n title,\n contacts,\n groups,\n };\n }\n async createAddressBook({ containerUri, name, ownerWebId, }) {\n const operation = createAddressBook(containerUri, name);\n await executeUpdate(this.fetcher, this.updater, operation);\n if (ownerWebId) {\n await this.updatePrivateTypeIndex(ownerWebId, operation.uri);\n }\n return operation.uri;\n }\n async updatePrivateTypeIndex(ownerWebId, addressBookUri) {\n const profileNode = sym(ownerWebId);\n await this.support.fetchNode(profileNode);\n const profileQuery = new ProfileQuery(profileNode, this.store);\n const preferencesFile = profileQuery.queryPreferencesFile();\n const privateTypeIndex = await this.fetchPrivateTypeIndex(profileNode, preferencesFile);\n if (!privateTypeIndex) {\n throw new Error(`Private type not found for WebID ${ownerWebId}.`);\n }\n const operation = addInstanceToTypeIndex(privateTypeIndex, addressBookUri, VCARD_ADDRESS_BOOK);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async createNewContact({ addressBookUri, contact, groupUris, }) {\n const contactQuery = await this.executeCreateNewContact(addressBookUri, contact);\n await this.executeAddContactToGroups(groupUris, contactQuery);\n return contactQuery.contactNode.uri;\n }\n async executeAddContactToGroups(groupUris, contactQuery) {\n const groupNodes = (groupUris ?? []).map((it) => sym(it));\n await this.support.fetchAll(groupNodes);\n const groupUpdates = groupNodes.map((groupNode) => {\n const groupQuery = new GroupQuery(this.store, groupNode);\n const operation = addContactToGroup(contactQuery, groupQuery);\n return executeUpdate(this.fetcher, this.updater, operation);\n });\n await Promise.allSettled(groupUpdates);\n }\n async executeCreateNewContact(addressBookUri, contact) {\n const addressBookNode = sym(addressBookUri);\n await this.support.fetchNode(addressBookNode);\n const operation = createNewContact(new AddressBookQuery(this.store, addressBookNode), contact);\n await executeUpdate(this.fetcher, this.updater, operation);\n return new ContactQuery(this.store, sym(operation.uri));\n }\n async readContact(uri) {\n const contactNode = sym(uri);\n await this.support.fetchNode(contactNode);\n const query = new ContactQuery(this.store, contactNode);\n const name = query.queryName();\n const emails = query.queryEmails();\n const phoneNumbers = query.queryPhoneNumbers();\n return {\n uri,\n name,\n emails,\n phoneNumbers,\n };\n }\n async createNewGroup({ addressBookUri, groupName }) {\n const addressBookNode = sym(addressBookUri);\n await this.support.fetchNode(addressBookNode);\n const query = new AddressBookQuery(this.store, addressBookNode);\n const operation = createNewGroup(query, groupName);\n await executeUpdate(this.fetcher, this.updater, operation);\n return operation.uri;\n }\n async readGroup(uri) {\n const groupNode = sym(uri);\n await this.support.fetchNode(groupNode);\n const query = new GroupQuery(this.store, groupNode);\n const name = query.queryName();\n const members = query.queryMembers();\n return {\n uri,\n name,\n members,\n };\n }\n async addContactToGroup({ contactUri, groupUri }) {\n const contactNode = sym(contactUri);\n const groupNode = sym(groupUri);\n await this.support.fetchNode(contactNode);\n const contactQuery = new ContactQuery(this.store, contactNode);\n const groupQuery = new GroupQuery(this.store, groupNode);\n const operation = addContactToGroup(contactQuery, groupQuery);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async removeContactFromGroup({ contactUri, groupUri, }) {\n const contactNode = sym(contactUri);\n const groupNode = sym(groupUri);\n await this.support.fetchNode(groupNode);\n const contactQuery = new ContactQuery(this.store, contactNode);\n const groupQuery = new GroupQuery(this.store, groupNode);\n const operation = removeContactFromGroup(contactQuery, groupQuery);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async addNewPhoneNumber({ contactUri, newPhoneNumber, }) {\n const contactNode = sym(contactUri);\n const operation = addNewPhoneNumber(contactNode, newPhoneNumber);\n await executeUpdate(this.fetcher, this.updater, operation);\n return operation.uri;\n }\n async addNewEmailAddress({ contactUri, newEmailAddress, }) {\n const contactNode = sym(contactUri);\n const operation = addNewEmailAddress(contactNode, newEmailAddress);\n await executeUpdate(this.fetcher, this.updater, operation);\n return operation.uri;\n }\n async removePhoneNumber({ contactUri, phoneNumberUri, }) {\n const contactNode = sym(contactUri);\n const phoneNumberNode = sym(phoneNumberUri);\n await this.support.fetchNode(phoneNumberNode);\n const operation = removePhoneNumber(contactNode, phoneNumberNode, this.store);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async removeEmailAddress({ contactUri, emailAddressUri, }) {\n const contactNode = sym(contactUri);\n const emailAddressNode = sym(emailAddressUri);\n await this.support.fetchNode(emailAddressNode);\n const operation = removeEmailAddress(contactNode, emailAddressNode, this.store);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async updatePhoneNumber({ phoneNumberUri, newPhoneNumber, }) {\n const phoneNumberNode = sym(phoneNumberUri);\n await this.support.fetchNode(phoneNumberNode);\n const operation = updatePhoneNumber(phoneNumberNode, newPhoneNumber, this.store);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async updateEmailAddress({ emailAddressUri, newEmailAddress, }) {\n const emailAddressNode = sym(emailAddressUri);\n await this.support.fetchNode(emailAddressNode);\n const operation = updateEmailAddress(emailAddressNode, newEmailAddress, this.store);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n async listAddressBooks(webId) {\n const profileNode = sym(webId);\n await this.support.fetchNode(profileNode);\n const profileQuery = new ProfileQuery(profileNode, this.store);\n const publicTypeIndexNode = profileQuery.queryPublicTypeIndex();\n const preferencesFile = profileQuery.queryPreferencesFile();\n const promisePublicUris = this.fetchIndexedAddressBooks(publicTypeIndexNode);\n const promisePrivateTypeIndex = this.fetchPrivateTypeIndex(profileNode, preferencesFile);\n const [publicUris, privateTypeIndex] = await Promise.allSettled([\n promisePublicUris,\n promisePrivateTypeIndex,\n ]);\n const privateUris = privateTypeIndex.status === \"fulfilled\"\n ? await this.fetchIndexedAddressBooks(privateTypeIndex.value)\n : [];\n return {\n publicUris: publicUris.status === \"fulfilled\" ? publicUris.value : [],\n privateUris,\n };\n }\n async fetchIndexedAddressBooks(publicTypeIndexNode) {\n if (!publicTypeIndexNode) {\n return [];\n }\n await this.support.fetchNode(publicTypeIndexNode);\n return new TypeIndexQuery(this.store, publicTypeIndexNode).queryInstancesForClass(VCARD_ADDRESS_BOOK);\n }\n async fetchPrivateTypeIndex(profileNode, preferencesFile) {\n if (!preferencesFile) {\n return null;\n }\n await this.support.fetchNode(preferencesFile);\n const preferencesQuery = new PreferencesQuery(this.store, profileNode, preferencesFile);\n return preferencesQuery.queryPrivateTypeIndex();\n }\n async renameContact({ contactUri, newName }) {\n const contactNode = sym(contactUri);\n await this.support.fetchNode(contactNode);\n const operation = renameContact(this.store, contactNode, newName);\n await executeUpdate(this.fetcher, this.updater, operation);\n }\n}\n//# sourceMappingURL=ContactsModuleRdfLib.js.map","import { ContactsModuleRdfLib } from \"./rdflib/ContactsModuleRdfLib.js\";\nexport default ContactsModuleRdfLib;\n//# sourceMappingURL=index.js.map","import { html, TemplateResult } from 'lit-html'\nimport { DataBrowserContext } from 'pane-registry'\nimport { authn } from 'solid-logic'\nimport { LiveStore, NamedNode } from 'rdflib'\nimport { widgets } from 'solid-ui'\nimport {\n clearPreviousMessage, complain, checkIfAnyUserLoggedIn\n} from './buttonsHelper'\nimport { getContactData, getAddressBooksData, addContactToAddressBook, checkIfContactExistsByWebID, checkIfContactExistsByName, addWebIDToExistingContact } from './contactsHelpers'\nimport { AddressBooksData, ContactData } from './contactsTypes'\nimport {\n addMeToYourContactsButtonText, contactExistsAlreadyButtonText, contactExistsAlreadyByNameButtonText, contactExistsMessage, logInAddMeToYourContactsButtonText, userNotLoggedInErrorMessage\n} from './texts'\nimport './styles/ProfileCard.css'\nimport ContactsModuleRdfLib from '@solid-data-modules/contacts-rdflib'\nimport { addErrorToErrorDisplay } from './contactsErrors'\n\nlet buttonContainer = <HTMLDivElement>document.createElement('section')\n\nconst addMeToYourContactsDiv = async (\n subject: NamedNode,\n context: DataBrowserContext\n): Promise<TemplateResult> => {\n \n buttonContainer = context.dom.createElement('section') as HTMLDivElement\n buttonContainer.setAttribute('id', 'add-to-contacts-button-container')\n buttonContainer.setAttribute('class', 'buttonSubSection text-truncate text-center section-centered')\n buttonContainer.setAttribute('aria-labelledby', 'add-me-to-your-contacts-button-section')\n buttonContainer.setAttribute('data-testid', 'button')\n\n // Add a visually hidden heading for accessibility\n const heading = context.dom.createElement('h3')\n heading.setAttribute('id', 'add-me-to-your-contacts-button-section')\n heading.setAttribute('class', 'sr-only')\n heading.textContent = 'Add me to your contacts actions'\n buttonContainer.appendChild(heading)\n\n const button = await createAddMeToYourContactsButton(subject, context)\n button.classList.add('actionButton', 'btn-primary', 'action-button-focus')\n buttonContainer.appendChild(button)\n return html`${buttonContainer}`\n}\n\nconst createAddMeToYourContactsButton = async (\n subject: NamedNode,\n context: DataBrowserContext\n): Promise<HTMLButtonElement> => {\n const me = authn.currentUser()\n \n let addressBooksData = null\n let contactData = null\n const store: LiveStore = context.session.store\n const fetcher = store.fetcher\n const updater = store.updater\n const contactsModule = new ContactsModuleRdfLib({ store, fetcher, updater})\n\n try {\n addressBooksData = await getAddressBooksData(context, contactsModule)\n contactData = await getContactData(store, subject) \n } catch (error) {\n addErrorToErrorDisplay(context, error)\n }\n function setButtonHandler(event) {\n event.preventDefault()\n saveNewContact(subject, context, contactsModule, addressBooksData)\n .catch((error) => {\n clearPreviousMessage(buttonContainer)\n complain(buttonContainer, context, error)\n })\n }\n let label = checkIfAnyUserLoggedIn(me) ? addMeToYourContactsButtonText.toUpperCase() : logInAddMeToYourContactsButtonText.toUpperCase()\n const button = widgets.button(\n context.dom,\n undefined,\n label,\n setButtonHandler, //sets an onclick event listener\n {\n needsBorder: true,\n }\n )\n button.setAttribute('id', 'add-to-contacts-button')\n button.refresh = refreshButton()\n \n function refreshButton() {\n if (checkIfAnyUserLoggedIn(me)) {\n const contactExistsByWebID = (contactData) ? checkIfContactExistsByWebID(addressBooksData, contactData.webID) : false\n const contactExistsByName = (contactData) ? checkIfContactExistsByName(addressBooksData, contactData.name) : false\n if (contactExistsByWebID) {\n //logged in and friend exists or friend was just added\n button.innerHTML = contactExistsAlreadyButtonText.toUpperCase()\n button.onclick = null \n button.setAttribute('disabled', 'true')\n } else if (contactExistsByName) {\n button.innerHTML = contactExistsAlreadyByNameButtonText.toUpperCase()\n }\n else {\n //logged in and friend does not exist yet\n button.innerHTML = addMeToYourContactsButtonText.toUpperCase()\n }\n } else {\n //not logged in\n button.innerHTML = logInAddMeToYourContactsButtonText.toUpperCase()\n }\n }\n return button\n}\n\nasync function saveNewContact(\n subject: NamedNode,\n context: DataBrowserContext,\n contactsModule: ContactsModuleRdfLib,\n addressBooksData: AddressBooksData\n): Promise<void> {\n const me = authn.currentUser()\n const store: LiveStore = context.session.store\n\n// need to find out where the user wants to add the Contact\n if (checkIfAnyUserLoggedIn(me)) {\n if (!(checkIfContactExistsByWebID(addressBooksData, subject.value))) {\n //if contact does not exist, we add her/him\n await store.fetcher.load(me)\n try {\n const contactData: ContactData = await getContactData(store, subject) \n const contactExistsByNameUri = checkIfContactExistsByName(addressBooksData, contactData.name)\n if (contactExistsByNameUri) {\n await addWebIDToExistingContact(context, contactsModule, addressBooksData, contactData.webID, contactExistsByNameUri)\n } else {\n await addContactToAddressBook(context, contactsModule, contactData, addressBooksData, buttonContainer)\n }\n } catch (error) {\n let errorMessage = error\n if (errorMessage.toString().includes('Unauthenticated'))\n errorMessage = userNotLoggedInErrorMessage\n throw new Error(errorMessage)\n }\n } \n else throw new Error(contactExistsMessage)\n } else throw new Error(userNotLoggedInErrorMessage)\n}\n\nexport {\n addMeToYourContactsDiv,\n createAddMeToYourContactsButton,\n saveNewContact\n}\n","import { html, TemplateResult } from 'lit-html'\nimport { NamedNode } from 'rdflib'\nimport { utils } from 'solid-ui'\nimport './styles/QRCodeCard.css'\nimport { scanQrToConnectText } from './texts'\n\n\n\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n // Remove leading # if present\n hex = hex.replace(/^#/, '')\n if (hex.length === 3) {\n hex = hex.split('').map(x => x + x).join('')\n }\n if (hex.length !== 6) return null\n const num = parseInt(hex, 16)\n return {\n r: (num >> 16) & 255,\n g: (num >> 8) & 255,\n b: num & 255,\n }\n}\n\nfunction luminance({ r, g, b }: { r: number; g: number; b: number }): number {\n const a = [r, g, b].map(function (v) {\n v /= 255\n return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4)\n })\n return 0.2126 * a[0] + 0.7152 * a[1] + 0.0722 * a[2]\n}\n\nfunction contrastRatio(hex1: string, hex2: string): number {\n const rgb1 = hexToRgb(hex1)\n const rgb2 = hexToRgb(hex2)\n if (!rgb1 || !rgb2) return 1\n const lum1 = luminance(rgb1)\n const lum2 = luminance(rgb2)\n const brightest = Math.max(lum1, lum2)\n const darkest = Math.min(lum1, lum2)\n return (brightest + 0.05) / (darkest + 0.05)\n}\n\nexport const QRCodeCard = (\n highlightColor: string, \n backgroundColor: string,\n subject: NamedNode\n): TemplateResult => {\n const hC = highlightColor || '#000000'\n const bC = backgroundColor || '#ffffff'\n const name = utils.label(subject)\n\n // Color contrast check\n const ratio = contrastRatio(hC, bC)\n if (ratio < 4.5) {\n \n console.warn(\n `QRCodeCard: The contrast ratio between highlightColor (${hC}) and backgroundColor (${bC}) is ${ratio.toFixed(2)}, which is below the WCAG 2.1 recommended minimum of 4.5:1 for normal text.`\n )\n }\n\n const BEGIN = 'BEGIN:VCARD\\r\\n'\n const END = 'END:VCARD\\r\\n'\n const FN = 'FN:' + name + '\\r\\n'\n const URL = 'URL:' + subject.uri + 'r\\n'\n const VERSIONV = 'VERSION:4.0\\r\\n'\n\n // Accessibility check: Ensure QR code is rendered as an accessible image or canvas\n // This assumes the QR code is rendered inside the <div> below by another library or script.\n // If you use a library, ensure it sets role=\"img\" and an appropriate aria-label or alt attribute.\n // If not, warn the developer.\n setTimeout(() => {\n const container = document.querySelector('.QRCode [role=\"img\"]')\n if (container) {\n const hasAriaLabel = container.hasAttribute('aria-label')\n const hasAlt = container.hasAttribute('alt')\n if (!hasAriaLabel && !hasAlt) {\n \n console.warn('QRCodeCard: The QR code element should have an accessible label (aria-label or alt attribute) for screen readers.')\n }\n } else {\n \n console.warn('QRCodeCard: No element with role=\"img\" found for the QR code. Ensure the QR code is rendered as an <img> or <canvas> with proper ARIA attributes.')\n }\n }, 0)\n\n const vCard: string = BEGIN + FN + URL + END + VERSIONV\n\n // console.log(`@@ qrcodes colours highlightColor ${highlightColor}, backgroundColor ${backgroundColor}`)\n \n \n return html`\n <figure \n class=\"QRCode\"\n data-value=\"${vCard}\"\n highlightColor=\"${hC}\"\n backgroundColor=\"${bC}\"\n data-testid=\"qrcode-card\"\n aria-labelledby=\"qr-code-caption\"\n role=\"img\"\n aria-describedby=\"qr-code-description\"\n >\n <div \n aria-label=\"Static QR code containing contact information for ${name}\"\n role=\"img\"\n tabindex=\"0\"\n ></div>\n <figcaption \n id=\"qr-code-caption\" \n class=\"qrCaption\"\n >\n ${scanQrToConnectText}\n </figcaption>\n <div \n id=\"qr-code-description\" \n class=\"sr-only\"\n >\n This is a static QR code containing vCard information for ${name}, including profile URL ${subject.uri}. The QR code is not interactive.\n </div>\n </figure>\n `\n}\n","import { html, nothing } from 'lit-html'\nimport './styles/ProfileCard.css'\nimport { ProfilePresentation } from './presenter'\nimport { addMeToYourFriendsDiv } from './addMeToYourFriends'\nimport { addMeToYourContactsDiv } from './addMeToYourContacts'\nimport { DataBrowserContext } from 'pane-registry'\nimport { NamedNode } from 'rdflib'\nimport { QRCodeCard } from './QRCodeCard'\n\nexport const ProfileCard = async ({\n name, imageSrc, introduction, location, pronouns, highlightColor, backgroundColor\n}: ProfilePresentation, context: DataBrowserContext, subject: NamedNode) => {\n\n return html`\n <article class=\"profileCard\" aria-labelledby=\"profile-name\">\n <h2 id=\"profile-name\" class=\"sr-only\">${name}</h2>\n <header class=\"header flex-column-center mb-md\" aria-label=\"Profile information\">\n ${Image(imageSrc, name)}\n </header>\n \n <section class=\"intro text-center\" aria-label=\"About\">\n ${Line(introduction, '', 'About')}\n ${Line(location, '🌐', 'Location')}\n ${Line(pronouns, '', 'Pronouns')}\n </section>\n \n <section class=\"buttonSection text-center\" aria-label=\"Friend actions\">\n ${addMeToYourFriendsDiv(subject, context)}\n </section>\n\n <section class=\"buttonSection text-center\" aria-label=\"Contact actions\">\n ${await addMeToYourContactsDiv(subject, context)}\n </section>\n\n <div class=\"qrCodeSection section-centered\">\n ${QRCodeCard(highlightColor, backgroundColor, subject)}\n </div>\n </article>\n `\n}\n\nconst Line = (value, prefix: symbol | string = nothing, label: string = '') =>\n value ? html`\n <div class=\"details\" role=\"text\" ${label ? `aria-label=\"${label}: ${value}\"` : ''}>\n ${prefix} ${value}\n </div>\n ` : nothing\n\nconst Image = (src, alt) =>\n src\n ? html`\n <img\n class=\"image\"\n src=${src}\n alt=\"Profile photo of ${alt}\"\n width=\"160\"\n height=\"160\"\n loading=\"eager\"\n />\n `\n : html`\n <div class=\"image-alt\" role=\"img\" aria-label=\"${alt}\" tabindex=\"0\">\n ${alt}\n </div>\n `\n","import { html } from 'lit-html'\nimport { CVPresentation } from './CVPresenter'\nimport './styles/CVCard.css'\n\nexport const CVCard = (\n cvData: CVPresentation\n) => {\n const { rolesByType, skills, languages } = cvData\n\n const futureRolesArr = rolesByType['FutureRole'] || []\n const currentRolesArr = rolesByType['CurrentRole'] || []\n const pastRolesArr = rolesByType['PastRole'] || []\n const skillsArr = skills || []\n const languagesArr = languages || []\n\n const hasFutureRole = Array.isArray(futureRolesArr) && futureRolesArr.length > 0\n const hasCurrentRole = Array.isArray(currentRolesArr) && currentRolesArr.length > 0\n const hasPastRole = Array.isArray(pastRolesArr) && pastRolesArr.length > 0\n const hasSkills = Array.isArray(skillsArr) && skillsArr.length > 0\n const hasLanguages = Array.isArray(languagesArr) && languagesArr.length > 0\n\n if (!(hasFutureRole || hasCurrentRole || hasPastRole || hasSkills || hasLanguages)) return html``\n\n return html`\n <article class=\"cvCard\" aria-label=\"Resume\" data-testid=\"curriculum-vitae\">\n ${hasFutureRole ? html`\n <section class=\"cvSection\" aria-labelledby=\"cv-future-heading\">\n <h3 id=\"cv-future-heading\">Future Roles</h3>\n <ul role=\"list\" aria-label=\"Upcoming work experience\">\n ${renderRoles(futureRolesArr, true)}\n </ul>\n </section>\n ` : ''}\n \n ${hasCurrentRole ? html`\n <section class=\"cvSection\" aria-labelledby=\"cv-current-heading\">\n <h3 id=\"cv-current-heading\">Current Roles</h3>\n <ul role=\"list\" aria-label=\"Current work experience\">\n ${renderRoles(currentRolesArr, true)}\n </ul>\n </section>\n ` : ''}\n \n ${hasPastRole ? html`\n <section class=\"cvSection\" aria-labelledby=\"cv-past-heading\">\n <h3 id=\"cv-past-heading\">Past Roles</h3>\n <ul role=\"list\" aria-label=\"Previous work experience\">\n ${renderRoles(pastRolesArr, true)}\n </ul>\n </section>\n ` : ''}\n \n ${hasSkills ? html`\n <section class=\"cvSection\" aria-labelledby=\"cv-skills-heading\">\n <h3 id=\"cv-skills-heading\">Skills</h3>\n <ul role=\"list\" aria-label=\"Professional skills and competencies\">\n ${renderSkills(skillsArr, true)}\n </ul>\n </section>\n ` : ''}\n \n ${hasLanguages ? html`\n <section class=\"cvSection\" aria-labelledby=\"cv-languages-heading\">\n <h3 id=\"cv-languages-heading\">Languages</h3>\n <ul role=\"list\" aria-label=\"Known languages\">\n ${renderLanguages(languagesArr, true)}\n </ul>\n </section>\n ` : ''}\n </article>\n `\n}\n\nfunction renderRole(role, asList = false) {\n if (!role) return html``\n return asList\n ? html`\n <li class=\"cvRole\" role=\"listitem\">\n <strong class=\"cvOrg\" aria-label=\"Organization\">${role.orgName}</strong>\n <span aria-label=\"Role title\">${strToUpperCase(role.roleText)}</span>\n <time aria-label=\"Employment period\">${role.dates}</time>\n </li>`\n : html``\n}\n\nfunction renderRoles(roles, asList = false) {\n if (!roles || !roles.length || !roles[0]) return html``\n return html`${renderRole(roles[0], asList)}${roles.length > 1 ? renderRoles(roles.slice(1), asList) : html``}`\n}\n\nfunction renderSkill(skill, asList = false) {\n if (!skill) return html``\n return asList\n ? html`<li class=\"cvSkill\">${strToUpperCase(skill)}</li>`\n : html``\n}\n\nfunction renderSkills(skills, asList = false) {\n if (!skills || !skills.length || !skills[0]) return html``\n return html`${renderSkill(skills[0], asList)}${skills.length > 1 ? renderSkills(skills.slice(1), asList) : html``}`\n}\n\nfunction renderLan(language, asList = false) {\n if (!language) return html``\n return asList\n ? html`<li class=\"cvLanguage\">${language}</li>`\n : html``\n}\n\nfunction renderLanguages(languages, asList = false) {\n if (!languages || !languages.length || !languages[0]) return html``\n return html`${renderLan(languages[0], asList)}${languages.length > 1 ? renderLanguages(languages.slice(1), asList) : html``}`\n}\n\nfunction strToUpperCase(str) {\n if (str && str[0] > '') {\n const strCase = str.split(' ')\n for (let i = 0; i < strCase.length; i++) {\n strCase[i] = strCase[i].charAt(0).toUpperCase() +\n strCase[i].substring(1)\n }\n return strCase.join(' ')\n }\n return ''\n}\n","import { html, TemplateResult } from 'lit-html'\nimport { SocialPresentation } from './SocialPresenter'\nimport './styles/SocialCard.css'\n\n\nexport const SocialCard = (\n SocialData: SocialPresentation\n): TemplateResult => {\n \n const { accounts } = SocialData\n\n if(accounts.length){\n\n return html`\n <section\n class=\"socialCard\"\n aria-labelledby=\"social-card-title\"\n data-testid=\"social-media\"\n >\n <nav aria-label=\"Social media profiles\">\n <ul class=\"socialList list-reset\" role=\"list\">\n ${accounts.map(account => renderAccount(account))}\n </ul>\n </nav>\n </section>\n `\n }\n\n function renderAccount(account) {\n return account.homepage && account.name && account.icon\n ? html`\n <li class=\"socialItem\" role=\"listitem\">\n <a \n href=\"${account.homepage}\" \n target=\"_blank\" \n rel=\"noopener noreferrer\" \n aria-label=\"Visit ${account.name} profile (opens in new tab)\"\n >\n <img \n class=\"socialIcon\" \n src=\"${account.icon}\" \n alt=\"${account.name} icon\"\n width=\"40\"\n height=\"40\"\n loading=\"lazy\"\n />\n <span class=\"text-wrap-anywhere\">${account.name}</span>\n </a>\n </li>\n `\n : html``\n }\n\n}\n","import { html, TemplateResult } from 'lit-html'\nimport { NamedNode } from 'rdflib'\nimport { DataBrowserContext } from 'pane-registry'\nimport { widgets } from 'solid-ui'\nimport './styles/StuffCard.css'\nimport { ProfilePresentation } from './presenter'\n\n\nexport const StuffCard = (profileBasics: ProfilePresentation,\n context: DataBrowserContext,\n subject: NamedNode, stuffData): TemplateResult => {\n const { stuff } = stuffData\n const dom = context.dom || document\n return html`\n <section\n class=\"stuffCard\"\n aria-labelledby=\"stuff-card-title\"\n role=\"region\"\n data-testid=\"stuff\"\n >\n <header>\n <h3 id=\"stuff-card-title\" class=\"sr-only\">Shared Resources</h3>\n </header>\n <div>\n <table class=\"stuffTable\" data-testid=\"stuffTable\">\n <caption class=\"sr-only\">Files and resources shared by ${profileBasics.name}</caption>\n <tbody class=\"zebra-stripe\">\n ${renderThings(stuff, dom)}\n </tbody>\n </table>\n </div>\n </section>\n `\n}\n\nexport function renderThingAsDOM (thing, dom) {\n const options = {}\n // widgets.personTR returns a DOM node, so we need to convert it to HTML string\n const row = widgets.personTR(dom, null, thing.instance, options)\n return row\n}\n\nexport function renderThing (thing, dom) {\n return renderThingAsDOM(thing, dom)\n}\n\nexport function renderThings(things, dom) {\n if (things.length === 0) return html``\n return html`${renderThing(things[0], dom)}${things.length > 1 ? renderThings(things.slice(1), dom) : html``}`\n}","import { html, TemplateResult } from 'lit-html'\nimport { DataBrowserContext } from 'pane-registry'\nimport { NamedNode, LiveStore } from 'rdflib'\nimport './styles/ProfileView.css'\nimport { ChatWithMe } from './ChatWithMe'\nimport { FriendList } from './FriendList'\nimport { presentProfile } from './presenter'\nimport { presentCV } from './CVPresenter' // 20210527\nimport { presentSocial } from './SocialPresenter' // 20210527\nimport { presentStuff } from './StuffPresenter' // 20210527\nimport { ProfileCard } from './ProfileCard'\nimport { CVCard } from './CVCard'\nimport { SocialCard } from './SocialCard'\nimport { StuffCard } from './StuffCard'\nimport {\n resumeHeadingText,\n socialAccountsHeadingText,\n sharedItemsHeadingText,\n friendsHeadingText,\n contactHeadingText\n} from './texts'\n\n// The edit button switches to the editor pane\n/*\nfunction renderEditButton (subject) {\n return \n authn.currentUser() && authn.currentUser().sameTerm(subject) ?\n html `<button type=\"button\" class=\"ProfilePaneCVEditButton\">\n <img src=\"${editButtonURI}\">\n Edit</button>`\n : html``;\n}\n*/\n\nexport async function ProfileView (\n subject: NamedNode,\n context: DataBrowserContext\n): Promise <TemplateResult> {\n const store = context.session.store as LiveStore\n \n const profileBasics = presentProfile(subject, store)\n const rolesByType = presentCV(subject, store)\n const accounts = presentSocial(subject, store)\n const stuffData = await presentStuff(subject)\n\n return html` \n <main\n id=\"main-content\"\n class=\"profile-grid\"\n style=\"--profile-grid-bg: radial-gradient(circle, ${profileBasics.backgroundColor} 80%, ${profileBasics.highlightColor} 100%)\"\n role=\"main\"\n aria-label=\"Profile for ${profileBasics.name}\"\n tabindex=\"-1\"\n > \n\n <article \n aria-labelledby=\"profile-card-heading\" \n class=\"profileSection section-bg\" \n role=\"region\"\n tabindex=\"-1\"\n >\n <header class=\"text-center mb-md\">\n <h2 id=\"profile-card-heading\" tabindex=\"-1\">${profileBasics.name}</h2>\n </header>\n ${await ProfileCard(profileBasics, context, subject)}\n </article>\n\n ${(() => {\n const cv = CVCard(rolesByType)\n return cv && cv.strings && cv.strings.join('').trim() !== '' ? html`\n <section \n aria-labelledby=\"cv-heading\" \n class=\"profileSection section-bg\" \n role=\"region\"\n tabindex=\"-1\"\n >\n <header class=\"text-center mb-md\">\n <h2 id=\"cv-heading\" tabindex=\"-1\">${resumeHeadingText}</h2>\n </header>\n <div>\n ${cv}\n </div>\n </section>\n ` : ''\n })()}\n\n ${accounts.accounts && accounts.accounts.length > 0 ? html`\n <aside \n aria-labelledby=\"social-heading\" \n class=\"profileSection section-bg\" \n role=\"complementary\"\n tabindex=\"-1\"\n >\n <header class=\"text-center mb-md\">\n <h2 id=\"social-heading\" tabindex=\"-1\">${socialAccountsHeadingText}</h2>\n </header>\n <nav aria-label=\"Social media links\">\n ${SocialCard(accounts)}\n </nav>\n </aside>\n ` : ''}\n\n ${stuffData.stuff && stuffData.stuff.length > 0 ? html`\n <section \n aria-labelledby=\"stuff-heading\" \n class=\"profileSection section-bg\" \n role=\"region\"\n tabindex=\"-1\"\n >\n <header class=\"text-center mb-md\">\n <h2 id=\"stuff-heading\" tabindex=\"-1\">${sharedItemsHeadingText}</h2>\n </header>\n <div>\n ${StuffCard(profileBasics, context, subject, stuffData)}\n </div>\n </section>\n ` : ''}\n\n ${(() => {\n const friends = FriendList(subject, context)\n return friends ? html`\n <aside \n aria-labelledby=\"friends-heading\" \n class=\"profileSection section-bg\" \n role=\"complementary\"\n tabindex=\"-1\"\n >\n <header class=\"text-center mb-md\">\n <h2 id=\"friends-heading\" tabindex=\"-1\">${friendsHeadingText}</h2>\n </header>\n <div role=\"list\" aria-label=\"Friend connections\">\n ${friends}\n </div>\n </aside>\n ` : ''\n })()}\n\n <section \n aria-labelledby=\"chat-heading\" \n class=\"profileSection section-bg\" \n role=\"region\"\n tabindex=\"-1\"\n >\n <header class=\"text-center mb-md\">\n <h2 id=\"chat-heading\" tabindex=\"-1\">${contactHeadingText}</h2>\n </header>\n <div>\n ${ChatWithMe(subject, context)}\n </div>\n </section>\n </main>\n `\n}\n","import { DataBrowserContext } from 'pane-registry'\nimport { NamedNode } from 'rdflib'\nimport { yourContactInformationHeading } from '../texts'\n\nexport function EditContactsSection(context: DataBrowserContext, me: NamedNode): HTMLElement {\n const section = context.dom.createElement('section')\n section.setAttribute('aria-labelledby', 'edit-profile-contact-heading')\n section.classList.add('profileSection', 'section-bg', 'profile-form')\n\n const header = context.dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n const heading = context.dom.createElement('h2')\n heading.id = 'edit-profile-contact-heading'\n heading.classList.add('section-title')\n heading.textContent = yourContactInformationHeading\n header.appendChild(heading)\n section.appendChild(header)\n\n section.appendChild(paneDiv(context, me, 'contact'))\n\n return section\n}\n\nfunction paneDiv (\n context: DataBrowserContext, \n subject: NamedNode,\n paneName: string\n): HTMLElement {\n const view = context.session.paneRegistry.byName(paneName)\n if (!view) {\n const warning = context.dom.createElement('div')\n warning.innerText = `Unable to load view: ${paneName}`\n return warning\n }\n const viewContainer = view.render(subject, context)\n \n // Handle different node types\n let container: HTMLElement\n \n if (viewContainer && typeof viewContainer.setAttribute === 'function') {\n // It's already an Element node\n container = viewContainer as HTMLElement\n } else if (viewContainer && viewContainer.nodeType === Node.TEXT_NODE) {\n // It's a Text node, wrap it in a section for semantics\n container = context.dom.createElement('section')\n container.appendChild(viewContainer)\n } else {\n // Fallback for other cases\n container = context.dom.createElement('section')\n container.innerText = `View render did not return a valid Node for: ${paneName}`\n }\n\n container.setAttribute('role', 'region')\n container.setAttribute('aria-label', `${paneName} section`)\n return container\n}\n","import { DataBrowserContext } from 'pane-registry'\nimport { NamedNode } from 'rdflib'\nimport { ns, widgets } from 'solid-ui'\nimport { friendsHeadingText } from '../texts'\n\nexport function EditFriendsSection(context: DataBrowserContext, me: NamedNode, editableProfile: NamedNode | null, profile: NamedNode) {\n const section = context.dom.createElement('section')\n section.setAttribute('aria-labelledby', 'edit-profile-friends-heading')\n section.classList.add('profileSection', 'section-bg')\n\n const header = context.dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n\n const heading = context.dom.createElement('h2')\n heading.id = 'edit-profile-friends-heading'\n heading.classList.add('section-title')\n heading.textContent = friendsHeadingText\n\n header.appendChild(heading)\n section.appendChild(header)\n\n const comment1 = context.dom.createElement('p')\n comment1.id = 'edit-profile-friends-description'\n comment1.classList.add('p-md')\n comment1.textContent = 'This is your public social network. Only put people here to whom you are happy to be publicly connected. (You can always keep private track of friends and family in your contacts.)'\n section.appendChild(comment1)\n\n let comment2: HTMLParagraphElement | null = null\n if (editableProfile) {\n comment2 = context.dom.createElement('p')\n comment2.id = 'edit-profile-friends-help'\n comment2.classList.add('p-md')\n comment2.textContent = 'Drag people onto the target below to add people.'\n section.appendChild(comment2)\n }\n\n const attachmentList = widgets.attachmentList(context.dom, me, section, {\n doc: profile,\n modify: !!editableProfile,\n predicate: ns.foaf('knows'),\n noun: 'friend'\n })\n\n const descriptions = [comment1.id]\n if (comment2?.id) {\n descriptions.push(comment2.id)\n }\n attachmentList.setAttribute('aria-describedby', descriptions.join(' '))\n section.appendChild(attachmentList)\n\n return section\n}\n","import { DataBrowserContext } from 'pane-registry'\nimport { NamedNode, Store} from 'rdflib'\nimport socialMediaForm from '../ontology/socialMedia.ttl'\nimport renderForm from '../rdfFormsHelper'\nimport { socialAccountsHeadingText } from '../texts'\n\nconst socialMediaFormName = 'socialMedia.ttl' // The name of the form file\n\nexport function EditSocialSection(context: DataBrowserContext, me: NamedNode, editableProfile: NamedNode | null, store: Store) {\n const section = context.dom.createElement('section')\n section.setAttribute('data-testid', 'edit-social-section')\n section.setAttribute('aria-labelledby', 'edit-profile-social-heading')\n section.classList.add('profileSection', 'section-bg', 'profile-form')\n\n const header = context.dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n\n const heading = context.dom.createElement('h2')\n heading.id = 'edit-profile-social-heading'\n heading.classList.add('section-title')\n heading.textContent = socialAccountsHeadingText\n\n header.appendChild(heading)\n section.appendChild(header)\n\n if (editableProfile) {\n const comment2 = context.dom.createElement('p')\n comment2.classList.add('p-md')\n comment2.textContent = 'Add links to your social media accounts here. These will be publicly visible on your profile.'\n section.appendChild(comment2)\n } else {\n const comment1 = context.dom.createElement('p')\n comment1.classList.add('p-md')\n comment1.textContent = 'Login to add social media accounts to your profile.'\n section.appendChild(comment1)\n }\n\n renderForm(section, me, socialMediaForm, socialMediaFormName, store, context.dom, editableProfile)\n\n return section\n}\n","import { DataBrowserContext } from 'pane-registry'\nimport { NamedNode } from 'rdflib'\nimport { ns, widgets } from 'solid-ui'\nimport { communitiesHeadingText } from '../texts'\n\nexport function EditProfileCommunitiesSection(context: DataBrowserContext, me: NamedNode, editableProfile: NamedNode | null, profile: NamedNode) {\n const section = context.dom.createElement('section')\n section.setAttribute('aria-labelledby', 'edit-profile-communities-heading')\n section.classList.add('profileSection', 'section-bg')\n\n const header = context.dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n\n const heading = context.dom.createElement('h2')\n heading.id = 'edit-profile-communities-heading'\n heading.classList.add('section-title')\n heading.textContent = communitiesHeadingText\n header.appendChild(heading)\n section.appendChild(header)\n\n const comment1 = context.dom.createElement('p')\n comment1.id = 'edit-profile-communities-description'\n comment1.classList.add('p-md')\n comment1.textContent = 'These are organizations and projects whose stuff you share'\n section.appendChild(comment1)\n\n let comment2: HTMLParagraphElement | null = null\n if (editableProfile) {\n comment2 = context.dom.createElement('p')\n comment2.id = 'edit-profile-communities-help'\n comment2.classList.add('p-md')\n comment2.textContent = 'Drag organizations onto the target below to add organizations.'\n section.appendChild(comment2)\n }\n\n const attachmentList = widgets.attachmentList(context.dom, me, section, {\n doc: profile,\n modify: !!editableProfile,\n predicate: ns.solid('community'),\n noun: 'community'\n })\n\n const descriptions = [comment1.id]\n if (comment2?.id) {\n descriptions.push(comment2.id)\n }\n attachmentList.setAttribute('aria-describedby', descriptions.join(' '))\n section.appendChild(attachmentList)\n\n return section\n}\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./rdfFormsEnforced.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./rdfFormsEnforced.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { DataBrowserContext } from 'pane-registry'\nimport { NamedNode, Store} from 'rdflib'\nimport resumeForm from '../ontology/resumeForm.ttl'\nimport renderForm from '../rdfFormsHelper'\nimport { resumeHeadingText } from '../texts'\n\nconst resumeFormName = 'resumeForm.ttl' // The name of the form file\n\nexport function EditCVSection(context: DataBrowserContext, me: NamedNode, editableProfile: NamedNode | null, store: Store) {\n const section = context.dom.createElement('section')\n section.setAttribute('data-testid', 'edit-cv-section')\n section.setAttribute('aria-labelledby', 'edit-profile-cv-heading')\n section.classList.add('profileSection', 'section-bg', 'profile-form')\n\n const header = context.dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n\n const heading = context.dom.createElement('h2')\n heading.id = 'edit-profile-cv-heading'\n heading.classList.add('section-title')\n heading.textContent = resumeHeadingText\n\n header.appendChild(heading)\n section.appendChild(header)\n\n if (editableProfile) {\n const comment2 = context.dom.createElement('p')\n comment2.classList.add('p-md')\n comment2.textContent = 'Edit your resume. These will be publicly visible on your profile.'\n section.appendChild(comment2)\n } else {\n const comment1 = context.dom.createElement('p')\n comment1.classList.add('p-md')\n comment1.textContent = 'Login to add resume information to your profile.'\n section.appendChild(comment1)\n }\n\n renderForm(section, me, resumeForm, resumeFormName, store, context.dom, editableProfile)\n\n return section\n}\n","import { DataBrowserContext } from 'pane-registry'\nimport { NamedNode, Store} from 'rdflib'\nimport otherPreferencesForm from '../ontology/otherPreferencesForm.ttl'\nimport renderForm from '../rdfFormsHelper'\nimport { otherPreferencesHeadingText } from '../texts'\n\nconst otherPreferencesFormName = 'otherPreferencesForm.ttl' // The name of the form file\n\nexport function EditOtherPreferencesSection(context: DataBrowserContext, me: NamedNode, editableProfile: NamedNode | null, store: Store) {\n const section = context.dom.createElement('section')\n section.setAttribute('data-testid', 'edit-other-preferences-section')\n section.setAttribute('aria-labelledby', 'edit-profile-other-preferences-heading')\n section.classList.add('profileSection', 'section-bg', 'profile-form')\n\n const header = context.dom.createElement('header')\n header.classList.add('text-center', 'mb-md')\n\n const heading = context.dom.createElement('h2')\n heading.id = 'edit-profile-other-preferences-heading'\n heading.classList.add('section-title')\n heading.textContent = otherPreferencesHeadingText\n\n header.appendChild(heading)\n section.appendChild(header)\n\n renderForm(section, me, otherPreferencesForm, otherPreferencesFormName, store, context.dom, editableProfile)\n\n return section\n}\n","/**\n * Profile Editing App Pane\n *\n * Unlike view panes, this is available any place whatever the real subject,\n * and allows the user to edit their own profile.\n *\n * Usage: paneRegistry.register('/profile/editProfile.view')\n * or standalone script adding onto existing mashlib.\n */\n\nimport { PaneDefinition } from 'pane-registry'\nimport { NamedNode, Store } from 'rdflib'\nimport { icons, login, ns, widgets } from 'solid-ui'\nimport { EditContactsSection } from './EditContactsCard'\nimport { EditFriendsSection } from './EditFriendsCard'\nimport { EditSocialSection } from './EditSocialCard'\nimport { EditProfileCommunitiesSection } from './EditCommunitiesCard'\nimport '../styles/utilities.css'\nimport '../styles/rdfFormsEnforced.css'\nimport { EditCVSection } from './EditCVCard'\nimport { EditOtherPreferencesSection } from './EditOtherPreferences'\n\nconst editProfileView: PaneDefinition = {\n global: true,\n\n icon: icons.iconBase + 'noun_492246.svg',\n\n name: 'editProfile',\n\n label: () => null, // don't use this in the normal solid-panes dispatching\n\n render: function (subject, context) {\n //console.log('@@@ render edit profile pane: subject, context', subject, context)\n const dom = context.dom\n const store = context.session.store as Store\n\n // Use <section> as the main container for better semantics\n const div = dom.createElement('section')\n div.setAttribute('data-testid', 'profile-editor')\n div.setAttribute('role', 'region')\n div.setAttribute('aria-label', 'Edit your profile')\n let editableProfile: NamedNode | null\n\n // Use <main> for the main content area, styled as a grid like ProfileView\n const main = dom.createElement('main')\n main.setAttribute('id', 'profile-edit-main-content')\n main.setAttribute('aria-busy', 'true')\n main.setAttribute('tabindex', '-1')\n main.classList.add('profile-grid', 'no-focus-ring')\n const mainHeading = dom.createElement('h1')\n mainHeading.classList.add('visually-hidden')\n mainHeading.textContent = 'Edit Profile'\n main.appendChild(mainHeading)\n div.appendChild(main)\n\n // Use <aside> for the status area\n const statusArea = dom.createElement('aside')\n statusArea.classList.add('p-sm')\n statusArea.setAttribute('role', 'status')\n statusArea.setAttribute('aria-live', 'polite')\n statusArea.setAttribute('aria-atomic', 'true')\n const ensureStatusArea = () => {\n if (!statusArea.isConnected) {\n div.appendChild(statusArea)\n }\n }\n\n const profileContext = {\n dom: dom,\n div: main,\n statusArea: statusArea,\n me: null\n }\n\n login.ensureLoadedProfile(profileContext)\n .then(theContext => {\n const me = theContext.me!\n\n const profile = me.doc()\n if (!store.updater) {\n throw new Error('Store has no updater')\n }\n if (store.any(me, ns.solid('editableProfile'))) {\n editableProfile = store.any(me, ns.solid('editableProfile')) as NamedNode\n } else if (store.updater.editable(profile.uri, store)) {\n editableProfile = profile\n } else {\n ensureStatusArea()\n statusArea.appendChild(widgets.errorMessageBlock(dom, `⚠️ Your profile ${profile} is not editable, so we cannot do much here.`, 'straw'))\n return\n }\n\n // Render each section as a card with consistent classes\n // Your contact information Section\n main.appendChild(EditContactsSection(context, me))\n\n // Resume Section\n main.appendChild(EditCVSection(context, me, editableProfile, store))\n\n // Social Accounts Section\n main.appendChild(EditSocialSection(context, me, editableProfile, store))\n\n \n // Other preferences Section\n main.appendChild(EditOtherPreferencesSection(context, me, editableProfile, store))\n \n // People you know Section\n main.appendChild(EditFriendsSection(context, me, editableProfile, profile))\n \n // Communities you participate in Section\n main.appendChild(EditProfileCommunitiesSection(context, me, editableProfile, profile))\n\n main.setAttribute('aria-busy', 'false')\n main.focus()\n \n }).catch(error => {\n ensureStatusArea()\n statusArea.appendChild(widgets.errorMessageBlock(dom, error, '#fee'))\n main.setAttribute('aria-busy', 'false')\n })\n return div\n }\n}\n\nexport default editProfileView\n","import { DataBrowserContext } from 'pane-registry'\nimport './styles/CVCard.css'\nimport './styles/ChatWithMe.css'\nimport './styles/FriendList.css'\nimport './styles/ProfileCard.css'\nimport './styles/ProfileView.css'\nimport './styles/QRCodeCard.css'\nimport './styles/SocialCard.css'\nimport './styles/StuffCard.css'\nimport './styles/utilities.css'\nimport { NamedNode, LiveStore } from 'rdflib'\nimport { render } from 'lit-html'\nimport { ProfileView } from './ProfileView'\nimport editProfileView from './editProfilePane/EditProfileView'\nimport { icons, ns } from 'solid-ui'\nimport * as qrcode from 'qrcode'\n\nasync function loadExtendedProfile(store: LiveStore, subject: NamedNode) {\n const otherProfiles = store.each(\n subject,\n ns.rdfs('seeAlso'),\n null,\n subject.doc()\n ) as Array<NamedNode>\n if (otherProfiles.length > 0) {\n await store.fetcher.load(otherProfiles)\n }\n}\n\n\nconst Pane = {\n global: false,\n icon: icons.iconBase + 'noun_15059.svg',\n name: 'profile',\n label: function (\n subject: NamedNode,\n context: DataBrowserContext\n ): string | null {\n const t = context.session.store.findTypeURIs(subject)\n \n if (\n t[ns.vcard('Individual').uri] ||\n t[ns.foaf('Person').uri] ||\n t[ns.schema('Person').uri]\n ) {\n return 'Profile'\n }\n return null\n },\n editor: editProfileView, \n render: (subject: NamedNode, context: DataBrowserContext): HTMLElement => {\n const target = context.dom.createElement('div')\n const store = context.session.store\n\n loadExtendedProfile(store, subject).then(async () => {\n render(await ProfileView(subject, context), target)\n const QRCodeEles = Array.from(target.getElementsByClassName('QRCode')) // was context.dom\n if (!QRCodeEles.length) return console.error('QRCode Ele missing')\n for (const QRCodeElement of QRCodeEles as HTMLElement[]) {\n const value = QRCodeElement.getAttribute('data-value')\n if (!value) return console.error('QRCode data-value missing')\n const highlightColor = QRCodeElement.getAttribute('highlightColor') || '#000000'\n const backgroundColor = QRCodeElement.getAttribute('backgroundColor') || '#ffffff'\n // console.log(`@@ qrcodes2 colours highlightColor ${highlightColor}, backgroundColor ${backgroundColor}`)\n\n const options = {\n type: 'svg',\n color: {\n dark: highlightColor,\n light: backgroundColor\n }\n }\n\n qrcode.toString(value, options, function (error, svg) {\n if (error) {\n console.error('QRcode error!', error)\n } else {\n // console.log('QRcode success.', svg);\n QRCodeElement.innerHTML = svg\n QRCodeElement.style.width = '80%'\n QRCodeElement.style.height = '80%'\n QRCodeElement.style.margin = '10%'\n }\n })\n\n }\n })\n\n return target\n },\n}\n\nexport default Pane\n"],"names":[],"sourceRoot":""}