1212/// <reference path="../dist/events.d.ts" preserve="true" />
1313/// <reference path="../dist/virtuals.d.ts" preserve="true" />
1414
15- import fs from "node:fs" ;
16- import type { IconifyJSON } from "@iconify/types" ;
17- import { icons as heroicons } from "@iconify-json/heroicons" ;
18- import type { AstroIntegration } from "astro" ;
19- import { addVirtualImports , createResolver } from "astro-integration-kit" ;
20- import transitionEventPolyfill from "astro-transition-event-polyfill" ;
21- import { studiocmsLogo } from "./toolbar/icon.js" ;
22- import { generateIconTypes } from "./utils/typegen.js" ;
23-
24- const pkgJson = JSON . parse (
25- fs . readFileSync ( new URL ( "../package.json" , import . meta. url ) , "utf-8" ) ,
26- ) ;
15+ import fs from 'node:fs' ;
16+ import type { IconifyJSON } from '@iconify/types' ;
17+ import { icons as heroicons } from '@iconify-json/heroicons' ;
18+ import type { AstroIntegration } from 'astro' ;
19+ import { addVirtualImports , createResolver } from 'astro-integration-kit' ;
20+ import transitionEventPolyfill from 'astro-transition-event-polyfill' ;
21+ import { studiocmsLogo } from './toolbar/icon.js' ;
22+ import { generateIconTypes } from './utils/typegen.js' ;
23+
24+ const pkgJson = JSON . parse ( fs . readFileSync ( new URL ( '../package.json' , import . meta. url ) , 'utf-8' ) ) ;
2725
2826type Options = {
2927 /**
@@ -78,9 +76,7 @@ type IconifyCollections = {
7876 availableIcons : string [ ] ;
7977} ;
8078
81- export function createIconifyCollection (
82- icons ?: Record < string , IconifyJSON > ,
83- ) : IconifyCollections {
79+ export function createIconifyCollection ( icons ?: Record < string , IconifyJSON > ) : IconifyCollections {
8480 const collections : Record < string , IconifyJSON > = { } ;
8581 const collectionNames : string [ ] = [ ] ;
8682 const availableIcons : string [ ] = [ ] ;
@@ -136,15 +132,13 @@ export default function integration(options: Options = {}): AstroIntegration {
136132 } ;
137133
138134 return {
139- name : " @studiocms/ui" ,
135+ name : ' @studiocms/ui' ,
140136 hooks : {
141137 /* v8 ignore start */
142138 /** Astro integrations cannot be properly tested for code coverage */
143- " astro:config:setup" : ( params ) => {
139+ ' astro:config:setup' : ( params ) => {
144140 const { addDevToolbarApp, injectScript, updateConfig } = params ;
145- const { resolve : rootResolve } = createResolver (
146- params . config . root . pathname ,
147- ) ;
141+ const { resolve : rootResolve } = createResolver ( params . config . root . pathname ) ;
148142
149143 updateConfig ( {
150144 integrations : [ transitionEventPolyfill ( ) ] ,
@@ -161,147 +155,143 @@ export default function integration(options: Options = {}): AstroIntegration {
161155 icons = createIconifyCollection ( optIcons ) ;
162156
163157 const componentMap : Record < string , string > = {
164- " studiocms:ui/components/alert" : `export { default as Alert } from '${ resolve ( " ./components/Alert/Alert.astro" ) } ';` ,
165- " studiocms:ui/components/button" : `export { default as Button } from '${ resolve ( " ./components/Button/Button.astro" ) } ';` ,
166- " studiocms:ui/components/divider" : `export { default as Divider } from '${ resolve ( " ./components/Divider/Divider.astro" ) } ';` ,
167- " studiocms:ui/components/input" : `export { default as Input } from '${ resolve ( " ./components/Input/Input.astro" ) } ';` ,
168- " studiocms:ui/components/textarea" : `export { default as Textarea } from '${ resolve ( " ./components/Textarea/Textarea.astro" ) } ';` ,
169- " studiocms:ui/components/row" : `export { default as Row } from '${ resolve ( " ./components/Row/Row.astro" ) } ';` ,
170- " studiocms:ui/components/center" : `export { default as Center } from '${ resolve ( " ./components/Center/Center.astro" ) } ';` ,
171- " studiocms:ui/components/checkbox" : `export { default as Checkbox } from '${ resolve ( " ./components/Checkbox/Checkbox.astro" ) } ';` ,
172- " studiocms:ui/components/toggle" : `export { default as Toggle } from '${ resolve ( " ./components/Toggle/Toggle.astro" ) } ';` ,
173- " studiocms:ui/components/radiogroup" : `export { default as RadioGroup } from '${ resolve ( " ./components/RadioGroup/RadioGroup.astro" ) } ';` ,
174- " studiocms:ui/components/toaster" : `export { default as Toaster } from '${ resolve ( " ./components/Toast/Toaster.astro" ) } ';` ,
175- " studiocms:ui/components/toaster/client" : `export { toast } from '${ resolve ( " ./components/Toast/toast.js" ) } ';` ,
176- " studiocms:ui/components/card" : `export { default as Card } from '${ resolve ( " ./components/Card/Card.astro" ) } ';` ,
177- " studiocms:ui/components/modal" : `export { default as Modal } from '${ resolve ( " ./components/Modal/Modal.astro" ) } ';` ,
178- " studiocms:ui/components/modal/client" : `export { ModalHelper } from '${ resolve ( " ./components/Modal/modal.js" ) } ';` ,
179- " studiocms:ui/components/select" : `
180- export { default as Select } from '${ resolve ( " ./components/Select/Select.astro" ) } ';
181- export { default as SearchSelect } from '${ resolve ( " ./components/SearchSelect/SearchSelect.astro" ) } ';
158+ ' studiocms:ui/components/alert' : `export { default as Alert } from '${ resolve ( ' ./components/Alert/Alert.astro' ) } ';` ,
159+ ' studiocms:ui/components/button' : `export { default as Button } from '${ resolve ( ' ./components/Button/Button.astro' ) } ';` ,
160+ ' studiocms:ui/components/divider' : `export { default as Divider } from '${ resolve ( ' ./components/Divider/Divider.astro' ) } ';` ,
161+ ' studiocms:ui/components/input' : `export { default as Input } from '${ resolve ( ' ./components/Input/Input.astro' ) } ';` ,
162+ ' studiocms:ui/components/textarea' : `export { default as Textarea } from '${ resolve ( ' ./components/Textarea/Textarea.astro' ) } ';` ,
163+ ' studiocms:ui/components/row' : `export { default as Row } from '${ resolve ( ' ./components/Row/Row.astro' ) } ';` ,
164+ ' studiocms:ui/components/center' : `export { default as Center } from '${ resolve ( ' ./components/Center/Center.astro' ) } ';` ,
165+ ' studiocms:ui/components/checkbox' : `export { default as Checkbox } from '${ resolve ( ' ./components/Checkbox/Checkbox.astro' ) } ';` ,
166+ ' studiocms:ui/components/toggle' : `export { default as Toggle } from '${ resolve ( ' ./components/Toggle/Toggle.astro' ) } ';` ,
167+ ' studiocms:ui/components/radiogroup' : `export { default as RadioGroup } from '${ resolve ( ' ./components/RadioGroup/RadioGroup.astro' ) } ';` ,
168+ ' studiocms:ui/components/toaster' : `export { default as Toaster } from '${ resolve ( ' ./components/Toast/Toaster.astro' ) } ';` ,
169+ ' studiocms:ui/components/toaster/client' : `export { toast } from '${ resolve ( ' ./components/Toast/toast.js' ) } ';` ,
170+ ' studiocms:ui/components/card' : `export { default as Card } from '${ resolve ( ' ./components/Card/Card.astro' ) } ';` ,
171+ ' studiocms:ui/components/modal' : `export { default as Modal } from '${ resolve ( ' ./components/Modal/Modal.astro' ) } ';` ,
172+ ' studiocms:ui/components/modal/client' : `export { ModalHelper } from '${ resolve ( ' ./components/Modal/modal.js' ) } ';` ,
173+ ' studiocms:ui/components/select' : `
174+ export { default as Select } from '${ resolve ( ' ./components/Select/Select.astro' ) } ';
175+ export { default as SearchSelect } from '${ resolve ( ' ./components/SearchSelect/SearchSelect.astro' ) } ';
182176 ` ,
183- " studiocms:ui/components/dropdown" : `export { default as Dropdown } from '${ resolve ( " ./components/Dropdown/Dropdown.astro" ) } ';` ,
184- " studiocms:ui/components/dropdown/client" : `export { DropdownHelper } from '${ resolve ( " ./components/Dropdown/dropdown.js" ) } ';` ,
185- " studiocms:ui/components/user" : `export { default as User } from '${ resolve ( " ./components/User/User.astro" ) } ';` ,
186- " studiocms:ui/components/tabs" : `
187- export { default as Tabs } from '${ resolve ( " ./components/Tabs/Tabs.astro" ) } ';
188- export { default as TabItem } from '${ resolve ( " ./components/Tabs/TabItem.astro" ) } ';
177+ ' studiocms:ui/components/dropdown' : `export { default as Dropdown } from '${ resolve ( ' ./components/Dropdown/Dropdown.astro' ) } ';` ,
178+ ' studiocms:ui/components/dropdown/client' : `export { DropdownHelper } from '${ resolve ( ' ./components/Dropdown/dropdown.js' ) } ';` ,
179+ ' studiocms:ui/components/user' : `export { default as User } from '${ resolve ( ' ./components/User/User.astro' ) } ';` ,
180+ ' studiocms:ui/components/tabs' : `
181+ export { default as Tabs } from '${ resolve ( ' ./components/Tabs/Tabs.astro' ) } ';
182+ export { default as TabItem } from '${ resolve ( ' ./components/Tabs/TabItem.astro' ) } ';
189183 ` ,
190- " studiocms:ui/components/accordion" : `
191- export { default as Accordion } from '${ resolve ( " ./components/Accordion/Accordion.astro" ) } ';
192- export { default as AccordionItem } from '${ resolve ( " ./components/Accordion/Item.astro" ) } ';
184+ ' studiocms:ui/components/accordion' : `
185+ export { default as Accordion } from '${ resolve ( ' ./components/Accordion/Accordion.astro' ) } ';
186+ export { default as AccordionItem } from '${ resolve ( ' ./components/Accordion/Item.astro' ) } ';
193187 ` ,
194- " studiocms:ui/components/footer" : `export { default as Footer } from '${ resolve ( " ./components/Footer/Footer.astro" ) } ';` ,
195- " studiocms:ui/components/progress" : `export { default as Progress } from '${ resolve ( " ./components/Progress/Progress.astro" ) } ';` ,
196- " studiocms:ui/components/progress/client" : `export { ProgressHelper } from '${ resolve ( " ./components/Progress/helper.js" ) } ';` ,
197- " studiocms:ui/components/sidebar" : `
198- export { default as Sidebar } from '${ resolve ( " ./components/Sidebar/Single.astro" ) } ';
199- export { default as DoubleSidebar } from '${ resolve ( " ./components/Sidebar/Double.astro" ) } ';
188+ ' studiocms:ui/components/footer' : `export { default as Footer } from '${ resolve ( ' ./components/Footer/Footer.astro' ) } ';` ,
189+ ' studiocms:ui/components/progress' : `export { default as Progress } from '${ resolve ( ' ./components/Progress/Progress.astro' ) } ';` ,
190+ ' studiocms:ui/components/progress/client' : `export { ProgressHelper } from '${ resolve ( ' ./components/Progress/helper.js' ) } ';` ,
191+ ' studiocms:ui/components/sidebar' : `
192+ export { default as Sidebar } from '${ resolve ( ' ./components/Sidebar/Single.astro' ) } ';
193+ export { default as DoubleSidebar } from '${ resolve ( ' ./components/Sidebar/Double.astro' ) } ';
200194 ` ,
201- " studiocms:ui/components/sidebar/client" : `export { SingleSidebarHelper, DoubleSidebarHelper } from '${ resolve ( " ./components/Sidebar/helpers.js" ) } ';` ,
202- " studiocms:ui/components/breadcrumbs" : `export { default as Breadcrumbs } from '${ resolve ( " ./components/Breadcrumbs/Breadcrumbs.astro" ) } ';` ,
203- " studiocms:ui/components/group" : `export { default as Group } from '${ resolve ( " ./components/Group/Group.astro" ) } ';` ,
204- " studiocms:ui/components/badge" : `export { default as Badge } from '${ resolve ( " ./components/Badge/Badge.astro" ) } ';` ,
205- " studiocms:ui/components/icon" : `
206- export { default as Icon } from '${ resolve ( " ./components/Icon/Icon.astro" ) } ';
207- export { default as IconBase } from '${ resolve ( " ./components/Icon/IconBase.astro" ) } ';
195+ ' studiocms:ui/components/sidebar/client' : `export { SingleSidebarHelper, DoubleSidebarHelper } from '${ resolve ( ' ./components/Sidebar/helpers.js' ) } ';` ,
196+ ' studiocms:ui/components/breadcrumbs' : `export { default as Breadcrumbs } from '${ resolve ( ' ./components/Breadcrumbs/Breadcrumbs.astro' ) } ';` ,
197+ ' studiocms:ui/components/group' : `export { default as Group } from '${ resolve ( ' ./components/Group/Group.astro' ) } ';` ,
198+ ' studiocms:ui/components/badge' : `export { default as Badge } from '${ resolve ( ' ./components/Badge/Badge.astro' ) } ';` ,
199+ ' studiocms:ui/components/icon' : `
200+ export { default as Icon } from '${ resolve ( ' ./components/Icon/Icon.astro' ) } ';
201+ export { default as IconBase } from '${ resolve ( ' ./components/Icon/IconBase.astro' ) } ';
208202 ` ,
209- " studiocms:ui/components/skeleton" : `export { default as Skeleton } from '${ resolve ( " ./components/Skeleton/Skeleton.astro" ) } ';` ,
210- " studiocms:ui/components/tooltip" : `export { default as Tooltip } from '${ resolve ( " ./components/Tooltip/Tooltip.astro" ) } ';` ,
203+ ' studiocms:ui/components/skeleton' : `export { default as Skeleton } from '${ resolve ( ' ./components/Skeleton/Skeleton.astro' ) } ';` ,
204+ ' studiocms:ui/components/tooltip' : `export { default as Tooltip } from '${ resolve ( ' ./components/Tooltip/Tooltip.astro' ) } ';` ,
211205 } ;
212206
213207 const ServerComponents = Object . entries ( componentMap ) . filter (
214- ( [ key ] ) => ! key . endsWith ( " /client" ) ,
208+ ( [ key ] ) => ! key . endsWith ( ' /client' )
215209 ) ;
216210
217211 const ClientComponents = Object . entries ( componentMap ) . filter ( ( [ key ] ) =>
218- key . endsWith ( " /client" ) ,
212+ key . endsWith ( ' /client' )
219213 ) ;
220214
221215 const virtualComponents : Record < string , string > = {
222216 ...componentMap ,
223- "studiocms:ui/components" : ServerComponents . map (
224- ( [ _ , value ] ) => value ,
225- ) . join ( "\n" ) ,
226- "studiocms:ui/components/client" : ClientComponents . map (
227- ( [ _ , value ] ) => value ,
228- ) . join ( "\n" ) ,
217+ 'studiocms:ui/components' : ServerComponents . map ( ( [ _ , value ] ) => value ) . join ( '\n' ) ,
218+ 'studiocms:ui/components/client' : ClientComponents . map ( ( [ _ , value ] ) => value ) . join ( '\n' ) ,
229219 } ;
230220
231221 addVirtualImports ( params , {
232- name : " @studiocms/ui" ,
222+ name : ' @studiocms/ui' ,
233223 imports : {
234224 // Internal Version
235- " studiocms:ui/version" : `export default '${ pkgJson . version } ';` ,
225+ ' studiocms:ui/version' : `export default '${ pkgJson . version } ';` ,
236226 // Styles
237- " studiocms:ui/global-css" : `import '${ resolve ( " ./css/global.css" ) } ';` ,
238- " studiocms:ui/reset-css" : `import '${ resolve ( " ./css/resets.css" ) } ';` ,
239- " studiocms:ui/prose" : `import '${ resolve ( " ./css/prose.css" ) } ';` ,
240- " studiocms:ui/custom-css" : `import '${ rootResolve ( options . customCss ? options . customCss : "" ) } ';` ,
227+ ' studiocms:ui/global-css' : `import '${ resolve ( ' ./css/global.css' ) } ';` ,
228+ ' studiocms:ui/reset-css' : `import '${ resolve ( ' ./css/resets.css' ) } ';` ,
229+ ' studiocms:ui/prose' : `import '${ resolve ( ' ./css/prose.css' ) } ';` ,
230+ ' studiocms:ui/custom-css' : `import '${ rootResolve ( options . customCss ? options . customCss : '' ) } ';` ,
241231 // Scripts
242- " studiocms:ui/scripts/checkbox" : `import '${ resolve ( " ./components/Checkbox/checkbox.js" ) } ';` ,
243- " studiocms:ui/scripts/radiogroup" : `import '${ resolve ( " ./components/RadioGroup/radiogroup.js" ) } ';` ,
244- " studiocms:ui/scripts/searchselect" : `import '${ resolve ( " ./components/SearchSelect/searchselect.js" ) } ';` ,
245- " studiocms:ui/scripts/select" : `import '${ resolve ( " ./components/Select/select.js" ) } ';` ,
246- " studiocms:ui/scripts/tabs" : `import '${ resolve ( " ./components/Tabs/tabs.js" ) } ';` ,
247- " studiocms:ui/scripts/themetoggle" : `import '${ resolve ( " ./components/ThemeToggle/themetoggle.js" ) } ';` ,
248- " studiocms:ui/scripts/toaster" : `import '${ resolve ( " ./components/Toast/toaster.js" ) } ';` ,
249- " studiocms:ui/scripts/toast" : `import '${ resolve ( " ./components/Toast/toast.js" ) } ';` ,
250- " studiocms:ui/scripts/toggle" : `import '${ resolve ( " ./components/Toggle/toggle.js" ) } ';` ,
251- " studiocms:ui/scripts/tooltip" : `import '${ resolve ( " ./components/Tooltip/tooltip.js" ) } ';` ,
252- " studiocms:ui/scripts/accordion" : `import '${ resolve ( " ./components/Accordion/accordion.js" ) } ';` ,
253- " studiocms:ui/scripts/progress" : `import '${ resolve ( " ./components/Progress/progress.js" ) } ';` ,
254- " studiocms:ui/components/select/script" : `
255- export { SUISelectElement } from '${ resolve ( " ./components/Select/select.js" ) } ';
232+ ' studiocms:ui/scripts/checkbox' : `import '${ resolve ( ' ./components/Checkbox/checkbox.js' ) } ';` ,
233+ ' studiocms:ui/scripts/radiogroup' : `import '${ resolve ( ' ./components/RadioGroup/radiogroup.js' ) } ';` ,
234+ ' studiocms:ui/scripts/searchselect' : `import '${ resolve ( ' ./components/SearchSelect/searchselect.js' ) } ';` ,
235+ ' studiocms:ui/scripts/select' : `import '${ resolve ( ' ./components/Select/select.js' ) } ';` ,
236+ ' studiocms:ui/scripts/tabs' : `import '${ resolve ( ' ./components/Tabs/tabs.js' ) } ';` ,
237+ ' studiocms:ui/scripts/themetoggle' : `import '${ resolve ( ' ./components/ThemeToggle/themetoggle.js' ) } ';` ,
238+ ' studiocms:ui/scripts/toaster' : `import '${ resolve ( ' ./components/Toast/toaster.js' ) } ';` ,
239+ ' studiocms:ui/scripts/toast' : `import '${ resolve ( ' ./components/Toast/toast.js' ) } ';` ,
240+ ' studiocms:ui/scripts/toggle' : `import '${ resolve ( ' ./components/Toggle/toggle.js' ) } ';` ,
241+ ' studiocms:ui/scripts/tooltip' : `import '${ resolve ( ' ./components/Tooltip/tooltip.js' ) } ';` ,
242+ ' studiocms:ui/scripts/accordion' : `import '${ resolve ( ' ./components/Accordion/accordion.js' ) } ';` ,
243+ ' studiocms:ui/scripts/progress' : `import '${ resolve ( ' ./components/Progress/progress.js' ) } ';` ,
244+ ' studiocms:ui/components/select/script' : `
245+ export { SUISelectElement } from '${ resolve ( ' ./components/Select/select.js' ) } ';
256246 ` ,
257247 // Components
258248 ...virtualComponents ,
259249
260- " studiocms:ui/utils" : `
261- export { ThemeHelper, Theme } from '${ resolve ( " ./utils/ThemeHelper.js" ) } ';
250+ ' studiocms:ui/utils' : `
251+ export { ThemeHelper, Theme } from '${ resolve ( ' ./utils/ThemeHelper.js' ) } ';
262252 ` ,
263253
264- " studiocms:ui/icons" : `
265- ${ icons . integrationCollections ? icons . integrationCollections : "" }
254+ ' studiocms:ui/icons' : `
255+ ${ icons . integrationCollections ? icons . integrationCollections : '' }
266256 export const availableIcons = ${ JSON . stringify ( icons . availableIcons ) } ;
267257 export const iconCollections = ${ JSON . stringify ( icons . collectionNames ) } ;
268258 ` ,
269259 } ,
270260 } ) ;
271261
272262 if ( ! options . noInjectResetCSS || ! options . noInjectCSS ) {
273- injectScript ( " page-ssr" , `import 'studiocms:ui/reset-css';` ) ;
263+ injectScript ( ' page-ssr' , `import 'studiocms:ui/reset-css';` ) ;
274264 }
275265
276266 if ( ! options . noInjectCSS ) {
277- injectScript ( " page-ssr" , `import 'studiocms:ui/global-css';` ) ;
267+ injectScript ( ' page-ssr' , `import 'studiocms:ui/global-css';` ) ;
278268 }
279269
280270 if ( options . customCss ) {
281- injectScript ( " page-ssr" , `import 'studiocms:ui/custom-css';` ) ;
271+ injectScript ( ' page-ssr' , `import 'studiocms:ui/custom-css';` ) ;
282272 }
283273
284274 addDevToolbarApp ( {
285- id : " studiocms-ui-toolbar" ,
286- name : " StudioCMS/UI" ,
287- entrypoint : resolve ( " ./toolbar/index.js" ) ,
275+ id : ' studiocms-ui-toolbar' ,
276+ name : ' StudioCMS/UI' ,
277+ entrypoint : resolve ( ' ./toolbar/index.js' ) ,
288278 icon : studiocmsLogo ,
289279 } ) ;
290280 } ,
291- " astro:config:done" : ( { injectTypes } ) => {
281+ ' astro:config:done' : ( { injectTypes } ) => {
292282 injectTypes (
293- generateIconTypes ( " icons.d.ts" , {
283+ generateIconTypes ( ' icons.d.ts' , {
294284 collections :
295285 icons . collections && Object . keys ( icons . collections ) . length > 0
296286 ? `${ Object . keys ( icons . collections )
297287 . map ( ( collection ) => {
298288 return `'${ collection } ': import('@studiocms/ui/types').IconifyJSON;` ;
299289 } )
300- . join ( "\n" ) } `
290+ . join ( '\n' ) } `
301291 : 'export const collections: Record<string, import("@studiocms/ui/types").IconifyJSON>;' ,
302292 availableIcons : `('${ icons . availableIcons . join ( "'\n | '" ) } ')[]` ,
303293 iconCollections : `('${ icons . collectionNames . join ( "'\n | '" ) } ')[]` ,
304- } ) ,
294+ } )
305295 ) ;
306296 } ,
307297 /* v8 ignore stop */
0 commit comments