@charcoal-ui/icons 1.0.1-alpha.2 → 1.0.1-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -88,3 +88,58 @@ export const Icon: React.FC<Props> = ({ className, ...props }) => (
88
88
  <pixiv-icon class={className} {...props} />
89
89
  )
90
90
  ```
91
+
92
+ ### Next.js と組み合わせる場合
93
+
94
+ Next.js のデフォルトの webpack 設定では svg が正しく import されないことがあります。
95
+
96
+ 少なくとも `@charcoal-ui/icons` 以下の svg については `type: 'asset'` で読むようにしてください。
97
+
98
+ ```js
99
+ /** @type {import('next').NextConfig} */
100
+ const nextConfig = {
101
+ webpack(config) {
102
+ config.module.rules.push({
103
+ test: /\.svg$/u,
104
+ type: 'asset',
105
+ })
106
+
107
+ return config
108
+ },
109
+ }
110
+ ```
111
+
112
+ ### Vite と組み合わせる場合
113
+
114
+ `@charcoal-ui/icons` は内部で SVG を dynamic import しています。
115
+
116
+ Vite はデフォルトで dynamic import をサポートしますが、`node_modules` 以下のファイルは `import()` の対象外にする設定がされているため、ここを変更する必要があります。
117
+
118
+ ```ts
119
+ // vite.config.ts
120
+ export default defineConfig({
121
+ plugins: [react(), charcoalIcons()],
122
+ })
123
+
124
+ function charcoalIcons(): PluginOption {
125
+ return {
126
+ name: 'charcoal-icons',
127
+ config() {
128
+ return {
129
+ optimizeDeps: {
130
+ // 開発環境の Pre-bundling で壊れる
131
+ // https://vitejs.dev/guide/dep-pre-bundling.html#the-why
132
+ exclude: ['@charcoal-ui/icons'],
133
+ },
134
+ build: {
135
+ rollupOptions: {
136
+ // dynamicImport がビルド時に解決されない
137
+ // https://vitejs.dev/config/#build-dynamicimportvarsoptions
138
+ plugins: [dynamicImport()],
139
+ },
140
+ },
141
+ }
142
+ },
143
+ }
144
+ }
145
+ ```
@@ -3,7 +3,7 @@ import { KnownIconFile } from './filenames';
3
3
  import { BaseElement } from './ssr';
4
4
  export interface KnownIconType extends Record<KnownIconFile, unknown> {
5
5
  }
6
- export interface Props extends Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, 'className'> {
6
+ export interface Props extends Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, 'className' | 'css'> {
7
7
  name: keyof KnownIconType;
8
8
  scale?: 1 | 2 | 3 | '1' | '2' | '3';
9
9
  'unsafe-non-guideline-scale'?: number | string;
@@ -1 +1 @@
1
- {"version":3,"file":"PixivIcon.d.ts","sourceRoot":"","sources":["../src/PixivIcon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAE,WAAW,EAAc,MAAM,OAAO,CAAA;AAS/C,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC;CAAG;AAExE,MAAM,WAAW,KACf,SAAQ,IAAI,CACV,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,EACvE,WAAW,CACZ;IACD,IAAI,EAAE,MAAM,aAAa,CAAA;IACzB,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;IACnC,4BAA4B,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAI9C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAID,aAAK,gBAAgB,GAAG,OAAO,CAAC,MAAM,aAAa,EAAE,aAAa,CAAC,CAAA;AACnE,aAAK,QAAQ,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,GAC9C,KAAK,GACL,IAAI,CAAA;AAER,qBAAa,SAAU,SAAQ,WAAW;IACxC,MAAM,CAAC,QAAQ,CAAC,OAAO,gBAAe;IAEtC,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,QAAQ,SAAS,IAAI,GACtB,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAoB5B,MAAM,KAAK,kBAAkB,6DAE5B;IAED,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,CAAsB;IAEvC,IAAI,KAAK;;;;MAqBR;IAED,IAAI,gBAAgB,kBAiBnB;IAED,IAAI,UAAU,WA0Bb;;IAOD,iBAAiB;IAKjB,oBAAoB;IAKpB,wBAAwB;IAIxB,MAAM;IA6BN,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,gBAAgB;CAgBzB"}
1
+ {"version":3,"file":"PixivIcon.d.ts","sourceRoot":"","sources":["../src/PixivIcon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAE,WAAW,EAAc,MAAM,OAAO,CAAA;AAS/C,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC;CAAG;AAExE,MAAM,WAAW,KACf,SAAQ,IAAI,CACV,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,EACvE,WAAW,GAAG,KAAK,CACpB;IACD,IAAI,EAAE,MAAM,aAAa,CAAA;IACzB,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;IACnC,4BAA4B,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAI9C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAID,aAAK,gBAAgB,GAAG,OAAO,CAAC,MAAM,aAAa,EAAE,aAAa,CAAC,CAAA;AACnE,aAAK,QAAQ,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,GAC9C,KAAK,GACL,IAAI,CAAA;AAER,qBAAa,SAAU,SAAQ,WAAW;IACxC,MAAM,CAAC,QAAQ,CAAC,OAAO,gBAAe;IAEtC,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,QAAQ,SAAS,IAAI,GACtB,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAoB5B,MAAM,KAAK,kBAAkB,6DAE5B;IAED,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,CAAsB;IAEvC,IAAI,KAAK;;;;MAqBR;IAED,IAAI,gBAAgB,kBAiBnB;IAED,IAAI,UAAU,WA0Bb;;IAOD,iBAAiB;IAKjB,oBAAoB;IAKpB,wBAAwB;IAIxB,MAAM;IA6BN,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,gBAAgB;CAgBzB"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var e=require("warning"),t=require("dompurify");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function r(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}}),t.default=e,t}var o=/*#__PURE__*/n(e);function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function u(){return u=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u.apply(this,arguments)}function c(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,a(e,t)}function s(e){return s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},s(e)}function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}function l(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function f(e,t,n){return f=l()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&a(o,n.prototype),o},f.apply(null,arguments)}function p(e){var t="function"==typeof Map?new Map:void 0;return p=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return f(e,arguments,s(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),a(n,e)},p(e)}var v=new Map,d=/*#__PURE__*/function(e){function t(n){var r;return r=e.call(this,n)||this,Object.setPrototypeOf(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r),this instanceof t?this.constructor:void 0),r}return c(t,e),t}(/*#__PURE__*/p(Error));function h(e){return function(t){try{return v.has(t)?Promise.resolve(v.get(t)):Promise.resolve(e(t).then(function(e){return fetch(e)}).then(function(e){if(!e.ok)throw new d('Failed to fetch <pixiv-icon name="'+t+'">');return e.text()})).then(function(e){return v.set(t,e),e})}catch(e){return Promise.reject(e)}}}var m={loadFromRawUrl:h(function(e){return Promise.resolve(e)}),loadFromFile:h(function(e){try{var t=e.split("/"),n=t[1];return Promise.resolve((o="../svg/"+encodeURIComponent(t[0])+"/"+encodeURIComponent(n)+".svg",Promise.resolve().then(function(){/*#__PURE__*/return r(require(o))}))).then(function(e){return e.default})}catch(e){return Promise.reject(e)}var o})},b="undefined"==typeof window,y="undefined"!=typeof HTMLElement,g=!b&&y?HTMLElement:/*#__PURE__*/function(){return function(){}}(),w=m.loadFromFile,O=m.loadFromRawUrl,P=["name","scale","unsafe-non-guideline-scale"],j=new Map,x=/*#__PURE__*/function(e){function n(){var t;return(t=e.call(this)||this).svgContent=void 0,t.observer=void 0,t.attachShadow({mode:"open"}),t}c(n,e),n.extend=function(e){o.default(!b,"Using `PixivIcon.extend()` on server has no effect"),b||Object.entries(e).forEach(function(e){var t=e[0],n=e[1];if(!t.includes("/"))throw new TypeError(t+' is not a valid icon name. "name" must be named like [size]/[Name].');j.set(t,function(){return O(n)})})};var r,s,a,l=n.prototype;return l.connectedCallback=function(){this.render(),this.update()},l.disconnectedCallback=function(){var e;null==(e=this.observer)||e.disconnect(),this.observer=void 0},l.attributeChangedCallback=function(){this.update()},l.render=function(){var e,n=null!=(e=this.forceResizedSize)?e:this.scaledSize,r=t.sanitize("<style>\n :host {\n display: inline-flex;\n --size: "+n+"px;\n }\n\n svg {\n width: var(--size);\n height: var(--size);\n }\n</style>",{ALLOWED_TAGS:["style"],FORCE_BODY:!0}),o=t.sanitize(void 0!==this.svgContent?this.svgContent:'<svg viewBox="0 0 '+n+" "+n+'"></svg>',{USE_PROFILES:{svg:!0,svgFilters:!0}});this.shadowRoot.innerHTML=r+o},l.update=function(){var e=this;this.waitUntilVisible().then(function(){try{var t,n=e.props.name,r=null!=(t=j.get(n))?t:w;return Promise.resolve(r(n)).then(function(t){e.svgContent=t,e.render()})}catch(e){return Promise.reject(e)}})},l.waitUntilVisible=function(){var e=this;return new Promise(function(t){e.observer=new IntersectionObserver(function(n){var r;n[0].isIntersecting&&(null==(r=e.observer)||r.disconnect(),e.observer=void 0,t())},{rootMargin:"50px"}),e.observer.observe(e)})},r=n,a=[{key:"observedAttributes",get:function(){return P}}],(s=[{key:"props",get:function(){var e=this,t=Object.fromEntries(P.map(function(t){return[t,e.getAttribute(t)]})),n=t.name;if(null===n)throw new TypeError('property "name" is required.');if(!n.includes("/"))throw new TypeError(n+' is not a valid icon name. "name" must be named like [size]/[Name].');return u({},t,{name:n})}},{key:"forceResizedSize",get:function(){if(null===this.props["unsafe-non-guideline-scale"])return null;var e=this.props.name.split("/")[0],t=Number(this.props["unsafe-non-guideline-scale"]);return"Inline"===e?16*t:Number(e)*t}},{key:"scaledSize",get:function(){var e,t=this.props.name.split("/")[0],n=Number(null!=(e=this.props.scale)?e:"1");switch(t){case"Inline":return 2===n?32:16;case"24":return Number(t)*n;default:return Number(t)}}}])&&i(r.prototype,s),a&&i(r,a),Object.defineProperty(r,"prototype",{writable:!1}),n}(g);x.tagName="pixiv-icon",b||window.customElements.get(x.tagName)||(window.PixivIcon=x,window.customElements.define(x.tagName,x)),exports.PixivIcon=x,exports.PixivIconLoadError=d;
1
+ var e=require("warning"),n=require("dompurify");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function r(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach(function(t){if("default"!==t){var r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:function(){return e[t]}})}}),n.default=e,n}var o=/*#__PURE__*/t(e);function i(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function a(){return a=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},a.apply(this,arguments)}function l(e,n){e.prototype=Object.create(n.prototype),e.prototype.constructor=e,c(e,n)}function s(e){return s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},s(e)}function c(e,n){return c=Object.setPrototypeOf||function(e,n){return e.__proto__=n,e},c(e,n)}function u(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function f(e,n,t){return f=u()?Reflect.construct:function(e,n,t){var r=[null];r.push.apply(r,n);var o=new(Function.bind.apply(e,r));return t&&c(o,t.prototype),o},f.apply(null,arguments)}function d(e){var n="function"==typeof Map?new Map:void 0;return d=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(e))return n.get(e);n.set(e,t)}function t(){return f(e,arguments,s(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),c(t,e)},d(e)}var p=new Map,m=/*#__PURE__*/function(e){function n(t){var r;return r=e.call(this,t)||this,Object.setPrototypeOf(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r),this instanceof n?this.constructor:void 0),r}return l(n,e),n}(/*#__PURE__*/d(Error));function v(e){return function(n){try{return p.has(n)?Promise.resolve(p.get(n)):Promise.resolve(e(n).then(function(e){return fetch(e)}).then(function(e){if(!e.ok)throw new m('Failed to fetch <pixiv-icon name="'+n+'">');return e.text()})).then(function(e){return p.set(n,e),e})}catch(e){return Promise.reject(e)}}}var h={loadFromRawUrl:v(function(e){return Promise.resolve(e)}),loadFromFile:v(function(e){try{var n=e.split("/"),t=n[1];return Promise.resolve((o="../svg/"+encodeURIComponent(n[0])+"/"+encodeURIComponent(t)+".svg",Promise.resolve().then(function(){/*#__PURE__*/return r(require(o))}))).then(function(e){return e.default})}catch(e){return Promise.reject(e)}var o})},g="undefined"==typeof window,w="undefined"!=typeof HTMLElement,I=!g&&w?HTMLElement:/*#__PURE__*/function(){return function(){}}(),b=h.loadFromFile,y=h.loadFromRawUrl,O=["name","scale","unsafe-non-guideline-scale"],P=new Map,k=/*#__PURE__*/function(e){function t(){var n;return(n=e.call(this)||this).svgContent=void 0,n.observer=void 0,n.attachShadow({mode:"open"}),n}l(t,e),t.extend=function(e){o.default(!g,"Using `PixivIcon.extend()` on server has no effect"),g||Object.entries(e).forEach(function(e){var n=e[0],t=e[1];if(!n.includes("/"))throw new TypeError(n+' is not a valid icon name. "name" must be named like [size]/[Name].');P.set(n,function(){return y(t)})})};var r,s,c,u=t.prototype;return u.connectedCallback=function(){this.render(),this.update()},u.disconnectedCallback=function(){var e;null==(e=this.observer)||e.disconnect(),this.observer=void 0},u.attributeChangedCallback=function(){this.update()},u.render=function(){var e,t=null!=(e=this.forceResizedSize)?e:this.scaledSize,r=n.sanitize("<style>\n :host {\n display: inline-flex;\n --size: "+t+"px;\n }\n\n svg {\n width: var(--size);\n height: var(--size);\n }\n</style>",{ALLOWED_TAGS:["style"],FORCE_BODY:!0}),o=n.sanitize(void 0!==this.svgContent?this.svgContent:'<svg viewBox="0 0 '+t+" "+t+'"></svg>',{USE_PROFILES:{svg:!0,svgFilters:!0}});this.shadowRoot.innerHTML=r+o},u.update=function(){var e=this;this.waitUntilVisible().then(function(){try{var n,t=e.props.name,r=null!=(n=P.get(t))?n:b;return Promise.resolve(r(t)).then(function(n){e.svgContent=n,e.render()})}catch(e){return Promise.reject(e)}})},u.waitUntilVisible=function(){var e=this;return new Promise(function(n){e.observer=new IntersectionObserver(function(t){var r;t[0].isIntersecting&&(null==(r=e.observer)||r.disconnect(),e.observer=void 0,n())},{rootMargin:"50px"}),e.observer.observe(e)})},r=t,c=[{key:"observedAttributes",get:function(){return O}}],(s=[{key:"props",get:function(){var e=this,n=Object.fromEntries(O.map(function(n){return[n,e.getAttribute(n)]})),t=n.name;if(null===t)throw new TypeError('property "name" is required.');if(!t.includes("/"))throw new TypeError(t+' is not a valid icon name. "name" must be named like [size]/[Name].');return a({},n,{name:t})}},{key:"forceResizedSize",get:function(){if(null===this.props["unsafe-non-guideline-scale"])return null;var e=this.props.name.split("/")[0],n=Number(this.props["unsafe-non-guideline-scale"]);return"Inline"===e?16*n:Number(e)*n}},{key:"scaledSize",get:function(){var e,n=this.props.name.split("/")[0],t=Number(null!=(e=this.props.scale)?e:"1");switch(n){case"Inline":return 2===t?32:16;case"24":return Number(n)*t;default:return Number(n)}}}])&&i(r.prototype,s),c&&i(r,c),Object.defineProperty(r,"prototype",{writable:!1}),t}(I);k.tagName="pixiv-icon",g||window.customElements.get(k.tagName)||(window.PixivIcon=k,window.customElements.define(k.tagName,k)),exports.KNOWN_ICON_FILES=["32/ShareIos","32/Dot","32/Message","32/Gift","32/Close","32/Prev","32/Next","32/PullDown","32/PullUp","32/Expand","32/Collapse","32/Edit","32/ShareAndroid","32/BookmarkOff","32/BookmarkOn","32/NovelViewerSettings","32/CommentOff","32/CommentOn","32/Home","32/Index","32/Serif","32/Camera","32/Delete","32/Pan","32/RollVertical","32/RollHorizontal","32/ZoomIn","32/Upload","32/Shopping","32/User","32/HorizontalWriting","32/Notification","32/SansSerif","32/VerticalWriting","32/NotificationOff","24/Expand","24/Collapse","24/Close","24/Pencil","24/PencilDraw","24/PencilText","24/Reorder","24/Add","24/Subtract","24/Star","24/Check","24/Send","24/LockLock","24/LockUnlock","24/Up","24/Down","24/ReloadLoop","24/Reload","24/Options","24/CommentOutline","24/Trash","24/TrashAlt","24/ShareIos","24/ViewGrid3Columns","24/ViewGrid2Columns","24/ViewList","24/Upload","24/UploadAlt","24/DownloadAlt","24/ArrowUp","24/LikeOff","24/LikeOn","24/ArrowDown","24/OptionsAlt","24/PencilLive","24/OpenInNew","24/Settings","24/Roll","24/Calendar","24/Save","24/Logout","24/CommentFill","24/ShareAndroid","16/More","16/Back","16/Search","16/Add","16/Check","16/Menu","16/Dot","16/Book","16/ArrowDown","16/Speaker","16/Remove","16/BookmarkOn","16/BookmarkOff","16/Filter","16/Error","16/Info","16/Pencil","Inline/LikeOff","Inline/View","Inline/BookmarkOff","Inline/BookmarkOn","Inline/Breadcrumbs","Inline/More","Inline/ImageResponse","Inline/Lock","Inline/External","Inline/Location","Inline/View","Inline/Like","Inline/Smile","Inline/SmileOn","Inline/Check","Inline/List","Inline/ContextMenu","Inline/Add","Inline/Remove","Inline/Images","Inline/Nextworks","Inline/Filter","Inline/Users","24/Next","24/PullDown","24/PullUp","24/Prev","24/Dot","24/Notification","24/NotificationOff","24/Search","24/Menu","24/Index","24/Services","24/Error","24/Home","24/Warning","24/Info","24/QuestionOutline","24/ChatBot","24/ErrorOctagon","24/Question","24/Alart","24/DotAlt","24/ImageHidden","24/AddRubi","24/ImageReplace","24/Text","24/AddText","24/FormatAlignRight","24/FormatAlignLeft","24/FormatAlignCenter","24/AddImage","24/ImgContain","24/ImgCover","24/BringForward","24/BringBackward","24/RotateRight","24/Palette","24/Duplicate","24/FormatLineSpacing","24/FormatLetterSpacing","24/Rotate90DegreesCc","24/Rotate90DegreesC","24/FormatFontSize","24/FormatFontFamily","24/FormatColorFill","24/FormatColorFillNoColor","24/ChromaticAberration","24/Move1","24/Play","24/Pause","24/Microphone","24/PauseAlt","24/CameraVideo","24/Camera","24/Fov","24/Sun","24/Shutter","24/Contrast","24/FrameEffect","24/Hue","24/Saturation","24/Glow","24/Binet","24/Overlay","24/Flare","24/Dust","24/Temperature","24/Filter","24/Usagi","24/Set","24/Gift","24/MobilePhone","24/Users","24/AddPeople","24/Person","24/Emoji","24/Shopping","24/UsagiAlt","24/Fashion","24/FaceEdit","24/DeviceRotation","24/Ar","24/FrameSize","24/Body","24/BodyEdit","24/HairEdit","24/ItemRemove","24/AddModel","24/ChangeCharactor","24/Pose","24/Show","24/ShowOutline","24/Hide","24/Idea","24/Book","24/Message","24/Images","24/Image","24/Video","24/Hashtag","24/ImageAlt","24/Discovery","24/Description","24/File","24/Archive","24/Invoice","24/Announcement","24/Link","24/Manga","24/Novels","24/Contest","24/LatestWorks","24/Ranking","24/Feed","24/Groups","24/Events","24/Projects","24/Codes","24/Invalid","32/LikeOff","32/LikeOn","32/LikeOnPrivate","24/ImageHidden","Inline/Folder","Inline/Pencil","Inline/Comment"],exports.PixivIcon=k,exports.PixivIconLoadError=m;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/loaders.ts","../src/ssr.ts","../src/PixivIcon.ts","../src/index.ts"],"sourcesContent":["const cache = new Map<string, string>()\n\ninterface SvgModule {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __esModule: true\n default: string\n}\n\nexport class PixivIconLoadError extends Error {\n constructor(message?: string) {\n super(message)\n Object.setPrototypeOf(this, new.target)\n }\n}\n\nfunction createLoader(getPath: (attributeName: string) => Promise<string>) {\n return async function getSvgString(attributeName: string): Promise<string> {\n if (cache.has(attributeName)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return cache.get(attributeName)!\n }\n\n const rawSvg = await getPath(attributeName)\n .then((path) => fetch(path))\n .then((response) => {\n if (!response.ok) {\n throw new PixivIconLoadError(\n `Failed to fetch <pixiv-icon name=\"${attributeName}\">`\n )\n }\n\n return response.text()\n })\n\n cache.set(attributeName, rawSvg)\n\n return rawSvg\n }\n}\n\nexport type Loader = ReturnType<typeof createLoader>\n\nconst loadFromRawUrl: Loader = createLoader((attributeName) =>\n Promise.resolve(attributeName)\n)\n\nconst loadFromFile: Loader = createLoader(async (attributeName) => {\n const [size, name] = attributeName.split('/')\n\n const { default: filename } = (await import(\n `../svg/${encodeURIComponent(size)}/${encodeURIComponent(name)}.svg`\n )) as SvgModule\n\n return filename\n})\n\nexport const loaders = { loadFromRawUrl, loadFromFile }\n","export const __SERVER__ = typeof window === 'undefined'\n\nconst CAN_USE_DOM = typeof HTMLElement !== 'undefined'\n\n/**\n * NOTICE: SSR 環境では `extends HTMLElement` できない\n *\n * @see https://github.com/vuejs/core/blob/9c304bfe7942a20264235865b4bb5f6e53fdee0d/packages/runtime-dom/src/apiCustomElement.ts#L143-L145\n */\nexport const BaseElement = (\n !__SERVER__ && CAN_USE_DOM ? HTMLElement : class {}\n) as typeof HTMLElement\n","import type React from 'react'\nimport warning from 'warning'\nimport { KnownIconFile } from './filenames'\nimport { loaders as defaultLoaders, Loader } from './loaders'\nimport { BaseElement, __SERVER__ } from './ssr'\nimport { sanitize } from 'dompurify'\n\nconst { loadFromFile, loadFromRawUrl } = defaultLoaders\n\nconst attributes = ['name', 'scale', 'unsafe-non-guideline-scale'] as const\n\nconst ROOT_MARGIN = 50\n\nexport interface KnownIconType extends Record<KnownIconFile, unknown> {}\n\nexport interface Props\n extends Omit<\n React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>,\n 'className'\n > {\n name: keyof KnownIconType\n scale?: 1 | 2 | 3 | '1' | '2' | '3'\n 'unsafe-non-guideline-scale'?: number | string\n\n // CustomElements は className が使えない。class と書く必要がある\n // https://ja.reactjs.org/docs/web-components.html#using-web-components-in-react\n class?: string\n}\n\nconst loaders = new Map<string, Loader>()\n\ntype ExtendedIconFile = Exclude<keyof KnownIconType, KnownIconFile>\ntype Extended = [ExtendedIconFile] extends [never] // NOTE: ExtendedIconFileがneverならKnownIconTypeは拡張されていない\n ? false\n : true\n\nexport class PixivIcon extends BaseElement {\n static readonly tagName = 'pixiv-icon'\n\n static extend(\n map: Extended extends true\n ? Record<ExtendedIconFile, string>\n : Record<string, string>\n ) {\n warning(!__SERVER__, 'Using `PixivIcon.extend()` on server has no effect')\n if (__SERVER__) {\n return\n }\n\n Object.entries(map).forEach(([name, url]) => {\n if (!name.includes('/')) {\n throw new TypeError(\n `${name} is not a valid icon name. \"name\" must be named like [size]/[Name].`\n )\n }\n\n loaders.set(name, function customLoader() {\n return loadFromRawUrl(url)\n })\n })\n }\n\n static get observedAttributes() {\n return attributes\n }\n\n private svgContent?: string\n private observer?: IntersectionObserver\n\n get props() {\n const partial = Object.fromEntries(\n attributes.map((attribute) => [attribute, this.getAttribute(attribute)])\n ) as Record<typeof attributes[number], string | null>\n\n const name = partial.name\n\n if (name === null) {\n throw new TypeError('property \"name\" is required.')\n }\n\n if (!name.includes('/')) {\n throw new TypeError(\n `${name} is not a valid icon name. \"name\" must be named like [size]/[Name].`\n )\n }\n\n return {\n ...partial,\n name,\n }\n }\n\n get forceResizedSize() {\n if (this.props['unsafe-non-guideline-scale'] === null) {\n return null\n }\n\n const [size] = this.props.name.split('/')\n const scale = Number(this.props['unsafe-non-guideline-scale'])\n\n switch (size) {\n case 'Inline': {\n return 16 * scale\n }\n\n default: {\n return Number(size) * scale\n }\n }\n }\n\n get scaledSize() {\n const [size] = this.props.name.split('/')\n\n const scale = Number(this.props.scale ?? '1')\n\n switch (size) {\n case 'Inline': {\n switch (scale) {\n case 2: {\n return 32\n }\n\n default: {\n return 16\n }\n }\n }\n\n case '24': {\n return Number(size) * scale\n }\n\n default: {\n return Number(size)\n }\n }\n }\n\n constructor() {\n super()\n this.attachShadow({ mode: 'open' })\n }\n\n connectedCallback() {\n this.render()\n this.update()\n }\n\n disconnectedCallback() {\n this.observer?.disconnect()\n this.observer = undefined\n }\n\n attributeChangedCallback() {\n this.update()\n }\n\n render() {\n const size = this.forceResizedSize ?? this.scaledSize\n\n const style = sanitize(\n `<style>\n :host {\n display: inline-flex;\n --size: ${size}px;\n }\n\n svg {\n width: var(--size);\n height: var(--size);\n }\n</style>`,\n { ALLOWED_TAGS: ['style'], FORCE_BODY: true }\n )\n\n const svg = sanitize(\n this.svgContent !== undefined\n ? this.svgContent\n : `<svg viewBox=\"0 0 ${size} ${size}\"></svg>`,\n { USE_PROFILES: { svg: true, svgFilters: true } }\n )\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.shadowRoot!.innerHTML = style + svg\n }\n\n private update() {\n void this.waitUntilVisible().then(async () => {\n const { name } = this.props\n const loader = loaders.get(name) ?? loadFromFile\n\n this.svgContent = await loader(name)\n this.render()\n })\n }\n\n private waitUntilVisible() {\n return new Promise<void>((resolve) => {\n this.observer = new IntersectionObserver(\n ([first]) => {\n if (first.isIntersecting) {\n this.observer?.disconnect()\n this.observer = undefined\n resolve()\n }\n },\n { rootMargin: `${ROOT_MARGIN}px` }\n )\n\n this.observer.observe(this)\n })\n }\n}\n","import { PixivIcon, Props } from './PixivIcon'\nimport { __SERVER__ } from './ssr'\nexport { PixivIcon, type KnownIconType, type Props } from './PixivIcon'\nexport { PixivIconLoadError } from './loaders'\n\ndeclare global {\n interface Window {\n PixivIcon: typeof PixivIcon\n }\n\n // eslint-disable-next-line @typescript-eslint/no-namespace\n export namespace JSX {\n interface IntrinsicElements {\n 'pixiv-icon': Props\n }\n }\n}\n\nif (!__SERVER__) {\n // TODO: HMR対応\n if (!window.customElements.get(PixivIcon.tagName)) {\n window.PixivIcon = PixivIcon\n window.customElements.define(PixivIcon.tagName, PixivIcon)\n }\n}\n"],"names":["cache","Map","PixivIconLoadError","message","_this","Object","setPrototypeOf","Error","createLoader","getPath","attributeName","has","get","then","path","fetch","response","ok","text","rawSvg","set","loaders","loadFromRawUrl","Promise","resolve","loadFromFile","split","name","encodeURIComponent","__SERVER__","window","CAN_USE_DOM","HTMLElement","BaseElement","defaultLoaders","attributes","PixivIcon","svgContent","observer","attachShadow","mode","extend","map","warning","entries","forEach","url","includes","TypeError","connectedCallback","this","render","update","disconnectedCallback","disconnect","undefined","attributeChangedCallback","size","forceResizedSize","scaledSize","style","sanitize","ALLOWED_TAGS","FORCE_BODY","svg","USE_PROFILES","svgFilters","shadowRoot","innerHTML","waitUntilVisible","_this2","props","loader","_this3","IntersectionObserver","isIntersecting","rootMargin","ROOT_MARGIN","observe","partial","fromEntries","attribute","_this4","getAttribute","scale","Number","tagName","customElements","define"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/loaders.ts","../src/ssr.ts","../src/PixivIcon.ts","../src/index.ts","../src/filenames.ts"],"sourcesContent":["const cache = new Map<string, string>()\n\ninterface SvgModule {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __esModule: true\n default: string\n}\n\nexport class PixivIconLoadError extends Error {\n constructor(message?: string) {\n super(message)\n Object.setPrototypeOf(this, new.target)\n }\n}\n\nfunction createLoader(getPath: (attributeName: string) => Promise<string>) {\n return async function getSvgString(attributeName: string): Promise<string> {\n if (cache.has(attributeName)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return cache.get(attributeName)!\n }\n\n const rawSvg = await getPath(attributeName)\n .then((path) => fetch(path))\n .then((response) => {\n if (!response.ok) {\n throw new PixivIconLoadError(\n `Failed to fetch <pixiv-icon name=\"${attributeName}\">`\n )\n }\n\n return response.text()\n })\n\n cache.set(attributeName, rawSvg)\n\n return rawSvg\n }\n}\n\nexport type Loader = ReturnType<typeof createLoader>\n\nconst loadFromRawUrl: Loader = createLoader((attributeName) =>\n Promise.resolve(attributeName)\n)\n\nconst loadFromFile: Loader = createLoader(async (attributeName) => {\n const [size, name] = attributeName.split('/')\n\n const { default: filename } = (await import(\n `../svg/${encodeURIComponent(size)}/${encodeURIComponent(name)}.svg`\n )) as SvgModule\n\n return filename\n})\n\nexport const loaders = { loadFromRawUrl, loadFromFile }\n","export const __SERVER__ = typeof window === 'undefined'\n\nconst CAN_USE_DOM = typeof HTMLElement !== 'undefined'\n\n/**\n * NOTICE: SSR 環境では `extends HTMLElement` できない\n *\n * @see https://github.com/vuejs/core/blob/9c304bfe7942a20264235865b4bb5f6e53fdee0d/packages/runtime-dom/src/apiCustomElement.ts#L143-L145\n */\nexport const BaseElement = (\n !__SERVER__ && CAN_USE_DOM ? HTMLElement : class {}\n) as typeof HTMLElement\n","import type React from 'react'\nimport warning from 'warning'\nimport { KnownIconFile } from './filenames'\nimport { loaders as defaultLoaders, Loader } from './loaders'\nimport { BaseElement, __SERVER__ } from './ssr'\nimport { sanitize } from 'dompurify'\n\nconst { loadFromFile, loadFromRawUrl } = defaultLoaders\n\nconst attributes = ['name', 'scale', 'unsafe-non-guideline-scale'] as const\n\nconst ROOT_MARGIN = 50\n\nexport interface KnownIconType extends Record<KnownIconFile, unknown> {}\n\nexport interface Props\n extends Omit<\n React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>,\n 'className' | 'css'\n > {\n name: keyof KnownIconType\n scale?: 1 | 2 | 3 | '1' | '2' | '3'\n 'unsafe-non-guideline-scale'?: number | string\n\n // CustomElements は className が使えない。class と書く必要がある\n // https://ja.reactjs.org/docs/web-components.html#using-web-components-in-react\n class?: string\n}\n\nconst loaders = new Map<string, Loader>()\n\ntype ExtendedIconFile = Exclude<keyof KnownIconType, KnownIconFile>\ntype Extended = [ExtendedIconFile] extends [never] // NOTE: ExtendedIconFileがneverならKnownIconTypeは拡張されていない\n ? false\n : true\n\nexport class PixivIcon extends BaseElement {\n static readonly tagName = 'pixiv-icon'\n\n static extend(\n map: Extended extends true\n ? Record<ExtendedIconFile, string>\n : Record<string, string>\n ) {\n warning(!__SERVER__, 'Using `PixivIcon.extend()` on server has no effect')\n if (__SERVER__) {\n return\n }\n\n Object.entries(map).forEach(([name, url]) => {\n if (!name.includes('/')) {\n throw new TypeError(\n `${name} is not a valid icon name. \"name\" must be named like [size]/[Name].`\n )\n }\n\n loaders.set(name, function customLoader() {\n return loadFromRawUrl(url)\n })\n })\n }\n\n static get observedAttributes() {\n return attributes\n }\n\n private svgContent?: string\n private observer?: IntersectionObserver\n\n get props() {\n const partial = Object.fromEntries(\n attributes.map((attribute) => [attribute, this.getAttribute(attribute)])\n ) as Record<typeof attributes[number], string | null>\n\n const name = partial.name\n\n if (name === null) {\n throw new TypeError('property \"name\" is required.')\n }\n\n if (!name.includes('/')) {\n throw new TypeError(\n `${name} is not a valid icon name. \"name\" must be named like [size]/[Name].`\n )\n }\n\n return {\n ...partial,\n name,\n }\n }\n\n get forceResizedSize() {\n if (this.props['unsafe-non-guideline-scale'] === null) {\n return null\n }\n\n const [size] = this.props.name.split('/')\n const scale = Number(this.props['unsafe-non-guideline-scale'])\n\n switch (size) {\n case 'Inline': {\n return 16 * scale\n }\n\n default: {\n return Number(size) * scale\n }\n }\n }\n\n get scaledSize() {\n const [size] = this.props.name.split('/')\n\n const scale = Number(this.props.scale ?? '1')\n\n switch (size) {\n case 'Inline': {\n switch (scale) {\n case 2: {\n return 32\n }\n\n default: {\n return 16\n }\n }\n }\n\n case '24': {\n return Number(size) * scale\n }\n\n default: {\n return Number(size)\n }\n }\n }\n\n constructor() {\n super()\n this.attachShadow({ mode: 'open' })\n }\n\n connectedCallback() {\n this.render()\n this.update()\n }\n\n disconnectedCallback() {\n this.observer?.disconnect()\n this.observer = undefined\n }\n\n attributeChangedCallback() {\n this.update()\n }\n\n render() {\n const size = this.forceResizedSize ?? this.scaledSize\n\n const style = sanitize(\n `<style>\n :host {\n display: inline-flex;\n --size: ${size}px;\n }\n\n svg {\n width: var(--size);\n height: var(--size);\n }\n</style>`,\n { ALLOWED_TAGS: ['style'], FORCE_BODY: true }\n )\n\n const svg = sanitize(\n this.svgContent !== undefined\n ? this.svgContent\n : `<svg viewBox=\"0 0 ${size} ${size}\"></svg>`,\n { USE_PROFILES: { svg: true, svgFilters: true } }\n )\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.shadowRoot!.innerHTML = style + svg\n }\n\n private update() {\n void this.waitUntilVisible().then(async () => {\n const { name } = this.props\n const loader = loaders.get(name) ?? loadFromFile\n\n this.svgContent = await loader(name)\n this.render()\n })\n }\n\n private waitUntilVisible() {\n return new Promise<void>((resolve) => {\n this.observer = new IntersectionObserver(\n ([first]) => {\n if (first.isIntersecting) {\n this.observer?.disconnect()\n this.observer = undefined\n resolve()\n }\n },\n { rootMargin: `${ROOT_MARGIN}px` }\n )\n\n this.observer.observe(this)\n })\n }\n}\n","import { PixivIcon, Props } from './PixivIcon'\nimport { __SERVER__ } from './ssr'\nexport { PixivIcon, type KnownIconType, type Props } from './PixivIcon'\nexport { KNOWN_ICON_FILES } from './filenames'\nexport { PixivIconLoadError } from './loaders'\n\ndeclare global {\n interface Window {\n PixivIcon: typeof PixivIcon\n }\n\n // eslint-disable-next-line @typescript-eslint/no-namespace\n export namespace JSX {\n interface IntrinsicElements {\n 'pixiv-icon': Props\n }\n }\n}\n\nif (!__SERVER__) {\n // TODO: HMR対応\n if (!window.customElements.get(PixivIcon.tagName)) {\n window.PixivIcon = PixivIcon\n window.customElements.define(PixivIcon.tagName, PixivIcon)\n }\n}\n","/** This file is auto generated. DO NOT EDIT BY HAND. */\n\n/* eslint-disable */\n\n// prettier-ignore\nexport const KNOWN_ICON_FILES = [\"32/ShareIos\",\"32/Dot\",\"32/Message\",\"32/Gift\",\"32/Close\",\"32/Prev\",\"32/Next\",\"32/PullDown\",\"32/PullUp\",\"32/Expand\",\"32/Collapse\",\"32/Edit\",\"32/ShareAndroid\",\"32/BookmarkOff\",\"32/BookmarkOn\",\"32/NovelViewerSettings\",\"32/CommentOff\",\"32/CommentOn\",\"32/Home\",\"32/Index\",\"32/Serif\",\"32/Camera\",\"32/Delete\",\"32/Pan\",\"32/RollVertical\",\"32/RollHorizontal\",\"32/ZoomIn\",\"32/Upload\",\"32/Shopping\",\"32/User\",\"32/HorizontalWriting\",\"32/Notification\",\"32/SansSerif\",\"32/VerticalWriting\",\"32/NotificationOff\",\"24/Expand\",\"24/Collapse\",\"24/Close\",\"24/Pencil\",\"24/PencilDraw\",\"24/PencilText\",\"24/Reorder\",\"24/Add\",\"24/Subtract\",\"24/Star\",\"24/Check\",\"24/Send\",\"24/LockLock\",\"24/LockUnlock\",\"24/Up\",\"24/Down\",\"24/ReloadLoop\",\"24/Reload\",\"24/Options\",\"24/CommentOutline\",\"24/Trash\",\"24/TrashAlt\",\"24/ShareIos\",\"24/ViewGrid3Columns\",\"24/ViewGrid2Columns\",\"24/ViewList\",\"24/Upload\",\"24/UploadAlt\",\"24/DownloadAlt\",\"24/ArrowUp\",\"24/LikeOff\",\"24/LikeOn\",\"24/ArrowDown\",\"24/OptionsAlt\",\"24/PencilLive\",\"24/OpenInNew\",\"24/Settings\",\"24/Roll\",\"24/Calendar\",\"24/Save\",\"24/Logout\",\"24/CommentFill\",\"24/ShareAndroid\",\"16/More\",\"16/Back\",\"16/Search\",\"16/Add\",\"16/Check\",\"16/Menu\",\"16/Dot\",\"16/Book\",\"16/ArrowDown\",\"16/Speaker\",\"16/Remove\",\"16/BookmarkOn\",\"16/BookmarkOff\",\"16/Filter\",\"16/Error\",\"16/Info\",\"16/Pencil\",\"Inline/LikeOff\",\"Inline/View\",\"Inline/BookmarkOff\",\"Inline/BookmarkOn\",\"Inline/Breadcrumbs\",\"Inline/More\",\"Inline/ImageResponse\",\"Inline/Lock\",\"Inline/External\",\"Inline/Location\",\"Inline/View\",\"Inline/Like\",\"Inline/Smile\",\"Inline/SmileOn\",\"Inline/Check\",\"Inline/List\",\"Inline/ContextMenu\",\"Inline/Add\",\"Inline/Remove\",\"Inline/Images\",\"Inline/Nextworks\",\"Inline/Filter\",\"Inline/Users\",\"24/Next\",\"24/PullDown\",\"24/PullUp\",\"24/Prev\",\"24/Dot\",\"24/Notification\",\"24/NotificationOff\",\"24/Search\",\"24/Menu\",\"24/Index\",\"24/Services\",\"24/Error\",\"24/Home\",\"24/Warning\",\"24/Info\",\"24/QuestionOutline\",\"24/ChatBot\",\"24/ErrorOctagon\",\"24/Question\",\"24/Alart\",\"24/DotAlt\",\"24/ImageHidden\",\"24/AddRubi\",\"24/ImageReplace\",\"24/Text\",\"24/AddText\",\"24/FormatAlignRight\",\"24/FormatAlignLeft\",\"24/FormatAlignCenter\",\"24/AddImage\",\"24/ImgContain\",\"24/ImgCover\",\"24/BringForward\",\"24/BringBackward\",\"24/RotateRight\",\"24/Palette\",\"24/Duplicate\",\"24/FormatLineSpacing\",\"24/FormatLetterSpacing\",\"24/Rotate90DegreesCc\",\"24/Rotate90DegreesC\",\"24/FormatFontSize\",\"24/FormatFontFamily\",\"24/FormatColorFill\",\"24/FormatColorFillNoColor\",\"24/ChromaticAberration\",\"24/Move1\",\"24/Play\",\"24/Pause\",\"24/Microphone\",\"24/PauseAlt\",\"24/CameraVideo\",\"24/Camera\",\"24/Fov\",\"24/Sun\",\"24/Shutter\",\"24/Contrast\",\"24/FrameEffect\",\"24/Hue\",\"24/Saturation\",\"24/Glow\",\"24/Binet\",\"24/Overlay\",\"24/Flare\",\"24/Dust\",\"24/Temperature\",\"24/Filter\",\"24/Usagi\",\"24/Set\",\"24/Gift\",\"24/MobilePhone\",\"24/Users\",\"24/AddPeople\",\"24/Person\",\"24/Emoji\",\"24/Shopping\",\"24/UsagiAlt\",\"24/Fashion\",\"24/FaceEdit\",\"24/DeviceRotation\",\"24/Ar\",\"24/FrameSize\",\"24/Body\",\"24/BodyEdit\",\"24/HairEdit\",\"24/ItemRemove\",\"24/AddModel\",\"24/ChangeCharactor\",\"24/Pose\",\"24/Show\",\"24/ShowOutline\",\"24/Hide\",\"24/Idea\",\"24/Book\",\"24/Message\",\"24/Images\",\"24/Image\",\"24/Video\",\"24/Hashtag\",\"24/ImageAlt\",\"24/Discovery\",\"24/Description\",\"24/File\",\"24/Archive\",\"24/Invoice\",\"24/Announcement\",\"24/Link\",\"24/Manga\",\"24/Novels\",\"24/Contest\",\"24/LatestWorks\",\"24/Ranking\",\"24/Feed\",\"24/Groups\",\"24/Events\",\"24/Projects\",\"24/Codes\",\"24/Invalid\",\"32/LikeOff\",\"32/LikeOn\",\"32/LikeOnPrivate\",\"24/ImageHidden\",\"Inline/Folder\",\"Inline/Pencil\",\"Inline/Comment\"] as const;\n\nexport type KnownIconFile = typeof KNOWN_ICON_FILES[number]\n\n/* eslint-enable */\n"],"names":["cache","Map","PixivIconLoadError","message","_this","Object","setPrototypeOf","Error","createLoader","getPath","attributeName","has","get","then","path","fetch","response","ok","text","rawSvg","set","loaders","loadFromRawUrl","Promise","resolve","loadFromFile","split","name","encodeURIComponent","__SERVER__","window","CAN_USE_DOM","HTMLElement","BaseElement","defaultLoaders","attributes","PixivIcon","svgContent","observer","attachShadow","mode","extend","map","warning","entries","forEach","url","includes","TypeError","connectedCallback","this","render","update","disconnectedCallback","disconnect","undefined","attributeChangedCallback","size","forceResizedSize","scaledSize","style","sanitize","ALLOWED_TAGS","FORCE_BODY","svg","USE_PROFILES","svgFilters","shadowRoot","innerHTML","waitUntilVisible","_this2","props","loader","_this3","IntersectionObserver","isIntersecting","rootMargin","ROOT_MARGIN","observe","partial","fromEntries","attribute","_this4","getAttribute","scale","Number","tagName","customElements","define"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { PixivIcon, Props } from './PixivIcon';
2
2
  export { PixivIcon, type KnownIconType, type Props } from './PixivIcon';
3
+ export { KNOWN_ICON_FILES } from './filenames';
3
4
  export { PixivIconLoadError } from './loaders';
4
5
  declare global {
5
6
  interface Window {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,SAAS,EAAE,OAAO,SAAS,CAAA;KAC5B;IAGD,MAAM,WAAW,GAAG,CAAC;QACnB,UAAU,iBAAiB;YACzB,YAAY,EAAE,KAAK,CAAA;SACpB;KACF;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,SAAS,EAAE,OAAO,SAAS,CAAA;KAC5B;IAGD,MAAM,WAAW,GAAG,CAAC;QACnB,UAAU,iBAAiB;YACzB,YAAY,EAAE,KAAK,CAAA;SACpB;KACF;CACF"}
@@ -1,2 +1,2 @@
1
- import e from"warning";import{sanitize as t}from"dompurify";function n(){return n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(e[s]=n[s])}return e},n.apply(this,arguments)}const s=new Map;class r extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target)}}function i(e){return async function(t){if(s.has(t))return s.get(t);const n=await e(t).then(e=>fetch(e)).then(e=>{if(!e.ok)throw new r(`Failed to fetch <pixiv-icon name="${t}">`);return e.text()});return s.set(t,n),n}}const o={loadFromRawUrl:i(e=>Promise.resolve(e)),loadFromFile:i(async e=>{const[t,n]=e.split("/"),{default:s}=await import(`../svg/${encodeURIComponent(t)}/${encodeURIComponent(n)}.svg`);return s})},a="undefined"==typeof window,l="undefined"!=typeof HTMLElement,c=!a&&l?HTMLElement:class{},{loadFromFile:u,loadFromRawUrl:d}=o,h=["name","scale","unsafe-non-guideline-scale"],p=new Map;class m extends c{static extend(t){e(!a,"Using `PixivIcon.extend()` on server has no effect"),a||Object.entries(t).forEach(([e,t])=>{if(!e.includes("/"))throw new TypeError(`${e} is not a valid icon name. "name" must be named like [size]/[Name].`);p.set(e,function(){return d(t)})})}static get observedAttributes(){return h}get props(){const e=Object.fromEntries(h.map(e=>[e,this.getAttribute(e)])),t=e.name;if(null===t)throw new TypeError('property "name" is required.');if(!t.includes("/"))throw new TypeError(`${t} is not a valid icon name. "name" must be named like [size]/[Name].`);return n({},e,{name:t})}get forceResizedSize(){if(null===this.props["unsafe-non-guideline-scale"])return null;const[e]=this.props.name.split("/"),t=Number(this.props["unsafe-non-guideline-scale"]);return"Inline"===e?16*t:Number(e)*t}get scaledSize(){var e;const[t]=this.props.name.split("/"),n=Number(null!=(e=this.props.scale)?e:"1");switch(t){case"Inline":return 2===n?32:16;case"24":return Number(t)*n;default:return Number(t)}}constructor(){super(),this.svgContent=void 0,this.observer=void 0,this.attachShadow({mode:"open"})}connectedCallback(){this.render(),this.update()}disconnectedCallback(){var e;null==(e=this.observer)||e.disconnect(),this.observer=void 0}attributeChangedCallback(){this.update()}render(){var e;const n=null!=(e=this.forceResizedSize)?e:this.scaledSize,s=t(`<style>\n :host {\n display: inline-flex;\n --size: ${n}px;\n }\n\n svg {\n width: var(--size);\n height: var(--size);\n }\n</style>`,{ALLOWED_TAGS:["style"],FORCE_BODY:!0}),r=t(void 0!==this.svgContent?this.svgContent:`<svg viewBox="0 0 ${n} ${n}"></svg>`,{USE_PROFILES:{svg:!0,svgFilters:!0}});this.shadowRoot.innerHTML=s+r}update(){var e=this;this.waitUntilVisible().then(async function(){var t;const{name:n}=e.props,s=null!=(t=p.get(n))?t:u;e.svgContent=await s(n),e.render()})}waitUntilVisible(){return new Promise(e=>{this.observer=new IntersectionObserver(([t])=>{var n;t.isIntersecting&&(null==(n=this.observer)||n.disconnect(),this.observer=void 0,e())},{rootMargin:"50px"}),this.observer.observe(this)})}}m.tagName="pixiv-icon",a||window.customElements.get(m.tagName)||(window.PixivIcon=m,window.customElements.define(m.tagName,m));export{m as PixivIcon,r as PixivIconLoadError};
1
+ import e from"warning";import{sanitize as n}from"dompurify";function t(){return t=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},t.apply(this,arguments)}const o=new Map;class i extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target)}}function r(e){return async function(n){if(o.has(n))return o.get(n);const t=await e(n).then(e=>fetch(e)).then(e=>{if(!e.ok)throw new i(`Failed to fetch <pixiv-icon name="${n}">`);return e.text()});return o.set(n,t),t}}const a={loadFromRawUrl:r(e=>Promise.resolve(e)),loadFromFile:r(async e=>{const[n,t]=e.split("/"),{default:o}=await import(`../svg/${encodeURIComponent(n)}/${encodeURIComponent(t)}.svg`);return o})},s="undefined"==typeof window,l="undefined"!=typeof HTMLElement,c=!s&&l?HTMLElement:class{},{loadFromFile:d,loadFromRawUrl:m}=a,u=["name","scale","unsafe-non-guideline-scale"],p=new Map;class h extends c{static extend(n){e(!s,"Using `PixivIcon.extend()` on server has no effect"),s||Object.entries(n).forEach(([e,n])=>{if(!e.includes("/"))throw new TypeError(`${e} is not a valid icon name. "name" must be named like [size]/[Name].`);p.set(e,function(){return m(n)})})}static get observedAttributes(){return u}get props(){const e=Object.fromEntries(u.map(e=>[e,this.getAttribute(e)])),n=e.name;if(null===n)throw new TypeError('property "name" is required.');if(!n.includes("/"))throw new TypeError(`${n} is not a valid icon name. "name" must be named like [size]/[Name].`);return t({},e,{name:n})}get forceResizedSize(){if(null===this.props["unsafe-non-guideline-scale"])return null;const[e]=this.props.name.split("/"),n=Number(this.props["unsafe-non-guideline-scale"]);return"Inline"===e?16*n:Number(e)*n}get scaledSize(){var e;const[n]=this.props.name.split("/"),t=Number(null!=(e=this.props.scale)?e:"1");switch(n){case"Inline":return 2===t?32:16;case"24":return Number(n)*t;default:return Number(n)}}constructor(){super(),this.svgContent=void 0,this.observer=void 0,this.attachShadow({mode:"open"})}connectedCallback(){this.render(),this.update()}disconnectedCallback(){var e;null==(e=this.observer)||e.disconnect(),this.observer=void 0}attributeChangedCallback(){this.update()}render(){var e;const t=null!=(e=this.forceResizedSize)?e:this.scaledSize,o=n(`<style>\n :host {\n display: inline-flex;\n --size: ${t}px;\n }\n\n svg {\n width: var(--size);\n height: var(--size);\n }\n</style>`,{ALLOWED_TAGS:["style"],FORCE_BODY:!0}),i=n(void 0!==this.svgContent?this.svgContent:`<svg viewBox="0 0 ${t} ${t}"></svg>`,{USE_PROFILES:{svg:!0,svgFilters:!0}});this.shadowRoot.innerHTML=o+i}update(){var e=this;this.waitUntilVisible().then(async function(){var n;const{name:t}=e.props,o=null!=(n=p.get(t))?n:d;e.svgContent=await o(t),e.render()})}waitUntilVisible(){return new Promise(e=>{this.observer=new IntersectionObserver(([n])=>{var t;n.isIntersecting&&(null==(t=this.observer)||t.disconnect(),this.observer=void 0,e())},{rootMargin:"50px"}),this.observer.observe(this)})}}h.tagName="pixiv-icon";const g=["32/ShareIos","32/Dot","32/Message","32/Gift","32/Close","32/Prev","32/Next","32/PullDown","32/PullUp","32/Expand","32/Collapse","32/Edit","32/ShareAndroid","32/BookmarkOff","32/BookmarkOn","32/NovelViewerSettings","32/CommentOff","32/CommentOn","32/Home","32/Index","32/Serif","32/Camera","32/Delete","32/Pan","32/RollVertical","32/RollHorizontal","32/ZoomIn","32/Upload","32/Shopping","32/User","32/HorizontalWriting","32/Notification","32/SansSerif","32/VerticalWriting","32/NotificationOff","24/Expand","24/Collapse","24/Close","24/Pencil","24/PencilDraw","24/PencilText","24/Reorder","24/Add","24/Subtract","24/Star","24/Check","24/Send","24/LockLock","24/LockUnlock","24/Up","24/Down","24/ReloadLoop","24/Reload","24/Options","24/CommentOutline","24/Trash","24/TrashAlt","24/ShareIos","24/ViewGrid3Columns","24/ViewGrid2Columns","24/ViewList","24/Upload","24/UploadAlt","24/DownloadAlt","24/ArrowUp","24/LikeOff","24/LikeOn","24/ArrowDown","24/OptionsAlt","24/PencilLive","24/OpenInNew","24/Settings","24/Roll","24/Calendar","24/Save","24/Logout","24/CommentFill","24/ShareAndroid","16/More","16/Back","16/Search","16/Add","16/Check","16/Menu","16/Dot","16/Book","16/ArrowDown","16/Speaker","16/Remove","16/BookmarkOn","16/BookmarkOff","16/Filter","16/Error","16/Info","16/Pencil","Inline/LikeOff","Inline/View","Inline/BookmarkOff","Inline/BookmarkOn","Inline/Breadcrumbs","Inline/More","Inline/ImageResponse","Inline/Lock","Inline/External","Inline/Location","Inline/View","Inline/Like","Inline/Smile","Inline/SmileOn","Inline/Check","Inline/List","Inline/ContextMenu","Inline/Add","Inline/Remove","Inline/Images","Inline/Nextworks","Inline/Filter","Inline/Users","24/Next","24/PullDown","24/PullUp","24/Prev","24/Dot","24/Notification","24/NotificationOff","24/Search","24/Menu","24/Index","24/Services","24/Error","24/Home","24/Warning","24/Info","24/QuestionOutline","24/ChatBot","24/ErrorOctagon","24/Question","24/Alart","24/DotAlt","24/ImageHidden","24/AddRubi","24/ImageReplace","24/Text","24/AddText","24/FormatAlignRight","24/FormatAlignLeft","24/FormatAlignCenter","24/AddImage","24/ImgContain","24/ImgCover","24/BringForward","24/BringBackward","24/RotateRight","24/Palette","24/Duplicate","24/FormatLineSpacing","24/FormatLetterSpacing","24/Rotate90DegreesCc","24/Rotate90DegreesC","24/FormatFontSize","24/FormatFontFamily","24/FormatColorFill","24/FormatColorFillNoColor","24/ChromaticAberration","24/Move1","24/Play","24/Pause","24/Microphone","24/PauseAlt","24/CameraVideo","24/Camera","24/Fov","24/Sun","24/Shutter","24/Contrast","24/FrameEffect","24/Hue","24/Saturation","24/Glow","24/Binet","24/Overlay","24/Flare","24/Dust","24/Temperature","24/Filter","24/Usagi","24/Set","24/Gift","24/MobilePhone","24/Users","24/AddPeople","24/Person","24/Emoji","24/Shopping","24/UsagiAlt","24/Fashion","24/FaceEdit","24/DeviceRotation","24/Ar","24/FrameSize","24/Body","24/BodyEdit","24/HairEdit","24/ItemRemove","24/AddModel","24/ChangeCharactor","24/Pose","24/Show","24/ShowOutline","24/Hide","24/Idea","24/Book","24/Message","24/Images","24/Image","24/Video","24/Hashtag","24/ImageAlt","24/Discovery","24/Description","24/File","24/Archive","24/Invoice","24/Announcement","24/Link","24/Manga","24/Novels","24/Contest","24/LatestWorks","24/Ranking","24/Feed","24/Groups","24/Events","24/Projects","24/Codes","24/Invalid","32/LikeOff","32/LikeOn","32/LikeOnPrivate","24/ImageHidden","Inline/Folder","Inline/Pencil","Inline/Comment"];s||window.customElements.get(h.tagName)||(window.PixivIcon=h,window.customElements.define(h.tagName,h));export{g as KNOWN_ICON_FILES,h as PixivIcon,i as PixivIconLoadError};
2
2
  //# sourceMappingURL=index.modern.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/loaders.ts","../src/ssr.ts","../src/PixivIcon.ts","../src/index.ts"],"sourcesContent":["const cache = new Map<string, string>()\n\ninterface SvgModule {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __esModule: true\n default: string\n}\n\nexport class PixivIconLoadError extends Error {\n constructor(message?: string) {\n super(message)\n Object.setPrototypeOf(this, new.target)\n }\n}\n\nfunction createLoader(getPath: (attributeName: string) => Promise<string>) {\n return async function getSvgString(attributeName: string): Promise<string> {\n if (cache.has(attributeName)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return cache.get(attributeName)!\n }\n\n const rawSvg = await getPath(attributeName)\n .then((path) => fetch(path))\n .then((response) => {\n if (!response.ok) {\n throw new PixivIconLoadError(\n `Failed to fetch <pixiv-icon name=\"${attributeName}\">`\n )\n }\n\n return response.text()\n })\n\n cache.set(attributeName, rawSvg)\n\n return rawSvg\n }\n}\n\nexport type Loader = ReturnType<typeof createLoader>\n\nconst loadFromRawUrl: Loader = createLoader((attributeName) =>\n Promise.resolve(attributeName)\n)\n\nconst loadFromFile: Loader = createLoader(async (attributeName) => {\n const [size, name] = attributeName.split('/')\n\n const { default: filename } = (await import(\n `../svg/${encodeURIComponent(size)}/${encodeURIComponent(name)}.svg`\n )) as SvgModule\n\n return filename\n})\n\nexport const loaders = { loadFromRawUrl, loadFromFile }\n","export const __SERVER__ = typeof window === 'undefined'\n\nconst CAN_USE_DOM = typeof HTMLElement !== 'undefined'\n\n/**\n * NOTICE: SSR 環境では `extends HTMLElement` できない\n *\n * @see https://github.com/vuejs/core/blob/9c304bfe7942a20264235865b4bb5f6e53fdee0d/packages/runtime-dom/src/apiCustomElement.ts#L143-L145\n */\nexport const BaseElement = (\n !__SERVER__ && CAN_USE_DOM ? HTMLElement : class {}\n) as typeof HTMLElement\n","import type React from 'react'\nimport warning from 'warning'\nimport { KnownIconFile } from './filenames'\nimport { loaders as defaultLoaders, Loader } from './loaders'\nimport { BaseElement, __SERVER__ } from './ssr'\nimport { sanitize } from 'dompurify'\n\nconst { loadFromFile, loadFromRawUrl } = defaultLoaders\n\nconst attributes = ['name', 'scale', 'unsafe-non-guideline-scale'] as const\n\nconst ROOT_MARGIN = 50\n\nexport interface KnownIconType extends Record<KnownIconFile, unknown> {}\n\nexport interface Props\n extends Omit<\n React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>,\n 'className'\n > {\n name: keyof KnownIconType\n scale?: 1 | 2 | 3 | '1' | '2' | '3'\n 'unsafe-non-guideline-scale'?: number | string\n\n // CustomElements は className が使えない。class と書く必要がある\n // https://ja.reactjs.org/docs/web-components.html#using-web-components-in-react\n class?: string\n}\n\nconst loaders = new Map<string, Loader>()\n\ntype ExtendedIconFile = Exclude<keyof KnownIconType, KnownIconFile>\ntype Extended = [ExtendedIconFile] extends [never] // NOTE: ExtendedIconFileがneverならKnownIconTypeは拡張されていない\n ? false\n : true\n\nexport class PixivIcon extends BaseElement {\n static readonly tagName = 'pixiv-icon'\n\n static extend(\n map: Extended extends true\n ? Record<ExtendedIconFile, string>\n : Record<string, string>\n ) {\n warning(!__SERVER__, 'Using `PixivIcon.extend()` on server has no effect')\n if (__SERVER__) {\n return\n }\n\n Object.entries(map).forEach(([name, url]) => {\n if (!name.includes('/')) {\n throw new TypeError(\n `${name} is not a valid icon name. \"name\" must be named like [size]/[Name].`\n )\n }\n\n loaders.set(name, function customLoader() {\n return loadFromRawUrl(url)\n })\n })\n }\n\n static get observedAttributes() {\n return attributes\n }\n\n private svgContent?: string\n private observer?: IntersectionObserver\n\n get props() {\n const partial = Object.fromEntries(\n attributes.map((attribute) => [attribute, this.getAttribute(attribute)])\n ) as Record<typeof attributes[number], string | null>\n\n const name = partial.name\n\n if (name === null) {\n throw new TypeError('property \"name\" is required.')\n }\n\n if (!name.includes('/')) {\n throw new TypeError(\n `${name} is not a valid icon name. \"name\" must be named like [size]/[Name].`\n )\n }\n\n return {\n ...partial,\n name,\n }\n }\n\n get forceResizedSize() {\n if (this.props['unsafe-non-guideline-scale'] === null) {\n return null\n }\n\n const [size] = this.props.name.split('/')\n const scale = Number(this.props['unsafe-non-guideline-scale'])\n\n switch (size) {\n case 'Inline': {\n return 16 * scale\n }\n\n default: {\n return Number(size) * scale\n }\n }\n }\n\n get scaledSize() {\n const [size] = this.props.name.split('/')\n\n const scale = Number(this.props.scale ?? '1')\n\n switch (size) {\n case 'Inline': {\n switch (scale) {\n case 2: {\n return 32\n }\n\n default: {\n return 16\n }\n }\n }\n\n case '24': {\n return Number(size) * scale\n }\n\n default: {\n return Number(size)\n }\n }\n }\n\n constructor() {\n super()\n this.attachShadow({ mode: 'open' })\n }\n\n connectedCallback() {\n this.render()\n this.update()\n }\n\n disconnectedCallback() {\n this.observer?.disconnect()\n this.observer = undefined\n }\n\n attributeChangedCallback() {\n this.update()\n }\n\n render() {\n const size = this.forceResizedSize ?? this.scaledSize\n\n const style = sanitize(\n `<style>\n :host {\n display: inline-flex;\n --size: ${size}px;\n }\n\n svg {\n width: var(--size);\n height: var(--size);\n }\n</style>`,\n { ALLOWED_TAGS: ['style'], FORCE_BODY: true }\n )\n\n const svg = sanitize(\n this.svgContent !== undefined\n ? this.svgContent\n : `<svg viewBox=\"0 0 ${size} ${size}\"></svg>`,\n { USE_PROFILES: { svg: true, svgFilters: true } }\n )\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.shadowRoot!.innerHTML = style + svg\n }\n\n private update() {\n void this.waitUntilVisible().then(async () => {\n const { name } = this.props\n const loader = loaders.get(name) ?? loadFromFile\n\n this.svgContent = await loader(name)\n this.render()\n })\n }\n\n private waitUntilVisible() {\n return new Promise<void>((resolve) => {\n this.observer = new IntersectionObserver(\n ([first]) => {\n if (first.isIntersecting) {\n this.observer?.disconnect()\n this.observer = undefined\n resolve()\n }\n },\n { rootMargin: `${ROOT_MARGIN}px` }\n )\n\n this.observer.observe(this)\n })\n }\n}\n","import { PixivIcon, Props } from './PixivIcon'\nimport { __SERVER__ } from './ssr'\nexport { PixivIcon, type KnownIconType, type Props } from './PixivIcon'\nexport { PixivIconLoadError } from './loaders'\n\ndeclare global {\n interface Window {\n PixivIcon: typeof PixivIcon\n }\n\n // eslint-disable-next-line @typescript-eslint/no-namespace\n export namespace JSX {\n interface IntrinsicElements {\n 'pixiv-icon': Props\n }\n }\n}\n\nif (!__SERVER__) {\n // TODO: HMR対応\n if (!window.customElements.get(PixivIcon.tagName)) {\n window.PixivIcon = PixivIcon\n window.customElements.define(PixivIcon.tagName, PixivIcon)\n }\n}\n"],"names":["cache","Map","PixivIconLoadError","Error","constructor","message","super","Object","setPrototypeOf","this","createLoader","getPath","attributeName","has","get","rawSvg","then","path","fetch","response","ok","text","set","loaders","Promise","resolve","async","size","name","split","default","filename","encodeURIComponent","__SERVER__","window","CAN_USE_DOM","HTMLElement","BaseElement","loadFromFile","loadFromRawUrl","defaultLoaders","attributes","PixivIcon","static","map","warning","entries","forEach","url","includes","TypeError","observedAttributes","props","partial","fromEntries","attribute","getAttribute","forceResizedSize","scale","Number","scaledSize","svgContent","observer","attachShadow","mode","connectedCallback","render","update","disconnectedCallback","disconnect","undefined","attributeChangedCallback","style","sanitize","ALLOWED_TAGS","FORCE_BODY","svg","USE_PROFILES","svgFilters","shadowRoot","innerHTML","waitUntilVisible","_this","loader","IntersectionObserver","first","isIntersecting","rootMargin","observe","tagName","customElements","define"],"mappings":"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"}
1
+ {"version":3,"file":"index.modern.js","sources":["../src/loaders.ts","../src/ssr.ts","../src/PixivIcon.ts","../src/filenames.ts","../src/index.ts"],"sourcesContent":["const cache = new Map<string, string>()\n\ninterface SvgModule {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __esModule: true\n default: string\n}\n\nexport class PixivIconLoadError extends Error {\n constructor(message?: string) {\n super(message)\n Object.setPrototypeOf(this, new.target)\n }\n}\n\nfunction createLoader(getPath: (attributeName: string) => Promise<string>) {\n return async function getSvgString(attributeName: string): Promise<string> {\n if (cache.has(attributeName)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return cache.get(attributeName)!\n }\n\n const rawSvg = await getPath(attributeName)\n .then((path) => fetch(path))\n .then((response) => {\n if (!response.ok) {\n throw new PixivIconLoadError(\n `Failed to fetch <pixiv-icon name=\"${attributeName}\">`\n )\n }\n\n return response.text()\n })\n\n cache.set(attributeName, rawSvg)\n\n return rawSvg\n }\n}\n\nexport type Loader = ReturnType<typeof createLoader>\n\nconst loadFromRawUrl: Loader = createLoader((attributeName) =>\n Promise.resolve(attributeName)\n)\n\nconst loadFromFile: Loader = createLoader(async (attributeName) => {\n const [size, name] = attributeName.split('/')\n\n const { default: filename } = (await import(\n `../svg/${encodeURIComponent(size)}/${encodeURIComponent(name)}.svg`\n )) as SvgModule\n\n return filename\n})\n\nexport const loaders = { loadFromRawUrl, loadFromFile }\n","export const __SERVER__ = typeof window === 'undefined'\n\nconst CAN_USE_DOM = typeof HTMLElement !== 'undefined'\n\n/**\n * NOTICE: SSR 環境では `extends HTMLElement` できない\n *\n * @see https://github.com/vuejs/core/blob/9c304bfe7942a20264235865b4bb5f6e53fdee0d/packages/runtime-dom/src/apiCustomElement.ts#L143-L145\n */\nexport const BaseElement = (\n !__SERVER__ && CAN_USE_DOM ? HTMLElement : class {}\n) as typeof HTMLElement\n","import type React from 'react'\nimport warning from 'warning'\nimport { KnownIconFile } from './filenames'\nimport { loaders as defaultLoaders, Loader } from './loaders'\nimport { BaseElement, __SERVER__ } from './ssr'\nimport { sanitize } from 'dompurify'\n\nconst { loadFromFile, loadFromRawUrl } = defaultLoaders\n\nconst attributes = ['name', 'scale', 'unsafe-non-guideline-scale'] as const\n\nconst ROOT_MARGIN = 50\n\nexport interface KnownIconType extends Record<KnownIconFile, unknown> {}\n\nexport interface Props\n extends Omit<\n React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>,\n 'className' | 'css'\n > {\n name: keyof KnownIconType\n scale?: 1 | 2 | 3 | '1' | '2' | '3'\n 'unsafe-non-guideline-scale'?: number | string\n\n // CustomElements は className が使えない。class と書く必要がある\n // https://ja.reactjs.org/docs/web-components.html#using-web-components-in-react\n class?: string\n}\n\nconst loaders = new Map<string, Loader>()\n\ntype ExtendedIconFile = Exclude<keyof KnownIconType, KnownIconFile>\ntype Extended = [ExtendedIconFile] extends [never] // NOTE: ExtendedIconFileがneverならKnownIconTypeは拡張されていない\n ? false\n : true\n\nexport class PixivIcon extends BaseElement {\n static readonly tagName = 'pixiv-icon'\n\n static extend(\n map: Extended extends true\n ? Record<ExtendedIconFile, string>\n : Record<string, string>\n ) {\n warning(!__SERVER__, 'Using `PixivIcon.extend()` on server has no effect')\n if (__SERVER__) {\n return\n }\n\n Object.entries(map).forEach(([name, url]) => {\n if (!name.includes('/')) {\n throw new TypeError(\n `${name} is not a valid icon name. \"name\" must be named like [size]/[Name].`\n )\n }\n\n loaders.set(name, function customLoader() {\n return loadFromRawUrl(url)\n })\n })\n }\n\n static get observedAttributes() {\n return attributes\n }\n\n private svgContent?: string\n private observer?: IntersectionObserver\n\n get props() {\n const partial = Object.fromEntries(\n attributes.map((attribute) => [attribute, this.getAttribute(attribute)])\n ) as Record<typeof attributes[number], string | null>\n\n const name = partial.name\n\n if (name === null) {\n throw new TypeError('property \"name\" is required.')\n }\n\n if (!name.includes('/')) {\n throw new TypeError(\n `${name} is not a valid icon name. \"name\" must be named like [size]/[Name].`\n )\n }\n\n return {\n ...partial,\n name,\n }\n }\n\n get forceResizedSize() {\n if (this.props['unsafe-non-guideline-scale'] === null) {\n return null\n }\n\n const [size] = this.props.name.split('/')\n const scale = Number(this.props['unsafe-non-guideline-scale'])\n\n switch (size) {\n case 'Inline': {\n return 16 * scale\n }\n\n default: {\n return Number(size) * scale\n }\n }\n }\n\n get scaledSize() {\n const [size] = this.props.name.split('/')\n\n const scale = Number(this.props.scale ?? '1')\n\n switch (size) {\n case 'Inline': {\n switch (scale) {\n case 2: {\n return 32\n }\n\n default: {\n return 16\n }\n }\n }\n\n case '24': {\n return Number(size) * scale\n }\n\n default: {\n return Number(size)\n }\n }\n }\n\n constructor() {\n super()\n this.attachShadow({ mode: 'open' })\n }\n\n connectedCallback() {\n this.render()\n this.update()\n }\n\n disconnectedCallback() {\n this.observer?.disconnect()\n this.observer = undefined\n }\n\n attributeChangedCallback() {\n this.update()\n }\n\n render() {\n const size = this.forceResizedSize ?? this.scaledSize\n\n const style = sanitize(\n `<style>\n :host {\n display: inline-flex;\n --size: ${size}px;\n }\n\n svg {\n width: var(--size);\n height: var(--size);\n }\n</style>`,\n { ALLOWED_TAGS: ['style'], FORCE_BODY: true }\n )\n\n const svg = sanitize(\n this.svgContent !== undefined\n ? this.svgContent\n : `<svg viewBox=\"0 0 ${size} ${size}\"></svg>`,\n { USE_PROFILES: { svg: true, svgFilters: true } }\n )\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.shadowRoot!.innerHTML = style + svg\n }\n\n private update() {\n void this.waitUntilVisible().then(async () => {\n const { name } = this.props\n const loader = loaders.get(name) ?? loadFromFile\n\n this.svgContent = await loader(name)\n this.render()\n })\n }\n\n private waitUntilVisible() {\n return new Promise<void>((resolve) => {\n this.observer = new IntersectionObserver(\n ([first]) => {\n if (first.isIntersecting) {\n this.observer?.disconnect()\n this.observer = undefined\n resolve()\n }\n },\n { rootMargin: `${ROOT_MARGIN}px` }\n )\n\n this.observer.observe(this)\n })\n }\n}\n","/** This file is auto generated. DO NOT EDIT BY HAND. */\n\n/* eslint-disable */\n\n// prettier-ignore\nexport const KNOWN_ICON_FILES = [\"32/ShareIos\",\"32/Dot\",\"32/Message\",\"32/Gift\",\"32/Close\",\"32/Prev\",\"32/Next\",\"32/PullDown\",\"32/PullUp\",\"32/Expand\",\"32/Collapse\",\"32/Edit\",\"32/ShareAndroid\",\"32/BookmarkOff\",\"32/BookmarkOn\",\"32/NovelViewerSettings\",\"32/CommentOff\",\"32/CommentOn\",\"32/Home\",\"32/Index\",\"32/Serif\",\"32/Camera\",\"32/Delete\",\"32/Pan\",\"32/RollVertical\",\"32/RollHorizontal\",\"32/ZoomIn\",\"32/Upload\",\"32/Shopping\",\"32/User\",\"32/HorizontalWriting\",\"32/Notification\",\"32/SansSerif\",\"32/VerticalWriting\",\"32/NotificationOff\",\"24/Expand\",\"24/Collapse\",\"24/Close\",\"24/Pencil\",\"24/PencilDraw\",\"24/PencilText\",\"24/Reorder\",\"24/Add\",\"24/Subtract\",\"24/Star\",\"24/Check\",\"24/Send\",\"24/LockLock\",\"24/LockUnlock\",\"24/Up\",\"24/Down\",\"24/ReloadLoop\",\"24/Reload\",\"24/Options\",\"24/CommentOutline\",\"24/Trash\",\"24/TrashAlt\",\"24/ShareIos\",\"24/ViewGrid3Columns\",\"24/ViewGrid2Columns\",\"24/ViewList\",\"24/Upload\",\"24/UploadAlt\",\"24/DownloadAlt\",\"24/ArrowUp\",\"24/LikeOff\",\"24/LikeOn\",\"24/ArrowDown\",\"24/OptionsAlt\",\"24/PencilLive\",\"24/OpenInNew\",\"24/Settings\",\"24/Roll\",\"24/Calendar\",\"24/Save\",\"24/Logout\",\"24/CommentFill\",\"24/ShareAndroid\",\"16/More\",\"16/Back\",\"16/Search\",\"16/Add\",\"16/Check\",\"16/Menu\",\"16/Dot\",\"16/Book\",\"16/ArrowDown\",\"16/Speaker\",\"16/Remove\",\"16/BookmarkOn\",\"16/BookmarkOff\",\"16/Filter\",\"16/Error\",\"16/Info\",\"16/Pencil\",\"Inline/LikeOff\",\"Inline/View\",\"Inline/BookmarkOff\",\"Inline/BookmarkOn\",\"Inline/Breadcrumbs\",\"Inline/More\",\"Inline/ImageResponse\",\"Inline/Lock\",\"Inline/External\",\"Inline/Location\",\"Inline/View\",\"Inline/Like\",\"Inline/Smile\",\"Inline/SmileOn\",\"Inline/Check\",\"Inline/List\",\"Inline/ContextMenu\",\"Inline/Add\",\"Inline/Remove\",\"Inline/Images\",\"Inline/Nextworks\",\"Inline/Filter\",\"Inline/Users\",\"24/Next\",\"24/PullDown\",\"24/PullUp\",\"24/Prev\",\"24/Dot\",\"24/Notification\",\"24/NotificationOff\",\"24/Search\",\"24/Menu\",\"24/Index\",\"24/Services\",\"24/Error\",\"24/Home\",\"24/Warning\",\"24/Info\",\"24/QuestionOutline\",\"24/ChatBot\",\"24/ErrorOctagon\",\"24/Question\",\"24/Alart\",\"24/DotAlt\",\"24/ImageHidden\",\"24/AddRubi\",\"24/ImageReplace\",\"24/Text\",\"24/AddText\",\"24/FormatAlignRight\",\"24/FormatAlignLeft\",\"24/FormatAlignCenter\",\"24/AddImage\",\"24/ImgContain\",\"24/ImgCover\",\"24/BringForward\",\"24/BringBackward\",\"24/RotateRight\",\"24/Palette\",\"24/Duplicate\",\"24/FormatLineSpacing\",\"24/FormatLetterSpacing\",\"24/Rotate90DegreesCc\",\"24/Rotate90DegreesC\",\"24/FormatFontSize\",\"24/FormatFontFamily\",\"24/FormatColorFill\",\"24/FormatColorFillNoColor\",\"24/ChromaticAberration\",\"24/Move1\",\"24/Play\",\"24/Pause\",\"24/Microphone\",\"24/PauseAlt\",\"24/CameraVideo\",\"24/Camera\",\"24/Fov\",\"24/Sun\",\"24/Shutter\",\"24/Contrast\",\"24/FrameEffect\",\"24/Hue\",\"24/Saturation\",\"24/Glow\",\"24/Binet\",\"24/Overlay\",\"24/Flare\",\"24/Dust\",\"24/Temperature\",\"24/Filter\",\"24/Usagi\",\"24/Set\",\"24/Gift\",\"24/MobilePhone\",\"24/Users\",\"24/AddPeople\",\"24/Person\",\"24/Emoji\",\"24/Shopping\",\"24/UsagiAlt\",\"24/Fashion\",\"24/FaceEdit\",\"24/DeviceRotation\",\"24/Ar\",\"24/FrameSize\",\"24/Body\",\"24/BodyEdit\",\"24/HairEdit\",\"24/ItemRemove\",\"24/AddModel\",\"24/ChangeCharactor\",\"24/Pose\",\"24/Show\",\"24/ShowOutline\",\"24/Hide\",\"24/Idea\",\"24/Book\",\"24/Message\",\"24/Images\",\"24/Image\",\"24/Video\",\"24/Hashtag\",\"24/ImageAlt\",\"24/Discovery\",\"24/Description\",\"24/File\",\"24/Archive\",\"24/Invoice\",\"24/Announcement\",\"24/Link\",\"24/Manga\",\"24/Novels\",\"24/Contest\",\"24/LatestWorks\",\"24/Ranking\",\"24/Feed\",\"24/Groups\",\"24/Events\",\"24/Projects\",\"24/Codes\",\"24/Invalid\",\"32/LikeOff\",\"32/LikeOn\",\"32/LikeOnPrivate\",\"24/ImageHidden\",\"Inline/Folder\",\"Inline/Pencil\",\"Inline/Comment\"] as const;\n\nexport type KnownIconFile = typeof KNOWN_ICON_FILES[number]\n\n/* eslint-enable */\n","import { PixivIcon, Props } from './PixivIcon'\nimport { __SERVER__ } from './ssr'\nexport { PixivIcon, type KnownIconType, type Props } from './PixivIcon'\nexport { KNOWN_ICON_FILES } from './filenames'\nexport { PixivIconLoadError } from './loaders'\n\ndeclare global {\n interface Window {\n PixivIcon: typeof PixivIcon\n }\n\n // eslint-disable-next-line @typescript-eslint/no-namespace\n export namespace JSX {\n interface IntrinsicElements {\n 'pixiv-icon': Props\n }\n }\n}\n\nif (!__SERVER__) {\n // TODO: HMR対応\n if (!window.customElements.get(PixivIcon.tagName)) {\n window.PixivIcon = PixivIcon\n window.customElements.define(PixivIcon.tagName, PixivIcon)\n }\n}\n"],"names":["cache","Map","PixivIconLoadError","Error","constructor","message","super","Object","setPrototypeOf","this","createLoader","getPath","attributeName","has","get","rawSvg","then","path","fetch","response","ok","text","set","loaders","Promise","resolve","async","size","name","split","default","filename","encodeURIComponent","__SERVER__","window","CAN_USE_DOM","HTMLElement","BaseElement","loadFromFile","loadFromRawUrl","defaultLoaders","attributes","PixivIcon","static","map","warning","entries","forEach","url","includes","TypeError","observedAttributes","props","partial","fromEntries","attribute","getAttribute","forceResizedSize","scale","Number","scaledSize","svgContent","observer","attachShadow","mode","connectedCallback","render","update","disconnectedCallback","disconnect","undefined","attributeChangedCallback","style","sanitize","ALLOWED_TAGS","FORCE_BODY","svg","USE_PROFILES","svgFilters","shadowRoot","innerHTML","waitUntilVisible","_this","loader","IntersectionObserver","first","isIntersecting","rootMargin","observe","tagName","KNOWN_ICON_FILES","customElements","define"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import e from"warning";import{sanitize as t}from"dompurify";function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function r(){return r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,u(e,t)}function i(e){return i=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},i(e)}function u(e,t){return u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},u(e,t)}function c(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function s(e,t,n){return s=c()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&u(o,n.prototype),o},s.apply(null,arguments)}function a(e){var t="function"==typeof Map?new Map:void 0;return a=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return s(e,arguments,i(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),u(n,e)},a(e)}var l=new Map,f=/*#__PURE__*/function(e){function t(n){var r;return r=e.call(this,n)||this,Object.setPrototypeOf(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r),this instanceof t?this.constructor:void 0),r}return o(t,e),t}(/*#__PURE__*/a(Error));function p(e){return function(t){try{return l.has(t)?Promise.resolve(l.get(t)):Promise.resolve(e(t).then(function(e){return fetch(e)}).then(function(e){if(!e.ok)throw new f('Failed to fetch <pixiv-icon name="'+t+'">');return e.text()})).then(function(e){return l.set(t,e),e})}catch(e){return Promise.reject(e)}}}var v={loadFromRawUrl:p(function(e){return Promise.resolve(e)}),loadFromFile:p(function(e){try{var t=e.split("/"),n=t[1];return Promise.resolve(import("../svg/"+encodeURIComponent(t[0])+"/"+encodeURIComponent(n)+".svg")).then(function(e){return e.default})}catch(e){return Promise.reject(e)}})},d="undefined"==typeof window,h="undefined"!=typeof HTMLElement,m=!d&&h?HTMLElement:/*#__PURE__*/function(){return function(){}}(),b=v.loadFromFile,y=v.loadFromRawUrl,g=["name","scale","unsafe-non-guideline-scale"],w=new Map,O=/*#__PURE__*/function(i){function u(){var e;return(e=i.call(this)||this).svgContent=void 0,e.observer=void 0,e.attachShadow({mode:"open"}),e}o(u,i),u.extend=function(t){e(!d,"Using `PixivIcon.extend()` on server has no effect"),d||Object.entries(t).forEach(function(e){var t=e[0],n=e[1];if(!t.includes("/"))throw new TypeError(t+' is not a valid icon name. "name" must be named like [size]/[Name].');w.set(t,function(){return y(n)})})};var c,s,a,l=u.prototype;return l.connectedCallback=function(){this.render(),this.update()},l.disconnectedCallback=function(){var e;null==(e=this.observer)||e.disconnect(),this.observer=void 0},l.attributeChangedCallback=function(){this.update()},l.render=function(){var e,n=null!=(e=this.forceResizedSize)?e:this.scaledSize,r=t("<style>\n :host {\n display: inline-flex;\n --size: "+n+"px;\n }\n\n svg {\n width: var(--size);\n height: var(--size);\n }\n</style>",{ALLOWED_TAGS:["style"],FORCE_BODY:!0}),o=t(void 0!==this.svgContent?this.svgContent:'<svg viewBox="0 0 '+n+" "+n+'"></svg>',{USE_PROFILES:{svg:!0,svgFilters:!0}});this.shadowRoot.innerHTML=r+o},l.update=function(){var e=this;this.waitUntilVisible().then(function(){try{var t,n=e.props.name,r=null!=(t=w.get(n))?t:b;return Promise.resolve(r(n)).then(function(t){e.svgContent=t,e.render()})}catch(e){return Promise.reject(e)}})},l.waitUntilVisible=function(){var e=this;return new Promise(function(t){e.observer=new IntersectionObserver(function(n){var r;n[0].isIntersecting&&(null==(r=e.observer)||r.disconnect(),e.observer=void 0,t())},{rootMargin:"50px"}),e.observer.observe(e)})},c=u,a=[{key:"observedAttributes",get:function(){return g}}],(s=[{key:"props",get:function(){var e=this,t=Object.fromEntries(g.map(function(t){return[t,e.getAttribute(t)]})),n=t.name;if(null===n)throw new TypeError('property "name" is required.');if(!n.includes("/"))throw new TypeError(n+' is not a valid icon name. "name" must be named like [size]/[Name].');return r({},t,{name:n})}},{key:"forceResizedSize",get:function(){if(null===this.props["unsafe-non-guideline-scale"])return null;var e=this.props.name.split("/")[0],t=Number(this.props["unsafe-non-guideline-scale"]);return"Inline"===e?16*t:Number(e)*t}},{key:"scaledSize",get:function(){var e,t=this.props.name.split("/")[0],n=Number(null!=(e=this.props.scale)?e:"1");switch(t){case"Inline":return 2===n?32:16;case"24":return Number(t)*n;default:return Number(t)}}}])&&n(c.prototype,s),a&&n(c,a),Object.defineProperty(c,"prototype",{writable:!1}),u}(m);O.tagName="pixiv-icon",d||window.customElements.get(O.tagName)||(window.PixivIcon=O,window.customElements.define(O.tagName,O));export{O as PixivIcon,f as PixivIconLoadError};
1
+ import e from"warning";import{sanitize as n}from"dompurify";function t(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function r(){return r=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},r.apply(this,arguments)}function o(e,n){e.prototype=Object.create(n.prototype),e.prototype.constructor=e,a(e,n)}function i(e){return i=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},i(e)}function a(e,n){return a=Object.setPrototypeOf||function(e,n){return e.__proto__=n,e},a(e,n)}function l(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function s(e,n,t){return s=l()?Reflect.construct:function(e,n,t){var r=[null];r.push.apply(r,n);var o=new(Function.bind.apply(e,r));return t&&a(o,t.prototype),o},s.apply(null,arguments)}function c(e){var n="function"==typeof Map?new Map:void 0;return c=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(e))return n.get(e);n.set(e,t)}function t(){return s(e,arguments,i(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),a(t,e)},c(e)}var u=new Map,f=/*#__PURE__*/function(e){function n(t){var r;return r=e.call(this,t)||this,Object.setPrototypeOf(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r),this instanceof n?this.constructor:void 0),r}return o(n,e),n}(/*#__PURE__*/c(Error));function d(e){return function(n){try{return u.has(n)?Promise.resolve(u.get(n)):Promise.resolve(e(n).then(function(e){return fetch(e)}).then(function(e){if(!e.ok)throw new f('Failed to fetch <pixiv-icon name="'+n+'">');return e.text()})).then(function(e){return u.set(n,e),e})}catch(e){return Promise.reject(e)}}}var p={loadFromRawUrl:d(function(e){return Promise.resolve(e)}),loadFromFile:d(function(e){try{var n=e.split("/"),t=n[1];return Promise.resolve(import("../svg/"+encodeURIComponent(n[0])+"/"+encodeURIComponent(t)+".svg")).then(function(e){return e.default})}catch(e){return Promise.reject(e)}})},m="undefined"==typeof window,v="undefined"!=typeof HTMLElement,h=!m&&v?HTMLElement:/*#__PURE__*/function(){return function(){}}(),g=p.loadFromFile,w=p.loadFromRawUrl,I=["name","scale","unsafe-non-guideline-scale"],b=new Map,y=/*#__PURE__*/function(i){function a(){var e;return(e=i.call(this)||this).svgContent=void 0,e.observer=void 0,e.attachShadow({mode:"open"}),e}o(a,i),a.extend=function(n){e(!m,"Using `PixivIcon.extend()` on server has no effect"),m||Object.entries(n).forEach(function(e){var n=e[0],t=e[1];if(!n.includes("/"))throw new TypeError(n+' is not a valid icon name. "name" must be named like [size]/[Name].');b.set(n,function(){return w(t)})})};var l,s,c,u=a.prototype;return u.connectedCallback=function(){this.render(),this.update()},u.disconnectedCallback=function(){var e;null==(e=this.observer)||e.disconnect(),this.observer=void 0},u.attributeChangedCallback=function(){this.update()},u.render=function(){var e,t=null!=(e=this.forceResizedSize)?e:this.scaledSize,r=n("<style>\n :host {\n display: inline-flex;\n --size: "+t+"px;\n }\n\n svg {\n width: var(--size);\n height: var(--size);\n }\n</style>",{ALLOWED_TAGS:["style"],FORCE_BODY:!0}),o=n(void 0!==this.svgContent?this.svgContent:'<svg viewBox="0 0 '+t+" "+t+'"></svg>',{USE_PROFILES:{svg:!0,svgFilters:!0}});this.shadowRoot.innerHTML=r+o},u.update=function(){var e=this;this.waitUntilVisible().then(function(){try{var n,t=e.props.name,r=null!=(n=b.get(t))?n:g;return Promise.resolve(r(t)).then(function(n){e.svgContent=n,e.render()})}catch(e){return Promise.reject(e)}})},u.waitUntilVisible=function(){var e=this;return new Promise(function(n){e.observer=new IntersectionObserver(function(t){var r;t[0].isIntersecting&&(null==(r=e.observer)||r.disconnect(),e.observer=void 0,n())},{rootMargin:"50px"}),e.observer.observe(e)})},l=a,c=[{key:"observedAttributes",get:function(){return I}}],(s=[{key:"props",get:function(){var e=this,n=Object.fromEntries(I.map(function(n){return[n,e.getAttribute(n)]})),t=n.name;if(null===t)throw new TypeError('property "name" is required.');if(!t.includes("/"))throw new TypeError(t+' is not a valid icon name. "name" must be named like [size]/[Name].');return r({},n,{name:t})}},{key:"forceResizedSize",get:function(){if(null===this.props["unsafe-non-guideline-scale"])return null;var e=this.props.name.split("/")[0],n=Number(this.props["unsafe-non-guideline-scale"]);return"Inline"===e?16*n:Number(e)*n}},{key:"scaledSize",get:function(){var e,n=this.props.name.split("/")[0],t=Number(null!=(e=this.props.scale)?e:"1");switch(n){case"Inline":return 2===t?32:16;case"24":return Number(n)*t;default:return Number(n)}}}])&&t(l.prototype,s),c&&t(l,c),Object.defineProperty(l,"prototype",{writable:!1}),a}(h);y.tagName="pixiv-icon";var O=["32/ShareIos","32/Dot","32/Message","32/Gift","32/Close","32/Prev","32/Next","32/PullDown","32/PullUp","32/Expand","32/Collapse","32/Edit","32/ShareAndroid","32/BookmarkOff","32/BookmarkOn","32/NovelViewerSettings","32/CommentOff","32/CommentOn","32/Home","32/Index","32/Serif","32/Camera","32/Delete","32/Pan","32/RollVertical","32/RollHorizontal","32/ZoomIn","32/Upload","32/Shopping","32/User","32/HorizontalWriting","32/Notification","32/SansSerif","32/VerticalWriting","32/NotificationOff","24/Expand","24/Collapse","24/Close","24/Pencil","24/PencilDraw","24/PencilText","24/Reorder","24/Add","24/Subtract","24/Star","24/Check","24/Send","24/LockLock","24/LockUnlock","24/Up","24/Down","24/ReloadLoop","24/Reload","24/Options","24/CommentOutline","24/Trash","24/TrashAlt","24/ShareIos","24/ViewGrid3Columns","24/ViewGrid2Columns","24/ViewList","24/Upload","24/UploadAlt","24/DownloadAlt","24/ArrowUp","24/LikeOff","24/LikeOn","24/ArrowDown","24/OptionsAlt","24/PencilLive","24/OpenInNew","24/Settings","24/Roll","24/Calendar","24/Save","24/Logout","24/CommentFill","24/ShareAndroid","16/More","16/Back","16/Search","16/Add","16/Check","16/Menu","16/Dot","16/Book","16/ArrowDown","16/Speaker","16/Remove","16/BookmarkOn","16/BookmarkOff","16/Filter","16/Error","16/Info","16/Pencil","Inline/LikeOff","Inline/View","Inline/BookmarkOff","Inline/BookmarkOn","Inline/Breadcrumbs","Inline/More","Inline/ImageResponse","Inline/Lock","Inline/External","Inline/Location","Inline/View","Inline/Like","Inline/Smile","Inline/SmileOn","Inline/Check","Inline/List","Inline/ContextMenu","Inline/Add","Inline/Remove","Inline/Images","Inline/Nextworks","Inline/Filter","Inline/Users","24/Next","24/PullDown","24/PullUp","24/Prev","24/Dot","24/Notification","24/NotificationOff","24/Search","24/Menu","24/Index","24/Services","24/Error","24/Home","24/Warning","24/Info","24/QuestionOutline","24/ChatBot","24/ErrorOctagon","24/Question","24/Alart","24/DotAlt","24/ImageHidden","24/AddRubi","24/ImageReplace","24/Text","24/AddText","24/FormatAlignRight","24/FormatAlignLeft","24/FormatAlignCenter","24/AddImage","24/ImgContain","24/ImgCover","24/BringForward","24/BringBackward","24/RotateRight","24/Palette","24/Duplicate","24/FormatLineSpacing","24/FormatLetterSpacing","24/Rotate90DegreesCc","24/Rotate90DegreesC","24/FormatFontSize","24/FormatFontFamily","24/FormatColorFill","24/FormatColorFillNoColor","24/ChromaticAberration","24/Move1","24/Play","24/Pause","24/Microphone","24/PauseAlt","24/CameraVideo","24/Camera","24/Fov","24/Sun","24/Shutter","24/Contrast","24/FrameEffect","24/Hue","24/Saturation","24/Glow","24/Binet","24/Overlay","24/Flare","24/Dust","24/Temperature","24/Filter","24/Usagi","24/Set","24/Gift","24/MobilePhone","24/Users","24/AddPeople","24/Person","24/Emoji","24/Shopping","24/UsagiAlt","24/Fashion","24/FaceEdit","24/DeviceRotation","24/Ar","24/FrameSize","24/Body","24/BodyEdit","24/HairEdit","24/ItemRemove","24/AddModel","24/ChangeCharactor","24/Pose","24/Show","24/ShowOutline","24/Hide","24/Idea","24/Book","24/Message","24/Images","24/Image","24/Video","24/Hashtag","24/ImageAlt","24/Discovery","24/Description","24/File","24/Archive","24/Invoice","24/Announcement","24/Link","24/Manga","24/Novels","24/Contest","24/LatestWorks","24/Ranking","24/Feed","24/Groups","24/Events","24/Projects","24/Codes","24/Invalid","32/LikeOff","32/LikeOn","32/LikeOnPrivate","24/ImageHidden","Inline/Folder","Inline/Pencil","Inline/Comment"];m||window.customElements.get(y.tagName)||(window.PixivIcon=y,window.customElements.define(y.tagName,y));export{O as KNOWN_ICON_FILES,y as PixivIcon,f as PixivIconLoadError};
2
2
  //# sourceMappingURL=index.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.module.js","sources":["../src/loaders.ts","../src/ssr.ts","../src/PixivIcon.ts","../src/index.ts"],"sourcesContent":["const cache = new Map<string, string>()\n\ninterface SvgModule {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __esModule: true\n default: string\n}\n\nexport class PixivIconLoadError extends Error {\n constructor(message?: string) {\n super(message)\n Object.setPrototypeOf(this, new.target)\n }\n}\n\nfunction createLoader(getPath: (attributeName: string) => Promise<string>) {\n return async function getSvgString(attributeName: string): Promise<string> {\n if (cache.has(attributeName)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return cache.get(attributeName)!\n }\n\n const rawSvg = await getPath(attributeName)\n .then((path) => fetch(path))\n .then((response) => {\n if (!response.ok) {\n throw new PixivIconLoadError(\n `Failed to fetch <pixiv-icon name=\"${attributeName}\">`\n )\n }\n\n return response.text()\n })\n\n cache.set(attributeName, rawSvg)\n\n return rawSvg\n }\n}\n\nexport type Loader = ReturnType<typeof createLoader>\n\nconst loadFromRawUrl: Loader = createLoader((attributeName) =>\n Promise.resolve(attributeName)\n)\n\nconst loadFromFile: Loader = createLoader(async (attributeName) => {\n const [size, name] = attributeName.split('/')\n\n const { default: filename } = (await import(\n `../svg/${encodeURIComponent(size)}/${encodeURIComponent(name)}.svg`\n )) as SvgModule\n\n return filename\n})\n\nexport const loaders = { loadFromRawUrl, loadFromFile }\n","export const __SERVER__ = typeof window === 'undefined'\n\nconst CAN_USE_DOM = typeof HTMLElement !== 'undefined'\n\n/**\n * NOTICE: SSR 環境では `extends HTMLElement` できない\n *\n * @see https://github.com/vuejs/core/blob/9c304bfe7942a20264235865b4bb5f6e53fdee0d/packages/runtime-dom/src/apiCustomElement.ts#L143-L145\n */\nexport const BaseElement = (\n !__SERVER__ && CAN_USE_DOM ? HTMLElement : class {}\n) as typeof HTMLElement\n","import type React from 'react'\nimport warning from 'warning'\nimport { KnownIconFile } from './filenames'\nimport { loaders as defaultLoaders, Loader } from './loaders'\nimport { BaseElement, __SERVER__ } from './ssr'\nimport { sanitize } from 'dompurify'\n\nconst { loadFromFile, loadFromRawUrl } = defaultLoaders\n\nconst attributes = ['name', 'scale', 'unsafe-non-guideline-scale'] as const\n\nconst ROOT_MARGIN = 50\n\nexport interface KnownIconType extends Record<KnownIconFile, unknown> {}\n\nexport interface Props\n extends Omit<\n React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>,\n 'className'\n > {\n name: keyof KnownIconType\n scale?: 1 | 2 | 3 | '1' | '2' | '3'\n 'unsafe-non-guideline-scale'?: number | string\n\n // CustomElements は className が使えない。class と書く必要がある\n // https://ja.reactjs.org/docs/web-components.html#using-web-components-in-react\n class?: string\n}\n\nconst loaders = new Map<string, Loader>()\n\ntype ExtendedIconFile = Exclude<keyof KnownIconType, KnownIconFile>\ntype Extended = [ExtendedIconFile] extends [never] // NOTE: ExtendedIconFileがneverならKnownIconTypeは拡張されていない\n ? false\n : true\n\nexport class PixivIcon extends BaseElement {\n static readonly tagName = 'pixiv-icon'\n\n static extend(\n map: Extended extends true\n ? Record<ExtendedIconFile, string>\n : Record<string, string>\n ) {\n warning(!__SERVER__, 'Using `PixivIcon.extend()` on server has no effect')\n if (__SERVER__) {\n return\n }\n\n Object.entries(map).forEach(([name, url]) => {\n if (!name.includes('/')) {\n throw new TypeError(\n `${name} is not a valid icon name. \"name\" must be named like [size]/[Name].`\n )\n }\n\n loaders.set(name, function customLoader() {\n return loadFromRawUrl(url)\n })\n })\n }\n\n static get observedAttributes() {\n return attributes\n }\n\n private svgContent?: string\n private observer?: IntersectionObserver\n\n get props() {\n const partial = Object.fromEntries(\n attributes.map((attribute) => [attribute, this.getAttribute(attribute)])\n ) as Record<typeof attributes[number], string | null>\n\n const name = partial.name\n\n if (name === null) {\n throw new TypeError('property \"name\" is required.')\n }\n\n if (!name.includes('/')) {\n throw new TypeError(\n `${name} is not a valid icon name. \"name\" must be named like [size]/[Name].`\n )\n }\n\n return {\n ...partial,\n name,\n }\n }\n\n get forceResizedSize() {\n if (this.props['unsafe-non-guideline-scale'] === null) {\n return null\n }\n\n const [size] = this.props.name.split('/')\n const scale = Number(this.props['unsafe-non-guideline-scale'])\n\n switch (size) {\n case 'Inline': {\n return 16 * scale\n }\n\n default: {\n return Number(size) * scale\n }\n }\n }\n\n get scaledSize() {\n const [size] = this.props.name.split('/')\n\n const scale = Number(this.props.scale ?? '1')\n\n switch (size) {\n case 'Inline': {\n switch (scale) {\n case 2: {\n return 32\n }\n\n default: {\n return 16\n }\n }\n }\n\n case '24': {\n return Number(size) * scale\n }\n\n default: {\n return Number(size)\n }\n }\n }\n\n constructor() {\n super()\n this.attachShadow({ mode: 'open' })\n }\n\n connectedCallback() {\n this.render()\n this.update()\n }\n\n disconnectedCallback() {\n this.observer?.disconnect()\n this.observer = undefined\n }\n\n attributeChangedCallback() {\n this.update()\n }\n\n render() {\n const size = this.forceResizedSize ?? this.scaledSize\n\n const style = sanitize(\n `<style>\n :host {\n display: inline-flex;\n --size: ${size}px;\n }\n\n svg {\n width: var(--size);\n height: var(--size);\n }\n</style>`,\n { ALLOWED_TAGS: ['style'], FORCE_BODY: true }\n )\n\n const svg = sanitize(\n this.svgContent !== undefined\n ? this.svgContent\n : `<svg viewBox=\"0 0 ${size} ${size}\"></svg>`,\n { USE_PROFILES: { svg: true, svgFilters: true } }\n )\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.shadowRoot!.innerHTML = style + svg\n }\n\n private update() {\n void this.waitUntilVisible().then(async () => {\n const { name } = this.props\n const loader = loaders.get(name) ?? loadFromFile\n\n this.svgContent = await loader(name)\n this.render()\n })\n }\n\n private waitUntilVisible() {\n return new Promise<void>((resolve) => {\n this.observer = new IntersectionObserver(\n ([first]) => {\n if (first.isIntersecting) {\n this.observer?.disconnect()\n this.observer = undefined\n resolve()\n }\n },\n { rootMargin: `${ROOT_MARGIN}px` }\n )\n\n this.observer.observe(this)\n })\n }\n}\n","import { PixivIcon, Props } from './PixivIcon'\nimport { __SERVER__ } from './ssr'\nexport { PixivIcon, type KnownIconType, type Props } from './PixivIcon'\nexport { PixivIconLoadError } from './loaders'\n\ndeclare global {\n interface Window {\n PixivIcon: typeof PixivIcon\n }\n\n // eslint-disable-next-line @typescript-eslint/no-namespace\n export namespace JSX {\n interface IntrinsicElements {\n 'pixiv-icon': Props\n }\n }\n}\n\nif (!__SERVER__) {\n // TODO: HMR対応\n if (!window.customElements.get(PixivIcon.tagName)) {\n window.PixivIcon = PixivIcon\n window.customElements.define(PixivIcon.tagName, PixivIcon)\n }\n}\n"],"names":["cache","Map","PixivIconLoadError","message","_this","Object","setPrototypeOf","Error","createLoader","getPath","attributeName","has","get","then","path","fetch","response","ok","text","rawSvg","set","loaders","loadFromRawUrl","Promise","resolve","loadFromFile","split","name","import","encodeURIComponent","__SERVER__","window","CAN_USE_DOM","HTMLElement","BaseElement","defaultLoaders","attributes","PixivIcon","svgContent","observer","attachShadow","mode","extend","map","warning","entries","forEach","url","includes","TypeError","connectedCallback","this","render","update","disconnectedCallback","disconnect","undefined","attributeChangedCallback","size","forceResizedSize","scaledSize","style","sanitize","ALLOWED_TAGS","FORCE_BODY","svg","USE_PROFILES","svgFilters","shadowRoot","innerHTML","waitUntilVisible","_this2","props","loader","_this3","IntersectionObserver","isIntersecting","rootMargin","ROOT_MARGIN","observe","partial","fromEntries","attribute","_this4","getAttribute","scale","Number","tagName","customElements","define"],"mappings":"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"}
1
+ {"version":3,"file":"index.module.js","sources":["../src/loaders.ts","../src/ssr.ts","../src/PixivIcon.ts","../src/filenames.ts","../src/index.ts"],"sourcesContent":["const cache = new Map<string, string>()\n\ninterface SvgModule {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __esModule: true\n default: string\n}\n\nexport class PixivIconLoadError extends Error {\n constructor(message?: string) {\n super(message)\n Object.setPrototypeOf(this, new.target)\n }\n}\n\nfunction createLoader(getPath: (attributeName: string) => Promise<string>) {\n return async function getSvgString(attributeName: string): Promise<string> {\n if (cache.has(attributeName)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return cache.get(attributeName)!\n }\n\n const rawSvg = await getPath(attributeName)\n .then((path) => fetch(path))\n .then((response) => {\n if (!response.ok) {\n throw new PixivIconLoadError(\n `Failed to fetch <pixiv-icon name=\"${attributeName}\">`\n )\n }\n\n return response.text()\n })\n\n cache.set(attributeName, rawSvg)\n\n return rawSvg\n }\n}\n\nexport type Loader = ReturnType<typeof createLoader>\n\nconst loadFromRawUrl: Loader = createLoader((attributeName) =>\n Promise.resolve(attributeName)\n)\n\nconst loadFromFile: Loader = createLoader(async (attributeName) => {\n const [size, name] = attributeName.split('/')\n\n const { default: filename } = (await import(\n `../svg/${encodeURIComponent(size)}/${encodeURIComponent(name)}.svg`\n )) as SvgModule\n\n return filename\n})\n\nexport const loaders = { loadFromRawUrl, loadFromFile }\n","export const __SERVER__ = typeof window === 'undefined'\n\nconst CAN_USE_DOM = typeof HTMLElement !== 'undefined'\n\n/**\n * NOTICE: SSR 環境では `extends HTMLElement` できない\n *\n * @see https://github.com/vuejs/core/blob/9c304bfe7942a20264235865b4bb5f6e53fdee0d/packages/runtime-dom/src/apiCustomElement.ts#L143-L145\n */\nexport const BaseElement = (\n !__SERVER__ && CAN_USE_DOM ? HTMLElement : class {}\n) as typeof HTMLElement\n","import type React from 'react'\nimport warning from 'warning'\nimport { KnownIconFile } from './filenames'\nimport { loaders as defaultLoaders, Loader } from './loaders'\nimport { BaseElement, __SERVER__ } from './ssr'\nimport { sanitize } from 'dompurify'\n\nconst { loadFromFile, loadFromRawUrl } = defaultLoaders\n\nconst attributes = ['name', 'scale', 'unsafe-non-guideline-scale'] as const\n\nconst ROOT_MARGIN = 50\n\nexport interface KnownIconType extends Record<KnownIconFile, unknown> {}\n\nexport interface Props\n extends Omit<\n React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>,\n 'className' | 'css'\n > {\n name: keyof KnownIconType\n scale?: 1 | 2 | 3 | '1' | '2' | '3'\n 'unsafe-non-guideline-scale'?: number | string\n\n // CustomElements は className が使えない。class と書く必要がある\n // https://ja.reactjs.org/docs/web-components.html#using-web-components-in-react\n class?: string\n}\n\nconst loaders = new Map<string, Loader>()\n\ntype ExtendedIconFile = Exclude<keyof KnownIconType, KnownIconFile>\ntype Extended = [ExtendedIconFile] extends [never] // NOTE: ExtendedIconFileがneverならKnownIconTypeは拡張されていない\n ? false\n : true\n\nexport class PixivIcon extends BaseElement {\n static readonly tagName = 'pixiv-icon'\n\n static extend(\n map: Extended extends true\n ? Record<ExtendedIconFile, string>\n : Record<string, string>\n ) {\n warning(!__SERVER__, 'Using `PixivIcon.extend()` on server has no effect')\n if (__SERVER__) {\n return\n }\n\n Object.entries(map).forEach(([name, url]) => {\n if (!name.includes('/')) {\n throw new TypeError(\n `${name} is not a valid icon name. \"name\" must be named like [size]/[Name].`\n )\n }\n\n loaders.set(name, function customLoader() {\n return loadFromRawUrl(url)\n })\n })\n }\n\n static get observedAttributes() {\n return attributes\n }\n\n private svgContent?: string\n private observer?: IntersectionObserver\n\n get props() {\n const partial = Object.fromEntries(\n attributes.map((attribute) => [attribute, this.getAttribute(attribute)])\n ) as Record<typeof attributes[number], string | null>\n\n const name = partial.name\n\n if (name === null) {\n throw new TypeError('property \"name\" is required.')\n }\n\n if (!name.includes('/')) {\n throw new TypeError(\n `${name} is not a valid icon name. \"name\" must be named like [size]/[Name].`\n )\n }\n\n return {\n ...partial,\n name,\n }\n }\n\n get forceResizedSize() {\n if (this.props['unsafe-non-guideline-scale'] === null) {\n return null\n }\n\n const [size] = this.props.name.split('/')\n const scale = Number(this.props['unsafe-non-guideline-scale'])\n\n switch (size) {\n case 'Inline': {\n return 16 * scale\n }\n\n default: {\n return Number(size) * scale\n }\n }\n }\n\n get scaledSize() {\n const [size] = this.props.name.split('/')\n\n const scale = Number(this.props.scale ?? '1')\n\n switch (size) {\n case 'Inline': {\n switch (scale) {\n case 2: {\n return 32\n }\n\n default: {\n return 16\n }\n }\n }\n\n case '24': {\n return Number(size) * scale\n }\n\n default: {\n return Number(size)\n }\n }\n }\n\n constructor() {\n super()\n this.attachShadow({ mode: 'open' })\n }\n\n connectedCallback() {\n this.render()\n this.update()\n }\n\n disconnectedCallback() {\n this.observer?.disconnect()\n this.observer = undefined\n }\n\n attributeChangedCallback() {\n this.update()\n }\n\n render() {\n const size = this.forceResizedSize ?? this.scaledSize\n\n const style = sanitize(\n `<style>\n :host {\n display: inline-flex;\n --size: ${size}px;\n }\n\n svg {\n width: var(--size);\n height: var(--size);\n }\n</style>`,\n { ALLOWED_TAGS: ['style'], FORCE_BODY: true }\n )\n\n const svg = sanitize(\n this.svgContent !== undefined\n ? this.svgContent\n : `<svg viewBox=\"0 0 ${size} ${size}\"></svg>`,\n { USE_PROFILES: { svg: true, svgFilters: true } }\n )\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.shadowRoot!.innerHTML = style + svg\n }\n\n private update() {\n void this.waitUntilVisible().then(async () => {\n const { name } = this.props\n const loader = loaders.get(name) ?? loadFromFile\n\n this.svgContent = await loader(name)\n this.render()\n })\n }\n\n private waitUntilVisible() {\n return new Promise<void>((resolve) => {\n this.observer = new IntersectionObserver(\n ([first]) => {\n if (first.isIntersecting) {\n this.observer?.disconnect()\n this.observer = undefined\n resolve()\n }\n },\n { rootMargin: `${ROOT_MARGIN}px` }\n )\n\n this.observer.observe(this)\n })\n }\n}\n","/** This file is auto generated. DO NOT EDIT BY HAND. */\n\n/* eslint-disable */\n\n// prettier-ignore\nexport const KNOWN_ICON_FILES = [\"32/ShareIos\",\"32/Dot\",\"32/Message\",\"32/Gift\",\"32/Close\",\"32/Prev\",\"32/Next\",\"32/PullDown\",\"32/PullUp\",\"32/Expand\",\"32/Collapse\",\"32/Edit\",\"32/ShareAndroid\",\"32/BookmarkOff\",\"32/BookmarkOn\",\"32/NovelViewerSettings\",\"32/CommentOff\",\"32/CommentOn\",\"32/Home\",\"32/Index\",\"32/Serif\",\"32/Camera\",\"32/Delete\",\"32/Pan\",\"32/RollVertical\",\"32/RollHorizontal\",\"32/ZoomIn\",\"32/Upload\",\"32/Shopping\",\"32/User\",\"32/HorizontalWriting\",\"32/Notification\",\"32/SansSerif\",\"32/VerticalWriting\",\"32/NotificationOff\",\"24/Expand\",\"24/Collapse\",\"24/Close\",\"24/Pencil\",\"24/PencilDraw\",\"24/PencilText\",\"24/Reorder\",\"24/Add\",\"24/Subtract\",\"24/Star\",\"24/Check\",\"24/Send\",\"24/LockLock\",\"24/LockUnlock\",\"24/Up\",\"24/Down\",\"24/ReloadLoop\",\"24/Reload\",\"24/Options\",\"24/CommentOutline\",\"24/Trash\",\"24/TrashAlt\",\"24/ShareIos\",\"24/ViewGrid3Columns\",\"24/ViewGrid2Columns\",\"24/ViewList\",\"24/Upload\",\"24/UploadAlt\",\"24/DownloadAlt\",\"24/ArrowUp\",\"24/LikeOff\",\"24/LikeOn\",\"24/ArrowDown\",\"24/OptionsAlt\",\"24/PencilLive\",\"24/OpenInNew\",\"24/Settings\",\"24/Roll\",\"24/Calendar\",\"24/Save\",\"24/Logout\",\"24/CommentFill\",\"24/ShareAndroid\",\"16/More\",\"16/Back\",\"16/Search\",\"16/Add\",\"16/Check\",\"16/Menu\",\"16/Dot\",\"16/Book\",\"16/ArrowDown\",\"16/Speaker\",\"16/Remove\",\"16/BookmarkOn\",\"16/BookmarkOff\",\"16/Filter\",\"16/Error\",\"16/Info\",\"16/Pencil\",\"Inline/LikeOff\",\"Inline/View\",\"Inline/BookmarkOff\",\"Inline/BookmarkOn\",\"Inline/Breadcrumbs\",\"Inline/More\",\"Inline/ImageResponse\",\"Inline/Lock\",\"Inline/External\",\"Inline/Location\",\"Inline/View\",\"Inline/Like\",\"Inline/Smile\",\"Inline/SmileOn\",\"Inline/Check\",\"Inline/List\",\"Inline/ContextMenu\",\"Inline/Add\",\"Inline/Remove\",\"Inline/Images\",\"Inline/Nextworks\",\"Inline/Filter\",\"Inline/Users\",\"24/Next\",\"24/PullDown\",\"24/PullUp\",\"24/Prev\",\"24/Dot\",\"24/Notification\",\"24/NotificationOff\",\"24/Search\",\"24/Menu\",\"24/Index\",\"24/Services\",\"24/Error\",\"24/Home\",\"24/Warning\",\"24/Info\",\"24/QuestionOutline\",\"24/ChatBot\",\"24/ErrorOctagon\",\"24/Question\",\"24/Alart\",\"24/DotAlt\",\"24/ImageHidden\",\"24/AddRubi\",\"24/ImageReplace\",\"24/Text\",\"24/AddText\",\"24/FormatAlignRight\",\"24/FormatAlignLeft\",\"24/FormatAlignCenter\",\"24/AddImage\",\"24/ImgContain\",\"24/ImgCover\",\"24/BringForward\",\"24/BringBackward\",\"24/RotateRight\",\"24/Palette\",\"24/Duplicate\",\"24/FormatLineSpacing\",\"24/FormatLetterSpacing\",\"24/Rotate90DegreesCc\",\"24/Rotate90DegreesC\",\"24/FormatFontSize\",\"24/FormatFontFamily\",\"24/FormatColorFill\",\"24/FormatColorFillNoColor\",\"24/ChromaticAberration\",\"24/Move1\",\"24/Play\",\"24/Pause\",\"24/Microphone\",\"24/PauseAlt\",\"24/CameraVideo\",\"24/Camera\",\"24/Fov\",\"24/Sun\",\"24/Shutter\",\"24/Contrast\",\"24/FrameEffect\",\"24/Hue\",\"24/Saturation\",\"24/Glow\",\"24/Binet\",\"24/Overlay\",\"24/Flare\",\"24/Dust\",\"24/Temperature\",\"24/Filter\",\"24/Usagi\",\"24/Set\",\"24/Gift\",\"24/MobilePhone\",\"24/Users\",\"24/AddPeople\",\"24/Person\",\"24/Emoji\",\"24/Shopping\",\"24/UsagiAlt\",\"24/Fashion\",\"24/FaceEdit\",\"24/DeviceRotation\",\"24/Ar\",\"24/FrameSize\",\"24/Body\",\"24/BodyEdit\",\"24/HairEdit\",\"24/ItemRemove\",\"24/AddModel\",\"24/ChangeCharactor\",\"24/Pose\",\"24/Show\",\"24/ShowOutline\",\"24/Hide\",\"24/Idea\",\"24/Book\",\"24/Message\",\"24/Images\",\"24/Image\",\"24/Video\",\"24/Hashtag\",\"24/ImageAlt\",\"24/Discovery\",\"24/Description\",\"24/File\",\"24/Archive\",\"24/Invoice\",\"24/Announcement\",\"24/Link\",\"24/Manga\",\"24/Novels\",\"24/Contest\",\"24/LatestWorks\",\"24/Ranking\",\"24/Feed\",\"24/Groups\",\"24/Events\",\"24/Projects\",\"24/Codes\",\"24/Invalid\",\"32/LikeOff\",\"32/LikeOn\",\"32/LikeOnPrivate\",\"24/ImageHidden\",\"Inline/Folder\",\"Inline/Pencil\",\"Inline/Comment\"] as const;\n\nexport type KnownIconFile = typeof KNOWN_ICON_FILES[number]\n\n/* eslint-enable */\n","import { PixivIcon, Props } from './PixivIcon'\nimport { __SERVER__ } from './ssr'\nexport { PixivIcon, type KnownIconType, type Props } from './PixivIcon'\nexport { KNOWN_ICON_FILES } from './filenames'\nexport { PixivIconLoadError } from './loaders'\n\ndeclare global {\n interface Window {\n PixivIcon: typeof PixivIcon\n }\n\n // eslint-disable-next-line @typescript-eslint/no-namespace\n export namespace JSX {\n interface IntrinsicElements {\n 'pixiv-icon': Props\n }\n }\n}\n\nif (!__SERVER__) {\n // TODO: HMR対応\n if (!window.customElements.get(PixivIcon.tagName)) {\n window.PixivIcon = PixivIcon\n window.customElements.define(PixivIcon.tagName, PixivIcon)\n }\n}\n"],"names":["cache","Map","PixivIconLoadError","message","_this","Object","setPrototypeOf","Error","createLoader","getPath","attributeName","has","get","then","path","fetch","response","ok","text","rawSvg","set","loaders","loadFromRawUrl","Promise","resolve","loadFromFile","split","name","import","encodeURIComponent","__SERVER__","window","CAN_USE_DOM","HTMLElement","BaseElement","defaultLoaders","attributes","PixivIcon","svgContent","observer","attachShadow","mode","extend","map","warning","entries","forEach","url","includes","TypeError","connectedCallback","this","render","update","disconnectedCallback","disconnect","undefined","attributeChangedCallback","size","forceResizedSize","scaledSize","style","sanitize","ALLOWED_TAGS","FORCE_BODY","svg","USE_PROFILES","svgFilters","shadowRoot","innerHTML","waitUntilVisible","_this2","props","loader","_this3","IntersectionObserver","isIntersecting","rootMargin","ROOT_MARGIN","observe","partial","fromEntries","attribute","_this4","getAttribute","scale","Number","tagName","KNOWN_ICON_FILES","customElements","define"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@charcoal-ui/icons",
3
- "version": "1.0.1-alpha.2",
3
+ "version": "1.0.1-alpha.3",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "source": "./src/index.ts",
@@ -21,6 +21,7 @@
21
21
  "@types/dompurify": "^2.3.3",
22
22
  "@types/jest": "^27.4.0",
23
23
  "@types/react": "^17.0.38",
24
+ "@types/warning": "^3.0.0",
24
25
  "microbundle": "^0.14.2",
25
26
  "react": "^17.0.2",
26
27
  "rimraf": "^3.0.2",
@@ -44,5 +45,5 @@
44
45
  "url": "https://github.com/pixiv/charcoal.git",
45
46
  "directory": "packages/icons"
46
47
  },
47
- "gitHead": "f68b0533a24b68f4726711fd2f5fb23be1ccba93"
48
+ "gitHead": "0ee189a14a669c9e9f8eb6e08ee517054c6c3691"
48
49
  }
package/src/PixivIcon.ts CHANGED
@@ -16,7 +16,7 @@ export interface KnownIconType extends Record<KnownIconFile, unknown> {}
16
16
  export interface Props
17
17
  extends Omit<
18
18
  React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>,
19
- 'className'
19
+ 'className' | 'css'
20
20
  > {
21
21
  name: keyof KnownIconType
22
22
  scale?: 1 | 2 | 3 | '1' | '2' | '3'
package/src/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { PixivIcon, Props } from './PixivIcon'
2
2
  import { __SERVER__ } from './ssr'
3
3
  export { PixivIcon, type KnownIconType, type Props } from './PixivIcon'
4
+ export { KNOWN_ICON_FILES } from './filenames'
4
5
  export { PixivIconLoadError } from './loaders'
5
6
 
6
7
  declare global {