{"id":23660708,"url":"https://github.com/yizzuide/xfdialogbuilder","last_synced_at":"2025-07-23T21:35:21.833Z","repository":{"id":56927920,"uuid":"44650038","full_name":"yizzuide/XFDialogBuilder","owner":"yizzuide","description":"A configable dialog for IOS. Developer can custom mask layer,window size,UI theme,text content,font,layout content,push and pop Animation. ","archived":false,"fork":false,"pushed_at":"2017-07-17T13:24:40.000Z","size":21582,"stargazers_count":66,"open_issues_count":1,"forks_count":14,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-11-29T12:49:36.634Z","etag":null,"topics":["alertview","dialog","ios"],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yizzuide.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-10-21T03:20:29.000Z","updated_at":"2022-04-29T08:49:16.000Z","dependencies_parsed_at":"2022-08-21T06:20:26.630Z","dependency_job_id":null,"html_url":"https://github.com/yizzuide/XFDialogBuilder","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yizzuide%2FXFDialogBuilder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yizzuide%2FXFDialogBuilder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yizzuide%2FXFDialogBuilder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yizzuide%2FXFDialogBuilder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yizzuide","download_url":"https://codeload.github.com/yizzuide/XFDialogBuilder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":231698616,"owners_count":18412843,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alertview","dialog","ios"],"created_at":"2024-12-29T04:00:04.389Z","updated_at":"2024-12-29T04:00:04.971Z","avatar_url":"https://github.com/yizzuide.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"![XFDialogBuilder logo](./ScreenShot/logo.png)\n\n[![CocoaPods](https://img.shields.io/badge/cocoapods-v1.2.9-brightgreen.svg)](http://cocoadocs.org/docsets/XFDialogBuilder)\n![Language](https://img.shields.io/badge/language-ObjC-orange.svg)\n![License](https://img.shields.io/npm/l/express.svg)\n![Version](https://img.shields.io/badge/platform-ios6%2B-green.svg)\n\nA configable dialog for IOS. Developer can custom mask layer,window size,UI theme,text content,font,layout content,push and pop Animation. \n可配置型IOS对话框，使用者定制蒙版层背景、窗口大小、UI主题、文本内容、字体大小、布局内容、弹出消失动画引擎。\n\n![XFDialogBuilder usage](./ScreenShot/usage.gif)\n\n## 前言\n当初项目中要使用对话框处理各种信息，在github和code4app中找了几个中意的，但都不能完全和项目进行融合，这些开源项目动画效果炫、UI很精致，但定制性不强，它们封的太死板了。本想自己随便布个局，就能显示一个对话框，但项目很多地方都要显示这样的对话框，复用性太差，基于此，决定自己搭一个对话框框架模板，然后根据基本模板向下扩展，在项目不停变化，这个框架也经历了多次迭代，做了对正确、错误信息、输入验证的处理，动画引擎的加入，向外提供不同样式的配置字段，这才开源出来。\n\n## XFDialogBuilder框架特点\n1.快速开发，使用OC式JSON搭建界面。\n\n2.相比其它高度封装+酷炫库([SIAlertView](https://github.com/Sumi-Interactive/SIAlertView)、[SCLAlertView](https://github.com/dogo/SCLAlertView)、[AMSmoothAlertView](https://github.com/mtonio91/AMSmoothAlert)等)，本框架UI定制性更强,，需求更符合国情，是真正能拿到自己项目用的。\n\n3.使用者能分别自定义弹入、弹出动画引擎，可使用IOS自带动画方式，也可用其它第三方引擎，如[pop](https://github.com/facebook/pop)、[MMTweenAnimation](https://github.com/adad184/MMTweenAnimation)、[JHChainableAnimations](https://github.com/jhurray/JHChainableAnimations)等（兼容所有UIView动画引擎的嵌入)。\n\n4.扩展性强，提供多种对话框类型，没有提供的类型开发者可自己基于相关模板基类进行扩展。\n\n5.内置强大输入框验证系统，开发者可自定义配置验证规则。\n\n## 安装\n1、通过cocoapods\n\u003e pod 'XFDialogBuilder','1.2.9'\n\n2、手动加入\n\n把XFDialogBuilder整个目录拖入到工程，添加依赖库`pop`（考虑到帮开发者通过`pop`来自定义加入动画引擎，所以有个帮助类依赖于它）。\n\n## Demo运行注意\n需要用命令行:\n\n1.`cd ...XFDialogBuilderExample`(\"...\"要根据自己的路径来)\n\n2.`pod install`\n\n## 开发文档\n### 一、快速开始\n1.导入主头文件`#import \"XFDialogBuilder.h\"`\n\n2.在控制器引用`@property (nonatomic, weak) XFDialogFrame *dialogView;`\n\n3.显示对话框\n\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./ScreenShot/quickstart.png\" alt=\"quickstart\" /\u003e\n\u003c/p\u003e\n\n```objc\n    __weak ViewController *weakSelf = self;\n    self.dialogView =\n    [[[XFDialogNotice dialogWithTitle:@\"提示\"\n                               attrs:@{\n                                          XFDialogTitleViewBackgroundColor : [UIColor grayColor],\n                                          XFDialogNoticeText: @\"确定退出？\",\n                                          XFDialogLineColor : [UIColor darkGrayColor],\n                                          }\n                         commitCallBack:^(NSString *inputText) {\n                             [weakSelf.dialogView hideWithAnimationBlock:nil];\n                         }] showWithAnimationBlock:nil] setCancelCallBack:^{\n                             NSLog(@\"取消对话框！\");\n                         }];\n```\n\n### 二、框架文档\n#### 1.顶级显示容器`XFDialogFrame`\n这是布局的核心类，也作为与`XFMaskView`沟通的桥梁，后者是用来显示和动画执行关键类，所以基于`XFDialogFrame`的子控件具有显示和动画执行的能力，所以开发者不用关心`XFMaskView`。\n\n下图是框架整体结构：\n![XFDialogBuilder framework](./ScreenShot/framework.png)\n\n\n##### 1.1.容器配置属性\n子控件类都会继承自`XFDialogFrame`这些配置：\n```objc\n// 注意：以下属性都有默认设置\n/** 遮罩层背景色 UIColor类型*/\nextern const NSString *XFDialogMaskViewBackgroundColor;\n/** 遮罩层透明度 float类型*/\nextern const NSString *XFDialogMaskViewAlpha;\n/** 对话框仿UIAlterView毛玻璃效果 BOOL类型*/\nextern const NSString *XFDialogEnableBlurEffect;\n/** 对话框大小 CGSize类型*/\nextern const NSString *XFDialogSize; // 如果不设置，会根据当前对话框类型自己计算\n/** 对话框圆角 float类型*/\nextern const NSString *XFDialogCornerRadius;\n/** 对话框背景色 UIColor类型*/\nextern const NSString *XFDialogBackground;\n/** 对话框线条颜色 UIColor类型*/\nextern const NSString *XFDialogLineColor;\n/** 对话框线条宽度 float类型*/\nextern const NSString *XFDialogLineWidth;\n/** 对话框标题背景色 UIColor类型*/\nextern const NSString *XFDialogTitleViewBackgroundColor;\n/** 对话框标题颜色 UIColor类型*/\nextern const NSString *XFDialogTitleColor;\n/** 对话框标题字体大小 float类型*/\nextern const NSString *XFDialogTitleFontSize;\n/** 对话框标题高度 float类型*/\nextern const NSString *XFDialogTitleViewHeight;\n/** 对话框标题对齐方式 枚举NSTextAlignment类型*/\nextern const NSString *XFDialogTitleAlignment;\n/** 对话框标题是否为多行 BOOL类型*/\nextern const NSString *XFDialogTitleIsMultiLine;\n/** 对话框多行标题的Margin float类型*/\nextern const NSString *XFDialogMultiLineTitleMargin;\n```\n##### 1.2.构建对话框\n所有子控件调用下面方法显示对话框，子控件添加自己的视图则通过`- (void)addContentView;`勾子方法。\n```objc\n/**\n *  构建对话框\n *\n *  @param title          标题\n *  @param attrs          对话框属性\n *  @param commitCallBack 确定输入内容的回调\n *\n */\n+ (instancetype)dialogWithTitle:(NSString *)title attrs:(NSDictionary *)attrs commitCallBack:(commitClickBlock)commitCallBack;\n```\n##### 1.3.动画引擎\n设置动画引擎,内建有默认`Core Animation`动画，不自定义动画时可以传`nil`。\n```objc\n/**\n *  通过动画引擎显示,使用默认可传nil\n *\n *  @param animationEngineBlock 动画执行Block，如果为空则为默认效果\n */\n- (instancetype)showWithAnimationBlock:(addAnimationEngineBlock)animationEngineBlock;\n/**\n *  通过动画引擎隐藏,使用默认可传nil\n *  @param animationEngineBlock 动画执行Block，如果为空则为默认效果\n */\n- (void)hideWithAnimationBlock:(addAnimationEngineBlock)animationEngineBlock;\n/**\n *  设置取消事件的动画效果（只有在自定义动画时要设置）\n */\n@property (nonatomic, copy) addAnimationEngineBlock cancelAnimationEngineBlock;\n```\n\n使用内置pop引擎工具类`XFDialogAnimationUtil`\n```objc\n/**\n *  推入对话框动画\n *\n *  @return 动画Block\n */\n+ (addAnimationEngineBlock)topToCenter;\n/**\n *  退出对话框动画\n *\n *  @return 动画Block\n */\n+ (addAnimationEngineBlock)centerToTop;\n```\n\n使用`addAnimationEngineBlock`自定义动画\n\nBlock定义:\n```objc\n/**\n *  动画执行代码\n *\n *  @param view 执行动画的视图\n *\n *  @return 动画执行时间\n */\ntypedef float(^addAnimationEngineBlock)(UIView *view);\n```\n以pop动画引擎为例的使用方法(建议将自定义代码封装成工具类，可以参考`XFDialogAnimationUtil`类实现):\n```objc\n// 显示动画，传入的View是显示的dialogView\n[self.dialogView showWithAnimationBlock:^float(UIView *view) {\n        view.y = -view.height;\n        \n        POPSpringAnimation *springPosY=[POPSpringAnimation animationWithPropertyNamed:kPOPLayerPositionY];\n        springPosY.fromValue = @(0);\n        springPosY.toValue= @(view.maskView.centerY);\n        springPosY.springBounciness=10;\n        [view.layer pop_addAnimation:springPosY forKey:@\"springPosY\"];\n        // 显示动画直接返回0即可\n        return 0;\n    }];\n// 消失动画，传入的View是显示的dialogView\n [self.dialogView hideWithAnimationBlock:^float(UIView *view) {\n        POPSpringAnimation *springPosY=[POPSpringAnimation animationWithPropertyNamed:kPOPLayerPositionY];\n        springPosY.toValue= @(-view.maskView.height);\n        \n        springPosY.springBounciness=10;\n        POPSpringAnimation *springScaleXY=[POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];\n        springScaleXY.toValue=[NSValue valueWithCGPoint:CGPointMake(0.1, 0.1)];\n        \n        springScaleXY.springBounciness=20;\n        [view.layer pop_addAnimation:springPosY forKey:@\"springPosY\"];\n        [view.layer pop_addAnimation:springScaleXY forKey:@\"springScaleXY\"];\n        // 消失动画必须返回动画执行时间\n        return 0.5;\n    }];\n```\n\n##### 1.4.扩展子对话框\n显示自己想要的对话框，如果完全自己自定义就继承`XFDialogFrame`,如果想拥有底部“取消”、“确定”按钮而只定义上面内容就继承`XFDialogCommandButton`，然后通过以下两个方法进行扩展（可以参考`XFDialogTextArea`类的扩展实现）:\n\n```objc\n// 第一步： 添加子视图内容\n- (void)addContentView\n{\n    // 调用父类实现\n    [super addContentView];\n    \n    \n}\n\n// 第二步：返回对话框大小：父类有默认的大小，如果这个自定义对话框添加子视图，就必须自己计算整个对话框显示的大小\n- (CGSize)dialogSize{\n    // 获得标题高度（宽度是对话框宽度）\n    CGFloat titleH = [self realTitleHeight];\n    // 获得命令式按钮高度（宽度是对话框宽度）\n    CGFloat confirmButtonH = [self realCommandButtonHeight];\n    // 计算自己添加的视图大小\n    \n    return  CGSizeMake(XFDialogDefW, titleH + confirmButtonH /* + ...其它高度 */);\n}\n\n// 第三步：布局子视图\n- (void)layoutSubviews\n{\n    [super layoutSubviews];\n    \n    // 计算添加的子视图Frame\n}\n```\n\n\n#### 2.命令式按钮控件`XFDialogCommandButton`\n所有具有“确定”、“取消”的对话框都继承自`XFDialogCommandButton`，这个类具有“确定”、“取消”的回调，并有在“确定”时执行的抽象验证方法，验证方法的具体实现在它的子控件`XFDialogInput`。\n\n扩展配置属性：\n```objc\n/** 按钮高度 float类型*/\nextern const NSString *XFDialogCommandButtonHeight;\n/** 取消按钮标题颜色 UIColor类型*/\nextern const NSString *XFDialogCancelButtonTitleColor;\n/** 确定按钮标题颜色 UIColor类型*/\nextern const NSString *XFDialogCommitButtonTitleColor;\n/** 取消按钮标题文字 NSString类型*/\nextern const NSString *XFDialogCancelButtonTitle;\n/** 确定按钮标题文字 NSString类型*/\nextern const NSString *XFDialogCommitButtonTitle;\n/** 按钮标题文字字体大小 float类型*/\nextern const NSString *XFDialogCommitButtonFontSize;\n/** 禁用中线 BOOL类型*/\nextern const NSString *XFDialogCommitButtonMiddleLineDisable;\n```\n\n##### 2.1.命令式回调\n成功回调,可以直接使用上面的显示对话框类方法赋值，定义如下：\n```objc\n/**\n *  点击事件的回调\n *\n *  @param inputText 确定内容\n */\ntypedef void(^commitClickBlock)(id inputData);\n@property (nonatomic, copy, readonly) commitClickBlock commitCallBack;\n\n/**\n *  设置对话框取消时执行的代码\n *\n *  @param cancelCallBack 取消Block\n */\n- (instancetype)setCancelCallBack:(CancelClickBlock)cancelCallBack;\n```\n确定消息的回传：\n```objc\n/**\n *  子控件可以覆盖确定时的输入内容，用于作为参数输出给commitCallBack回调，默认返回\"commit\"\n */\n@property (nonatomic, copy) id inputData;\n```\n\n\n##### 2.2.抽象验证\n\n验证器核心方法:\n```objc\n/**\n *  子控件是否有验证方法，没有或验证成功返回nil\n *\n *  @return 返回错误字符串\n */\n- (NSString *)validate;\n/**\n *  子控件可以覆盖确定按钮事件发生错误的方法\n *\n *  @param errorMessage 错误消息\n */\n- (void)onErrorWithMesssage:(NSString *)errorMessage;\n```\n\n#### 3.功能强大的输入对话框`XFDialogInput`\n之所以说它强大，是因为它能做的事很多：\n- 可添加无数个UITextField,只有屏幕能显示得下\n- 支持文本框的普通文本显示和密码框显示，并支持密码明文切换显示\n- 支持对每个文本框进行单独的样式配置\n- 支持跟随键盘向上浮动，并能处理键盘“下一步”动作跳转到下一个文本框\n- 强大的验证系统，支持单个文本框的单项验证、多个文本框的多项验证（如重置密码），验证失败后以红框显示错误文本框\n- 类方法扩展一个错误回调\n\n扩展属性：\n```objc\n/** 文本框数组 NSArray类型*/\nextern const NSString *XFDialogInputFields;\n/** 文本框类弄 枚举UIKeyboardType类型*/\nextern const NSString *XFDialogInputTypeKey;\n/** 文本框是否是密码 BOOL类型*/\nextern const NSString *XFDialogInputIsPasswordKey;\n/** 文本框Placeholder NSString类型*/\nextern const NSString *XFDialogInputPlaceholderKey;\n/** 文本框光标颜色 UIColor类型*/\nextern const NSString *XFDialogInputHintColor;\n/** 文本框文字颜色 UIColor类型*/\nextern const NSString *XFDialogInputTextColor;\n/** 文本框Margin float类型*/\nextern const NSString *XFDialogInputMargin;\n/** 文本框高度 float类型*/\nextern const NSString *XFDialogInputHeight;\n/** 文本框字体大小 float类型*/\nextern const NSString *XFDialogInputFontSize;\n/** 文本框单项验证数组 NSArray类型*/\nextern const NSString *XFDialogValidatorMatchers;\n/** 文本框多项验证数组 NSArray类型*/\nextern const NSString *XFDialogMultiValidatorMatchers;\n/** 文本框密码明文设置 NSDictionary类型*/\nextern const NSString *XFDialogInputPasswordEye;\n/** 文本框密码图标大小 float类型*/\nextern const NSString *XFDialogInputEyeSize;\n/** 文本框显示密文图标名 NSString类型*/\nextern const NSString *XFDialogInputEyeOpenImage;\n/** 文本框明文图标名 NSString类型*/\nextern const NSString *XFDialogInputEyeCloseImage;\n```\n##### 3.1.扩展创建对话框类方法，支持错误回调：\n```objc\n/**\n *  显示对话框\n *\n *  @param title          标题\n *  @param attrs          对话框属性\n *  @param commitCallBack 确定输入内容的回调\n *  @param errorCallBack  错误回调\n */\n+ (instancetype)dialogWithTitle:(NSString *)title attrs:(NSDictionary *)attrs commitCallBack:(commitClickBlock)commitCallBack errorCallBack:(errorHappenBlock)errorCallBack;\n```\n##### 3.2.单项文本框验证使用：\n```objc\n    self.dialogView =\n    [[XFDialogInput dialogWithTitle:@\"登录\"\n                                 attrs:@{\n                                         XFDialogTitleViewBackgroundColor : [UIColor orangeColor],\n                                         XFDialogTitleColor: [UIColor whiteColor],\n                                         XFDialogLineColor: [UIColor orangeColor],\n                                         XFDialogInputFields:@[\n                                                 @{\n                                                     XFDialogInputPlaceholderKey : @\"输入用户名\",\n                                                     XFDialogInputTypeKey : @(UIKeyboardTypeDefault),\n                                                     },\n                                                 @{\n                                                     XFDialogInputPlaceholderKey : @\"输入新密码\",\n                                                     XFDialogInputTypeKey : @(UIKeyboardTypeDefault),\n                                                     XFDialogInputIsPasswordKey : @(YES),\n                                                     XFDialogInputPasswordEye : @{\n                                                             XFDialogInputEyeOpenImage : @\"ic_eye\",\n                                                             XFDialogInputEyeCloseImage : @\"ic_eye_close\"\n                                                             }\n                                                     },\n                                                 ],\n                                         XFDialogInputHintColor : [UIColor purpleColor],\n                                         XFDialogInputTextColor: [UIColor orangeColor],\n                                         XFDialogCommitButtonTitleColor: [UIColor orangeColor],\n                                         XFDialogMultiValidatorMatchers: @[\n                                                 @{\n                                                     ValidatorConditionKey: ^(NSArray\u003cUITextField *\u003e *textfields){\n        \n        return textfields[0].text.length \u003c 6;\n    },ValidatorErrorKey: @\"用户名小于6位！\"\n                                                     },\n                                          @{\n                                              ValidatorConditionKey: ^(NSArray\u003cUITextField *\u003e *textfields){\n        \n        return textfields[1].text.length \u003c 6;\n    },ValidatorErrorKey: @\"密码小于6位！\"\n                                              }]\n                                         }\n                        commitCallBack:^(NSString *inputText) {\n                            [weakSelf.dialogView hideWithAnimationBlock:nil];\n                        } errorCallBack:^(NSString *errorMessage) {\n                            NSLog(@\"error -- %@\",errorMessage);\n                        }] showWithAnimationBlock:nil];\n```\n##### 3.3.多项文本框验证：\n```objc\nself.dialogView =\n    [[XFDialogInput dialogWithTitle:@\"修改密码\"\n                                 attrs:@{\n                                         XFDialogTitleViewBackgroundColor : [UIColor greenColor],\n                                         XFDialogTitleColor: [UIColor whiteColor],\n                                         XFDialogLineColor: [UIColor greenColor],\n                                         XFDialogInputFields:@[\n                                                 @{\n                                                     XFDialogInputPlaceholderKey : @\"请输入新密码\",\n                                                     XFDialogInputTypeKey : @(UIKeyboardTypeDefault),\n                                                     XFDialogInputIsPasswordKey : @(YES),\n                                                     XFDialogInputPasswordEye : @{\n                                                             XFDialogInputEyeOpenImage : @\"ic_eye\",\n                                                             XFDialogInputEyeCloseImage : @\"ic_eye_close\"\n                                                             }\n                                                     },\n                                                 @{\n                                                     XFDialogInputPlaceholderKey : @\"再次输入密码\",\n                                                     XFDialogInputTypeKey : @(UIKeyboardTypeDefault),\n                                                     XFDialogInputIsPasswordKey : @(YES),\n                                                     XFDialogInputPasswordEye : @{\n                                                             XFDialogInputEyeOpenImage : @\"ic_eye\",\n                                                             XFDialogInputEyeCloseImage : @\"ic_eye_close\"\n                                                             }\n                                                     },\n                                                 ],\n                                         XFDialogInputHintColor : [UIColor purpleColor],\n                                         XFDialogInputTextColor: [UIColor greenColor],\n                                         XFDialogCommitButtonTitleColor: [UIColor greenColor],\n                                         XFDialogMultiValidatorMatchers: @[\n                                                 @{\n                                                     ValidatorConditionKey: ^(NSArray\u003cUITextField *\u003e *textfields){\n        \n        return textfields[0].text.length \u003c 6 || textfields[1].text.length \u003c 6;\n    },ValidatorErrorKey: @\"密码小于6位\"\n                                                     },\n                                                 @{\n                                                     ValidatorConditionKey: ^(NSArray\u003cUITextField *\u003e *textfields){\n        \n        return ![textfields[0].text isEqualToString:textfields[1].text];\n    },ValidatorErrorKey: @\"两次密码不一致！\"\n                                                     }]\n                                         }\n                        commitCallBack:^(NSArray\u003cNSString *\u003e *inputs) {\n                            NSLog(@\"输入第一个的密码：%@\",inputs[0]);\n                            NSLog(@\"输入第二个的密码：%@\",inputs[1]);\n                            [weakSelf.dialogView hideWithAnimationBlock:nil];\n                        } errorCallBack:^(NSString *errorMessage) {\n                            NSLog(@\"error -- %@\",errorMessage);\n                        }] showWithAnimationBlock:nil];\n\n```\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyizzuide%2Fxfdialogbuilder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyizzuide%2Fxfdialogbuilder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyizzuide%2Fxfdialogbuilder/lists"}