Code Monkey home page Code Monkey logo

br-mask's Introduction

deprecated

  • I no longer have the maintenance for this project, in case anyone wants to take over just contact me

brmasker-ionic

GitHub issues GitHub stars GitHub forks GitHub license Build Status

return custom mask in input for ionic 4

Required

  • Node: 10.7.0
  • npm 6.4.0
  • ionic 4.1.2
  • Angular CLI: 6.1.2

install

npm install br-mask --save -E

Usage

import { BrMaskerModule } from 'br-mask';

@NgModule({
  imports: [
    BrMaskerModule
  ],
})

HTML

 <form [formGroup]="form">
    <ion-item>
      <ion-input required type="text" formControlName="mask"  placeholder="First Name" [brmasker]="{mask:'00-00', len:5, userCaracters: true}"></ion-input>
    </ion-item>
  </form>

Other Examples

<ion-item>
    <ion-input type="text" formControlName="mask"  placeholder="Mask" [brmasker]="{mask: '00:00', type:'num'}"></ion-input>
</ion-item>

<ion-item>
    <ion-input type="text" formControlName="mask"  placeholder="Mask" [brmasker]="{userCaracters: true}"></ion-input>
</ion-item>

Example for CPF/CNPJ 999.999.999-99 / 99.999.999/9999-99

<ion-item>
	<ion-input type="text" name="cpf" formControlName="mask" placeholder="CPF/CNPJ" [brmasker]="{person: true}"></ion-input>
</ion-item>

Example for Real 999,99

<ion-item>
	<ion-input type="text" name="money" formControlName="mask" placeholder="(R$) Real" [brmasker]="{money: true}"></ion-input>
</ion-item>

Example for Money

<ion-item>
	<ion-input type="text" formControlName="mask" name="money" placeholder="Money" [brmasker]="{money: true, thousand: ',',  decimalCaracter: '.', decimal: '3'}"></ion-input> 
</ion-item>

Example for Real 99,999 With Decimal

<ion-item>
	<ion-input type="text" name="money" formControlName="mask" placeholder="(R$) Real" [brmasker]="{money: true, decimal: 3}"></ion-input>
</ion-item>

Example for Real 99,999 With Decimal

<ion-item>
	<ion-input type="text" name="percent" formControlName="mask" placeholder="% Percent" [brmasker]="{percent: true}" value=""></ion-input>
</ion-item>

Example for Phone (99) 9999-9999 / (99) 99999-9999

<ion-item>
	<ion-input type="text" name="phone" formControlName="mask" placeholder="Phone" [brmasker]="{phone: true}"></ion-input>
</ion-item>

Example for Phone not ddd 9999-9999 / 99999-9999

<ion-item>
	<ion-input type="text" name="phone" formControlName="mask" placeholder="Phone" [brmasker]="{phoneNotDDD: true}"></ion-input>
</ion-item>

Example for number thousand

<ion-item>
	<ion-input type="text" formControlName="phone" [value]="form.get('phone').value" name="phone" placeholder="Phone" [brmasker]="{numberAndTousand: true, thousand: ','}"></ion-input>
</ion-item>

Features

import { BrMaskDirective, BrMaskModel } from 'br-mask';

...

constructor(public brMask: BrMaskDirective) {}

...

protected createForm(): FormGroup {
  return new FormGroup({
    phone: new FormControl(this.createPhone())
  });
}

private createPhone(): string {
  const config: BrMaskModel = new BrMaskModel();
  config.phone = true;
  return this.brMask.writeCreateValue('99999999999', config);
}

Inputs

  • brmasker: BrMaskModel
	BrMaskModel = {
		form: AbstractControl;
		mask: string;
		len: number;
		money: boolean;
		phone: boolean;
		phoneNotDDD: boolean;
		person: boolean;
		percent:boolean;
		type: 'alfa' | 'num' | 'all';
		decimal: number = 2;
		decimalCaracter: string = `,`;
		thousand: string;
		userCaracters = false;
		numberAndTousand: false,
		moneyInitHasInt: true
	}
Name type info
form FormControl Obsolete
mask string Optional
len string Optional
money boolean Optional
phone boolean Optional
phoneNotDDD boolean Optional
person boolean Optional
percent boolean Optional
type string Optional default 'all'
decimalCaracter string Optional default ','
decimal number Optional default '2'
thousand string Optional
userCaracters boolean Optional default false
numberAndTousand boolean Optional default false
moneyInitHasInt boolean Optional default true

moneyInitHasInt is when you need to use cents in value

Characters

- . / ( ) , * + @ # $ & % :

Build for developer

Only use if you change the component

Build

npm run build

Publish

npm publish

Changelog

0.0.9

  • pull issues

0.0.8

  • change phone mask for accept 11 digits

0.0.7

  • removing the need to declare the form

0.0.6

  • remove console log

0.0.5

  • add prop moneyInitHasInt

Changelog

0.0.4

  • add phoneNotDDD

0.0.3

  • fix numberAndTousand

v0.0.2

  • add number thousand

v0.0.1

  • Inicial project

br-mask's People

Contributors

amarkes avatar guaycuru avatar lucianojs avatar vitorthedev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

br-mask's Issues

mask placeholder "uiMaskPlaceholder".

In ionic 1, I used "uiMaskPlaceholder" to set placeholder and keep it while I'm writing,
but in ionic 4, I can't find the same options, to keep the placeholder while user Input the value.

Mask with letters and number.

I'm trying to make a mask that uses Letters and Numbers at same time, I did not find how to make it at doc.

mask: string = "AA.AA.000.0000.000"

<ion-input [placeholder]="customPlaceHolder" type="tel"
[(ngModel)]="filter.key"
[brmasker]="{type: 'all', mask: mask, len: mask.length}">

Can you guys please help me?

issue with type "all"

In case of type "all", when the first mask occurred then the previous typed value retyped in the input while it works fine in case of "num" type.

Device: Samsung Galaxy S8

mask: "000.000.000-00"
type: "all"

Using mask with vue js

Hi,
Is there any way to use it with vue js , since ionic 4 is supporting vue js .

Thanks in advance.

converting from Ionic 3

I've used br-mask for Ionic 3 without problem
Now i'm trying to use this Ionic 4 version, with a same code:
<ion-input type="text" placeholder="{{'SIGNUP.PHONE_CODE' | translate}}" formControlName="phone_code" required [brmasker]="{mask:'+00000', len:6, type: 'num'}"></ion-input>
but i've this error:
ERROR TypeError: Cannot read property 'value' of undefined
at BrMaskDirective.push../node_modules/br-mask/dist/directives/br-mask.js.BrMaskDirective.initialValue (br-mask.js:40)
at BrMaskDirective.push../node_modules/br-mask/dist/directives/br-mask.js.BrMaskDirective.ngOnInit (br-mask.js:37)
at checkAndUpdateDirectiveInline (core.js:22098)
at checkAndUpdateNodeInline (core.js:23362)
at checkAndUpdateNode (core.js:23324)
at debugCheckAndUpdateNode (core.js:23958)
at debugCheckDirectivesFn (core.js:23918)
at Object.eval [as updateDirectives] (SignupPage.html:54)
at Object.debugUpdateDirectives [as updateDirectives] (core.js:23910)
at checkAndUpdateView (core.js:23306)

Some help?
Thanks

Using br-mask without form

Oi, Is it possible to use br-mask without form ?
Like v1.6.3 for Ionic 3:
<input type="text" name="cpf" placeholder="CPF" [brmasker]="{mask:'000.000.000-00', len:14}" value="">

ERROR: Uncaught (in promise): TypeError: Cannot read property 'id' of undefined

I have the following error after installing and running Ionic serves:

core.js:6185 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'id' of undefined

What can it be?

My configuration:
`Ionic:

Ionic CLI : 6.3.0 (C:\Users\DilDam\AppData\Roaming\npm\node_modules@ionic\cli)
Ionic Framework : @ionic/angular 5.0.5
@angular-devkit/build-angular : 0.900.7
@angular-devkit/schematics : 9.0.7
@angular/cli : 9.0.7
@ionic/angular-toolkit : 2.2.0

Cordova:

Cordova CLI : 9.0.0 ([email protected])
Cordova Platforms : android 8.1.0
Cordova Plugins : cordova-plugin-ionic-keyboard 2.2.0, cordova-plugin-ionic-webview 4.1.3, (and 4 other plugins)

Utility:

cordova-res : not installed
native-run : 0.3.0

System:

Android SDK Tools : 26.1.1 (C:\Users\DilDam\AppData\Local\Android\Sdk)
NodeJS : v12.16.1 (C:\Program Files\nodejs\node.exe)
npm : 6.14.3
OS : Windows 10`

Improve Money mask

Hi there, thanks for the project!

Working with it, I realice money mask is limited by certain characters, see the follow image

image

We could improve this with the follow Regex

image
'100000000000000000000'.replace(/\B(?=(\d{3})+(?!\d))/g, ',')

I hope this can be use in future.

Exemplo Ionic 4

Olá, gostaria que pudesse criar alguns exemplos básicos de uso.
Para quem está iniciando em ionic, é complicado...

Vi que para o ionic 3 tem exemplo, mas é diferente...

Fico no Aguardo.

New maintainer

Hello, I'm the maker of Capgo, and I'm interested in taking the maintenance of this project.
Are you still looking for maintainer?

Suporte para Angular 9.

Olá,
Poderíamos ter o suporte para Angular 9?
Usava com Ionic 4 e Angular 8 perfeitamente, porém com o Angular 9 não funciona mais.

Erro apresentado:
Failed to compile entry-point br-mask (main as commonjs) due to compilation errors:
node_modules/br-mask/dist/app.module.js:12:31 - error NG1010: Value at position 0 in the NgModule.declarations of BrMaskerModule is not a reference: [object Object]

12 declarations: [
13 BrMaskDirective
14 ],

Obrigado!

No provider for ElementRef

Ao tentar utilizar a diretiva como dependência de alguma página, o seguinte erro é apresentado:

  StaticInjectorError(Platform: core)[IonContent -> ElementRef]: 
    NullInjectorError: No provider for ElementRef!

Código da página:

import {BrMaskDirective} from 'br-mask';

@Component({
  selector: 'app-perfil',
  templateUrl: './perfil.page.html',
  styleUrls: ['./perfil.page.scss'],
})
export class PerfilPage implements OnInit {

  public mascaraCampo: string;

  constructor(
    public brMaskerIonic3: BrMaskDirective,
  ) {

  }

  async ngOnInit() {
    this.mascaraCampo = this.brMaskerIonic3.writeValuePerson('55555555555');
  }
}

Isso só acontece quando utilizado como dependência, se utilizar como diretiva em algum .html, funciona normalmente.

"numberAndTousand: true" dispara erro com blur em campo vazio

"ERROR TypeError: value.replace is not a function
at BrMaskDirective.push../node_modules/br-mask/dist/directives/br-mask.js.BrMaskDirective.thousand (br-mask.js:410)
at BrMaskDirective.push../node_modules/br-mask/dist/directives/br-mask.js.BrMaskDirective.returnValue (br-mask.js:205)
at BrMaskDirective.push../node_modules/br-mask/dist/directives/br-mask.js.BrMaskDirective.onNgModelChange (br-mask.js:31)
at Object.eval [as handleEvent] (SpicesComponent.html:116)
at handleEvent (core.js:43993)
at callWithDebugContext (core.js:45632)
at Object.debugHandleEvent [as handleEvent] (core.js:45247)
at dispatchEvent (core.js:29804)
at core.js:31837
at SafeSubscriber.schedulerFn [as _next] (core.js:35379)"

Qualquer outro tipo de entrada no blur com o campo vazia não gera esse erro.

Maximum call stack size exceeded on input

When the user is writting in the input

CODE:
<ion-item> <ion-label position="stacked">CVC/CVV</ion-label> <ion-input formControlName="cvc" class="ion-text-center" inputmode="numeric" type="tel" maxlength="4" [brmasker]="{mask:'0000', len:4, type:'num'}"></ion-input> </ion-item>

image

Ionic Info:
image

Values with format when editing a form

Quando eu salvo os dados, removo a máscara para que somente os dados brutos sejam gravados no banco.
Se eu for editar, os dados vem sem formatação e somente quando clico no campo o brMask formata.

É possível fazer com que o brMask formate os dados no carregamento?

Mascara CEP

Como por a mascara par o formato CEP
exemplo 59.550-000
tentei e não consegui vcs podem me ajudar?

Problem with money mask

Hi guys,
i installed this mask and i think it's great!! i think i found two issue whit the money mask.
when i insert one number it is show correctly:
image
but if i add a second number i got comma as a prefix of number:
image
it's possibole to have a comma when the third number is insert??

Finally why it's possible to insert in the middle of the number only one time after click on it?
it wuold be great if i can insert in the middel of the number every-time.

Input with br-masker

How to make br-masker in Input field's sweetalert2.
I'm using ionic 4 and sweetalert2.

Please I need help.

Phone mask duplicating numbers on android 5.0.1

This only happens on android 5.0.1, I have another device with android 8 and it's working fine there.

brmask_phone_mask_android5

The code:

html file:

    <ion-item>
      <ion-label>Telefone</ion-label>
      <ion-input 
        type="text" 
        formControlName="telefone"
        [brmasker]="{form: cliente.get('telefone'), phone: true}"
        ></ion-input>
    </ion-item>

.page file:

  ngOnInit() {
    this.cliente = this.fb.group({
      id: '',
      nome: ['', [Validators.required, Validators.minLength(4)]],
      email: ['', [Validators.required, Validators.email]],
      telefone: ['', [Validators.minLength(14)]],
    });
  }

.module file:

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    ReactiveFormsModule,
    IonicModule,
    BrMaskerModule,
    RouterModule.forChild(routes)
  ],
  declarations: [CadastroRapidoPage],
  exports: [
    FormsModule,
    ReactiveFormsModule,
  ]
})

More info:
Ionic: 4.5.0
Cordova: 8.1.2

By the way, awesome project, it's helping a lot with formatting.

Máscara não aplica quando atualizo o Form (Reactive Forms)

Olá, Quando atualizo o form (recebo os dados da store e dou um patchValue) as máscaras não são aplicadas. Acredito que se deva ao Hostlistener pegar apenas o keyup. adicionei o codigo abaixo e funcionou da maneira esperada.

@HostListener('ngModelChange', ['$event']) onNgModelChange(e) { const value: string = this.returnValue(e); if (value) { this.setValueInFormControl(value); } }

0.01 centavo não funciona

Boa tarde!
estou tentando pegar o valor exato digitado no ion-input e não sei porque o valor que chega não é igual.
Notei que se, eu digitar 1 centavo 1:
no input eu enxergo 1 ao invés de 0.01
Esse é o o valor que chega na minha action 1

Ou se eu digitar 001:
esse é o valor que chega na minha action: .001

Esse é o meu ambiente:
Ionic:
Ionic CLI : 5.0.1 (/usr/local/lib/node_modules/ionic)
Ionic Framework : @ionic/angular 4.4.2
@angular-devkit/build-angular : 0.13.9
@angular-devkit/schematics : 7.3.9
@angular/cli : 7.3.9
@ionic/angular-toolkit : 1.5.1

Cordova:
Cordova CLI : 9.0.0 ([email protected])
Cordova Platforms : android 7.1.4, ios 4.5.5
Cordova Plugins : cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview 4.0.1, (and 15 other plugins)
Utility:
cordova-res : not installed
native-run : 0.2.2
System:
Android SDK Tools : 26.1.1 (/Users/dede/Library/Android/sdk)
ios-deploy : 1.9.4
NodeJS : v10.15.3 (/usr/local/bin/node)
npm : 6.4.1
OS : macOS Mojave
Xcode : Xcode 10.2.1 Build version 10E1001

Modulo, view e action respectivamente:

import { BrMaskerModule } from 'br-mask';
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
BrMaskerModule,
ReactiveFormsModule,
RouterModule.forChild(routes)
],

ACTION:
amount: string;
valor_div:any;
amountChange(data) {
this.valor_div = $('#input input').val();
console.log('Esse é o valor_div ' + parseFloat(this.valor_div));
console.log('Esse é o amount ' + this.amount);
if(parseFloat(this.valor_div) > parseFloat(this.total_a_receber)){
this.buttonDisabled = true;
this.simple_alert({header: 'Atenção!', subheader: 'Não é permitido efetuar baixas com o valor informado maior que o total restante R$ ' + parseFloat(this.total_a_receber).toFixed(2) + ' a receber!'});
} else {
this.buttonDisabled = false;
}
}

VIEW:

<ion-input color="black" id="input" (keyup)="amountChange(({val_parc: t.value_doc}))" placeholder="0.00" type="tel" [brmasker]="{money: true, decimalCaracter: '.', decimal: '2'}" clearInput clearOnEdit="false">

Qualquer ajuda é bem vinda, estou a horas tentando resolver este problema e não consigo.
Obrigado!

Mascara de telefone, corta o ultimo número.

Olá,
Quando defino uma mask do tipo telefone: [brmasker]="{form: formulario.get('celular'), phone: true}"

e o campo já vem preenchido:
celular: [this.cliente.celular, [Validators.required, Validators.minLength(10)]],

Quando o campo recebe o focus, ele excluir o último número do celular.
Repare que só acontece com números de celular, (99)99999-9999, caso o número tenha um número a menos, como o fixo (99)9999-9999, funciona normal.
Ionic:

Ionic CLI : 5.1.0 (C:\Users\Donato\AppData\Roaming\npm\node_modules\ionic)
Ionic Framework : @ionic/angular 4.6.2
@angular-devkit/build-angular : 0.13.9
@angular-devkit/schematics : 7.3.9
@angular/cli : 7.3.9
@ionic/angular-toolkit : 1.5.1

Cordova:

Cordova CLI : not installed
Cordova Platforms : not available
Cordova Plugins : not available

Utility:

cordova-res : not installed
native-run : not installed

System:

NodeJS : v10.16.0 (C:\Program Files\nodejs\node.exe)
npm : 6.9.0
OS : Windows 10

compatível com Angular9

This likely means that the library (br-mask) which declares BrMaskerModule has not been processed correctly by ngcc, or is not compatible with Angular Ivy. Check if a newer version of the library is available, and update if so. Also consider checking with the library's authors to see if the library is expected to be compatible with Ivy.

Não consegui compilar meu projeto angular com ivy

Tentei compilar meu projeto angular 8/ ionic 4 com o ivy habilitado, como mitigação de possíveis problemas ao subir para angular 9, conforme orientações abaixo:

https://angular.io/guide/ivy

recebi o seguinte erro:

ERROR in ../node_modules/br-mask/dist/app.module.d.ts:1:22 - error TS-996002: Appears in the NgModule.imports of CustosPageModule, but could not be resolved to an NgModule class

1 export declare class BrMaskerModule {

Assumir projeto

Olá,
estou usando a sua lib no Ionic 6 / Angular 13 e está funcionando... Gostaria de fazer alguns ajustes e atualizar a lib.
Tem interesse em passar o projeto? Tenho GIT da empresa (webemsegundos) aqui....

Propriedade para remover "bind" da máscara no FormControlName

Olá, seria possível criar uma propriedade para desabilitar a máscara no valor do FormControlName ?

Eu possuo um campo de CPF que é necessário ser apresentado com máscara para o usuário porém deve ser validado sem máscara, é claro que consigo remover a máscara facilmente com regex, porém seria possível fazer isso através de uma configuração passada no Input brmasker ? Obrigado :)

(Me desculpe pela Issue em pt-br).

Feature Request: prevent cursor from jumping to the end of the input

I would love to have the ability to prevent the cursor from jumping to the end anytime a keydown event fires. It makes editing existing values difficult because if you just want to delete one digit and add a new one in place of it you have to delete then move the cursor back to where you just were.

Thanks!

br-mask ngIf issue - Android devices

In my Ionic 4 App I have a reactive form where I validate some information and show an error under the field using an ngIf for this in my html code. aside from validation I'd like to use a mask in my phone, cpf and cnpj fields. For this I'm using br-mask. My issue is that when I add br-mask to my input field, it apparently inhibits the field.dirty condition from working, consequently not showing my error message. My code follows:

<ion-item> <ion-label position="floating">Telefone</ion-label> <ion-input type="tel" formControlName="num_telefone" [(ngModel)]="Ptype().num_telefone" placeholder="(99) 99999-9999" **[brmasker]="{phone: true}"**></ion-input> </ion-item> <div class="error-container"> <ng-container *ngFor="let validation of validations.validations.telefone"> <div class="error-message" ***ngIf="registerForm.get('num_telefone').hasError(validation.type) && (registerForm.get('num_telefone').dirty || registerForm.get('num_telefone').touched)"**> <ion-icon name="information-circle-outline"></ion-icon> <span>{{ validation.message }}</span> </div> </ng-container> </div>

Thanks in advance!

Cannot read property 'value' of undefined

<ion-input clear-input formControlName="duracaoRealizada" type="text" [brmasker]="{money: true, leng:5, decimalCaracter:':'}"></ion-input>

ERROR TypeError: Cannot read property 'value' of undefined at BrMaskDirective.push../node_modules/br-mask/dist/directives/br-mask.js.BrMaskDirective.initialValue (:8369/ordem-ordem-module.js:99) at BrMaskDirective.push../node_modules/br-mask/dist/directives/br-mask.js.BrMaskDirective.ngOnInit (:8369/ordem-ordem-module.js:96) at checkAndUpdateDirectiveInline (vendor.js:53086) at checkAndUpdateNodeInline (vendor.js:54350) at checkAndUpdateNode (vendor.js:54312) at debugCheckAndUpdateNode (vendor.js:54946) at debugCheckDirectivesFn (vendor.js:54906) at Object.eval [as updateDirectives] (ng:///OrdemPageModule/ConfirmacaoComponent.ngfactory.js:344) at Object.debugUpdateDirectives [as updateDirectives] (vendor.js:54898) at checkAndUpdateView (vendor.js:54294)

Can we have date mask?

It is working fine with Ionic 4. If we could have date mask like - DD/MM/YYYY, but it should not allow 32 in DD, 13 in MM etc.

Using [brmasker] not working

"Can't bind to 'brmasker' since it isn't a known property of 'ion-input'"

Quando utilizo o componente conforme os exemplos, apresenta essa mensagem de erro.
O uso do FormControl é obrigatório? Tem algo a mais que devesse ser feito após a instalação?

Percent type problem

using code;
[brmasker]="{percent: true}"
Normally, its work.
However when i want to delete number in this input, not deleting :/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.